replaced raw pointers by smart pointers for musrt0.cpp.

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

View File

@ -36,6 +36,7 @@
#include <string.h> #include <string.h>
#include <iostream> #include <iostream>
#include <memory>
#include <TApplication.h> #include <TApplication.h>
#include <TSAXParser.h> #include <TSAXParser.h>
@ -94,7 +95,7 @@ void musrt0_syntax()
*/ */
Bool_t musrt0_item(TApplication &app, PMsrHandler *msrHandler, PMusrT0Data &data, UInt_t idx, Int_t timeout) Bool_t musrt0_item(TApplication &app, PMsrHandler *msrHandler, PMusrT0Data &data, UInt_t idx, Int_t timeout)
{ {
PMusrT0 *musrT0 = new PMusrT0(data); std::unique_ptr<PMusrT0> musrT0 = std::unique_ptr<PMusrT0>(new PMusrT0(data));
// check if the musrT0 object could be invoked // check if the musrT0 object could be invoked
if (musrT0 == nullptr) { if (musrT0 == nullptr) {
@ -137,45 +138,11 @@ Bool_t musrt0_item(TApplication &app, PMsrHandler *msrHandler, PMusrT0Data &data
result = true; result = true;
// disconnect all SIGNALS and SLOTS connected t0 musrT0 // disconnect all SIGNALS and SLOTS connected t0 musrT0
musrT0->Disconnect(musrT0); musrT0->Disconnect(musrT0.get());
// cleanup
delete musrT0;
musrT0 = nullptr;
return result; return result;
} }
//--------------------------------------------------------------------------
/**
* <p>This routine cleans up the handlers.
*
* \param saxParser XML SAX parser
* \param startupHandler startup handler
* \param msrHandler msr-file handler
* \param dataHandler raw run data handler
*/
void musrt0_cleanup(TSAXParser *saxParser, PStartupHandler *startupHandler, PMsrHandler *msrHandler, PRunDataHandler *dataHandler)
{
if (saxParser) {
delete saxParser;
saxParser = nullptr;
}
if (startupHandler) {
delete startupHandler;
startupHandler = nullptr;
}
if (msrHandler) {
delete msrHandler;
msrHandler = nullptr;
}
if (dataHandler) {
delete dataHandler;
dataHandler = nullptr;
}
}
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
/** /**
* <p> * <p>
@ -312,45 +279,39 @@ Int_t main(Int_t argc, Char_t *argv[])
// read startup file // read startup file
Char_t startup_path_name[128]; Char_t startup_path_name[128];
TSAXParser *saxParser = new TSAXParser(); std::unique_ptr<TSAXParser> saxParser = std::unique_ptr<TSAXParser>(new TSAXParser());
PStartupHandler *startupHandler = new PStartupHandler(); if (saxParser == nullptr) {
std::cerr << ">> musrt0: **ERROR** couldn't invoke TSAXParser." << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
std::unique_ptr<PStartupHandler> startupHandler = std::unique_ptr<PStartupHandler>(new PStartupHandler());
if (startupHandler == nullptr) {
std::cerr << ">> musrt0: **ERROR** couldn't invoke PStartupHandler." << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
if (!startupHandler->StartupFileFound()) { if (!startupHandler->StartupFileFound()) {
std::cerr << std::endl << ">> musrt0 **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data(); std::cerr << std::endl << ">> musrt0 **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 << ">> musrt0 **WARNING** Reading/parsing musrfit_startup.xml failed."; std::cerr << std::endl << ">> musrt0 **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;
}
} }
} }
// read msr-file // read msr-file
PMsrHandler *msrHandler = new PMsrHandler(filename); std::unique_ptr<PMsrHandler> msrHandler = std::unique_ptr<PMsrHandler>(new PMsrHandler(filename));
if (msrHandler == nullptr) {
std::cerr << ">> musrt0: **ERROR** couldn't invoke PMsrHandler." << std::endl;
return PMUSR_MSR_ALLOCATION_ERROR;
}
status = msrHandler->ReadMsrFile(); status = msrHandler->ReadMsrFile();
if (status != PMUSR_SUCCESS) { if (status != PMUSR_SUCCESS) {
switch (status) { switch (status) {
@ -383,12 +344,12 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// read all the necessary runs (raw data) // read all the necessary runs (raw data)
PRunDataHandler *dataHandler = nullptr; std::unique_ptr<PRunDataHandler> dataHandler;
if (success) { if (success) {
if (startupHandler) if (startupHandler)
dataHandler = new PRunDataHandler(msrHandler, startupHandler->GetDataPathList()); dataHandler = std::unique_ptr<PRunDataHandler>(new PRunDataHandler(msrHandler.get(), startupHandler->GetDataPathList()));
else else
dataHandler = new PRunDataHandler(msrHandler); dataHandler = std::unique_ptr<PRunDataHandler>(new PRunDataHandler(msrHandler.get()));
dataHandler->ReadData(); dataHandler->ReadData();
@ -874,8 +835,7 @@ Int_t main(Int_t argc, Char_t *argv[])
musrT0Data.SetDetectorTag(PMUSRT0_FORWARD); musrT0Data.SetDetectorTag(PMUSRT0_FORWARD);
musrT0Data.SetCmdTag(PMUSRT0_GET_T0_DATA_AND_BKG_RANGE); musrT0Data.SetCmdTag(PMUSRT0_GET_T0_DATA_AND_BKG_RANGE);
// execute cmd // execute cmd
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} else { } else {
@ -901,8 +861,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetAddRunIdx(j); // addruns musrT0Data.SetAddRunIdx(j); // addruns
if (!musrt0_item(app, msrHandler, musrT0Data, j, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, j, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -928,8 +887,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetHistoNoIdx(j); musrT0Data.SetHistoNoIdx(j);
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -957,8 +915,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetHistoNoIdx(k); musrT0Data.SetHistoNoIdx(k);
if (!musrt0_item(app, msrHandler, musrT0Data, j, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, j, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -973,8 +930,7 @@ Int_t main(Int_t argc, Char_t *argv[])
musrT0Data.SetAddT0Bin((UInt_t)runList->at(i).GetAddT0Bin(k, j), k, j); musrT0Data.SetAddT0Bin((UInt_t)runList->at(i).GetAddT0Bin(k, j), k, j);
} }
} }
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1002,8 +958,7 @@ Int_t main(Int_t argc, Char_t *argv[])
musrT0Data.SetDetectorTag(PMUSRT0_FORWARD); musrT0Data.SetDetectorTag(PMUSRT0_FORWARD);
musrT0Data.SetCmdTag(PMUSRT0_GET_T0_DATA_AND_BKG_RANGE); musrT0Data.SetCmdTag(PMUSRT0_GET_T0_DATA_AND_BKG_RANGE);
// execute cmd // execute cmd
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
// feed necessary data backward // feed necessary data backward
@ -1025,8 +980,7 @@ Int_t main(Int_t argc, Char_t *argv[])
musrT0Data.SetDetectorTag(PMUSRT0_BACKWARD); musrT0Data.SetDetectorTag(PMUSRT0_BACKWARD);
musrT0Data.SetCmdTag(PMUSRT0_GET_T0_DATA_AND_BKG_RANGE); musrT0Data.SetCmdTag(PMUSRT0_GET_T0_DATA_AND_BKG_RANGE);
// execute cmd // execute cmd
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} else { } else {
@ -1053,8 +1007,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetAddRunIdx(j); // addruns musrT0Data.SetAddRunIdx(j); // addruns
if (!musrt0_item(app, msrHandler, musrT0Data, j, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, j, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1079,8 +1032,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetAddRunIdx(j); // addruns musrT0Data.SetAddRunIdx(j); // addruns
if (!musrt0_item(app, msrHandler, musrT0Data, j, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, j, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1106,8 +1058,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetHistoNoIdx(j); musrT0Data.SetHistoNoIdx(j);
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1132,8 +1083,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetHistoNoIdx(j); musrT0Data.SetHistoNoIdx(j);
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1161,8 +1111,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetHistoNoIdx(k); musrT0Data.SetHistoNoIdx(k);
if (!musrt0_item(app, msrHandler, musrT0Data, j, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, j, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1190,8 +1139,7 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
// feed necessary data // feed necessary data
musrT0Data.SetHistoNoIdx(k); musrT0Data.SetHistoNoIdx(k);
if (!musrt0_item(app, msrHandler, musrT0Data, j, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, j, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1208,14 +1156,12 @@ Int_t main(Int_t argc, Char_t *argv[])
} }
musrT0Data.SetHistoNo(forwardHistos); musrT0Data.SetHistoNo(forwardHistos);
musrT0Data.SetDetectorTag(PMUSRT0_FORWARD); musrT0Data.SetDetectorTag(PMUSRT0_FORWARD);
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
musrT0Data.SetHistoNo(backwardHistos); musrT0Data.SetHistoNo(backwardHistos);
musrT0Data.SetDetectorTag(PMUSRT0_BACKWARD); musrT0Data.SetDetectorTag(PMUSRT0_BACKWARD);
if (!musrt0_item(app, msrHandler, musrT0Data, 0, timeout)) { if (!musrt0_item(app, msrHandler.get(), musrT0Data, 0, timeout)) {
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
exit(0); exit(0);
} }
} }
@ -1248,8 +1194,5 @@ Int_t main(Int_t argc, Char_t *argv[])
// delete __temp.msr // delete __temp.msr
gSystem->Exec("rm __temp.msr"); gSystem->Exec("rm __temp.msr");
// clean up
musrt0_cleanup(saxParser, startupHandler, msrHandler, dataHandler);
return PMUSR_SUCCESS; return PMUSR_SUCCESS;
} }