1#ifndef __JRUNHISTOGRAMS__ 
    2#define __JRUNHISTOGRAMS__ 
   26#include "TProfile2D.h" 
   34#include "TDirectory.h" 
   37#include "TObjString.h" 
   41using namespace JLANG ;   
 
   82    h_fifo_per_dom = 
new TH2D (
"h_fifo_per_dom", 
" FIFO ; String ; Floor ; Number of slices with FIFO almost full x number of PMTs ",
 
   83                               *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   86                                     " Fraction of wrong DAQ Status [%]; String ; Floor ; Fraction of slices with wrong DAQ status of packets [%]",
 
   87                                     *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   89    h_hrv_per_dom = 
new TH2D (
"h_hrv_per_dom", 
"HRV ; String ; Floor ; Number of slices x number of PMTs in HRV",
 
   90                              *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   92    h_rate_summary = 
new TH2D (
"h_rate_summary", 
"Summary slices ; String ; Floor ; Mean rate over all summary slices [kHz]",
 
   93                               *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
 
   95    h_pmt_rate_distribution = 
new TH1D (
"h_pmt_rate_distribution", 
"PMT rate distribution from summary slices ; rate [kHz] ; Counts",
 
   98    h_dom_rate_distribution = 
new TH1D (
"h_dom_rate_distribution", 
"DOM rate distribution from summary slices ; rate [kHz] ; Counts", 50 , log10(50) , log10(2000));
 
  101    TH1D* h = 
new TH1D(
"%/h_mean_summary_rate_distribution", 
" ; rate [kHz] ; # PMTs", 40 , 0 , log10(1000));
 
  105    m_mean_summary_rate = 
new JManager < string , TH2D > (
new TH2D(
"%/h_mean_summary_rate", 
" ; TDC Channel ; Floor ; rate [kHz]",
 
  106                                                                   NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5,
 
  107                                                                   modules_per_string , 0.5 , 0.5 + modules_per_string));
 
  109    TH2D* h_summary_rate_distribution = 
new TH2D (
"%/h_pmt_rate_distributions_Summaryslice", 
"Summaryslice ; TDC channel ; rate [kHz] ; counts",
 
  110                                                  NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5, 100 , -1 , log10(10000));
 
 
 
  147    m_mean_ToT               .resize (number_of_timeslice_types , NULL);
 
 
  164                                          MAKE_STRING (ts_name + 
" ; DU number ; Floor number ; time slice averaged rate [Hz]").c_str() ,
 
  165                                          *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
 
  166                                          modules_per_string , 0.5 , 0.5 + modules_per_string);
 
  168    m_mean_ToT[ts_type] = 
new JManager < string , TH2D > (
new TH2D (
MAKE_STRING (
"%/h_mean_ToT_" + ts_name).c_str(),
 
  169                                                                    MAKE_STRING (ts_name + 
" ; TDC channel ; Floor number ; mean ToT [ns] ").c_str(),
 
  170                                                                    NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 ,
 
  171                                                                    modules_per_string , 0.5 , 0.5 + modules_per_string));
 
  174                                                                                 MAKE_STRING (ts_name + 
" ; ToT [ns] ; # PMTS ").c_str(),
 
  177    TH2D* h = 
new TH2D (
MAKE_STRING (
"%_" + ts_name + 
"_2SToT").c_str(),
 
  178                        MAKE_STRING (ts_name + 
" ; TDC channel ; ToT [ns] ; counts").c_str(),
 
  179                        NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 , 256, -0.5, 255.5);
 
  199    TH2D* h_pmt_rate_distributions = 
new TH2D (
MAKE_STRING (
"%/h_pmt_rate_distributions_" + ts_name).c_str(),
 
  200                                               MAKE_STRING (ts_name + 
" ; TDC channel ; rate [kHz] ; counts ").c_str(), 
 
  201                                               NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 , 
 
 
  223        for (
typename JManager < string , TH2D >::const_iterator 
j = (*it) -> begin() ; 
j != (*it) -> end() ; ++
j){
 
  226          TPRegexp r (
"(\\w+)/(\\DU)(\\d+)/(F)(\\d+)");
 
  228          TObjArray* o = r.MatchS(s);
 
  230          int String = ((TObjString *)o->At(3))->GetString().Atoi();
 
  231          int Floor  = ((TObjString *)o->At(5))->GetString().Atoi();
 
  233          for (
int pmt = 1 ; pmt <= (
j -> second) -> GetXaxis() -> GetNbins() ; pmt++){
 
  235            (*
m_mean_ToT[i])[
MAKE_STRING(
"Detector/DU" + 
to_string(
String))] -> Fill((
j->second) -> GetXaxis() -> GetBinCenter(pmt) , Floor , (
j -> second) -> ProjectionY (
"" , pmt , pmt) -> GetMean () );
 
 
 
  300                                    "Number of events as a function of trigger bit in event ; Trigger Bit ; Counts",
 
  301                                    NUMBER_OF_TRIGGER_BITS , -0.5, NUMBER_OF_TRIGGER_BITS - 0.5 );
 
  317                                   "Number of hits per event as a function of trigger bit in hit ; Trigger Bit ; #Events",
 
  318                                   NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5 );
 
  333    h_Snapshot_hits = 
new TH1D (
"h_Snapshot_hits", 
" ; Number of snapshot hits; Events ", 50, 0, 4 );
 
  336    h_Triggered_hits = 
new TH1D (
"h_Triggered_hits", 
" ; Number of triggered hits; Events ", 50 , 0, 4 );
 
  339    h_Triggered_hits_3dmuon = 
new TH1D (
"h_Triggered_hits_3dmuon", 
" ; Number of triggered hits for JTRIGGER3DMUON; Events ", 50 , 0, 3 );
 
  343                                                   "Number of triggered hits for JTRIGGER3DMUON; String ; Floor ; Number of JTRIGGER3DMUON hits",
 
  344                                                   *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5,
 
  345                                                   modules_per_string , 0.5 , modules_per_string + 0.5 );
 
  349    h_event_duration = 
new TH1D (
"h_event_duration", 
" ; Event Duration [ns]; Events", 60 , 1, 6 );
 
  352    h_Number_of_overlays = 
new TH1D (
"h_Number_of_overlays", 
" ; Number of overlays; Events ", 1000, -0.5, 1000 - 0.5 );
 
  354                                           " ; String ; Floor ; Number of snapshot hits ",
 
  355                                           *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
 
  356                                           modules_per_string , 0.5 , modules_per_string + 0.5 );
 
  359                                            " ; String ; Floor ; Number of triggered hits",
 
  360                                            *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
 
  361                                            modules_per_string , 0.5 , modules_per_string + 0.5 );
 
  364                                                                         " ; TDC Channel ; Floor ; Number of snapshot hits",
 
  365                                                                         NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 ,
 
  366                                                                         modules_per_string , 0.5 , modules_per_string + 0.5 ) );
 
  369                                                  " ; TDC Channel ; Counts [a.u.]", NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5);
 
  371    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);
 
 
 
  419    const string   prefix = 
"KM3NETDAQ::JDAQ" ;
 
  420    string        ts_name = T::Class_Name();
 
  421    string::size_type pos = ts_name.find(prefix);
 
  423    if (pos != string::npos) ts_name.replace(ts_name.find(prefix) , prefix.length() , 
"");
 
 
  446    if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
 
  448    f.cd (dirname.c_str());
 
  450    for (
int i=0 ; i < (int)table.size(); i++){
 
  452      for (
int j=0 ; 
j< (int)table[i].size(); 
j++){
 
  454        if (table[i][
j]) table [i][
j] -> Write();
 
 
  469    if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
 
  471    f.cd (dirname.c_str());
 
  473    for (
int i=0 ; i < (int)table.size(); i++){
 
  475      if (table[i]) table[i] -> Write();
 
 
  486  template <
class T , 
class V>
 
  489    if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
 
  491    f.cd (dirname.c_str());
 
  493    for (
typename JManager < T , V >::const_iterator i = table -> begin() ; i != table -> end() ; ++i){
 
  495      i -> second -> Write();
 
 
  504  template <
class T , 
class V>
 
  507    for (
typename JManager < T , V >::const_iterator i = manager -> begin() ; i != manager -> end() ; ++i){
 
  509      if (i -> second -> GetTitle()){
 
  511        std::string     buffer = i -> second -> GetTitle();
 
  512        string::size_type ipos = buffer.find(wc);
 
  514        if (ipos!=std::string::npos){
 
  520          buffer.replace(ipos, 1, os.str());
 
  522          i -> second -> SetTitle(buffer.c_str());
 
 
  533  template < 
class T , 
class V >
 
  536    for (
typename JManager < T , V >::const_iterator i = manager -> begin() ; i != manager -> end() ; ++i){
 
  538      std::string fullpath = 
MAKE_STRING(i->second->GetName());
 
  540      int          pos = fullpath.rfind (
'/');
 
  541      std::string name = fullpath.substr (pos + 1);
 
  542      std::string path = fullpath.substr (0 , pos);
 
  544      if (f.GetDirectory(path.c_str()) == 0) f.mkdir (path.c_str());
 
  548      i -> second -> SetName(name.c_str());
 
  549      i -> second -> Write();
 
 
  558  template < 
class T , 
class V >
 
  561    for (
typename vector < JManager < T , V >* >::const_iterator i = table.begin() ; i != table.end() ; ++i){
 
  565        for (
typename JManager < T , V >::const_iterator 
j = (*i) -> begin() ; 
j != (*i) -> end() ; ++
j){
 
  567          std::string fullpath = 
MAKE_STRING(
j-> second -> GetName());
 
  569          int          pos = fullpath.rfind  (
'/');
 
  570          std::string name = fullpath.substr (pos + 1);
 
  571          std::string path = fullpath.substr (0 , pos);
 
  573          if (f.GetDirectory(path.c_str()) == 0) f.mkdir (path.c_str());
 
  577          j -> second -> SetName(name.c_str());
 
  578          j -> second -> Write();
 
 
 
KM3NeT DAQ constants, bit handling, etc.
 
Dynamic ROOT object management.
 
Direct access to module in detector data structure.
 
#define MAKE_STRING(A)
Make string.
 
ROOT TTree parameter settings of various packages.
 
TimesliceHistograms h_timeslice
 
void initialize_trigger_histograms()
 
void Write_manager_table_in_key_dir(TFile &f, vector< JManager< T, V > * > table)
 
void Write_histogram_table_to_file(TFile &f, string dirname, vector< T * > table)
 
void Write_manager_to_file(TFile &f, string dirname, JManager< T, V > *table)
 
TriggerHistograms h_trigger
 
void Write_manager_in_key_dir(TFile &f, JManager< T, V > *manager)
 
void initialize_summary_histograms()
 
void initialize_timeslice_histograms()
 
JRA_Histograms(const JDetector &detector)
 
void Write_histogram_table_to_file(TFile &f, string dirname, vector< vector< T * > > table)
 
SummaryHistograms h_summary
 
void Replace_wildcard_in_name(JManager< T, V > *manager, char wc='%')
 
static int getN()
Get number of bins.
 
static const double * getData(const double factor=1.0)
Get abscissa values.
 
std::set< int > getStringIDs(const JDetector &detector)
Get list of strings identifiers.
 
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
 
int getNumberOfModules(const JDetector &detector, const bool option=false)
Get number of modules.
 
void setLogarithmicX(TList *list)
Make x-axis of objects in list logarithmic (e.g. after using log10()).
 
void setLogarithmicY(TList *list)
Make y-axis of objects in list logarithmic (e.g. after using log10()).
 
Auxiliary classes and methods for language specific functionality.
 
std::string to_string(const T &value)
Convert value to string.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Support classes and methods for experiment specific I/O.
 
const char * getTriggerName(JTriggerbit_t bit)
Get trigger name.
 
KM3NeT DAQ data structures and auxiliaries.
 
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
 
General purpose string class.
 
Indexing of data type in type list.
 
JManager< string, TH1D > * m_mean_summary_rate_distribution
 
JManager< string, TH2D > * m_mean_summary_rate
 
TH1D * h_pmt_rate_distribution
 
void initialize(std::set< int > &du_ids, int modules_per_string)
 
TH2D * h_daq_status_per_dom
 
JManager< string, TH2D > * m_summary_rate_distribution
 
TH1D * h_dom_rate_distribution
 
vector< JManager< string, TH2D > * > m_pmt_tot_distributions
 
void Fill_mean_ToT_histograms()
 
vector< JManager< string, TH2D > * > m_pmt_rate_distributions
 
vector< JManager< string, TH2D > * > m_mean_ToT
 
vector< TH2D * > h_dom_mean_rates
 
void initialize(std::set< int > du_ids, int modules_per_string, int ts_type, std::string ts_name)
 
vector< JManager< string, TH1D > * > m_mean_ToT_distribution
 
void initialize(std::set< int > &du_ids, int modules_per_string)
 
TH2D * h_Triggered_hits_3dmuon_per_module
 
TH2D * h_Triggered_hits_per_module
 
JManager< string, TH2D > * m_Snapshot_hits_per_pmt
 
TH1D * h_tot_distribution_snapshot_hits
 
TH1D * h_Trigger_bit_event
 
TH1D * h_pmt_distribution_snapshot_hits
 
TH2D * h_Snapshot_hits_per_module
 
TH1D * h_pmt_distribution_triggered_hits
 
TH1D * h_tot_distribution_triggered_hits
 
TH1D * h_Number_of_overlays
 
TH1D * h_Triggered_over_Snapshot_hits
 
TH1D * h_Triggered_hits_3dmuon