48 JParser<> zap(
"Auxiliary program to profile 2D histograms.");
50 zap[
'f'] =
make_field(inputFile,
"<input file>:<object name>");
51 zap[
'P'] =
make_field(profile,
"profiling") =
' ',
'x',
'X',
'y',
'Y';
56 zap[
'F'] =
make_field(format,
"format, e.g. \"%s %i\" or \"%s %f %f\"") =
"";
57 zap[
'O'] =
make_field(option,
"option, see TH2::Profile(X|Y)") =
"",
"s",
"i",
"g";
62 catch(
const exception &error) {
63 FATAL(error.what() << endl);
66 const bool px = (profile ==
'x' || profile ==
'X' || !Y.empty());
67 const bool py = (profile ==
'y' || profile ==
'Y' || !X.empty());
70 FATAL(
"Invalid operation: "
71 << (px ?
"" :
"no") <<
" X profiling " <<
" and "
72 << (py ?
"" :
"no") <<
" Y profiling " << endl);
79 if (px) { format +=
"px"; }
80 if (py) { format +=
"py"; }
82 if (X.empty() && Y.empty())
92 DEBUG(
"Input: " << *input << endl);
97 ERROR(
"File: " << input->getFullFilename() <<
" not opened." << endl);
101 const TRegexp regexp(input->getObjectName());
103 TIter iter(dir->GetListOfKeys());
105 for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
107 const TString tag(key->GetName());
109 DEBUG(
"Key: " << tag <<
" match = " << tag.Contains(regexp) << endl);
113 if (tag.Contains(regexp) &&
isTObject(key)) {
115 TH2* h2 =
dynamic_cast<TH2*
>(key->ReadObj());
123 listOfObjects.push_back(h2->ProfileX(TString::Format(format.c_str(), h2->GetName()),
125 h2->GetYaxis()->GetNbins() + (overflow ? 1 : 0), option.c_str()));
129 for (Int_t i = 0; i != (Int_t) Y.size(); ++i) {
130 listOfObjects.push_back(h2->ProfileX(TString::Format(format.c_str(), h2->GetName(),
131 Y[i].getLowerLimit(),
132 Y[i].getUpperLimit()),
133 h2->GetYaxis()->FindBin(Y[i].getLowerLimit()),
134 h2->GetYaxis()->FindBin(Y[i].getUpperLimit()) - 1, option.c_str()));
143 listOfObjects.push_back(h2->ProfileY(TString::Format(format.c_str(), h2->GetName()),
145 h2->GetXaxis()->GetNbins() + (overflow ? 1 : 0), option.c_str()));
152 for (Int_t i = 0; i != (Int_t) Y.size(); ++i) {
154 listOfObjects.push_back(h2->ProfileY(TString::Format(format.c_str(), h2->GetName(),
155 X[i].getLowerLimit(),
156 X[i].getUpperLimit()),
157 h2->GetXaxis()->FindBin(X[i].getLowerLimit()),
158 h2->GetXaxis()->FindBin(X[i].getUpperLimit()) - 1, option.c_str()));
167 if (!listOfObjects.empty()) {
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
TDirectory * getDirectory(const JRootObjectID &id)
Get TDirectory pointer.
bool isTObject(const TKey *key)
Check if given key corresponds to a TObject.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Type definition of range.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...