From 8e7fda92e1b333b18cede745e6296b718a8e8c6b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 21 Oct 2023 19:11:01 +0200 Subject: [PATCH] switched PRunDataHandler where possible to smart pointers. --- src/classes/PRunDataHandler.cpp | 51 ++++++++++----------------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/src/classes/PRunDataHandler.cpp b/src/classes/PRunDataHandler.cpp index c8c97a7e..5312e3a3 100644 --- a/src/classes/PRunDataHandler.cpp +++ b/src/classes/PRunDataHandler.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -1713,7 +1714,7 @@ Bool_t PRunDataHandler::ReadRootFile() } } else { // MusrRoot file // invoke the MusrRoot header object - TMusrRunHeader *header = new TMusrRunHeader(true); // read quite + std::unique_ptr header = std::make_unique(true); // read quiet if (header == nullptr) { std::cerr << std::endl << ">> PRunDataHandler::ReadRootFile: **ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fRunPathName; std::cerr << std::endl; @@ -2080,12 +2081,6 @@ Bool_t PRunDataHandler::ReadRootFile() histoData.clear(); } } - - // clean up - if (header) { - delete header; - header=nullptr; - } } f.Close(); @@ -2122,7 +2117,7 @@ Bool_t PRunDataHandler::ReadNexusFile() Double_t dval; bool ok; - PNeXus *nxs_file = new PNeXus(fRunPathName.Data()); + std::unique_ptr nxs_file = std::make_unique(fRunPathName.Data()); if (!nxs_file->IsValid()) { std::cerr << std::endl << ">> PRunDataHandler::ReadNexusFile(): Not a valid NeXus file."; std::cerr << std::endl << ">> Error Message: " << nxs_file->GetErrorMsg().data() << std::endl; @@ -2454,12 +2449,6 @@ Bool_t PRunDataHandler::ReadNexusFile() } else { std::cout << std::endl << ">> PRunDataHandler::ReadNexusFile(): IDF version " << nxs_file->GetIdfVersion() << ", not implemented." << std::endl; } - - // clean up - if (nxs_file) { - delete nxs_file; - nxs_file = nullptr; - } #else std::cout << std::endl << ">> PRunDataHandler::ReadNexusFile(): Sorry, not enabled at configuration level, i.e. --enable-NeXus when executing configure" << std::endl << std::endl; #endif @@ -4531,7 +4520,7 @@ Bool_t PRunDataHandler::WriteMusrRootFile(TString fln) runHeader = gROOT->GetRootFolder()->AddFolder("RunHeader", "MusrRoot Run Header Info"); gROOT->GetListOfBrowsables()->Add(runHeader, "RunHeader"); - TMusrRunHeader *header = new TMusrRunHeader(true); + std::unique_ptr header = std::make_unique(true); gROOT->GetListOfBrowsables()->Add(runHeader, "RunHeader"); // feed header info @@ -4691,7 +4680,7 @@ Bool_t PRunDataHandler::WriteMusrRootFile(TString fln) decayAnaModule->Add(histos[i]); // write file - TFile *fout = new TFile(fln, "RECREATE", fln); + std::unique_ptr fout = std::make_unique(fln, "RECREATE", fln); if (fout == nullptr) { std::cerr << std::endl << "PRunDataHandler::WriteMusrRootFile(): **ERROR** Couldn't create ROOT file '" << fln << "'" << std::endl; return false; @@ -4703,6 +4692,12 @@ Bool_t PRunDataHandler::WriteMusrRootFile(TString fln) histosFolder->Write(); fout->Close(); + // cleanup + for (UInt_t i=0; iuseStandardOutput && (fAny2ManyInfo->compressionTag == 0)) { // stream file to stdout @@ -4782,7 +4777,7 @@ Bool_t PRunDataHandler::WriteRootFile(TString fln) runInfo = gROOT->GetRootFolder()->AddFolder("RunInfo", "LEM RunInfo"); gROOT->GetListOfBrowsables()->Add(runInfo, "RunInfo"); - TLemRunHeader *header = new TLemRunHeader(); + std::unique_ptr header = std::make_unique(); gROOT->GetListOfBrowsables()->Add(runInfo, "RunInfo"); // feed header info @@ -4821,7 +4816,7 @@ Bool_t PRunDataHandler::WriteRootFile(TString fln) tt0[i] = dataSet->GetTimeZeroBin()/fAny2ManyInfo->rebin; } header->SetTimeZero(tt0); - runInfo->Add(header); // add header to RunInfo folder + runInfo->Add(header.get()); // add header to RunInfo folder // feed histos std::vector histos; @@ -4875,7 +4870,7 @@ Bool_t PRunDataHandler::WriteRootFile(TString fln) decayAnaModule->Add(histos[i]); // write file - TFile *fout = new TFile(fln, "RECREATE", fln); + std::unique_ptr fout = std::make_unique(fln, "RECREATE", fln); if (fout == nullptr) { std::cerr << std::endl << "PRunDataHandler::WriteRootFile(): **ERROR** Couldn't create ROOT file '" << fln << "'" << std::endl; return false; @@ -4891,9 +4886,7 @@ Bool_t PRunDataHandler::WriteRootFile(TString fln) delete histos[i]; } histos.clear(); - delete fout; delete [] tt0; - delete header; // check if root file shall be streamed to stdout if (fAny2ManyInfo->useStandardOutput && (fAny2ManyInfo->compressionTag == 0)) { @@ -4964,7 +4957,7 @@ Bool_t PRunDataHandler::WriteNexusFile(TString fln) std::cout << std::endl << ">> PRunDataHandler::WriteNexusFile(): writing a NeXus data file (" << fln.Data() << ") ... " << std::endl; // create NeXus object - PNeXus *nxs = new PNeXus(); + std::unique_ptr nxs = std::make_unique(); if (nxs == nullptr) { std::cerr << std::endl << ">> PRunDataHandler::WriteNexusFile(): **ERROR** couldn't invoke the NeXus object." << std::endl; return false; @@ -5244,11 +5237,6 @@ Bool_t PRunDataHandler::WriteNexusFile(TString fln) if (fgb) delete [] fgb; if (lgb) delete [] lgb; } else { - // clean up - if (nxs != 0) { - delete nxs; - nxs = nullptr; - } return false; } @@ -5264,20 +5252,11 @@ Bool_t PRunDataHandler::WriteNexusFile(TString fln) else { std::cerr << std::endl << ">> PRunDataHandler::WriteNexusFile(): **ERROR** undefined output NeXus format " << fAny2ManyInfo->outFormat.Data() << " found."; std::cerr << std::endl << ">> Allowed are: hdf4, hdf5, xml" << std::endl; - if (nxs != 0) { - delete nxs; - nxs = nullptr; - } return false; } // write file nxs->WriteFile(fln, fileType, fAny2ManyInfo->idf); - - if (nxs != 0) { - delete nxs; - nxs = nullptr; - } #else std::cout << std::endl << ">> PRunDataHandler::WriteNexusFile(): Sorry, not enabled at configuration level, i.e. --enable-NeXus when executing configure" << std::endl << std::endl; #endif