36   struct JEvtWeightOption {
 
   38     static const char* 
const unweighted() { 
return "unweighted";   }
 
   39     static const char* 
const standard()   { 
return "standardFlux"; }
 
   40     static const char* 
const rescaled()   { 
return "rescaledFlux"; }
 
   51 int main(
int argc, 
char **argv)
 
   55   using namespace KM3NETDAQ;
 
   79     JParser<> zap(
"Example program to analyse track fit results from Evt formatted data.");
 
   82     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   87       JEvtWeightOption::unweighted(),
 
   88       JEvtWeightOption::standard(),
 
   89       JEvtWeightOption::rescaled();
 
   94   catch(
const exception& error) {
 
   95     FATAL(error.what() << endl);
 
   98   if (weightOption   != JEvtWeightOption::unweighted() &&
 
   99       numberOfEvents != JLimit::max()) {
 
  100     FATAL(
"Cannot apply weighting to limited number of events.");
 
  106   if (detectorFile != 
"") {
 
  120   const Int_t    N_Nhits       =               400;
 
  121   const Double_t Nhits_min     =         0.0 - 0.5;
 
  122   const Double_t Nhits_max     =      1000.0 - 0.5;
 
  124   const Int_t    N_Noverlays   =                40;
 
  125   const Double_t Noverlays_min =         0.0 - 0.5;
 
  126   const Double_t Noverlays_max =      1000.0 - 0.5;
 
  128   const Int_t    N_radius      =               201;
 
  129   const Double_t radius_min    =      -700.0 - 0.5;
 
  130   const Double_t radius_max    =      +700.0 + 0.5;
 
  132   const Int_t    N_height      =                18;
 
  133   const Double_t height_min    =              20.0;
 
  134   const Double_t height_max    =             200.0;
 
  136   const Int_t    N_ToTfrac     =                20;
 
  137   const Double_t ToTfrac_min   =               0.0;
 
  138   const Double_t ToTfrac_max   =               1.0;
 
  140   const Int_t    N_dt          =              1500;
 
  141   const Double_t dt_min        =      -500.0 - 0.5;
 
  142   const Double_t dt_max        =      1000.0 - 0.5;
 
  144   const Int_t    N_zenith      =                21;
 
  145   const Double_t zenith_min    =              -1.0;
 
  146   const Double_t zenith_max    =              +1.0;
 
  148   const Int_t    N_energy      =                60;
 
  149   const Double_t energy_min    =              -2.0;
 
  150   const Double_t energy_max    =               4.0;
 
  152   const Int_t    N_quality     =               100;
 
  153   const Double_t quality_min   =            -200.0;
 
  154   const Double_t quality_max   =            +800.0;
 
  156   const Int_t    N_beta0       =                60;
 
  157   const Double_t beta0_min     =              -2.0;
 
  158   const Double_t beta0_max     =              +3.5;
 
  163   string ordinateLabel(weightOption == JEvtWeightOption::unweighted() ? 
 
  164                        "Number of events" : 
"Rate [Hz]");
 
  168   TH1D hs  (
"hs",   
MAKE_CSTRING(
"; #snapshot hits; "                                  << ordinateLabel),
 
  169             N_Nhits,     Nhits_min,     Nhits_max);
 
  170   TH1D hn  (
"hn",   
MAKE_CSTRING(
"; #triggered hits; "                                 << ordinateLabel),
 
  171             N_Nhits,     Nhits_min,     Nhits_max);
 
  172   TH1D ho  (
"ho",   
MAKE_CSTRING(
"; #overlays; "                                       << ordinateLabel),
 
  173             N_Noverlays, Noverlays_min, Noverlays_max);
 
  175   TH1D hz  (
"hz",   
MAKE_CSTRING(
"; cos(#theta); "                                     << ordinateLabel),
 
  176             N_zenith,    zenith_min,    zenith_max);
 
  177   TH1D he  (
"he",   
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); "                      << ordinateLabel),
 
  178             N_energy,    energy_min,    energy_max);
 
  179   TH1D ht  (
"ht",   
MAKE_CSTRING(
"; #Delta t [ns]; "                                   << ordinateLabel),
 
  180             N_dt,        dt_min,        dt_max);
 
  182   TH1D hZ  (
"hZ",   
MAKE_CSTRING(
"; longitudinal ToT-barycenter [m]; "                 << ordinateLabel),
 
  183             N_height,    height_min,    height_max);
 
  184   TH1D hT0 (
"hT0",  
MAKE_CSTRING(
"; ToT-fraction below earliest triggered hit [ns]; "  << ordinateLabel),
 
  185             N_ToTfrac,   ToTfrac_min,   ToTfrac_max);
 
  186   TH1D hT1 (
"hT1",  
MAKE_CSTRING(
"; ToT-fraction above earliest triggered hit [ns]; "  << ordinateLabel),
 
  187             N_ToTfrac,   ToTfrac_min,   ToTfrac_max);  
 
  189   TH1D hq  (
"hq",   
MAKE_CSTRING(
"; quality; "                                         << ordinateLabel),
 
  190             N_quality,   quality_min,   quality_max);
 
  191   TH1D hb0 (
"hb0",  
MAKE_CSTRING(
"; #beta_{0}; "                                       << ordinateLabel),
 
  192             N_beta0,     beta0_min,     beta0_max);
 
  194   TH2D hzo (
"hzo",  
MAKE_CSTRING(
"; cos(#theta); #overlays; "                          << ordinateLabel),
 
  195             N_zenith,    zenith_min,    zenith_max,
 
  196             N_Noverlays, Noverlays_min, Noverlays_max);
 
  197   TH2D hze (
"hze",  
MAKE_CSTRING(
"; cos(#theta); log_{10}(E_{reco} / 1 GeV); "         << ordinateLabel),
 
  198             N_zenith,    zenith_min,    zenith_max,
 
  199             N_energy,    energy_min,    energy_max);
 
  200   TH2D heo (
"heo",  
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); #overlays; "           << ordinateLabel),
 
  201             N_energy,    energy_min,    energy_max,
 
  202             N_Noverlays, Noverlays_min, Noverlays_max);
 
  203   TH2D hzt (
"hzt",  
MAKE_CSTRING(
"; cos(#theta); #Delta t [ns]; "                      << ordinateLabel),
 
  204             N_zenith,    zenith_min,    zenith_max,
 
  205             N_dt,        dt_min,        dt_max);
 
  206   TH2D het (
"het",  
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); #Delta t [ns]; "       << ordinateLabel),
 
  207             N_energy,    energy_min,    energy_max,
 
  208             N_dt,        dt_min,        dt_max);
 
  209   TH2D hot (
"hot",  
MAKE_CSTRING(
"; #overlays; #Delta t [ns]; "                        << ordinateLabel),
 
  210             N_Noverlays, Noverlays_min, Noverlays_max,
 
  211             N_dt,        dt_min,        dt_max);
 
  213   TH2D hzq (
"hzq",  
MAKE_CSTRING(
"; cos(#theta); quality; "                            << ordinateLabel),
 
  214             N_zenith,    zenith_min,    zenith_max,
 
  215             N_quality,   quality_min,   quality_max);
 
  216   TH2D heq (
"heq",  
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); quality; "             << ordinateLabel),
 
  217             N_energy,    energy_min,    energy_max,
 
  218             N_quality,   quality_min,   quality_max);
 
  219   TH2D hoq (
"hoq",  
MAKE_CSTRING(
"; #overlays; quality; "                              << ordinateLabel),
 
  220             N_Noverlays, Noverlays_min, Noverlays_max,
 
  221             N_quality,   quality_min,   quality_max);
 
  223   TH2D hob0(
"hob0", 
MAKE_CSTRING(
"; #overlays; log_{10}(#beta_{0}); "                  << ordinateLabel),
 
  224             N_Noverlays, Noverlays_min, Noverlays_max,
 
  225             N_beta0,     beta0_min,     beta0_max);
 
  226   TH2D heb0(
"heb0", 
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); log_{10}(#beta_{0}); " << ordinateLabel),
 
  227             N_energy,    energy_min,    energy_max,
 
  228             N_beta0,     beta0_min,     beta0_max);     
 
  229   TH2D hzb0(
"hzb0", 
MAKE_CSTRING(
"; cos(#theta); log_{10}(#beta_{0}); "                << ordinateLabel),
 
  230             N_zenith,    zenith_min,    zenith_max,
 
  231             N_beta0,     beta0_min,     beta0_max);
 
  233   TH2D hxy (
"hxy",  
MAKE_CSTRING(
"; x [m]; y [m]; "                                    << ordinateLabel),
 
  234             N_radius,    radius_min,    radius_max,
 
  235             N_radius,    radius_min,    radius_max);
 
  244     scanner->setLimit(numberOfEvents);
 
  246     while (scanner->hasNext()) {
 
  248       const Evt*    evt = scanner->next();
 
  258         const size_t    NsnapshotHits  = evt->
hits.size();
 
  259         const size_t    NtriggeredHits = count_if(evt->
hits.begin(), evt->
hits.end(),
 
  262         if (triggeredHitsRange(NtriggeredHits) &&
 
  263             coszenithRange    (tb.
getDZ())     &&
 
  264             energyRange       (tb.
getE())) { 
 
  270           if        (weightOption == JEvtWeightOption::unweighted()) {
 
  272           } 
else if (weightOption == JEvtWeightOption::standard()) {
 
  273             weight = scanner->getWeight(*evt);
 
  274           } 
else if (weightOption == JEvtWeightOption::rescaled()) {
 
  279                  RIGHT     (15)    << scanner->getCounter()               <<
 
  284           hs .Fill(NsnapshotHits,                          weight);
 
  285           hn .Fill(NtriggeredHits,                         weight);
 
  289           he .Fill(logE,                                   weight);
 
  290           hq .Fill(best_trk.
lik,                           weight);
 
  294           heo.Fill(logE,                  evt->
overlays,   weight);
 
  298           heq.Fill(logE,                  best_trk.
lik,    weight);
 
  306             hb0 .Fill(logb0,                               weight);
 
  307             hob0.Fill(evt->
overlays,      logb0,           weight);       
 
  308             heb0.Fill(logE,               logb0,           weight);
 
  312           double ToTbelow     = 0.0;
 
  313           double ToTabove     = 0.0;
 
  314           double ToTtotal     = 0.0;
 
  315           double ToTweightedZ = 0.0;
 
  322             if (router.
hasPMT(hit->pmt_id)) {
 
  326               const double    t0   = tb.
getT(pmt);
 
  327               const double    t1   = 
getTime(*hit);
 
  329               ht .Fill(t1 - t0,                            weight);
 
  330               hot.Fill(evt->
overlays,     t1 - t0,         weight);
 
  332               het.Fill(
log10(best_trk.
E), t1 - t0,         weight);
 
  336                 ToTtotal     += hit->tot;
 
  337                 ToTweightedZ += hit->tot * hit->pos.z;
 
  339                 if        (hit->pos.z < firstHit->pos.z)  {
 
  340                   ToTbelow   += hit->tot;
 
  341                 } 
else if (hit->pos.z >= firstHit->pos.z) {
 
  342                   ToTabove   += hit->tot;
 
  348           hT0.Fill(ToTbelow / ToTtotal,                     weight);
 
  349           hT1.Fill(ToTabove / ToTtotal,                     weight);
 
  350           hZ .Fill(ToTweightedZ / ToTtotal,                 weight);
 
Router for direct addressing of PMT data in detector data structure. 
 
static const int RESCALED_WEIGHT_INDEX
Index of rescaled weight. 
 
Utility class to parse command line options. 
 
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member. 
 
int main(int argc, char *argv[])
 
ROOT TTree parameter settings of various packages. 
 
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member. 
 
JTrack3E getTrack(const Trk &track)
Get track. 
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance. 
 
#define gmake_property(A)
macro to convert (template) parameter to JPropertiesElement object 
 
std::string comment
use as you like 
 
Utility class to parse parameter values. 
 
#define MAKE_CSTRING(A)
Make C-string. 
 
bool hasPMT(const JObjectID &id) const 
Has PMT. 
 
const JPMT & getPMT(const JPMTAddress &address) const 
Get PMT. 
 
std::vector< double > w
MC: Weights w[0]=w1, w[1]=w2, w[2]]=w3 (see e.g. Tag list) 
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
double getTime(const Hit &hit)
Get true time of hit. 
 
double E
Energy [GeV] (either MC truth or reconstructed) 
 
Data structure for detector geometry and calibration. 
 
Auxiliary class for defining the range of iterations of objects. 
 
unsigned int overlays
number of overlaying triggered events 
 
double getE() const 
Get energy. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
set_variable E_E log10(E_{fit}/E_{#mu})"
 
Data structure for PMT geometry, calibration and status. 
 
std::vector< double > fitinf
place to store additional fit info, for jgandalf, see JFitParameters.hh 
 
static const int JGANDALF_BETA0_RAD
KM3NeT Data Definitions v2.2.0-8-gd3297a8 https://git.km3net.de/common/km3net-dataformat. 
 
double getY() const 
Get y position. 
 
Direct access to PMT in detector data structure. 
 
double getT(const JVector3D &pos) const 
Get arrival time of Cherenkov light at given position. 
 
General purpose messaging. 
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
Auxiliary base class for list of file names. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
std::vector< filescanner_type >::iterator iterator
 
Auxiliary class to define a range between two values. 
 
ULong64_t trig
non-zero if the hit is a trigger hit. 
 
double lik
likelihood or lambda value (for aafit, lambda) 
 
Utility class to parse command line options. 
 
double t
hit time (from tdc+calibration or MC truth) 
 
double getX() const 
Get x position. 
 
Auxiliary class for organising Monte Carlo file scanners associated with event weighters. 
 
std::vector< Hit > hits
list of hits 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
Auxiliaries for defining the range of iterations of objects. 
 
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower. 
 
Auxiliary data structure for floating point format specification. 
 
double getDZ() const 
Get z direction. 
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event. 
 
std::vector< double > weight
 
#define DEBUG(A)
Message macros.