more work to get rid of raw pointers.

This commit is contained in:
2023-10-17 16:35:54 +02:00
parent ff9245fd28
commit ca742a064f
8 changed files with 89 additions and 239 deletions

View File

@@ -36,6 +36,7 @@
#include <iostream>
#include <fstream>
#include <vector>
#include <memory>
#include <TApplication.h>
#include <TROOT.h>
@@ -1030,40 +1031,22 @@ Int_t main(Int_t argc, Char_t *argv[])
PStartupOptions startup_options;
startup_options.writeExpectedChisq = false;
startup_options.estimateN0 = true;
TSAXParser *saxParser = new TSAXParser();
PStartupHandler *startupHandler = new PStartupHandler();
std::unique_ptr<TSAXParser> saxParser = std::make_unique<TSAXParser>();
std::unique_ptr<PStartupHandler> startupHandler = std::make_unique<PStartupHandler>();
if (!startupHandler->StartupFileFound()) {
std::cerr << std::endl << ">> musrFT **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data();
std::cerr << std::endl;
// clean up
if (saxParser) {
delete saxParser;
saxParser = nullptr;
}
if (startupHandler) {
delete startupHandler;
startupHandler = nullptr;
}
} else {
strcpy(startup_path_name, startupHandler->GetStartupFilePath().Data());
saxParser->ConnectToHandler("PStartupHandler", startupHandler);
saxParser->ConnectToHandler("PStartupHandler", startupHandler.get());
//status = saxParser->ParseFile(startup_path_name);
// parsing the file as above seems to lead to problems in certain environments;
// 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
if (status) { // error
std::cerr << std::endl << ">> musrFT **WARNING** Reading/parsing musrfit_startup.xml failed.";
std::cerr << std::endl;
// clean up
if (saxParser) {
delete saxParser;
saxParser = nullptr;
}
if (startupHandler) {
delete startupHandler;
startupHandler = nullptr;
}
}
}
@@ -1071,10 +1054,10 @@ Int_t main(Int_t argc, Char_t *argv[])
PPrepFourier data(startupParam.packing, startupParam.bkg_range, startupParam.bkg);
// load msr-file(s)
std::vector<PMsrHandler*> msrHandler;
std::vector< std::unique_ptr<PMsrHandler> > msrHandler;
msrHandler.resize(startupParam.msrFln.size());
for (UInt_t i=0; i<startupParam.msrFln.size(); i++) {
msrHandler[i] = new PMsrHandler(startupParam.msrFln[i].Data(), &startup_options, true);
msrHandler[i] = std::make_unique<PMsrHandler>(startupParam.msrFln[i].Data(), &startup_options, true);
status = msrHandler[i]->ReadMsrFile();
if (status != PMUSR_SUCCESS) {
switch (status) {
@@ -1092,24 +1075,32 @@ 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
// load data-file(s) related to msr-file
for (UInt_t i=0; i<msrHandler.size(); i++) {
// create run data handler
if (startupHandler)
runDataHandler[i] = new PRunDataHandler(msrHandler[i], startupHandler->GetDataPathList());
runDataHandler[i] = std::make_unique<PRunDataHandler>(msrHandler[i].get(), startupHandler->GetDataPathList());
else
runDataHandler[i] = new PRunDataHandler(msrHandler[i]);
runDataHandler[i] = std::make_unique<PRunDataHandler>(msrHandler[i].get());
if (runDataHandler[i] == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't allocate PRunDataHandler object." << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
}
// load data-file(s) provided directly
for (UInt_t i=msrHandler.size(); i<msrHandler.size()+startupParam.dataFln.size(); i++) {
// create run data handler
if (startupHandler)
runDataHandler[i] = new PRunDataHandler(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()], startupHandler->GetDataPathList());
runDataHandler[i] = std::make_unique<PRunDataHandler>(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()], startupHandler->GetDataPathList());
else
runDataHandler[i] = new PRunDataHandler(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()]);
runDataHandler[i] = std::make_unique<PRunDataHandler>(startupParam.dataFln[i-msrHandler.size()], startupParam.dataFileFormat[i-msrHandler.size()]);
if (runDataHandler[i] == nullptr) {
std::cerr << ">> musrFT: **ERROR** couldn't allocate PRunDataHandler object." << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
}
// read all the data files
@@ -1288,7 +1279,7 @@ Int_t main(Int_t argc, Char_t *argv[])
// handle data set(s)
// 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;
}
// keep data set
@@ -1512,29 +1503,11 @@ Int_t main(Int_t argc, Char_t *argv[])
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) {
for (UInt_t i=0; i<histo.size(); i++)
delete histo[i];
histo.clear();
}
if (fourier.size() > 0) {
for (UInt_t i=0; i<fourier.size(); i++)
delete fourier[i];
fourier.clear();
}
return PMUSR_SUCCESS;
}