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 <TH1F.h>
#include <TDatime.h>
#include <TDirectoryFile.h>
#include "TMusrRunHeader.h"
#include "TLemRunHeader.h"
@@ -64,8 +65,9 @@
#include "PRunDataHandler.h"
#define PRH_MUSR_ROOT 0
#define PRH_LEM_ROOT 1
#define PRH_MUSR_ROOT 0
#define PRH_MUSR_ROOT_DIR 1
#define PRH_LEM_ROOT 2
#define PRH_NPP_OFFSET 0
#define PRH_PPC_OFFSET 20
@@ -1433,14 +1435,21 @@ Bool_t PRunDataHandler::ReadRootFile()
TFolder *folder;
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
f.GetObject("RunHeader", folder);
if (!folder) { // something is wrong!!
TObject *obj = f.FindObjectAny("RunHeader");
if (obj == nullptr) { // something is wrong!!
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;
f.Close();
return false;
} else {
}
if (!strcmp(obj->ClassName(), "TFolder"))
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 {
fileType = PRH_LEM_ROOT;
@@ -1722,12 +1731,28 @@ Bool_t PRunDataHandler::ReadRootFile()
return false;
}
// try to populate the MusrRoot header object
if (!header->ExtractAll(folder)) {
std::cerr << std::endl << ">> PRunDataHandler::ReadRootFile: **ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fRunPathName;
std::cerr << std::endl;
f.Close();
return false;
// check if TFolder or TDirectory is needed
if (fileType == PRH_MUSR_ROOT) { // TFolder
f.GetObject("RunHeader", folder);
// try to populate the MusrRoot header object
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