64{
   68 
   70  string         steeringFile;
   71  string         outputFileRoot;
   72  string         outputFileTxt;
   73  string         regexp;
   74  int            labelInterval;
   76  
   77  try { 
   78 
   79    JParser<> zap(
"Auxiliary application to plot PMT parameters.");
 
   80 
   81    zap[
'f'] = 
make_field(inputFile,     
"JCompare output files");
 
   82    zap[
's'] = 
make_field(steeringFile,  
"JCompare steering file");
 
   83    zap[
'o'] = 
make_field(outputFileRoot,
"output file.")                                            = 
"out.root";
 
   84    zap[
't'] = 
make_field(outputFileTxt, 
"output file.")                                            = 
"out.txt";
 
   85    zap[
'r'] = 
make_field(regexp,        
"regular expresion to extract bin labels for the x-axis")  = 
" ";
 
   86    zap[
'L'] = 
make_field(labelInterval, 
"interval between x-axis bins for which labels are shown") = 1;
 
   88 
   89    zap(argc, argv);
   90  }
   91  catch(const exception &error) {
   92    FATAL(error.what() << endl);
 
   93  }
   94      
   95  const int NUMBER_OF_FILES = inputFile.size();
   96 
   97  JManager<string, TH1D> manager       (new TH1D("%", NULL, NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5));
   98  JManager<string, TH1D> summaryManager(new TH1D("%", NULL, NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5));
   99  
  100  if (regexp != " "){
  101 
  102    const int n = (NUMBER_OF_FILES < labelInterval) ? 1 : labelInterval;
 
  103 
  104    const TPRegexp buffer(regexp);
  105    
  106    for (int i = 0; i != NUMBER_OF_FILES; ++i){
  107 
  108      if(i%n == 0){
  109        manager->GetXaxis()->SetBinLabel(i+1 , 
parse(buffer , TString(inputFile[i].c_str())));
 
  110        summaryManager->GetXaxis()->SetBinLabel(i+1 , 
parse(buffer , TString(inputFile[i].c_str())));
 
  111      }else{
  112        manager->GetXaxis()->SetBinLabel(i+1 , " ");
  113        summaryManager->GetXaxis()->SetBinLabel(i+1 , " ");
  114      }
  115    }
  116  }
  117 
  118  int c = 0;
  119 
  121  
  122  for (vector<string>::const_iterator file = inputFile.begin() ; file != inputFile.end() ; ++file){
  123    
  124    if (TFile::Open((*file).c_str()) == NULL) {
  125      ERROR(
"File: " << *file << 
" not opened." << endl);
 
  126      c++;
  127      continue;
  128    }else{
  129      TFile* f = TFile::Open((*file).c_str());
  130      
  133      
  134      for (vector<TString>::const_iterator key = keys.begin() ; key != keys.end() ; ++key) {
  135 
  137 
  138        if(!(dynamic_cast<TH1*>(o) == NULL) || !(dynamic_cast<TH2*>(o) == NULL)){
  139 
  140          istringstream iss(o->GetTitle());
  141          
  143          iss >> t;
  144          
  149        }
  150      }
  151    }
  152    c++;
  153  }
  154 
  155  TFile* out = new TFile(outputFileRoot.c_str(),"recreate");
  156  out->cd();
  157  
  160  
  161  ifstream infile(steeringFile);
  163    
  164  string line;
  165  string name;
  166  int id;
  167  while (
getline(infile, line)) {
 
  168      while (line.length()==0) 
  170      tests.push_back(line);
  171      istringstream iss(line);
  172      iss >> name >> id;
  173      map[d[id]->getTestName()]++;
 
  174  }
  175  
  176  ofstream summary;
  177  summary.open (outputFileTxt);
  178  
  179  for (typename JManager < string , TH1D >::const_iterator i = summaryManager.begin() ; i != summaryManager.end() ; ++i){
  182    i->second->Scale(1./n);
  183    summary << "File_ID\t" << i->first << "\t" << i->first + "(ERROR)\t" << endl;
  184    cout << "File_ID\t" << i->first << "\t" << i->first + "(ERROR)\t" << endl;
  185    
  186    for (int bin=1 ; bin<i->second->GetNbinsX() ; ++bin){
  187      i->second->SetBinError(bin,quantiles[name][bin].getSTDev()/sqrt(n));
  188      summary << i->second->GetXaxis()->GetBinLabel(bin) << "\t" << i->second->GetBinContent(bin) << "\t" << i->second->GetBinError(bin) << endl;
  189      cout << i->second->GetXaxis()->GetBinLabel(bin) << "\t" << i->second->GetBinContent(bin) << "\t" << i->second->GetBinError(bin) << endl;
  190    }
  191    
  192    i->second->Write();
  193  }
  194  
  195  for (typename JManager < string , TH1D >::const_iterator i = manager.begin() ; i != manager.end() ; ++i){
  196      
  197    string fullpath = 
MAKE_STRING(i->second->GetName());
 
  198    string path = 
MAKE_STRING(fullpath.substr (fullpath.find (
'/') + 1 , fullpath.rfind (
'/')));
 
  199    
  200    if (out->GetDirectory(path.c_str()) == 0) out->mkdir(path.c_str());
  201    out->cd(path.c_str());
  202 
  203    i -> second -> SetName(
MAKE_CSTRING(fullpath.substr (fullpath.rfind (
'/') + 1)));
 
  204    
  205    for (int bin=0 ; bin<i->second->GetNbinsX()+1 ; ++bin){i->second->SetBinError(bin,0.0);}
  206    i -> second -> Write();
  207  }
  208  
  209  out->Close();
  210}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
#define MAKE_CSTRING(A)
Make C-string.
 
#define MAKE_STRING(A)
Make string.
 
Class dedicated to standardize the title of the graphical objects produced by the JTest_t() derived c...
 
std::string parameterName
 
Dictionary to map different tests to unique integer indices.
 
Utility class to parse command line options.
 
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
KM3NeT DAQ data structures and auxiliaries.
 
boost::property_tree::ptree parse(std::string str)