replaced raw pointers by smart pointers for musrFT.cpp.

This commit is contained in:
suter_a 2023-10-13 22:46:01 +02:00
parent ff9245fd28
commit 1feed7116a

View File

@ -36,6 +36,7 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <vector> #include <vector>
#include <memory>
#include <TApplication.h> #include <TApplication.h>
#include <TROOT.h> #include <TROOT.h>
@ -1030,40 +1031,30 @@ Int_t main(Int_t argc, Char_t *argv[])
PStartupOptions startup_options; PStartupOptions startup_options;
startup_options.writeExpectedChisq = false; startup_options.writeExpectedChisq = false;
startup_options.estimateN0 = true; startup_options.estimateN0 = true;
TSAXParser *saxParser = new TSAXParser(); std::unique_ptr<TSAXParser> saxParser = std::unique_ptr<TSAXParser>(new TSAXParser());
PStartupHandler *startupHandler = new PStartupHandler(); if (saxParser == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't invoke TSAXParser object" << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
std::unique_ptr<PStartupHandler> startupHandler = std::unique_ptr<PStartupHandler>(new PStartupHandler());
if (startupHandler == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't invoke PStartupHandler object" << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
if (!startupHandler->StartupFileFound()) { if (!startupHandler->StartupFileFound()) {
std::cerr << std::endl << ">> musrFT **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data(); std::cerr << std::endl << ">> musrFT **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data();
std::cerr << std::endl; std::cerr << std::endl;
// clean up
if (saxParser) {
delete saxParser;
saxParser = nullptr;
}
if (startupHandler) {
delete startupHandler;
startupHandler = nullptr;
}
} else { } else {
strcpy(startup_path_name, startupHandler->GetStartupFilePath().Data()); strcpy(startup_path_name, startupHandler->GetStartupFilePath().Data());
saxParser->ConnectToHandler("PStartupHandler", startupHandler); saxParser->ConnectToHandler("PStartupHandler", startupHandler.get());
//status = saxParser->ParseFile(startup_path_name); //status = saxParser->ParseFile(startup_path_name);
// parsing the file as above seems to lead to problems in certain environments; // parsing the file as above seems to lead to problems in certain environments;
// use the parseXmlFile function instead (see PStartupHandler.cpp for the definition) // use the parseXmlFile function instead (see PStartupHandler.cpp for the definition)
status = parseXmlFile(saxParser, startup_path_name); status = parseXmlFile(saxParser.get(), startup_path_name);
// check for parse errors // check for parse errors
if (status) { // error if (status) { // error
std::cerr << std::endl << ">> musrFT **WARNING** Reading/parsing musrfit_startup.xml failed."; std::cerr << std::endl << ">> musrFT **WARNING** Reading/parsing musrfit_startup.xml failed.";
std::cerr << std::endl; std::cerr << std::endl;
// clean up
if (saxParser) {
delete saxParser;
saxParser = nullptr;
}
if (startupHandler) {
delete startupHandler;
startupHandler = nullptr;
}
} }
} }
@ -1071,10 +1062,14 @@ Int_t main(Int_t argc, Char_t *argv[])
PPrepFourier data(startupParam.packing, startupParam.bkg_range, startupParam.bkg); PPrepFourier data(startupParam.packing, startupParam.bkg_range, startupParam.bkg);
// load msr-file(s) // load msr-file(s)
std::vector<PMsrHandler*> msrHandler; std::vector< std::unique_ptr<PMsrHandler> > msrHandler;
msrHandler.resize(startupParam.msrFln.size()); msrHandler.resize(startupParam.msrFln.size());
for (UInt_t i=0; i<startupParam.msrFln.size(); i++) { for (UInt_t i=0; i<startupParam.msrFln.size(); i++) {
msrHandler[i] = new PMsrHandler(startupParam.msrFln[i].Data(), &startup_options, true); msrHandler[i] = std::unique_ptr<PMsrHandler>(new PMsrHandler(startupParam.msrFln[i].Data(), &startup_options, true));
if (msrHandler[i] == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't invoke PMsrHandler object" << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
status = msrHandler[i]->ReadMsrFile(); status = msrHandler[i]->ReadMsrFile();
if (status != PMUSR_SUCCESS) { if (status != PMUSR_SUCCESS) {
switch (status) { switch (status) {
@ -1092,24 +1087,34 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
} }
std::vector<PRunDataHandler*> runDataHandler; std::vector< std::unique_ptr<PRunDataHandler> > runDataHandler;
runDataHandler.resize(startupParam.msrFln.size()+startupParam.dataFln.size()); // resize to the total number of run data provided runDataHandler.resize(startupParam.msrFln.size()+startupParam.dataFln.size()); // resize to the total number of run data provided
// load data-file(s) related to msr-file // load data-file(s) related to msr-file
for (UInt_t i=0; i<msrHandler.size(); i++) { for (UInt_t i=0; i<msrHandler.size(); i++) {
// create run data handler // create run data handler
if (startupHandler) if (startupHandler)
runDataHandler[i] = new PRunDataHandler(msrHandler[i], startupHandler->GetDataPathList()); runDataHandler[i] = std::unique_ptr<PRunDataHandler>(new PRunDataHandler(msrHandler[i].get(), startupHandler->GetDataPathList()));
else else
runDataHandler[i] = new PRunDataHandler(msrHandler[i]); runDataHandler[i] = std::unique_ptr<PRunDataHandler>(new PRunDataHandler(msrHandler[i].get()));
if (runDataHandler[i] == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't invoke PRunDataHandler object" << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
} }
// load data-file(s) provided directly // load data-file(s) provided directly
for (UInt_t i=msrHandler.size(); i<msrHandler.size()+startupParam.dataFln.size(); i++) { for (UInt_t i=msrHandler.size(); i<msrHandler.size()+startupParam.dataFln.size(); i++) {
// create run data handler // create run data handler
if (startupHandler) if (startupHandler)
runDataHandler[i] = new PRunDataHandler(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()], startupHandler->GetDataPathList()); runDataHandler[i] = std::unique_ptr<PRunDataHandler>(new PRunDataHandler(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()], startupHandler->GetDataPathList()));
else else
runDataHandler[i] = new PRunDataHandler(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()]); runDataHandler[i] = std::unique_ptr<PRunDataHandler>(new PRunDataHandler(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()]));
if (runDataHandler[i] == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't invoke PRunDataHandler object" << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
} }
// read all the data files // read all the data files
@ -1288,7 +1293,7 @@ Int_t main(Int_t argc, Char_t *argv[])
// handle data set(s) // handle data set(s)
// group forward histos // group forward histos
if (musrFT_groupHistos(runDataHandler[i], global, runs->at(runList[j]-1), rd)) { if (musrFT_groupHistos(runDataHandler[i].get(), global, runs->at(runList[j]-1), rd)) {
return PMUSR_DATA_FILE_READ_ERROR; return PMUSR_DATA_FILE_READ_ERROR;
} }
// keep data set // keep data set
@ -1412,6 +1417,10 @@ Int_t main(Int_t argc, Char_t *argv[])
fourier.resize(histo.size()); fourier.resize(histo.size());
for (UInt_t i=0; i<fourier.size(); i++) { for (UInt_t i=0; i<fourier.size(); i++) {
fourier[i] = new PFourier(histo[i], unitTag, 0.0, 0.0, true, startupParam.fourierPower); fourier[i] = new PFourier(histo[i], unitTag, 0.0, 0.0, true, startupParam.fourierPower);
if (fourier[i] == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't invoke PFourier object" << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
} }
// Fourier transform data // Fourier transform data
@ -1435,7 +1444,7 @@ Int_t main(Int_t argc, Char_t *argv[])
startupParam.fourierRange[1] = fourier[0]->GetMaxFreq(); startupParam.fourierRange[1] = fourier[0]->GetMaxFreq();
} }
PFourierCanvas *fourierCanvas = nullptr; std::unique_ptr<PFourierCanvas> fourierCanvas;
// if Fourier dumped if whished do it now // if Fourier dumped if whished do it now
if (startupParam.dumpFln.Length() > 0) { if (startupParam.dumpFln.Length() > 0) {
@ -1455,19 +1464,23 @@ Int_t main(Int_t argc, Char_t *argv[])
TApplication app("App", &argc, argv); TApplication app("App", &argc, argv);
if (startupHandler) { if (startupHandler) {
fourierCanvas = new PFourierCanvas(fourier, dataSetTag, startupParam.title.Data(), fourierCanvas = std::unique_ptr<PFourierCanvas>(new PFourierCanvas(fourier, dataSetTag, startupParam.title.Data(),
startupParam.showAverage, startupParam.showAveragePerDataSet, startupParam.showAverage, startupParam.showAveragePerDataSet,
fourierPlotTag, startupParam.fourierRange, startupParam.initialPhase, fourierPlotTag, startupParam.fourierRange, startupParam.initialPhase,
10, 10, 800, 800, 10, 10, 800, 800,
startupHandler->GetMarkerList(), startupHandler->GetMarkerList(),
startupHandler->GetColorList(), startupHandler->GetColorList(),
batch); batch));
} else { } else {
fourierCanvas = new PFourierCanvas(fourier, dataSetTag, startupParam.title.Data(), fourierCanvas = std::unique_ptr<PFourierCanvas>(new PFourierCanvas(fourier, dataSetTag, startupParam.title.Data(),
startupParam.showAverage, startupParam.showAveragePerDataSet, startupParam.showAverage, startupParam.showAveragePerDataSet,
fourierPlotTag, startupParam.fourierRange, startupParam.initialPhase, fourierPlotTag, startupParam.fourierRange, startupParam.initialPhase,
10, 10, 800, 800, 10, 10, 800, 800,
batch); batch));
}
if (fourierCanvas == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't invoke PFourierCanvas object." << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
} }
fourierCanvas->UpdateFourierPad(); fourierCanvas->UpdateFourierPad();
@ -1480,7 +1493,7 @@ Int_t main(Int_t argc, Char_t *argv[])
ok = false; ok = false;
} else { } else {
// connect signal/slot // connect signal/slot
TQObject::Connect("TCanvas", "Closed()", "PFourierCanvas", fourierCanvas, "LastCanvasClosed()"); TQObject::Connect("TCanvas", "Closed()", "PFourierCanvas", fourierCanvas.get(), "LastCanvasClosed()");
fourierCanvas->SetTimeout(startupParam.timeout); fourierCanvas->SetTimeout(startupParam.timeout);
@ -1509,22 +1522,6 @@ Int_t main(Int_t argc, Char_t *argv[])
// cleanup // cleanup
if (fourierCanvas)
delete fourierCanvas;
if (startupHandler)
delete startupHandler;
for (UInt_t i=0; i<msrHandler.size(); i++)
if (msrHandler[i])
delete msrHandler[i];
msrHandler.clear();
for (UInt_t i=0; i<runDataHandler.size(); i++)
if (runDataHandler[i])
delete runDataHandler[i];
runDataHandler.clear();
if (histo.size() > 0) { if (histo.size() > 0) {
for (UInt_t i=0; i<histo.size(); i++) for (UInt_t i=0; i<histo.size(); i++)
delete histo[i]; delete histo[i];