diff --git a/CMakeLists.txt b/CMakeLists.txt index b2d88ea0..690dd280 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # - musrfit cmake_minimum_required(VERSION 3.17) -project(musrfit VERSION 1.9.0 LANGUAGES C CXX) +project(musrfit VERSION 1.9.1 LANGUAGES C CXX) #--- musrfit specific options ------------------------------------------------- option(nexus "build optional NeXus support. Needed for ISIS" OFF) diff --git a/ChangeLog b/ChangeLog index d11566b0..8af8b86b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,13 @@ or https://bitbucket.org/muonspin/musrfit/commits/all +Release of V1.9.1, 2023/05/16 +============================= + +add option [-c, --count] to dump_header which will dump the number of counts +per detector and the total number of counts. Currently for MusrRoot data format +only. For the other data formats it will be implement asap + Release of V1.9.0, 2023/02/17 ============================= diff --git a/src/dump_header.cpp b/src/dump_header.cpp index dd38c74d..50def83f 100644 --- a/src/dump_header.cpp +++ b/src/dump_header.cpp @@ -52,6 +52,8 @@ #include #include #include +#include +#include #ifdef HAVE_GIT_REV_H #include "git-revision.h" @@ -78,7 +80,8 @@ void dump_header_syntax() { std::cout << std::endl << "usage: dump_header [-rn | -fn ] [-ff, --fileFormat ]"; - std::cout << std::endl << " [-y, --year ] [-s, --summary] [--psi-bulk ] |"; + std::cout << std::endl << " [-y, --year ] [-s, --summary] [-i, --instrument ]"; + std::cout << std::endl << " [-c, --counts] | "; std::cout << std::endl << " --help | --version"; std::cout << std::endl; std::cout << std::endl << " Dumps the header information of a given muSR data file onto the standard output."; @@ -97,6 +100,7 @@ void dump_header_syntax() std::cout << std::endl << " to the header information, print the summary file content."; std::cout << std::endl << " -i, --instrument : where is the requested instrument:"; std::cout << std::endl << " lem (default) | gps | ltf | dolly | gpd | hifi."; + std::cout << std::endl << " -c, --counts : will show detector counts as well."; std::cout << std::endl << " -h, --help : will show this help"; std::cout << std::endl << " -v, --version : will show the current version."; std::cout << std::endl << std::endl; @@ -108,10 +112,11 @@ void dump_header_syntax() * * @param fileName file name of the ROOT file * @param summary bool, if true dump the summary + * @param counts bool, if true dump detector counts * * @return 0 on success, otherwise 1. */ -int dump_header_root(const std::string fileName, const bool summary) +int dump_header_root(const std::string fileName, const bool summary, const bool counts) { TFile f(fileName.c_str()); if (f.IsZombie()) { @@ -122,6 +127,8 @@ int dump_header_root(const std::string fileName, const bool summary) } UInt_t fileType = DH_MUSR_ROOT; + UInt_t noOfHistos{0}; + PIntVector redGreenOffset; TFolder *folder; f.GetObject("RunInfo", folder); // try first LEM-ROOT style file (used until 2011). @@ -208,6 +215,18 @@ int dump_header_root(const std::string fileName, const bool summary) header->DumpHeader(); + if (counts) { + bool ok; + Int_t ival; + PIntVector ivec; + header->Get("RunInfo/No of Histos", ival, ok); + if (ok) + noOfHistos = ival; + header->Get("RunInfo/RedGreen Offsets", ivec, ok); + if (ok) + redGreenOffset = ivec; + } + delete header; } @@ -232,6 +251,38 @@ int dump_header_root(const std::string fileName, const bool summary) } } + // detector counts as well? + if (counts && (fileType == DH_MUSR_ROOT)) { + // dump the detector counts + std::cout << "Detector counts" << std::endl; + f.GetObject("histos", folder); + if (folder != nullptr) { + char detectorLabel[64]; + TH1F *histo{nullptr}; + UInt_t total{0}; + for (UInt_t i=0; iFindObjectAny(detectorLabel); + if (histo != nullptr) { + std::cout << " " << histo->GetTitle() << ":\t " << histo->GetEntries() << std::endl; + total += histo->GetEntries(); + } + } + if (i % 2 == 0) + std::cout << " total counts of group " << i+1 << ":\t\t\t " << total << std::endl; + else + std::cout << " total counts of group " << i+1 << ":\t\t\t\t\t " << total << std::endl; + } + } else { + std::cout << "Sorry, no histos folder found" << std::endl; + f.Close(); + return 0; + } + } + f.Close(); return 0; @@ -723,6 +774,7 @@ int main(int argc, char *argv[]) std::string year(""); std::string instrument("lem"); bool summary(false); + bool counts(false); for (int i=1; i= argc) { std::cerr << std::endl << "**ERROR** found option --instrument without input!" << std::endl; @@ -929,7 +983,7 @@ int main(int argc, char *argv[]) boost::to_lower(fileFormat); if (boost::iequals(fileFormat, "MusrRoot") || boost::iequals(fileFormat, "ROOT")) { - dump_header_root(pathFln, summary); + dump_header_root(pathFln, summary, counts); } else if (boost::iequals(fileFormat, "NeXus")) { #ifdef PNEXUS_ENABLED dump_header_nexus(pathFln);