11 #include "TProfile2D.h" 
   29 int main(
int argc, 
char **argv)
 
   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()) {
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
int main(int argc, char **argv)
 
Auxiliary class to define a range between two values.
 
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)...