64{
   68 
   71  bool               weight_mc;
   73 
   74  try { 
   75 
   76    JParser<> zap(
"Auxiliary program to merge JRunAnalyzer histograms.");
 
   77     
   78    zap[
'f'] = 
make_field(inputFile,      
"input file (output from JRunAnalyzer).");
 
   80    zap[
'w'] = 
make_field(weight_mc,      
"weight mc events");
 
   82 
   83    zap(argc, argv);
   84  }
   85  catch(const exception &error) {
   86    FATAL(error.what() << endl);
 
   87  }
   88 
   89  int min_run = numeric_limits<int>::max(), max_run = 0;
   90 
   91  size_t min_date = numeric_limits<int>::max(), max_date = 0;
   92 
   94 
   95  double total_mc_livetime = 0;
   96  int run = 0;
   97 
   98  for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
   99 
  100    {
  102      if(in.hasNext()){
  103        runinfo = *in.next();
  104        if(in.hasNext()){
  105          FATAL(
"MULTIPLE RUN INFO");
 
  106        }
  107        
  108        int run_id = runinfo.
run_id;
 
  109 
  110        if(run_id != run){
  111          
  112          run = run_id;
  113 
  115        
  116        } else {
  117 
  119        }
  120      
  121      } else {
  122        FATAL(
"NO RUN INFO");
 
  123      }
  124    }
  125 
  127 
  129 
  134    }
  135  }
  136  
  137  time_t tmin = min_date, tmax = max_date;
  138  
  139  TTimeStamp date_min(tmin, 0);
  140  TTimeStamp date_max(tmax, 0);
  141  
  142  cout << "Minimum RUN: " << min_run << ", "; date_min.Print("s");
  143  cout << "Maximum RUN: " << max_run << ", "; date_max.Print("s");
  144  
  145  int xbins = (max_run - min_run) + 1;
  146  string title = string("Data taken from: ") + date_min.AsString("s") + " - " + date_max.AsString("s");
  147  
  148  TH2D* h_pmt_rate_distribution = 
new TH2D(
"h_pmt_rate_distribution", 
string(title + 
"; RUN; PMT Rate Distribution [kHz]").c_str(), xbins, (
double) min_run-0.5, (
double) max_run+0.5, 
JDAQRate::getN(), 
JDAQRate::getData(1.0e-4));  
 
  149  TH2D* h_Trigger_bit_hit = new TH2D("h_Trigger_bit_hit", string(title + "; RUN; Hits trigger bit").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5); 
  150  TH2D* h_Triggered_hits = new TH2D("h_Triggered_hits", string(title + "; RUN; Number of triggered hits").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5,  50, 0, 4);
  152  TH2D* h_Triggered_hits_3dmuon = new TH2D("h_Triggered_hits_3dmuon", string(title + "; RUN; Number of triggered hits - JTRIGGER3DMUON").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 50, 0, 3);
  154  TH2D* h_Snapshot_hits = new TH2D("h_Snapshot_hits", string(title + "; RUN; Number of snapshot hits").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5,  50, 0, 4);
  156  TH2D* h_Triggered_over_Snapshot_hits = new TH2D("h_Triggered_over_Snapshot_hits", string(title + "; RUN; Triggered/Snapshot hits").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 100, 0, 0.5);
  157  TH2D* h_Number_of_overlays = new TH2D("h_Number_of_overlays", string(title + ";RUN;Number of Overlays").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 1000, -0.5, 1000 - 0.5);
  158  TH2D* h_pmt_distribution_triggered_hits = new TH2D("h_pmt_distribution_triggered_hits", string(title + ";RUN;Normalised PMT Distrib triggered hits (upper PMTs=[0-11])").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, NUMBER_OF_PMTS, -0.5 , NUMBER_OF_PMTS - 0.5);
  159  TH2D* h_pmt_distribution_snapshot_hits = new TH2D("h_pmt_distribution_snapshot_hits", string(title + ";RUN; Normalised PMT Distrib snapshot hits (upper PMTs=[0-11])").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, NUMBER_OF_PMTS, -0.5 , NUMBER_OF_PMTS - 0.5);
  160  TH2D* h_event_duration = new TH2D("h_event_duration", string(title + ";RUN;Event Duration [ns]").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 60, 1, 6);
  162  TH2D* h_tres = new TH2D("h_tres", string(title + ";RUN;Time residuals [ns]").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 100, -50, 150);
  163  TH2D* h_likelihood = new TH2D ("h_likelihood", string(title + ";RUN;Likelihood").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 100, -1000, 1000);
  164  TH2D* h_beta0 = new TH2D("h_beta0", string(title + ";RUN;beta0").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 20, 0, 1);
  165  TH2D* h_energy = new TH2D ("h_energy", string(title + ";RUN;Energy [GeV];").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 65, 0, 9);
  167  TH2D* h_zenith = new TH2D("h_zenith", string(title + ";RUN;cosZenith").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 20, -1, 1);
  168  TH2D* h_azimuth = new TH2D("h_azimuth", string(title + ";RUN;cosAzimuth").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 20, -1, 1);
  169  TH2D* h_radial_position = new TH2D ("h_radial_position", string(title + ";RUN;Radial Position [m]").c_str(),  xbins, (double) min_run-0.5, (double) max_run+0.5, 60, 0, 4.2);
  171  TH2D* h_z_position = new TH2D ("h_z_position", string(title + ";RUN;Z Position [m]").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 50, 0, 3.2);
  173 
  174  for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
  175 
  176    DEBUG(
"Processing " << *i << endl) ;
 
  177 
  178    {
  180      if(in.hasNext()){ 
  181        runinfo = *in.next();
  182        if(in.hasNext()){
  183          FATAL(
"MULTIPLE RUN INFO");
 
  184        }
  185      } else {
  186        FATAL(
"NO RUN INFO");
 
  187      } 
  188    }
  189 
  190    TFile in(i->c_str(), "read");
  191 
  192    cout << i->c_str() << endl;
  193    
  195    
  196    TH1D* h1d_prd  = new TH1D();
  197    TH1D* h1d_thb  = new TH1D();
  198    TH1D* h1d_th   = new TH1D();
  199    TH1D* h1d_th3D = new TH1D();
  200    TH1D* h1d_sh   = new TH1D();
  201    TH1D* h1d_tosh = new TH1D();
  202    TH1D* h1d_noo  = new TH1D();
  203    TH1D* h1d_pdth = new TH1D();
  204    TH1D* h1d_pdsh = new TH1D();
  205    TH1D* h1d_ed   = new TH1D();
  206    TH1D* h1d_tr   = new TH1D();
  207    TH1D* h1d_lk   = new TH1D();
  208    TH1D* h1d_b0   = new TH1D();
  209    TH1D* h1d_en   = new TH1D();
  210    TH1D* h1d_zn   = new TH1D();
  211    TH1D* h1d_az   = new TH1D();
  212    TH1D* h1d_rp   = new TH1D();
  213    TH1D* h1d_zp   = new TH1D();
  214 
  215    in.GetDirectory("Detector")->GetObject("h_pmt_rate_distribution", h1d_prd);
  217 
  218    TDirectory* dir = in.GetDirectory("JDAQEvent");
  219 
  220    dir->GetObject("h_Trigger_bit_hit", h1d_thb);
  222 
  223    dir->GetObject("h_Triggered_hits", h1d_th);
  225 
  226    dir->GetObject("h_Triggered_hits_3dmuon", h1d_th3D);
  228 
  229    dir->GetObject("h_Snapshot_hits", h1d_sh);
  231 
  232    dir->GetObject("h_Triggered_over_Snapshot_hits", h1d_tosh);
  234 
  235    dir->GetObject("h_Number_of_overlays", h1d_noo);
  237 
  238    dir->GetObject("h_pmt_distribution_triggered_hits", h1d_pdth);
  240 
  241    dir->GetObject("h_pmt_distribution_snapshot_hits", h1d_pdsh);
  243 
  244    dir->GetObject("h_event_duration", h1d_ed);
  246 
  247    TDirectory* dir_r = in.GetDirectory("Reco");
  248 
  249    dir_r->GetObject("h_tres", h1d_tr);
  251 
  252    dir_r->GetObject("h_likelihood", h1d_lk);
  254 
  255    dir_r->GetObject("h_beta0", h1d_b0);
  257 
  258    dir_r->GetObject("h_energy", h1d_en);
  260 
  261    dir_r->GetObject("h_zenith", h1d_zn);
  263 
  264    dir_r->GetObject("h_azimuth", h1d_az);
  266 
  267    dir_r->GetObject("h_radial_position", h1d_rp);
  269 
  270    dir_r->GetObject("h_z_position", h1d_zp);
  272  }
  273 
  275 
  277  outputFile.put(*h_pmt_distribution_snapshot_hits);
 
  278  outputFile.put(*h_pmt_distribution_triggered_hits);
 
  280  outputFile.put(*h_Triggered_over_Snapshot_hits);
 
  293 
  295 
  297 
  299}
void fill2DHistogram(int run, TH1D *h1, TH2D *h2, bool w_mc, double daq_livetime=1, double mc_livetime=1)
 
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Utility class to parse command line options.
 
General purpose class for object reading from a list of file names.
 
Object reading from a list of files.
 
int getRunNumber() const
Get run number.
 
JDAQUTCExtended getTimesliceStart() const
Get start of timeslice.
 
static int getN()
Get number of bins.
 
static const double * getData(const double factor=1.0)
Get abscissa values.
 
uint32_t getUTCseconds() const
Get major time.
 
void setLogarithmicY(TList *list)
Make y-axis of objects in list logarithmic (e.g. after using log10()).
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
KM3NeT DAQ data structures and auxiliaries.