DUNE StandardRecord
Base object for DUNE analysis files (CAFs)
SRTrueInteraction.h
Go to the documentation of this file.
1 
6 #ifndef DUNEANAOBJ_SRTRUEINTERACTION_H
7 #define DUNEANAOBJ_SRTRUEINTERACTION_H
8 
9 #include <limits>
10 
11 #include "duneanaobj/StandardRecord/SREnums.h"
14 
15 // // This is pretty ugly. The proper fix is to get a new version of castxml that
16 // // is built with at least clang v9.
17 // // See https://github.com/CastXML/CastXML/issues/178
18 // #ifndef __castxml__
19 // #include <string>
20 // #else
21 // namespace std{class string{};}
22 // #endif
23 
24 // a less ugly hack, works with castxml v0_4_2 and e20, c7 and e26 but not c14
25 // not needed for castxml v0_5_1. Now e20, c7, c14 work but not e26
26 
27 //#ifdef __GNUC__
28 //#undef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
29 //#endif
30 
31 #include <string>
32 
33 #include <vector>
34 
35 namespace caf
36 {
37 
40  {
41  private:
42  // just to keep the typing under control below
43  static constexpr float NaN = std::numeric_limits<float>::signaling_NaN();
44 
45  public:
46  long int id = -1;
47 
51  long int genieIdx = -1;
52 
53  int pdg = 0;
54  int pdgorig = 0;
55 
56  bool iscc = false;
57  ScatteringMode mode = ScatteringMode::kUnknownMode;
58  int targetPDG = 0;
59 
62  int hitnuc = 0;
63  float removalE = NaN;
64 
65  float E = NaN;
68  bool isvtxcont = false;
69 
70  float time = NaN;
71  float bjorkenX = NaN;
72  float inelasticity = NaN;
73  float Q2 = NaN;
74  float q0 = NaN;
75  float modq = NaN;
76  float W = NaN;
77  float t = NaN;
78 
79  // GENIE truth stuff
80  bool ischarm = false;
81  bool isseaquark = false;
82  int resnum = 0;
83  float xsec = NaN;
84 
85  float genweight = NaN;
86 
87  float baseline = NaN;
90  int parent_dcy_mode = -1;
91  int parent_pdg = 0;
92  float parent_dcy_E = NaN;
93  float imp_weight = NaN;
94 
95  Generator generator = Generator::kUnknownGenerator;
96  std::vector<unsigned int> genVersion;
97 
98  // fixme: For unknown reasons, deserializing SRTrueInteractions with this branch sometimes (but not always) causes `free: invalid pointer` segfaults.
99  // For the moment, we just disable it, but we need to track down what's going wrong at some point.
100 // std::string genConfigString; ///< String associated with generator configuration. (For GENIE 3+, this is the "Comprehensive Model Configuration".)
101 
102  // shortcuts to avoid iterating through the particle stack for these simple quantities
103  int nproton = 0;
104  int nneutron = 0;
105  int npip = 0;
106  int npim = 0;
107  int npi0 = 0;
108 
109  int nprim = 0;
110  std::vector<SRTrueParticle> prim;
111  int nprefsi = 0;
112  std::vector<SRTrueParticle> prefsi;
113  int nsec = 0;
114  std::vector<SRTrueParticle> sec;
115 
116  float xsec_cvwgt = NaN;
117 
118  };
119 
120 } // caf
121 
122 #endif //DUNEANAOBJ_SRTRUEINTERACTION_H
True particle coming out of a probe particle's interaction w/ detector.
3-vector class with more efficient storage than TVector3. Ported from NOvA StandardRecord.
True interaction of probe particle with detector. Usually neutrinos, but occasionally cosmics etc.
Definition: SRTrueInteraction.h:40
float genweight
Weight, if any, assigned by the generator.
Definition: SRTrueInteraction.h:85
SRVector3D parent_dcy_mom
Neutrino parent momentum at decay [GeV; beam coordinates].
Definition: SRTrueInteraction.h:89
float imp_weight
Importance weight from flux file.
Definition: SRTrueInteraction.h:93
float t
Kinematic t.
Definition: SRTrueInteraction.h:77
int pdg
PDG code of probe particle.
Definition: SRTrueInteraction.h:53
long int genieIdx
Definition: SRTrueInteraction.h:51
float bjorkenX
Bjorken x = (k-k')^2/(2*p.q) = Q^2/(2*Mnuc*q0) [Dimensionless].
Definition: SRTrueInteraction.h:71
Generator generator
The generator that created this neutrino interaction.
Definition: SRTrueInteraction.h:95
ScatteringMode mode
Interaction mode.
Definition: SRTrueInteraction.h:57
bool isvtxcont
Is true vertex is within detector? If not, might be a rock particle or cosmic.
Definition: SRTrueInteraction.h:68
int targetPDG
PDG code of struck target.
Definition: SRTrueInteraction.h:58
float inelasticity
Inelasticity y = (p.q) / (k.p) = q0 / Enu.
Definition: SRTrueInteraction.h:72
int hitnuc
Definition: SRTrueInteraction.h:62
int npi0
number of (post-FSI) primary pi0
Definition: SRTrueInteraction.h:107
int parent_dcy_mode
Parent hadron/muon decay mode.
Definition: SRTrueInteraction.h:90
SRVector3D momentum
Neutrino three-momentum.
Definition: SRTrueInteraction.h:67
float q0
Energy transferred from lepton to nuclear system (in lab frame)
Definition: SRTrueInteraction.h:74
float parent_dcy_E
Neutrino parent energy at decay [GeV].
Definition: SRTrueInteraction.h:92
int resnum
Resonance number, straight from GENIE.
Definition: SRTrueInteraction.h:82
SRVector3D prod_vtx
Neutrino production vertex [cm; beam coordinates].
Definition: SRTrueInteraction.h:88
int npim
number of (post-FSI) primary pi-
Definition: SRTrueInteraction.h:106
float W
Hadronic invariant mass W [GeV^2]. "Experimental W" in GENIE parlance, W^2 = M^2 + 2*Mnuc*q0 +|q|^2.
Definition: SRTrueInteraction.h:76
bool isseaquark
Did neutrino scatter from a sea quark?
Definition: SRTrueInteraction.h:81
std::vector< SRTrueParticle > prim
Primary p. The lepton always comes first in this vector.
Definition: SRTrueInteraction.h:110
float removalE
energy expended to remove nucleon from the nucleus, from GENIE
Definition: SRTrueInteraction.h:63
float E
True energy [GeV].
Definition: SRTrueInteraction.h:65
int parent_pdg
PDG Code of parent particle ID.
Definition: SRTrueInteraction.h:91
int npip
number of (post-FSI) primary pi+
Definition: SRTrueInteraction.h:105
std::vector< SRTrueParticle > prefsi
Primary particles prior to FSI.
Definition: SRTrueInteraction.h:112
int nprefsi
How many primary particles there were prior to FSI (helps SRProxy)
Definition: SRTrueInteraction.h:111
float time
True interaction time.
Definition: SRTrueInteraction.h:70
bool ischarm
Did neutrino scatter from a charmed quark?
Definition: SRTrueInteraction.h:80
int nsec
How many secondaries are in this vector? (helps SRProxy)
Definition: SRTrueInteraction.h:113
std::vector< SRTrueParticle > sec
Secondary particles. Note that not all secondaries are kept, only those used in the reco branches.
Definition: SRTrueInteraction.h:114
int pdgorig
Initial (unoscillated) PDG code of probe neutrino (may be different than pdg if this file is a 'swap'...
Definition: SRTrueInteraction.h:54
std::vector< unsigned int > genVersion
Version of the generator that created this neutrino interaction.
Definition: SRTrueInteraction.h:96
float xsec_cvwgt
Central value weight for cross section model.
Definition: SRTrueInteraction.h:116
float xsec
xsec for thrown interaction, in 1/GeV^2, straight from GENIE
Definition: SRTrueInteraction.h:83
SRVector3D vtx
Interaction vertex position in detector coord. [cm].
Definition: SRTrueInteraction.h:66
float modq
Magnitude of three-momentum transferred from lepton to nuclear system, |q| (in lab frame)
Definition: SRTrueInteraction.h:75
int nneutron
number of (post-FSI) primary neutrons
Definition: SRTrueInteraction.h:104
int nprim
Number of primary particles (helps SRProxy)
Definition: SRTrueInteraction.h:109
bool iscc
CC (true) or NC/interference (false)
Definition: SRTrueInteraction.h:56
float Q2
Invariant four-momentum transfer from lepton to nuclear system, Q^2 = -(nu - lep)^2.
Definition: SRTrueInteraction.h:73
int nproton
number of (post-FSI) primary protons
Definition: SRTrueInteraction.h:103
float baseline
Distance from decay to interaction [m].
Definition: SRTrueInteraction.h:87
A 3-vector with more efficient storage than TVector3.
Definition: SRVector3D.h:26
Common Analysis Files.
Definition: SRBeamBranch.h:13
Generator
Known generators of neutrino interactions (extend as other generators are used)
Definition: SREnums.h:47
ScatteringMode
Neutrino interaction categories. Periodically synchronized to GENIE (last update: GENIE 3....
Definition: SREnums.h:67