50 JLimit_t& numberOfEvents = inputFile.getLimit();
57 JParser<> zap(
"Example program to verify generator data.");
61 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
67 catch(
const exception &error) {
68 FATAL(error.what() << endl);
80 TH1D h0 (
"h0",
"Energy conservation",
83 TH1D h1 (
"h1",
"Momentum conservation",
86 TH1D job (
"job",
"Particle types",
87 10001, -5000.5, +5000.5);
88 TH2D hv (
"hv",
"Logarithmic visible energy as function of logarithmic initial state energy",
91 TH1D ha (
"ha",
"Angle between neutrino-direction and visible-energy-weighted direction",
94 TH1D hn (
"hn",
"Number of muons per event",
96 TH1D he (
"he",
"Muon energies",
98 TH2D hp (
"hp",
"Muon positions",
106 const Evt*
event = inputFile.
next();
109 job.Fill((
double) track->type);
114 const Trk& neutrino =
event->mc_trks[0];
119 const double E0 =
getE0(*event);
120 const double E1 =
getE1(*event);
125 if (!range((E0 - E1)/E0) || !range((P0 - P1).len()/P0.
len()) ||
debug >=
debug_t) {
128 NOTICE(
"event: " <<
RIGHT(8) << event->mc_id <<
RIGHT(67) <<
"energy [GeV] momentum (x, y, z) [GeV] distance [m]" << endl);
130 for (
size_t i = 0; i !=
event->mc_trks.size(); ++i) {
132 const Trk& track =
event->mc_trks[i];
138 NOTICE(
LEFT(32) << showpos << name <<
' ' <<
FIXED(7,3) << track.
E <<
" " <<
FIXED(7,3) << track.
E * track.
dir <<
" " <<
FIXED(7,3) << (track.
pos - neutrino.
pos).len() << endl);
140 NOTICE(
LEFT(32) <<
"balance:" <<
' ' <<
FIXED(7,3) << E0 - E1 <<
" " <<
FIXED(7,3) << P0 - P1 << endl);
144 h1.Fill((P0 - P1).len());
146 hv.Fill(log10(E0), log10(Evis));
157 he.Fill(log10(track->
E));
162 hn.Fill((Double_t)
n);
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_STRING(A)
Make string.
Utility class to parse command line options.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
JDirection3D getDirection(const Vec &dir)
Get direction.
Vec getP0(const Evt &evt)
Get momentum vector of the initial state of a neutrino interaction.
JCylinder3D getCylinder(const JHead &header)
Get cylinder corresponding to the positions of generated tracks (i.e.
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino.
bool is_neutrino(const Trk &track)
Test whether given track is a neutrino.
double getE1(const Evt &evt)
Get final state energy of a neutrino interaction.
double getE0(const Evt &evt)
Get initial state energy of a neutrino interaction.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Vec getP1(const Evt &evt)
Get momentum vector of the final state of a neutrino interaction.
double getDot(const JNeutrinoDirection &first, const JNeutrinoDirection &second)
Dot product.
T & getInstance(const T &object)
Get static instance from temporary object.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double getVisibleEnergy(const Trk &track, const JCylinder3D &can=getMaximumContainmentVolume())
Get the visible energy of a track.
Vec getVisibleEnergyVector(const Trk &track, const JCylinder3D &can=getMaximumContainmentVolume())
Get the visible energy vector of a track.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Auxiliary data structure for sequence of same character.
Auxiliary data structure for floating point format specification.
The cylinder used for photon tracking.
JRange_t E
Energy range [GeV].
Auxiliary class for defining the range of iterations of objects.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
int type
MC: particle type in PDG encoding.
double E
Energy [GeV] (either MC truth or reconstructed)
Vec pos
postion [m] of the track at time t
The Vec class is a straightforward 3-d vector, which also works in pyroot.
double len() const
Get length.