1 #ifndef __JRUNHISTOGRAMS__ 
    2 #define __JRUNHISTOGRAMS__ 
   27 #include "TProfile2D.h" 
   30 #include "TPaveText.h" 
   35 #include "TDirectory.h" 
   37 #include "TObjArray.h" 
   38 #include "TObjString.h" 
   41 using namespace KM3NETDAQ ;
 
   42 using namespace JLANG ;   
 
   44 using namespace JSUPPORT ;
 
   68     h_fifo_per_dom                   = NULL;
 
   69     h_daq_status_per_dom             = NULL;
 
   71     h_rate_summary                   = NULL;
 
   72     h_pmt_rate_distribution          = NULL;
 
   73     h_dom_rate_distribution          = NULL;
 
   74     m_mean_summary_rate              = NULL;
 
   75     m_mean_summary_rate_distribution = NULL;
 
   76     m_summary_rate_distribution      = NULL;
 
   84     h_fifo_per_dom = 
new TH2D (
"h_fifo_per_dom", 
" FIFO ; String ; Floor ; Number of slices with FIFO almost full x number of PMTs ",
 
   85                                *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   87     h_daq_status_per_dom = 
new TH2D (
"h_daq_status_per_dom",
 
   88                                      " Fraction of wrong DAQ Status [%]; String ; Floor ; Fraction of slices with wrong DAQ status of packets [%]",
 
   89                                      *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   91     h_hrv_per_dom = 
new TH2D (
"h_hrv_per_dom", 
"HRV ; String ; Floor ; Number of slices x number of PMTs in HRV",
 
   92                               *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   94     h_rate_summary = 
new TH2D (
"h_rate_summary", 
"Summary slices ; String ; Floor ; Mean rate over all summary slices [kHz]",
 
   95                                *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   97     h_pmt_rate_distribution = 
new TH1D (
"h_pmt_rate_distribution", 
"PMT rate distribution from summary slices ; rate [kHz] ; Counts",
 
  100     h_dom_rate_distribution = 
new TH1D (
"h_dom_rate_distribution", 
"DOM rate distribution from summary slices ; rate [kHz] ; Counts", 50 , 
log10(50) , 
log10(2000));
 
  103     TH1D* h = 
new TH1D(
"%/h_mean_summary_rate_distribution", 
" ; rate [kHz] ; # PMTs", 40 , 0 , 
log10(1000));
 
  107     m_mean_summary_rate = 
new JManager < string , TH2D > (
new TH2D(
"%/h_mean_summary_rate", 
" ; TDC Channel ; Floor ; rate [kHz]",
 
  109                                                                    modules_per_string , 0.5 , 0.5 + modules_per_string));
 
  111     TH2D* h_summary_rate_distribution = 
new TH2D (
"%/h_pmt_rate_distributions_Summaryslice", 
"Summaryslice ; TDC channel ; rate [kHz] ; counts",
 
  148     h_dom_mean_rates         .resize (number_of_timeslice_types , NULL);
 
  149     m_mean_ToT               .resize (number_of_timeslice_types , NULL);
 
  150     m_mean_ToT_distribution  .resize (number_of_timeslice_types , NULL);
 
  151     m_pmt_tot_distributions  .resize (number_of_timeslice_types , NULL);
 
  152     m_pmt_rate_distributions .resize (number_of_timeslice_types , NULL);
 
  165     h_dom_mean_rates[ts_type] = 
new TH2D (
MAKE_STRING (
"h_mean_dom_rates_" + ts_name).c_str(),
 
  166                                           MAKE_STRING (ts_name + 
" ; DU number ; Floor number ; time slice averaged rate [Hz]").c_str() ,
 
  167                                           *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
 
  168                                           modules_per_string , 0.5 , 0.5 + modules_per_string);
 
  171                                                                     MAKE_STRING (ts_name + 
" ; TDC channel ; Floor number ; mean ToT [ns] ").c_str(),
 
  173                                                                     modules_per_string , 0.5 , 0.5 + modules_per_string));
 
  176                                                                                  MAKE_STRING (ts_name + 
" ; ToT [ns] ; # PMTS ").c_str(),
 
  179     TH2D* h = 
new TH2D (
MAKE_STRING (
"%_" + ts_name + 
"_2SToT").c_str(),
 
  180                         MAKE_STRING (ts_name + 
" ; TDC channel ; ToT [ns] ; counts").c_str(),
 
  201     TH2D* h_pmt_rate_distributions = 
new TH2D (
MAKE_STRING (
"%/h_pmt_rate_distributions_" + ts_name).c_str(),
 
  202                                                MAKE_STRING (ts_name + 
" ; TDC channel ; rate [kHz] ; counts ").c_str(), 
 
  221     for (
typename vector < 
JManager < string , TH2D >* >::const_iterator it = m_pmt_tot_distributions.begin() ; it != m_pmt_tot_distributions.end() ; ++it , ++i){
 
  228           TPRegexp 
r (
"(\\w+)/(\\DU)(\\d+)/(F)(\\d+)");
 
  230           TObjArray* 
o = r.MatchS(s);
 
  232           int String = ((TObjString *)o->At(3))->GetString().Atoi();
 
  233           int Floor  = ((TObjString *)o->At(5))->GetString().Atoi();
 
  235           for (
int pmt = 1 ; pmt <= (
j -> second) -> GetXaxis() -> GetNbins() ; pmt++){
 
  237             (*m_mean_ToT[i])[
MAKE_STRING(
"Detector/DU" + 
to_string(String))] -> Fill((
j->second) -> GetXaxis() -> GetBinCenter(pmt) , Floor , (
j -> second) -> ProjectionY (
"" , pmt , pmt) -> GetMean () );
 
  238             (*m_mean_ToT_distribution[i])[
MAKE_STRING(
"Detector/DU" + 
to_string(String))] -> Fill((
j -> second) -> ProjectionY (
"" , pmt , pmt) -> GetMean () );            
 
  277     h_Trigger_bit_event                 = NULL;
 
  278     h_Trigger_bit_hit                   = NULL;
 
  279     h_Snapshot_hits                     = NULL;
 
  280     h_Triggered_hits                    = NULL;
 
  281     h_Triggered_hits_3dmuon             = NULL;
 
  282     h_Triggered_hits_3dmuon_per_module  = NULL;
 
  283     h_Triggered_over_Snapshot_hits      = NULL;
 
  284     h_event_duration                    = NULL;
 
  285     h_Number_of_overlays                = NULL;
 
  286     h_Snapshot_hits_per_module          = NULL;
 
  287     h_Triggered_hits_per_module         = NULL;
 
  288     m_Snapshot_hits_per_pmt             = NULL;
 
  289     h_pmt_distribution_triggered_hits   = NULL;
 
  290     h_tot_distribution_triggered_hits   = NULL;
 
  291     h_pmt_distribution_snapshot_hits    = NULL;
 
  292     h_tot_distribution_snapshot_hits    = NULL;
 
  303     h_Trigger_bit_event = 
new TH1D (
"h_Trigger_bit_event",
 
  304                                     "Number of events as a function of trigger bit in event ; Trigger Bit ; Counts",
 
  311         h_Trigger_bit_event -> GetXaxis() -> SetBinLabel(i+1 , 
getTriggerName(i) );
 
  314         h_Trigger_bit_event -> GetXaxis() -> SetBinLabel(i+1 , 
"" );
 
  317      h_Trigger_bit_event -> GetXaxis() -> LabelsOption(
"v"); 
 
  320      h_Trigger_bit_hit = 
new TH1D (
"h_Trigger_bit_hit",
 
  321                                    "Number of hits per event as a function of trigger bit in hit ; Trigger Bit ; #Events",
 
  328         h_Trigger_bit_hit -> GetXaxis() -> SetBinLabel(i+1 , 
getTriggerName(i) );
 
  331         h_Trigger_bit_hit -> GetXaxis() -> SetBinLabel(i+1 , 
"" );
 
  335     h_Trigger_bit_hit -> GetXaxis() -> LabelsOption(
"v"); 
 
  337     h_Snapshot_hits = 
new TH1D (
"h_Snapshot_hits", 
" ; Number of snapshot hits; Events ", 50, 0, 4 );
 
  340     h_Triggered_hits = 
new TH1D (
"h_Triggered_hits", 
" ; Number of triggered hits; Events ", 50 , 0, 4 );
 
  343     h_Triggered_hits_3dmuon = 
new TH1D (
"h_Triggered_hits_3dmuon", 
" ; Number of triggered hits for JTRIGGER3DMUON; Events ", 50 , 0, 3 );
 
  346     h_Triggered_hits_3dmuon_per_module = 
new TH2D (
"h_Triggered_hits_3dmuon_per_module",
 
  347                                                    "Number of triggered hits for JTRIGGER3DMUON; String ; Floor ; Number of JTRIGGER3DMUON hits",
 
  348                                                    *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5,
 
  349                                                    modules_per_string , 0.5 , modules_per_string + 0.5 );
 
  351     h_Triggered_over_Snapshot_hits = 
new TH1D (
"h_Triggered_over_Snapshot_hits", 
" ; Triggered/Snapshot hits; Events", 100 , 0, 0.5 );
 
  353     h_event_duration = 
new TH1D (
"h_event_duration", 
" ; Event Duration [ns]; Events", 60 , 1, 6 );
 
  356     h_Number_of_overlays = 
new TH1D (
"h_Number_of_overlays", 
" ; Number of overlays; Events ", 1000, -0.5, 1000 - 0.5 );
 
  357     h_Snapshot_hits_per_module = 
new TH2D (
"h_Snapshot_hits_per_module",
 
  358                                            " ; String ; Floor ; Number of snapshot hits ",
 
  359                                            *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
 
  360                                            modules_per_string , 0.5 , modules_per_string + 0.5 );
 
  362     h_Triggered_hits_per_module = 
new TH2D (
"h_Triggered_hits_per_module",
 
  363                                             " ; String ; Floor ; Number of triggered hits",
 
  364                                             *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
 
  365                                             modules_per_string , 0.5 , modules_per_string + 0.5 );
 
  368                                                                          " ; TDC Channel ; Floor ; Number of snapshot hits",
 
  370                                                                          modules_per_string , 0.5 , modules_per_string + 0.5 ) );
 
  372     h_pmt_distribution_triggered_hits = 
new TH1D (
"h_pmt_distribution_triggered_hits",
 
  374     h_tot_distribution_triggered_hits = 
new TH1D (
"h_tot_distribution_triggered_hits", 
" ; ToT [ns] ; Counts [a.u.]", 256 , -0.5, 255.5);
 
  375     h_pmt_distribution_snapshot_hits = 
new TH1D (
"h_pmt_distribution_snapshot_hits", 
" ; TDC Channel ; Counts [a.u.]", 
NUMBER_OF_PMTS , -0.5 , 
NUMBER_OF_PMTS - 0.5);
 
  376     h_tot_distribution_snapshot_hits = 
new TH1D (
"h_tot_distribution_snapshot_hits", 
" ; ToT [ns] ; Counts [a.u.]", 256, -0.5, 255.5);
 
  411     h_summary.initialize(du_ids , modules_per_string);
 
  424     const string   prefix = 
"KM3NETDAQ::JDAQ" ;
 
  425     string        ts_name = T::Class_Name();
 
  426     string::size_type pos = ts_name.find(prefix);
 
  428     if (pos != string::npos) ts_name.replace(ts_name.find(prefix) , prefix.length() , 
"");
 
  430     h_timeslice.initialize(du_ids , modules_per_string , index , ts_name);
 
  438     h_trigger.initialize (du_ids , modules_per_string);
 
  451     if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
 
  453     f.cd (dirname.c_str());
 
  455     for (
int i=0 ; i < (int)table.size(); i++){
 
  457       for (
int j=0 ; 
j< (int)table[i].size(); 
j++){
 
  459         if (table[i][
j]) table [i][
j] -> Write();
 
  474     if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
 
  476     f.cd (dirname.c_str());
 
  478     for (
int i=0 ; i < (int)table.size(); i++){
 
  480       if (table[i]) table[i] -> Write();
 
  491   template <
class T , 
class V>
 
  494     if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
 
  496     f.cd (dirname.c_str());
 
  500       i -> second -> Write();
 
  509   template <
class T , 
class V>
 
  514       if (i -> second -> GetTitle()){
 
  516         std::string     buffer = i -> second -> GetTitle();
 
  517         string::size_type ipos = buffer.find(wc);
 
  519         if (ipos!=std::string::npos){
 
  525           buffer.replace(ipos, 1, os.str());
 
  527           i -> second -> SetTitle(buffer.c_str());
 
  538   template < 
class T , 
class V >
 
  543       std::string fullpath = 
MAKE_STRING(i->second->GetName());
 
  545       int          pos = fullpath.rfind (
'/');
 
  546       std::string 
name = fullpath.substr (pos + 1);
 
  547       std::string 
path = fullpath.substr (0 , pos);
 
  549       if (f.GetDirectory(path.c_str()) == 0) f.mkdir (path.c_str());
 
  553       i -> second -> SetName(name.c_str());
 
  554       i -> second -> Write();
 
  563   template < 
class T , 
class V >
 
  572           std::string fullpath = 
MAKE_STRING(
j-> second -> GetName());
 
  574           int          pos = fullpath.rfind  (
'/');
 
  575           std::string 
name = fullpath.substr (pos + 1);
 
  576           std::string 
path = fullpath.substr (0 , pos);
 
  578           if (f.GetDirectory(path.c_str()) == 0) f.mkdir (path.c_str());
 
  582           j -> second -> SetName(name.c_str());
 
  583           j -> second -> Write();
 
TH1D * h_pmt_distribution_snapshot_hits
TH2D * h_Snapshot_hits_per_module
ROOT TTree parameter settings of various packages. 
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits. 
TH1D * h_pmt_distribution_triggered_hits
vector< JManager< string, TH2D > * > m_pmt_tot_distributions
JManager< string, TH1D > * m_mean_summary_rate_distribution
void Write_histogram_table_to_file(TFile &f, string dirname, vector< T * > table)
vector< TH2D * > h_dom_mean_rates
TH1D * h_Number_of_overlays
TH2D * h_Triggered_hits_per_module
std::set< int > getStringIDs(const JDetector &detector)
Get list of strings identifiers. 
void initialize(std::set< int > &du_ids, int modules_per_string)
then echo Enter input within $TIMEOUT_S seconds echo n User name
o $QUALITY_ROOT d $DEBUG!JPlot1D f
void initialize(std::set< int > &du_ids, int modules_per_string)
TH2D * h_daq_status_per_dom
Dynamic ROOT object management. 
void initialize_summary_histograms()
JManager< string, TH2D > * m_mean_summary_rate
then fatal Wrong number of arguments fi JConvertDetectorFormat a o
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
TH1D * h_dom_rate_distribution
#define MAKE_STRING(A)
Make string. 
void Fill_mean_ToT_histograms()
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
TimesliceHistograms h_timeslice
void setLogarithmicX(TList *list)
Make x-axis of objects in list logarithmic (e.g. after using log10()). 
TH1D * h_tot_distribution_snapshot_hits
TriggerHistograms h_trigger
set_variable E_E log10(E_{fit}/E_{#mu})"
void Replace_wildcard_in_name(JManager< T, V > *manager, char wc= '%')
void Write_manager_table_in_key_dir(TFile &f, vector< JManager< T, V > * > table)
JRA_Histograms(const JDetector &detector)
TH1D * h_pmt_rate_distribution
$WORKDIR driver txt done cat $WORKDIR driver txt<< EOFprocess ${DATAFILTER}$FILTER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&(JDataFilter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAFILTER}-P $PORT</dev/null > &/dev/null &))';process ${DATAWRITER}$WRITER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&(JDataWriter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAWRITER}</dev/null > &/dev/null &))';print enterevent ev_init{RC_CMD}event ev_reset{RC_CMD}event ev_init{RC_CMD}event ev_configure{RC_DFLTR%<$WORKDIR/ev_configure_datafilter.txt > RC_DOM<$WORKDIR/ev_configure_domsimulator.txt > RC_DWRT path
void Write_histogram_table_to_file(TFile &f, string dirname, vector< vector< T * > > table)
TH1D * h_Trigger_bit_event
static const JStringCounter getNumberOfStrings
Function object to count unique strings. 
vector< JManager< string, TH1D > * > m_mean_ToT_distribution
void setLogarithmicY(TList *list)
Make y-axis of objects in list logarithmic (e.g. after using log10()). 
SummaryHistograms h_summary
Direct access to module in detector data structure. 
JManager< string, TH2D > * m_summary_rate_distribution
const char * getTriggerName(JTriggerbit_t bit)
Get trigger name. 
void Write_manager_in_key_dir(TFile &f, JManager< T, V > *manager)
General purpose string class. 
std::string to_string(const T &value)
Convert value to string. 
vector< JManager< string, TH2D > * > m_mean_ToT
vector< JManager< string, TH2D > * > m_pmt_rate_distributions
TH1D * h_tot_distribution_triggered_hits
TH1D * h_Triggered_hits_3dmuon
void initialize(std::set< int > du_ids, int modules_per_string, int ts_type, std::string ts_name)
TH2D * h_Triggered_hits_3dmuon_per_module
Indexing of data type in type list. 
KM3NeT DAQ constants, bit handling, etc. 
static const int NUMBER_OF_PMTS
Total number of PMTs in module. 
int getNumberOfModules(const JDetector &detector)
Get number of modules. 
void initialize_trigger_histograms()
JManager< string, TH2D > * m_Snapshot_hits_per_pmt
void initialize_timeslice_histograms()
void Write_manager_to_file(TFile &f, string dirname, JManager< T, V > *table)
TH1D * h_Triggered_over_Snapshot_hits