dump_header can now handle TMusrRoot with TFolder as well as TDirectory.

This commit is contained in:
2025-09-30 12:30:45 +02:00
parent 675ed39739
commit 10117abeff

View File

@@ -71,8 +71,9 @@
#include "PNeXus.h"
#endif
#define DH_MUSR_ROOT 0
#define DH_LEM_ROOT 1
#define DH_MUSR_ROOT 0
#define DH_MUSR_ROOT_DIR 1
#define DH_LEM_ROOT 2
//------------------------------------------------------------------------
/**
@@ -131,16 +132,24 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
UInt_t noOfHistos{0};
PIntVector redGreenOffset;
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) {
std::cerr << std::endl << "**ERROR** Couldn't neither obtain RunInfo (LEM), nor RunHeader (MusrRoot) from " << fileName << std::endl;
f.Close();
return 1;
} else {
}
if (!strcmp(obj->ClassName(), "TFolder")) {
fileType = DH_MUSR_ROOT;
} else if (!strcmp(obj->ClassName(), "TDirectoryFile")) {
fileType = DH_MUSR_ROOT_DIR;
} else {
std::cerr << std::endl << "**ERROR** RunHeader (MusrRoot) from '" << fileName << "' is neither a TFolder nor a TDirectory. Found: '" << obj->ClassName() << "'" << std::endl;
f.Close();
return 1;
}
} else {
fileType = DH_LEM_ROOT;
@@ -202,12 +211,26 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
// invoke the MusrRoot header object
header = std::make_unique<TMusrRunHeader>(fileName.c_str(), true); // read quite
// try to populate the MusrRoot header object
if (!header->ExtractAll(folder)) {
std::cerr << std::endl << "**ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fileName;
std::cerr << std::endl;
f.Close();
return 1;
// check if TFolder or TDirectory is needed
if (fileType == DH_MUSR_ROOT) { // TFolder
f.GetObject("RunHeader", folder);
// try to populate the MusrRoot header object
if (!header->ExtractAll(folder)) {
std::cerr << std::endl << "**ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fileName;
std::cerr << std::endl;
f.Close();
return 1;
}
} else { // TDirectory
TDirectoryFile *runHeader = nullptr;
f.GetObject("RunHeader", runHeader);
// try to populate the MusrRoot header object
if (!header->ExtractAll(runHeader)) {
std::cerr << std::endl << "**ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fileName;
std::cerr << std::endl;
f.Close();
return 1;
}
}
header->DumpHeader();