345 JParser<> zap(
"Example program to verify generator data.");
349 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
355 catch(
const exception &error) {
356 FATAL(error.what() << endl);
363 TH1D h0 (
"h0",
"Fractional energy conservation",
365 TH1D
h1 (
"h1",
"Fractional momentum conservation",
367 TH1D job(
"job",
"Particle types",
368 10001, -5000.5, +5000.5);
370 TH1D hv(
"hv",
"Visible energy as fraction of initial state energy",
372 TH1D ha(
"ha",
"Angle between neutrino-direction and visible-energy-weighted direction",
374 TH1D ht(
"ht",
"Square-root of summed squared transverse visible energy as fraction of initial state energy",
377 TH1D hn(
"hn",
"Number of muons per event",
378 2001, -0.5, +2000.5);
379 TH1D he(
"he",
"Muon energies",
381 TH2D hp(
"hp",
"Muon positions",
386 while (inputFile.hasNext()) {
388 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
390 const Evt*
event = inputFile.next();
393 job.Fill((
double) track->type);
398 const Trk& neutrino =
event->mc_trks[0];
400 const Vec& P0 = getP0(*event);
401 const Vec& P1 = getP1(*event);
403 const double E0 = getE0(*event);
404 const double E1 = getE1(*event);
406 const double Evis = getVisibleEnergy (*event);
407 const Vec& EvisDir = getVisibleEnergyDirection (*event);
408 const double EvisT = getTransverseVisibleEnergy(*event, EvisDir);
412 cout << endl <<
"--------------------------------------------------------" << endl;
413 cout <<
"event: " << setw(8) <<
event->mc_id <<
" energy [GeV] momentum (x, y, z) [GeV] distance [m]" << endl;
415 for (
size_t i = 0; i !=
event->mc_trks.size(); ++i) {
417 const Trk& track =
event->mc_trks[i];
419 const TDatabasePDG pdg;
420 const TParticlePDG* particle = pdg.GetParticle(track.
type);
422 cout << setw(32) << left << showpos << particle->GetName() <<
' ' <<
FIXED(7,3) << track.
E <<
" " <<
FIXED(7,3) << track.
E * track.
dir <<
" " <<
FIXED(7,3) << (track.
pos - neutrino.
pos).len() << endl;
424 cout << setw(32) << left <<
"balance:" <<
' ' <<
FIXED(7,3) << E0 - E1 <<
" " <<
FIXED(7,3) << P0 - P1 << endl;
431 h0.Fill((E0 - E1)/E0);
432 h1.Fill((P0 - P1).len()/P0.
len());
442 he.Fill(log10(track->
E));
447 hn.Fill((Double_t) n);
Utility class to parse command line options.
double getDot(const JNeutrinoDirection &first, const JNeutrinoDirection &second)
Dot product.
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
then for HISTOGRAM in h0 h1
Auxiliary data structure for floating point format specification.
double E
Energy [GeV] (either MC truth or reconstructed)
double len() const
Get length.
bool is_neutrino(const Trk &track)
Test whether given track is a neutrino.
Auxiliary class for defining the range of iterations of objects.
The Vec class is a straightforward 3-d vector, which also works in pyroot.
JDirection3D getDirection(const Vec &dir)
Get direction.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int type
MC: particle type in PDG encoding.
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
Vec pos
postion of the track at time t [m]
General purpose class for object reading from a list of file names.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
const JLimit & getLimit() const
Get limit.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.