NumuEAlg.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 /// \file NumuEAlg.h
3 //
4 /// \version $Id: NumuEAlg.h,v 1.10 2012-11-15 20:46:24 lein Exp $
5 /// \author lein@physics.umn.edu
6 ////////////////////////////////////////////////////////////////////////
7 #ifndef NumuEAlg_h
8 #define NumuEAlg_h
9 
10 #include <string>
11 
12 // Framework includes
15 
16 // NOvA includes
17 #include "fhiclcpp/ParameterSet.h"
18 #include "RecoBase/Track.h"
19 #include "RecoBase/Energy.h"
20 #include "NumuEnergy/NumuE.h"
22 #include "CosRej/CosRejObj.h"
23 #include "TMVA/Reader.h"
24 
25 namespace numue {
26 
27  /// An algorithm to determine the energy of a slice
28  class NumuEAlg {
29  public:
30  explicit NumuEAlg(fhicl::ParameterSet const &pset);
31  virtual ~NumuEAlg();
32 
33  /// \brief Returns various energy estimations for FD. See comments at top of function in .cxx for full explanation
34  NumuE FDEnergy(std::vector< art::Ptr<rb::Track> > const sliceTracks,
36  art::Ptr< rb::Cluster> sliceCluster,
37  art::Event const& e,
38  murem::TrackCleanUpAlg* trkCleanUpAlg,
39  bool isRHC);
40 
41  /// \brief Returns QE energy estimation using formula. See comments at top of function in .cxx for full explanation
42  rb::Energy QEFormulaEnergy(std::vector< art::Ptr<rb::Track> > const sliceTracks,
44  double &error,
45  art::Event const& e,
46  bool isRHC);
47 
48  /// \brief Returns various energy estimations for ND. See comments at top of function in .cxx for full explanation
49  NumuE NDEnergy(std::vector< art::Ptr<rb::Track> > const sliceTracks,
51  art::Ptr< rb::Cluster> sliceCluster,
52  art::Event const& e,
53  murem::TrackCleanUpAlg* trkCleanUpAlg,
54  bool isRHC);
55 
56  /// \brief Returns various energy estimations for the current detector. See comments at top of function in .cxx for full explanation
57  NumuE Energy(std::vector< art::Ptr<rb::Track> > const sliceTracks,
59  art::Ptr< rb::Cluster> sliceCluster,
60  art::Event const& e,
61  murem::TrackCleanUpAlg* trkCleanUpAlg,
62  bool isRHC);
63 
64  /// \brief Returns various useful truth energy values, good for fitting.
65  NumuE MCTruthEnergyVariables(const std::vector<art::Ptr<rb::Track>>& sliceTracks,
66  const art::Ptr<rb::Cluster>& slice,
67  const std::vector<rb::CellHit>& allHits,
68  const art::Event& e);
69 
70 
71  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This is done with a spline fit to muon track length -> energy.
72  /// FIXME: this is deprecated function(uses SA energy estimator) left for backward compatibility. Used by ReMId and RemoveMuon modules.
73  double MuonEFromTrackLength(double trkLen) const;
74 
75  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This is done with a spline fit to muon track length -> energy.
76  double FDMuonEFromTrackLength(double trkLen, int run, bool ismc, bool isRHC) const;
77 
78  /// \brief Function that, given muon energy in GeV, returns an effective track length in active material in cm. This is done by reversing a spline fit of muon track length -> energy.
79  /// FIXME: this is deprecated function(uses SA energy estimator) left for backward compatibility. Used by ReMId module.
80  double ActiveTrackLengthFromMuonE(double muonE) const;
81 
82  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This distinguishes between the three types of muon tracks and makes the approriate function calls.
83  double NDMuonEFromTrackLength(double actTrkLen,
84  double catTrkLen,
85  double trkCalAct,
86  double trkCalTran,
87  double trkCalCat,
88  bool isRHC,
89  MuonType* muonType = NULL) const;
90 
92  bool isRHC,
93  MuonType* muonType = NULL) const;
94 
95  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons that are entirely contained in the active region and the transition plane.
96  double NDMuonEInActiveOnly(double actTrkLen, bool isRHC) const;
97 
98  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons that are entirely contained in the muon catcher region.
99  double NDMuonEInCatcherOnly(double catTrkLen) const;
100 
101  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons that have energy in the active and catcher region; this function ONLY returns energy for catcher part of the track.
102  /// FIXME: this is deprecated function(uses SA energy estimator) left for backward compatibility. Used by ReMId module.
103  double NDMuonCatcherEForActiveAndCatcher(double catTrkLen) const;
104 
105  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons that have energy in the active and catcher region; this function ONLY returns energy for catcher part of the track.
106  double NDMuonCatcherEForActiveAndCatcher(double catTrkLen, bool isRHC) const;
107 
108  /// \brief Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons that have activity in the both the active region and the muon catcher region.
109  double NDMuonEInActiveAndCatcher(double actTrkLen, double catTrkLen, bool isRHC) const;
110 
111  /// \brief Function that returns energy for each track given the assumption that it is a muon. It uses the functions above, like MuonEFromTrackLength and NDMuonEFromTrackLength.
112  std::vector<rb::Energy> MuonEnergies(
113  std::vector< art::Ptr<rb::Track> > const sliceTracks,
114  int run,
115  bool ismc,
116  bool isRHC
117  ) const;
118 
119  /// \brief Function that returns the plane number of the transition plane - the last active plane before the steel of the muon catcher.
120  int NDTransitionPlane() const;
121 
122  /// \brief Function that returns the z position of the middle of the transition plane - the last active plane before the steel of the muon catcher.
123  double NDTransitionZPos() const;
124 
125  /// \brief Get values from cosrej object and use them to get TMVA trained value of uncontained energy for FD
126  double GetUCE(art::FindManyP<cosrej::CosRejObj> CRO, size_t slicenum, float totalgev, int nhitslice);
127 
128  /// \brief Get values from cosrej object and use them to get TMVA trained value of uncontained muon energy for FD single track events
129  double GetUCMuonESingle(std::vector< art::Ptr<rb::Track> > const sliceTracks,
131  art::Event const& e,
133  size_t slicenum);
134 
135  /// \brief Get values from cosrej object and use them to get TMVA trained value of uncontained muon energy for FD non-single track events
136  double GetUCMuonENonSingle(std::vector< art::Ptr<rb::Track> > const sliceTracks,
138  art::Event const& e,
140  size_t slicenum);
141 
142  /// \brief Fernanda's scattering energy. Scattering variables themselves stored in CosRej
143  double GetFSE(art::FindManyP<cosrej::CosRejObj> CRO, size_t slicenum);
144 
145  private:
146 
147  std::string fPIDModuleLabel; ///< Label for module writing ReMId objects to file
148  bool fPIDMethod; ///< If true, use highest PID to identify muon track instead of longest track (Only FD currently)
149  std::string fTMVAName; ///< path to TMVA weight file
150 
151  std::string fTMVANameSingle; ///< path to TMVA muon weight file
152  std::string fTMVANameNonSingle; ///< path to TMVA muon weight file
153  //std::string fTMVApathUCMuonE; ///< path to TMVA muon weight file (local)
154 
155  TMVA::Reader* fReaderE; ///< Reader for TMVA to get uncontained energy
156  TMVA::Reader* fReaderUCMuonSingle; ///< Reader for TMVA to get muon uncontained energy
157  TMVA::Reader* fReaderUCMuonNonSingle; ///< Reader for TMVA to get muon uncontained energy
158  float Evars[8]; ///< Inputs for uncontained energy BDT (TMVA)
159 
160  float TMVAvarsSingle[38]={0.}; ///< Inputs for muon uncontained energy BDT (TMVA) for single track events
161  float TMVAvarsNonSingle[38]={0.}; ///< Inputs for muon uncontained energy BDT (TMVA) for non-single track events
162 
163  double FDMstitch1 = 342; ///< cm; First stitch location on 4 spline fit for muon trk len -> energy in FD
164  double FDMstitch2 = 520; ///< cm; Second stitch location on 4 spline fit for muon trk len -> energy in FD
165  double FDMstitch3 = 1090; ///< cm; Third stitch location on 4 spline fit for muon trk len -> energy in FD
166  double FDMoffset = 0.1491; ///< GeV; Offset for 4 spline fit for muon trk len -> energy in FD
167  double FDMslope1 = 0.001951; ///< GeV/cm; First slope for 4 spline fit for muon trk len -> energy in FD
168  double FDMslope2 = 0.002022; ///< GeV/cm; Second slope for 4 spline fit for muon trk len -> energy in FD
169  double FDMslope3 = 0.002067; ///< GeV/cm; Third slope for 4 spline fit for muon trk len -> energy in FD
170  double FDMslope4 = 0.002196; ///< GeV/cm; Fourth slope for 4 spline fit for muon trk len -> energy in FD
171 
172  double NDMCoffset = 0.139; ///< GeV; Offset for linear fit for muon trk len -> energy in ND muon catcher
173  double NDMCslope = 0.00537; ///< GeV/cm; First slope for linear fit for muon trk len -> energy in ND muon catcher
174 
175  bool fFD; ///< Is detector FD?
176  bool fND; ///< Is detector ND?
177  int fRun; ///< What run is it?
178  double fMaxTrkLen; ///< Maximum track length allowed in detector (diagonal length)
179  TVector3 fNumiDir; ///< Direction of NuMI Beam
180  int fTranPlane; ///< Last plane of scintillator before steel begins in ND
181  double fTranZPos; ///< Z position of middle of transition plane
182 
183 
184  /// \brief Function that makes cluster from all hits in slice that do not belong to track
186  art::PtrVector< rb::CellHit > const& trackHits) const;
187 
188  /// \brief Function that finds the longest track that is still smaller than maxTrkLen
189  int LongestTrack(std::vector< art::Ptr<rb::Track> > const& sliceTracks,
190  double& longestTrackLength) const;
191 
192  /// \brief Function for ND that divides track length into length in active material and length in muon catcher. Also records x,y position of track if crosses transition plane. This can be used for containment purposes.
193  void NDTrackLength(art::Ptr<rb::Track> const& track,
194  double* actLength = NULL,
195  double* catLength = NULL,
196  double* transitionX = NULL,
197  double* transitionY = NULL) const;
198  /// \brief Function for ND that divides track visible energy into three regions: active, transiton, and catcher
200  double* trkCalAct = NULL,
201  double* trkCalTran = NULL,
202  double* trkCalCat = NULL) const;
203  /// \brief Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron energy in GeV. This is done with a spline fit to the hadron energy vs. (True Neutrino Energy - Reco Muon Energy). The fit was done for a QE reco population.
204  double HadEQE(double calE) const;
205  /// \brief Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron energy in GeV. This is done with a spline fit to the hadron energy vs. (True Neutrino Energy - Reco Muon Energy). The fit was done for a NonQE reco population.
206  double HadENonQE(double calE) const;
207  /// \brief Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron energy in GeV. This is done with a spline fit to the hadron energy vs. (True Neutrino Energy - Reco Muon Energy). The fit was done for a reco population that had both QE and nonQE.
208  double HadECC(double calE, int run, bool ismc, bool isRHC) const;
209  /// \brief Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron energy in GeV. This is done with a spline fit to the hadron energy vs. (True Neutrino Energy - Reco Muon Energy). The fit was done for a QE reco population. The fit only used slices with ALMOST NO hadronic activity in the transition plane or muon catcher!!
210  double NDHadEQE(double calE) const;
211  /// \brief Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron energy in GeV. This is done with a spline fit to the hadron energy vs. (True Neutrino Energy - Reco Muon Energy). The fit was done for a NonQE reco population. The fit only used slices with ALMOST NO hadronic activity in the transition plane or muon catcher!!
212  double NDHadENonQE(double calE) const;
213  /// \brief Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron energy in GeV. This is done with a spline fit to the hadron energy vs. (True Neutrino Energy - Reco Muon Energy). The fit was done for a reco population that had both QE and nonQE. The fit does not try to account for large amounts of hadronic activity in the muon catcher.
214  double NDHadECC(double calE, bool isRHC) const;
215 
216  bool checkIsMC(art::Event const& evt) const;
217 
218  };//End of class NumuEAlg
219 
220 }//End of namespace
221 
222 #endif /* NumuEAlg_h */
223 ////////////////////////////////////////////////////////////////////////
double fTranZPos
Z position of middle of transition plane.
Definition: NumuEAlg.h:181
void NDTrackEnergySplitting(art::Ptr< rb::Track > const &track, double *trkCalAct=NULL, double *trkCalTran=NULL, double *trkCalCat=NULL) const
Function for ND that divides track visible energy into three regions: active, transiton, and catcher.
Definition: NumuEAlg.cxx:880
double GetUCMuonENonSingle(std::vector< art::Ptr< rb::Track > > const sliceTracks, art::PtrVector< rb::CellHit > sliceHits, art::Event const &e, art::FindManyP< cosrej::CosRejObj > CRO, size_t slicenum)
Get values from cosrej object and use them to get TMVA trained value of uncontained muon energy for F...
Definition: NumuEAlg.cxx:1404
double NDMuonCatcherEForActiveAndCatcher(double catTrkLen) const
Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons t...
Definition: NumuEAlg.cxx:1098
Energy estimators for CC events.
Definition: FillEnergies.h:7
TMVA::Reader * fReaderUCMuonSingle
Reader for TMVA to get muon uncontained energy.
Definition: NumuEAlg.h:156
double FDMslope3
GeV/cm; Third slope for 4 spline fit for muon trk len -> energy in FD.
Definition: NumuEAlg.h:169
double FDMstitch3
cm; Third stitch location on 4 spline fit for muon trk len -> energy in FD
Definition: NumuEAlg.h:165
double GetFSE(art::FindManyP< cosrej::CosRejObj > CRO, size_t slicenum)
Fernanda&#39;s scattering energy. Scattering variables themselves stored in CosRej.
Definition: NumuEAlg.cxx:1446
float Evars[8]
Inputs for uncontained energy BDT (TMVA)
Definition: NumuEAlg.h:158
double FDMslope2
GeV/cm; Second slope for 4 spline fit for muon trk len -> energy in FD.
Definition: NumuEAlg.h:168
double HadENonQE(double calE) const
Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron en...
Definition: NumuEAlg.cxx:1241
double NDHadECC(double calE, bool isRHC) const
Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron en...
Definition: NumuEAlg.cxx:1343
double NDHadEQE(double calE) const
Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron en...
Definition: NumuEAlg.cxx:1286
std::string fTMVANameNonSingle
path to TMVA muon weight file
Definition: NumuEAlg.h:152
NumuE Energy(std::vector< art::Ptr< rb::Track > > const sliceTracks, art::PtrVector< rb::CellHit > sliceHits, art::Ptr< rb::Cluster > sliceCluster, art::Event const &e, murem::TrackCleanUpAlg *trkCleanUpAlg, bool isRHC)
Returns various energy estimations for the current detector. See comments at top of function in ...
Definition: NumuEAlg.cxx:639
double FDMuonEFromTrackLength(double trkLen, int run, bool ismc, bool isRHC) const
Function that, given muon track length in cm, returns muon energy in GeV. This is done with a spline ...
Definition: NumuEAlg.cxx:940
NumuE FDEnergy(std::vector< art::Ptr< rb::Track > > const sliceTracks, art::PtrVector< rb::CellHit > sliceHits, art::Ptr< rb::Cluster > sliceCluster, art::Event const &e, murem::TrackCleanUpAlg *trkCleanUpAlg, bool isRHC)
Returns various energy estimations for FD. See comments at top of function in .cxx for full explanati...
Definition: NumuEAlg.cxx:198
Definition: event.h:19
A collection of associated CellHits.
Definition: Cluster.h:47
int LongestTrack(std::vector< art::Ptr< rb::Track > > const &sliceTracks, double &longestTrackLength) const
Function that finds the longest track that is still smaller than maxTrkLen.
Definition: NumuEAlg.cxx:786
NumuEAlg(fhicl::ParameterSet const &pset)
Definition: NumuEAlg.cxx:36
int NDTransitionPlane() const
Function that returns the plane number of the transition plane - the last active plane before the ste...
Definition: NumuEAlg.cxx:1183
double HadECC(double calE, int run, bool ismc, bool isRHC) const
Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron en...
Definition: NumuEAlg.cxx:1279
double NDMCoffset
GeV; Offset for linear fit for muon trk len -> energy in ND muon catcher.
Definition: NumuEAlg.h:172
double NDMuonEInActiveAndCatcher(double actTrkLen, double catTrkLen, bool isRHC) const
Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons t...
Definition: NumuEAlg.cxx:1126
double MuonEFromTrackLength(double trkLen) const
Function that, given muon track length in cm, returns muon energy in GeV. This is done with a spline ...
Definition: NumuEAlg.cxx:911
void NDTrackLength(art::Ptr< rb::Track > const &track, double *actLength=NULL, double *catLength=NULL, double *transitionX=NULL, double *transitionY=NULL) const
Function for ND that divides track length into length in active material and length in muon catcher...
Definition: NumuEAlg.cxx:812
double FDMoffset
GeV; Offset for 4 spline fit for muon trk len -> energy in FD.
Definition: NumuEAlg.h:166
double NDMCslope
GeV/cm; First slope for linear fit for muon trk len -> energy in ND muon catcher. ...
Definition: NumuEAlg.h:173
virtual ~NumuEAlg()
Definition: NumuEAlg.cxx:192
int fTranPlane
Last plane of scintillator before steel begins in ND.
Definition: NumuEAlg.h:180
TVector3 fNumiDir
Direction of NuMI Beam.
Definition: NumuEAlg.h:179
MuonType
Definition: NumuE.h:17
double GetUCMuonESingle(std::vector< art::Ptr< rb::Track > > const sliceTracks, art::PtrVector< rb::CellHit > sliceHits, art::Event const &e, art::FindManyP< cosrej::CosRejObj > CRO, size_t slicenum)
Get values from cosrej object and use them to get TMVA trained value of uncontained muon energy for F...
Definition: NumuEAlg.cxx:1365
double NDMuonEFromTrackLength(double actTrkLen, double catTrkLen, double trkCalAct, double trkCalTran, double trkCalCat, bool isRHC, MuonType *muonType=NULL) const
Function that, given muon track length in cm, returns muon energy in GeV. This distinguishes between ...
Definition: NumuEAlg.cxx:984
int evt
An algorithm to determine the energy of a slice.
Definition: NumuEAlg.h:28
double FDMslope1
GeV/cm; First slope for 4 spline fit for muon trk len -> energy in FD.
Definition: NumuEAlg.h:167
rb::Energy QEFormulaEnergy(std::vector< art::Ptr< rb::Track > > const sliceTracks, art::PtrVector< rb::CellHit > sliceHits, double &error, art::Event const &e, bool isRHC)
Returns QE energy estimation using formula. See comments at top of function in .cxx for full explanat...
Definition: NumuEAlg.cxx:324
std::string fPIDModuleLabel
Label for module writing ReMId objects to file.
Definition: NumuEAlg.h:147
TMVA::Reader * fReaderE
Reader for TMVA to get uncontained energy.
Definition: NumuEAlg.h:155
NumuE MCTruthEnergyVariables(const std::vector< art::Ptr< rb::Track >> &sliceTracks, const art::Ptr< rb::Cluster > &slice, const std::vector< rb::CellHit > &allHits, const art::Event &e)
Returns various useful truth energy values, good for fitting.
Definition: NumuEAlg.cxx:655
bool fND
Is detector ND?
Definition: NumuEAlg.h:176
double NDTransitionZPos() const
Function that returns the z position of the middle of the transition plane - the last active plane be...
Definition: NumuEAlg.cxx:1193
bool checkIsMC(art::Event const &evt) const
Definition: NumuEAlg.cxx:1463
bool fPIDMethod
If true, use highest PID to identify muon track instead of longest track (Only FD currently) ...
Definition: NumuEAlg.h:148
Definition: run.py:1
double FDMstitch2
cm; Second stitch location on 4 spline fit for muon trk len -> energy in FD
Definition: NumuEAlg.h:164
double ActiveTrackLengthFromMuonE(double muonE) const
Function that, given muon energy in GeV, returns an effective track length in active material in cm...
Definition: NumuEAlg.cxx:951
std::string fTMVANameSingle
path to TMVA muon weight file
Definition: NumuEAlg.h:151
double GetUCE(art::FindManyP< cosrej::CosRejObj > CRO, size_t slicenum, float totalgev, int nhitslice)
Get values from cosrej object and use them to get TMVA trained value of uncontained energy for FD...
Definition: NumuEAlg.cxx:1350
TMVA::Reader * fReaderUCMuonNonSingle
Reader for TMVA to get muon uncontained energy.
Definition: NumuEAlg.h:157
rb::Cluster MakeVertexCluster(art::PtrVector< rb::CellHit > const &sliceHits, art::PtrVector< rb::CellHit > const &trackHits) const
Function that makes cluster from all hits in slice that do not belong to track.
Definition: NumuEAlg.cxx:762
A container for energy information.
Definition: Energy.h:20
int fRun
What run is it?
Definition: NumuEAlg.h:177
double FDMslope4
GeV/cm; Fourth slope for 4 spline fit for muon trk len -> energy in FD.
Definition: NumuEAlg.h:170
bool fFD
Is detector FD?
Definition: NumuEAlg.h:175
double NDMuonEInActiveOnly(double actTrkLen, bool isRHC) const
Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons t...
Definition: NumuEAlg.cxx:1068
NumuE NDEnergy(std::vector< art::Ptr< rb::Track > > const sliceTracks, art::PtrVector< rb::CellHit > sliceHits, art::Ptr< rb::Cluster > sliceCluster, art::Event const &e, murem::TrackCleanUpAlg *trkCleanUpAlg, bool isRHC)
Returns various energy estimations for ND. See comments at top of function in .cxx for full explanati...
Definition: NumuEAlg.cxx:423
double fMaxTrkLen
Maximum track length allowed in detector (diagonal length)
Definition: NumuEAlg.h:178
double HadEQE(double calE) const
Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron en...
Definition: NumuEAlg.cxx:1203
Float_t e
Definition: plot.C:35
float TMVAvarsSingle[38]
Inputs for muon uncontained energy BDT (TMVA) for single track events.
Definition: NumuEAlg.h:160
float TMVAvarsNonSingle[38]
Inputs for muon uncontained energy BDT (TMVA) for non-single track events.
Definition: NumuEAlg.h:161
double FDMstitch1
cm; First stitch location on 4 spline fit for muon trk len -> energy in FD
Definition: NumuEAlg.h:163
std::string fTMVAName
path to TMVA weight file
Definition: NumuEAlg.h:149
double NDHadENonQE(double calE) const
Function that, given total hadron cal energy on and off muon track in GeV, returns weighted hadron en...
Definition: NumuEAlg.cxx:1314
std::vector< rb::Energy > MuonEnergies(std::vector< art::Ptr< rb::Track > > const sliceTracks, int run, bool ismc, bool isRHC) const
Function that returns energy for each track given the assumption that it is a muon. It uses the functions above, like MuonEFromTrackLength and NDMuonEFromTrackLength.
Definition: NumuEAlg.cxx:1137
double NDMuonEInCatcherOnly(double catTrkLen) const
Function that, given muon track length in cm, returns muon energy in GeV. This is only for ND muons t...
Definition: NumuEAlg.cxx:1075
enum BeamMode string