60   using namespace KM3NETDAQ;
 
   88     JParser<> zap(
"Example program to analyse track fit results from Evt formatted data.");
 
  110   catch(
const exception& error) {
 
  111     FATAL(error.what() << endl);
 
  114   if (useWeights && numberOfEvents != JLimit::max()) {
 
  115     FATAL(
"Cannot apply weighting to limited number of events.");
 
  123   if (detectorFile != 
"") {
 
  137   bool (*has_reconstruction)(
const Evt&);
 
  138   const Trk& (*get_best_fit)(
const Evt&);
 
  143   } 
else if (recotype == shower_t()) {
 
  147     FATAL(
"Invalid recotype: " << recotype);
 
  153   const Int_t    N_Nhits       =               400;
 
  154   const Double_t Nhits_min     =         0.0 - 0.5;
 
  155   const Double_t Nhits_max     =      1000.0 - 0.5;
 
  157   const Int_t    N_Noverlays   =                40;
 
  158   const Double_t Noverlays_min =         0.0 - 0.5;
 
  159   const Double_t Noverlays_max =      1000.0 - 0.5;
 
  161   const Int_t    N_radius      =               201;
 
  162   const Double_t radius_min    =      -700.0 - 0.5;
 
  163   const Double_t radius_max    =      +700.0 + 0.5;
 
  165   const Int_t    N_height      =                18;
 
  166   const Double_t height_min    =              20.0;
 
  167   const Double_t height_max    =             200.0;
 
  169   const Int_t    N_ToTfrac     =                20;
 
  170   const Double_t ToTfrac_min   =               0.0;
 
  171   const Double_t ToTfrac_max   =               1.0;
 
  173   const Int_t    N_dt          =              1500;
 
  174   const Double_t dt_min        =      -500.0 - 0.5;
 
  175   const Double_t dt_max        =      1000.0 - 0.5;
 
  177   const Int_t    N_zenith      =                21;
 
  178   const Double_t zenith_min    =              -1.0;
 
  179   const Double_t zenith_max    =              +1.0;
 
  181   const Int_t    N_energy      =                60;
 
  182   const Double_t energy_min    =              -2.0;
 
  183   const Double_t energy_max    =               4.0;
 
  185   const Int_t    N_quality     =               100;
 
  186   const Double_t quality_min   =            -200.0;
 
  187   const Double_t quality_max   =            +800.0;
 
  189   const Int_t    N_beta0       =                60;
 
  190   const Double_t beta0_min     =              -2.0;
 
  191   const Double_t beta0_max     =              +3.5;
 
  196   string ordinateLabel(useWeights ? 
"Rate [Hz]" : 
"Number of events");
 
  200   TH1D hs  (
"hs",   
MAKE_CSTRING(
"; #snapshot hits; "                                  << ordinateLabel),
 
  201             N_Nhits,     Nhits_min,     Nhits_max);
 
  202   TH1D hn  (
"hn",   
MAKE_CSTRING(
"; #triggered hits; "                                 << ordinateLabel),
 
  203             N_Nhits,     Nhits_min,     Nhits_max);
 
  204   TH1D ho  (
"ho",   
MAKE_CSTRING(
"; #overlays; "                                       << ordinateLabel),
 
  205             N_Noverlays, Noverlays_min, Noverlays_max);
 
  207   TH1D hz  (
"hz",   
MAKE_CSTRING(
"; cos(#theta); "                                     << ordinateLabel),
 
  208             N_zenith,    zenith_min,    zenith_max);
 
  209   TH1D he  (
"he",   
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); "                      << ordinateLabel),
 
  210             N_energy,    energy_min,    energy_max);
 
  211   TH1D ht  (
"ht",   
MAKE_CSTRING(
"; #Delta t [ns]; "                                   << ordinateLabel),
 
  212             N_dt,        dt_min,        dt_max);
 
  214   TH1D hZ  (
"hZ",   
MAKE_CSTRING(
"; longitudinal ToT-barycenter [m]; "                 << ordinateLabel),
 
  215             N_height,    height_min,    height_max);
 
  216   TH1D hT0 (
"hT0",  
MAKE_CSTRING(
"; ToT-fraction below earliest triggered hit [ns]; "  << ordinateLabel),
 
  217             N_ToTfrac,   ToTfrac_min,   ToTfrac_max);
 
  218   TH1D hT1 (
"hT1",  
MAKE_CSTRING(
"; ToT-fraction above earliest triggered hit [ns]; "  << ordinateLabel),
 
  219             N_ToTfrac,   ToTfrac_min,   ToTfrac_max);  
 
  221   TH1D hq  (
"hq",   
MAKE_CSTRING(
"; quality; "                                         << ordinateLabel),
 
  222             N_quality,   quality_min,   quality_max);
 
  223   TH1D hb0 (
"hb0",  
MAKE_CSTRING(
"; #beta_{0}; "                                       << ordinateLabel),
 
  224             N_beta0,     beta0_min,     beta0_max);
 
  226   TH2D hzo (
"hzo",  
MAKE_CSTRING(
"; cos(#theta); #overlays; "                          << ordinateLabel),
 
  227             N_zenith,    zenith_min,    zenith_max,
 
  228             N_Noverlays, Noverlays_min, Noverlays_max);
 
  229   TH2D hze (
"hze",  
MAKE_CSTRING(
"; cos(#theta); log_{10}(E_{reco} / 1 GeV); "         << ordinateLabel),
 
  230             N_zenith,    zenith_min,    zenith_max,
 
  231             N_energy,    energy_min,    energy_max);
 
  232   TH2D heo (
"heo",  
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); #overlays; "           << ordinateLabel),
 
  233             N_energy,    energy_min,    energy_max,
 
  234             N_Noverlays, Noverlays_min, Noverlays_max);
 
  235   TH2D hzt (
"hzt",  
MAKE_CSTRING(
"; cos(#theta); #Delta t [ns]; "                      << ordinateLabel),
 
  236             N_zenith,    zenith_min,    zenith_max,
 
  237             N_dt,        dt_min,        dt_max);
 
  238   TH2D het (
"het",  
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); #Delta t [ns]; "       << ordinateLabel),
 
  239             N_energy,    energy_min,    energy_max,
 
  240             N_dt,        dt_min,        dt_max);
 
  241   TH2D hot (
"hot",  
MAKE_CSTRING(
"; #overlays; #Delta t [ns]; "                        << ordinateLabel),
 
  242             N_Noverlays, Noverlays_min, Noverlays_max,
 
  243             N_dt,        dt_min,        dt_max);
 
  245   TH2D hzq (
"hzq",  
MAKE_CSTRING(
"; cos(#theta); quality; "                            << ordinateLabel),
 
  246             N_zenith,    zenith_min,    zenith_max,
 
  247             N_quality,   quality_min,   quality_max);
 
  248   TH2D heq (
"heq",  
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); quality; "             << ordinateLabel),
 
  249             N_energy,    energy_min,    energy_max,
 
  250             N_quality,   quality_min,   quality_max);
 
  251   TH2D hoq (
"hoq",  
MAKE_CSTRING(
"; #overlays; quality; "                              << ordinateLabel),
 
  252             N_Noverlays, Noverlays_min, Noverlays_max,
 
  253             N_quality,   quality_min,   quality_max);
 
  255   TH2D hob0(
"hob0", 
MAKE_CSTRING(
"; #overlays; log_{10}(#beta_{0}); "                  << ordinateLabel),
 
  256             N_Noverlays, Noverlays_min, Noverlays_max,
 
  257             N_beta0,     beta0_min,     beta0_max);
 
  258   TH2D heb0(
"heb0", 
MAKE_CSTRING(
"; log_{10}(E_{reco} / 1 GeV); log_{10}(#beta_{0}); " << ordinateLabel),
 
  259             N_energy,    energy_min,    energy_max,
 
  260             N_beta0,     beta0_min,     beta0_max);     
 
  261   TH2D hzb0(
"hzb0", 
MAKE_CSTRING(
"; cos(#theta); log_{10}(#beta_{0}); "                << ordinateLabel),
 
  262             N_zenith,    zenith_min,    zenith_max,
 
  263             N_beta0,     beta0_min,     beta0_max);
 
  265   TH2D hxy (
"hxy",  
MAKE_CSTRING(
"; x [m]; y [m]; "                                    << ordinateLabel),
 
  266             N_radius,    radius_min,    radius_max,
 
  267             N_radius,    radius_min,    radius_max);
 
  272   if (scanners.setFlux(fluxMaps) == 0) {
 
  273     WARNING(
"No file found containing all given primaries; Flux function not set." << endl);
 
  282     scanner->setLimit(numberOfEvents);
 
  284     while (scanner->hasNext()) {
 
  286       const Evt* evt = scanner->next();
 
  288       if (!has_reconstruction(*evt)) { 
continue; }
 
  290       const Trk&      best_trk = (*get_best_fit)(*evt);
 
  294       const size_t    NsnapshotHits  = evt->hits.size();
 
  295       const size_t    NtriggeredHits = count_if(evt->hits.begin(), evt->hits.end(),
 
  298       if (!triggeredHitsRange(NtriggeredHits) ||
 
  299           !coszenithRange    (tb.
getDZ())     ||
 
  300           !energyRange       (tb.
getE())) { 
 
  306       const double weight = (useWeights ? scanner->getWeight(*evt) : 1.0);
 
  309              RIGHT     (15)    << scanner->getCounter()               <<
 
  314       hs .Fill(NsnapshotHits,                          weight);
 
  315       hn .Fill(NtriggeredHits,                         weight);
 
  316       ho .Fill(evt->overlays,                          weight);
 
  318       hz .Fill(tb.
getDZ(),                             weight);
 
  319       he .Fill(logE,                                   weight);
 
  320       hq .Fill(best_trk.
lik,                           weight);
 
  322       hzo.Fill(tb.
getDZ(),            evt->overlays,   weight);
 
  323       hze.Fill(tb.
getDZ(),            logE,            weight);
 
  324       heo.Fill(logE,                  evt->overlays,   weight);
 
  326       hoq.Fill(evt->overlays,         best_trk.
lik,    weight);
 
  327       hzq.Fill(tb.
getDZ(),            best_trk.
lik,    weight);
 
  328       heq.Fill(logE,                  best_trk.
lik,    weight);
 
  330       hxy.Fill(tb.
getX(),             tb.
getY(),       weight);
 
  336         hb0 .Fill(logb0,                               weight);
 
  337         hob0.Fill(evt->overlays,      logb0,           weight);   
 
  338         heb0.Fill(logE,               logb0,           weight);
 
  339         hzb0.Fill(tb.
getDZ(),         logb0,           weight);
 
  342       double ToTbelow     = 0.0;
 
  343       double ToTabove     = 0.0;
 
  344       double ToTtotal     = 0.0;
 
  345       double ToTweightedZ = 0.0;
 
  352         if (router.hasPMT(hit->pmt_id)) {
 
  354           const JPMT&     pmt  = router.getPMT(hit->pmt_id);
 
  356           const double    t0   = tb.
getT(pmt);
 
  357           const double    t1   = 
getTime(*hit);
 
  359           ht .Fill(t1 - t0,                            weight);
 
  360           hot.Fill(evt->overlays,     t1 - t0,         weight);
 
  361           hzt.Fill(tb.
getDZ(),        t1 - t0,         weight);
 
  362           het.Fill(
log10(best_trk.
E), t1 - t0,         weight);
 
  366             ToTtotal     += hit->tot;
 
  367             ToTweightedZ += hit->tot * hit->pos.z;
 
  369             if        (hit->pos.z < firstHit->pos.z)  {
 
  370               ToTbelow   += hit->tot;
 
  371             } 
else if (hit->pos.z >= firstHit->pos.z) {
 
  372               ToTabove   += hit->tot;
 
  378       hT0.Fill(ToTbelow / ToTtotal,                     weight);
 
  379       hT1.Fill(ToTabove / ToTtotal,                     weight);
 
  380       hZ .Fill(ToTweightedZ / ToTtotal,                 weight);
 
Router for direct addressing of PMT data in detector data structure. 
 
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. 
 
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)
macros to convert (template) parameter to JPropertiesElement object 
 
Utility class to parse parameter values. 
 
#define MAKE_CSTRING(A)
Make C-string. 
 
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) 
 
Auxiliary class for defining the range of iterations of objects. 
 
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, see km3net-dataformat/definitions/fitparameters.csv 
 
static const int JGANDALF_BETA0_RAD
KM3NeT Data Definitions v3.0.0-5-gcddadc1 https://git.km3net.de/common/km3net-dataformat. 
 
Auxiliary class for parsing multiparticle fluxes. 
 
double getY() const 
Get y position. 
 
double getT(const JVector3D &pos) const 
Get arrival time of Cherenkov light at given position. 
 
Auxiliary base class for list of file names. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
const char *const track_t
 
std::vector< filescanner_type >::iterator iterator
 
ULong64_t trig
non-zero if the hit is a trigger hit. 
 
double lik
likelihood or lambda value (for aafit, lambda) 
 
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. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
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. 
 
const array_type< JKey_t > & get_keys(const std::map< JKey_t, JValue_t, JComparator_t, JAllocator_t > &data)
Method to create array of keys of map. 
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event. 
 
#define DEBUG(A)
Message macros.