more robust handling of positron detector entries.

This commit is contained in:
suter_a 2023-08-31 10:17:40 +02:00
parent bcbe945d84
commit 29d09fc272

View File

@ -145,6 +145,10 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
fileType = DH_LEM_ROOT;
}
TMusrRunHeader *header{nullptr};
bool ok;
Int_t ival;
if (fileType == DH_LEM_ROOT) { // ROOT (LEM)
// read header and check if some missing run info need to be fed
TLemRunHeader *runHeader = dynamic_cast<TLemRunHeader*>(folder->FindObjectAny("TLemRunHeader"));
@ -197,7 +201,7 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
delete runHeader;
} else { // MusrRoot
// invoke the MusrRoot header object
TMusrRunHeader *header = new TMusrRunHeader(fileName.c_str(), true); // read quite
header = new TMusrRunHeader(fileName.c_str(), true); // read quite
if (header == 0) {
std::cerr << std::endl << "**ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fileName;
std::cerr << std::endl;
@ -216,8 +220,6 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
header->DumpHeader();
if (counts) {
bool ok;
Int_t ival;
PIntVector ivec;
header->Get("RunInfo/No of Histos", ival, ok);
if (ok)
@ -226,8 +228,6 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
if (ok)
redGreenOffset = ivec;
}
delete header;
}
// summary as well?
@ -256,27 +256,46 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
// detector counts as well?
if (counts && (fileType == DH_MUSR_ROOT)) {
// dump the detector counts
std::cout << "Detector counts" << std::endl;
std::cout << "Detector counts (all, between fgb and lgb)" << std::endl;
f.GetObject("histos", folder);
if (folder != nullptr) {
if ((folder != nullptr) && (header != nullptr)) {
char detectorLabel[64];
TH1F *histo{nullptr};
UInt_t total{0};
UInt_t total{0}, total_good{0}, ta, tg;
Int_t fgb, lgb;
for (UInt_t i=0; i<redGreenOffset.size(); i++) {
std::cout << " Group " << i+1 << " (Offset=" << redGreenOffset[i] << ") : " << std::endl;
total = 0;
total_good = 0;
for (UInt_t j=0; j<noOfHistos; j++) {
// get fgb, lgb
fgb = -1;
snprintf(detectorLabel, sizeof(detectorLabel), "DetectorInfo/Detector%03d/First Good Bin", redGreenOffset[i]+j+1);
header->Get(detectorLabel, ival, ok);
if (ok) {
fgb = ival;
}
lgb = -1;
snprintf(detectorLabel, sizeof(detectorLabel), "DetectorInfo/Detector%03d/Last Good Bin", redGreenOffset[i]+j+1);
header->Get(detectorLabel, ival, ok);
if (ok) {
lgb = ival;
}
// get histo info
snprintf(detectorLabel, sizeof(detectorLabel), "hDecay%03d", redGreenOffset[i]+j+1);
histo = (TH1F*) folder->FindObjectAny(detectorLabel);
if (histo != nullptr) {
std::cout << " " << histo->GetTitle() << ":\t " << histo->GetEntries() << std::endl;
total += histo->GetEntries();
ta = histo->Integral(0, histo->GetNbinsX()+1);
tg = histo->Integral(fgb, lgb);
std::cout << " " << histo->GetTitle() << ":\t " << ta << ", " << tg << std::endl;
total += ta;
total_good += tg;
}
}
if (i % 2 == 0)
std::cout << " total counts of group " << i+1 << ":\t\t\t " << total << std::endl;
std::cout << " total counts of group " << i+1 << ":\t\t\t " << total << ", " << total_good << std::endl;
else
std::cout << " total counts of group " << i+1 << ":\t\t\t\t\t " << total << std::endl;
std::cout << " total counts of group " << i+1 << ":\t\t\t\t\t " << total << ", " << total_good << std::endl;
}
} else {
std::cout << "Sorry, no histos folder found" << std::endl;
@ -287,6 +306,9 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
f.Close();
if (header)
delete header;
return 0;
}