adopted PRunDataHandler::ReadRootFile such that it can handle TDirectory in addition to the deprecated TFolder.

This commit is contained in:
2025-09-30 14:32:47 +02:00
parent 10117abeff
commit df7b8433e1

View File

@@ -52,6 +52,7 @@
#include <TFolder.h> #include <TFolder.h>
#include <TH1F.h> #include <TH1F.h>
#include <TDatime.h> #include <TDatime.h>
#include <TDirectoryFile.h>
#include "TMusrRunHeader.h" #include "TMusrRunHeader.h"
#include "TLemRunHeader.h" #include "TLemRunHeader.h"
@@ -64,8 +65,9 @@
#include "PRunDataHandler.h" #include "PRunDataHandler.h"
#define PRH_MUSR_ROOT 0 #define PRH_MUSR_ROOT 0
#define PRH_LEM_ROOT 1 #define PRH_MUSR_ROOT_DIR 1
#define PRH_LEM_ROOT 2
#define PRH_NPP_OFFSET 0 #define PRH_NPP_OFFSET 0
#define PRH_PPC_OFFSET 20 #define PRH_PPC_OFFSET 20
@@ -1433,14 +1435,21 @@ Bool_t PRunDataHandler::ReadRootFile()
TFolder *folder; TFolder *folder;
f.GetObject("RunInfo", folder); // try first LEM-ROOT style file (used until 2011). f.GetObject("RunInfo", folder); // try first LEM-ROOT style file (used until 2011).
if (!folder) { // either something is wrong, or it is a MusrRoot file if (!folder) { // either something is wrong, or it is a MusrRoot file
f.GetObject("RunHeader", folder); TObject *obj = f.FindObjectAny("RunHeader");
if (!folder) { // something is wrong!! if (obj == nullptr) { // something is wrong!!
std::cerr << std::endl << ">> PRunDataHandler::ReadRootFile: **ERROR** Couldn't neither obtain RunInfo (LEM),"; std::cerr << std::endl << ">> PRunDataHandler::ReadRootFile: **ERROR** Couldn't neither obtain RunInfo (LEM),";
std::cerr << std::endl << " nor RunHeader (MusrRoot) from " << fRunPathName.Data() << std::endl; std::cerr << std::endl << " nor RunHeader (MusrRoot) from " << fRunPathName.Data() << std::endl;
f.Close(); f.Close();
return false; return false;
} else { }
if (!strcmp(obj->ClassName(), "TFolder"))
fileType = PRH_MUSR_ROOT; fileType = PRH_MUSR_ROOT;
else if (!strcmp(obj->ClassName(), "TDirectoryFile"))
fileType = PRH_MUSR_ROOT_DIR;
else {
std::cerr << std::endl << "PRunDataHandler::ReadRootFile: **ERROR** RunHeader (MusrRoot) from '" << fRunPathName.Data() << "' is neither a TFolder nor a TDirectory. Found: '" << obj->ClassName() << "'" << std::endl;
f.Close();
return false;
} }
} else { } else {
fileType = PRH_LEM_ROOT; fileType = PRH_LEM_ROOT;
@@ -1722,12 +1731,28 @@ Bool_t PRunDataHandler::ReadRootFile()
return false; return false;
} }
// try to populate the MusrRoot header object // check if TFolder or TDirectory is needed
if (!header->ExtractAll(folder)) { if (fileType == PRH_MUSR_ROOT) { // TFolder
std::cerr << std::endl << ">> PRunDataHandler::ReadRootFile: **ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fRunPathName; f.GetObject("RunHeader", folder);
std::cerr << std::endl;
f.Close(); // try to populate the MusrRoot header object
return false; if (!header->ExtractAll(folder)) {
std::cerr << std::endl << ">> PRunDataHandler::ReadRootFile: **ERROR** Couldn't invoke MusrRoot RunHeader (TFolder) in file:" << fRunPathName;
std::cerr << std::endl;
f.Close();
return false;
}
} else { // TDirectory
TDirectoryFile *runHeader = nullptr;
f.GetObject("RunHeader", runHeader);
// try to populate the MusrRoot header object
if (!header->ExtractAll(runHeader)) {
std::cerr << std::endl << ">> PRunDataHandler::ReadRootFile: **ERROR** Couldn't invoke MusrRoot RunHeader (TDirectoryFile) in file:" << fRunPathName;
std::cerr << std::endl;
f.Close();
return false;
}
} }
// get all the header information // get all the header information