GENIEGenerator
Loading...
Searching...
No Matches
genie::hnl::VertexGenerator Class Reference

Heavy Neutral Lepton decay vertex generator given production vertex and momentum ***. More...

#include <HNLVertexGenerator.h>

Inheritance diagram for genie::hnl::VertexGenerator:
[legend]
Collaboration diagram for genie::hnl::VertexGenerator:
[legend]

Public Member Functions

 VertexGenerator ()
 VertexGenerator (string name)
 VertexGenerator (string name, string config)
 ~VertexGenerator ()
void ProcessEventRecord (GHepRecord *event_rec) const
void Configure (const Registry &config)
void Configure (string config)
void SetGeomFile (std::string geomfile) const
Public Member Functions inherited from genie::hnl::GeomRecordVisitorI
virtual ~GeomRecordVisitorI ()
Public Member Functions inherited from genie::EventRecordVisitorI
virtual ~EventRecordVisitorI ()
Public Member Functions inherited from genie::Algorithm
virtual ~Algorithm ()
virtual void FindConfig (void)
virtual const RegistryGetConfig (void) const
RegistryGetOwnedConfig (void)
virtual const AlgIdId (void) const
 Get algorithm ID.
virtual AlgStatus_t GetStatus (void) const
 Get algorithm status.
virtual bool AllowReconfig (void) const
virtual AlgCmp_t Compare (const Algorithm *alg) const
 Compare with input algorithm.
virtual void SetId (const AlgId &id)
 Set algorithm ID.
virtual void SetId (string name, string config)
const AlgorithmSubAlg (const RgKey &registry_key) const
void AdoptConfig (void)
void AdoptSubstructure (void)
virtual void Print (ostream &stream) const
 Print algorithm info.

Private Member Functions

void LoadConfig ()
void SetStartingParameters (GHepRecord *event_rec) const
void GetInterestingPoints (TVector3 &entryPoint, TVector3 &exitPoint, TVector3 &decayPoint) const
void MakeSDV () const
void EnforceUnits (std::string length_units, std::string angle_units, std::string time_units) const
double CalcTravelLength (double betaMag, double CoMLifetime, double maxLength) const
TVector3 GetDecayPoint (double travelLength, TVector3 &entryPoint, TVector3 &momentum) const
double GetMaxLength (TVector3 &entryPoint, TVector3 &exitPoint) const
bool SDVEntryAndExitPoints (TVector3 &startPoint, TVector3 momentum, TVector3 &entryPoint, TVector3 &exitPoint) const
TVector3 ApplyUserRotation (TVector3 vec, bool doBackwards) const
TVector3 ApplyUserRotation (TVector3 vec, TVector3 oriVec, std::vector< double > rotVec, bool doBackwards) const
std::string CheckGeomPoint (Double_t x, Double_t y, Double_t z) const

Private Attributes

bool fIsConfigLoaded = false
double lunits = genie::units::mm
std::string lunitString = "mm"
double aunits = genie::units::rad
double tunits = genie::units::ns
std::string tunitString = "ns"
double fSx = 0.0
double fSy = 0.0
double fSz = 0.0
double fPx = 0.0
double fPy = 0.0
double fPz = 0.0
double fEx = 0.0
double fEy = 0.0
double fEz = 0.0
double fXx = 0.0
double fXy = 0.0
double fXz = 0.0
double fSxROOT = 0.0
double fSyROOT = 0.0
double fSzROOT = 0.0
double fExROOT = 0.0
double fEyROOT = 0.0
double fEzROOT = 0.0
double fXxROOT = 0.0
double fXyROOT = 0.0
double fXzROOT = 0.0
double fDx = 0.0
double fDy = 0.0
double fDz = 0.0
double fOx = 0.0
double fOy = 0.0
double fOz = 0.0
double fLx = 0.0
double fLy = 0.0
double fLz = 0.0
double fDxROOT = 0.0
double fDyROOT = 0.0
double fDzROOT = 0.0
double fOxROOT = 0.0
double fOyROOT = 0.0
double fOzROOT = 0.0
double fLxROOT = 0.0
double fLyROOT = 0.0
double fLzROOT = 0.0
double fCoMLifetime = 0.0
double kNewSpeedOfLight = genie::units::kSpeedOfLight * ( genie::units::m / lunits ) / ( genie::units::s / tunits )
string fGeomFile = ""
TGeoManager * fGeoManager = 0
TGeoVolume * fGeoVolume = 0
bool isUsingDk2nu = false
bool isUsingRootGeom = false
double uMult = 1.0
double xMult = 1.0
double fCx
double fCy
double fCz
double fUx
double fUy
double fUz
double fAx1
double fAz
double fAx2
double fBx1
double fBz
double fBx2
std::vector< double > fB2UTranslation
std::vector< double > fB2URotation
std::vector< double > fDetTranslation
std::vector< double > fDetRotation

Additional Inherited Members

Static Public Member Functions inherited from genie::Algorithm
static string BuildParamVectKey (const std::string &comm_name, unsigned int i)
static string BuildParamVectSizeKey (const std::string &comm_name)
static string BuildParamMatKey (const std::string &comm_name, unsigned int i, unsigned int j)
static string BuildParamMatRowSizeKey (const std::string &comm_name)
static string BuildParamMatColSizeKey (const std::string &comm_name)
Protected Member Functions inherited from genie::hnl::GeomRecordVisitorI
 GeomRecordVisitorI ()
 GeomRecordVisitorI (string name)
 GeomRecordVisitorI (string name, string config)
Protected Member Functions inherited from genie::EventRecordVisitorI
 EventRecordVisitorI ()
 EventRecordVisitorI (string name)
 EventRecordVisitorI (string name, string config)
Protected Member Functions inherited from genie::Algorithm
 Algorithm ()
 Algorithm (string name)
 Algorithm (string name, string config)
void Initialize (void)
void DeleteConfig (void)
void DeleteSubstructure (void)
RegistryExtractLocalConfig (const Registry &in) const
RegistryExtractLowerConfig (const Registry &in, const string &alg_key) const
 Split an incoming configuration Registry into a block valid for the sub-algo identified by alg_key.
template<class T>
bool GetParam (const RgKey &name, T &p, bool is_top_call=true) const
template<class T>
bool GetParamDef (const RgKey &name, T &p, const T &def) const
template<class T>
int GetParamVect (const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
 Handle to load vectors of parameters.
int GetParamVectKeys (const std::string &comm_name, std::vector< RgKey > &k, bool is_top_call=true) const
template<class T>
int GetParamMat (const std::string &comm_name, TMatrixT< T > &mat, bool is_top_call=true) const
 Handle to load matrix of parameters.
template<class T>
int GetParamMatSym (const std::string &comm_name, TMatrixTSym< T > &mat, bool is_top_call=true) const
int GetParamMatKeys (const std::string &comm_name, std::vector< RgKey > &k, bool is_top_call=true) const
int AddTopRegistry (Registry *rp, bool owns=true)
 add registry with top priority, also update ownership
int AddLowRegistry (Registry *rp, bool owns=true)
 add registry with lowest priority, also update ownership
int MergeTopRegistry (const Registry &r)
int AddTopRegisties (const vector< Registry * > &rs, bool owns=false)
 Add registries with top priority, also udated Ownerships.
Protected Attributes inherited from genie::Algorithm
bool fAllowReconfig
bool fOwnsSubstruc
 true if it owns its substructure (sub-algs,...)
AlgId fID
 algorithm name and configuration set
vector< Registry * > fConfVect
vector< bool > fOwnerships
 ownership for every registry in fConfVect
AlgStatus_t fStatus
 algorithm execution status
AlgMapfOwnedSubAlgMp
 local pool for owned sub-algs (taken out of the factory pool)

Detailed Description

Heavy Neutral Lepton decay vertex generator given production vertex and momentum ***.

Author
John Plows <komninos-john.plows \at physics.ox.ac.uk>
Created:\n March 31st, 2022
License:\n Copyright (c) 2003-2025, The GENIE Collaboration
For the full text of the license visit http://copyright.genie-mc.org

Definition at line 50 of file HNLVertexGenerator.h.

Constructor & Destructor Documentation

◆ VertexGenerator() [1/3]

VertexGenerator::VertexGenerator ( )

Definition at line 18 of file HNLVertexGenerator.cxx.

18 :
19 GeomRecordVisitorI("genie::hnl::VertexGenerator")
20{
21
22}

References genie::hnl::GeomRecordVisitorI::GeomRecordVisitorI().

◆ VertexGenerator() [2/3]

VertexGenerator::VertexGenerator ( string name)

Definition at line 24 of file HNLVertexGenerator.cxx.

24 :
26{
27
28}

References genie::hnl::GeomRecordVisitorI::GeomRecordVisitorI().

◆ VertexGenerator() [3/3]

VertexGenerator::VertexGenerator ( string name,
string config )

Definition at line 30 of file HNLVertexGenerator.cxx.

30 :
31 GeomRecordVisitorI(name, config)
32{
33
34}

References genie::hnl::GeomRecordVisitorI::GeomRecordVisitorI().

◆ ~VertexGenerator()

VertexGenerator::~VertexGenerator ( )

Definition at line 36 of file HNLVertexGenerator.cxx.

37{
38
39}

Member Function Documentation

◆ ApplyUserRotation() [1/2]

TVector3 VertexGenerator::ApplyUserRotation ( TVector3 vec,
bool doBackwards ) const
private

Definition at line 665 of file HNLVertexGenerator.cxx.

666{
667 double vx = vec.X(), vy = vec.Y(), vz = vec.Z();
668
669 double Ax2 = ( doBackwards ) ? -fAx2 : fAx2;
670 double Az = ( doBackwards ) ? -fAz : fAz;
671 double Ax1 = ( doBackwards ) ? -fAx1 : fAx1;
672
673 // Ax2 first
674 double x = vx, y = vy, z = vz;
675 vy = y * std::cos( Ax2 ) - z * std::sin( Ax2 );
676 vz = y * std::sin( Ax2 ) + z * std::cos( Ax2 );
677 y = vy; z = vz;
678 // then Az
679 vx = x * std::cos( Az ) - y * std::sin( Az );
680 vy = x * std::sin( Az ) + y * std::cos( Az );
681 x = vx; y = vy;
682 // Ax1 last
683 vy = y * std::cos( Ax1 ) - z * std::sin( Ax1 );
684 vz = y * std::sin( Ax1 ) + z * std::cos( Ax1 );
685
686 TVector3 nvec( vx, vy, vz );
687 return nvec;
688}

References fAx1, fAx2, and fAz.

◆ ApplyUserRotation() [2/2]

TVector3 VertexGenerator::ApplyUserRotation ( TVector3 vec,
TVector3 oriVec,
std::vector< double > rotVec,
bool doBackwards ) const
private

Definition at line 690 of file HNLVertexGenerator.cxx.

691{
692 double vx = vec.X(), vy = vec.Y(), vz = vec.Z();
693 double ox = oriVec.X(), oy = oriVec.Y(), oz = oriVec.Z();
694
695 vx -= ox; vy -= oy; vz -= oz; // make this rotation about detector origin
696
697 assert( rotVec.size() == 3 ); // want 3 Euler angles, otherwise this is unphysical.
698 double Ax2 = ( doBackwards ) ? -rotVec.at(2) : rotVec.at(2);
699 double Az = ( doBackwards ) ? -rotVec.at(1) : rotVec.at(1);
700 double Ax1 = ( doBackwards ) ? -rotVec.at(0) : rotVec.at(0);
701
702 // Ax2 first
703 double x = vx, y = vy, z = vz;
704 vy = y * std::cos( Ax2 ) - z * std::sin( Ax2 );
705 vz = y * std::sin( Ax2 ) + z * std::cos( Ax2 );
706 y = vy; z = vz;
707 // then Az
708 vx = x * std::cos( Az ) - y * std::sin( Az );
709 vy = x * std::sin( Az ) + y * std::cos( Az );
710 x = vx; y = vy;
711 // Ax1 last
712 vy = y * std::cos( Ax1 ) - z * std::sin( Ax1 );
713 vz = y * std::sin( Ax1 ) + z * std::cos( Ax1 );
714
715 // back to beam frame
716 vx += ox; vy += oy; vz += oz;
717 TVector3 nvec( vx, vy, vz );
718 return nvec;
719}

◆ CalcTravelLength()

double VertexGenerator::CalcTravelLength ( double betaMag,
double CoMLifetime,
double maxLength ) const
private

Definition at line 209 of file HNLVertexGenerator.cxx.

210{
211 // decay probability P0(t) = 1 - exp( -t/tau ) where:
212 // t = time-of-flight (in rest frame)
213 // tau = CoMLifetime
214
215 assert( betaMag > 0.0 && betaMag < 1.0 ); // massive moving particle
216 double maxLabTime = maxLength / ( betaMag * kNewSpeedOfLight );
217 double gamma = std::sqrt( 1.0 / ( 1.0 - betaMag * betaMag ) );
218 double maxRestTime = maxLabTime / gamma ; // this is how "wide" the detector looks like
219
220 // if P(DL=0) = 1, P(DL = LMax) = exp( - LMax / c * 1/( beta * gamma ) * 1 / CoMLifetime )
221 double PExit = std::exp( - maxRestTime / CoMLifetime );
222
223 // from [0,1] we'd reroll anything in [0, PExit] and keep (PExit, 1]. That's expensive.
224 // Instead, let 1 ==> maxRestTime, 0 ==> 0, exponential decay
225
226 RandomGen * rnd = RandomGen::Instance();
227 double ranthrow = rnd->RndGen().Uniform();
228
229 double S0 = (1.0 - PExit) * ranthrow + PExit;
230 double rest_time = CoMLifetime * std::log( 1.0 / S0 );
231 double elapsed_time = rest_time * gamma;
232 double elapsed_length = elapsed_time * betaMag * kNewSpeedOfLight;
233
234 /*
235 LOG( "HNL", pDEBUG )
236 << "betaMag, maxLength, CoMLifetime = " << betaMag << ", " << maxLength << ", " << CoMLifetime
237 << "\nbetaMag = " << betaMag << " ==> gamma = " << gamma
238 << "\n==> maxLength [" << tunitString.c_str()
239 << "] = " << maxRestTime << " (rest frame) = " << maxLabTime << " (lab frame)"
240 << "\nranthrow = " << ranthrow << ", PExit = " << PExit
241 << "\n==> S0 = " << S0 << " ==> rest_time [" << lunitString.c_str() << "] = " << rest_time
242 << " ==> elapsed_time [" << tunitString.c_str()
243 << "] = " << elapsed_time << " ==> elapsed_length [" << lunitString.c_str()
244 << "] = " << elapsed_length;
245 */
246
247 return elapsed_length;
248}
static RandomGen * Instance()
Access instance.
Definition RandomGen.cxx:74
TRandom3 & RndGen(void) const
rnd number generator for generic usage
Definition RandomGen.h:80
double CoMLifetime

References CoMLifetime, genie::RandomGen::Instance(), kNewSpeedOfLight, and genie::RandomGen::RndGen().

Referenced by ProcessEventRecord().

◆ CheckGeomPoint()

std::string VertexGenerator::CheckGeomPoint ( Double_t x,
Double_t y,
Double_t z ) const
private

Definition at line 726 of file HNLVertexGenerator.cxx.

727{
728 Double_t point[3];
729 Double_t local[3];
730 point[0] = x;
731 point[1] = y;
732 point[2] = z;
733 TGeoVolume *vol = gGeoManager->GetTopVolume();
734 TGeoNode *node = gGeoManager->FindNode(point[0], point[1], point[2]);
735 gGeoManager->MasterToLocal(point, local);
736 return gGeoManager->GetPath();
737}

◆ Configure() [1/2]

void VertexGenerator::Configure ( const Registry & config)
virtual

Configure the algorithm with an external registry The registry is merged with the top level registry if it is owned, Otherwise a copy of it is added with the highest priority

Reimplemented from genie::Algorithm.

Definition at line 627 of file HNLVertexGenerator.cxx.

628{
629 Algorithm::Configure(config);
630 this->LoadConfig();
631}
virtual void Configure(const Registry &config)
Definition Algorithm.cxx:62

References genie::Algorithm::Configure(), and LoadConfig().

◆ Configure() [2/2]

void VertexGenerator::Configure ( string config)
virtual

Configure the algorithm from the AlgoConfigPool based on param_set string given in input An algorithm contains a vector of registries coming from different xml configuration files, which are loaded according a very precise prioriy This methods will load a number registries in order of priority: 1) "Tunable" parameter set from CommonParametes. This is loaded with the highest prioriry and it is designed to be used for tuning procedure Usage not expected from the user. 2) For every string defined in "CommonParame" the corresponding parameter set will be loaded from CommonParameter.xml 3) parameter set specified by the config string and defined in the xml file of the algorithm 4) if config is not "Default" also the Default parameter set from the same xml file will be loaded Effectively this avoids the repetion of a parameter when it is not changed in the requested configuration

Reimplemented from genie::Algorithm.

Definition at line 633 of file HNLVertexGenerator.cxx.

634{
635 Algorithm::Configure(config);
636 this->LoadConfig();
637}

References genie::Algorithm::Configure(), and LoadConfig().

◆ EnforceUnits()

void VertexGenerator::EnforceUnits ( std::string length_units,
std::string angle_units,
std::string time_units ) const
private

Definition at line 179 of file HNLVertexGenerator.cxx.

179 {
180
181 LOG( "HNL", pWARN )
182 << "Switching units to " << length_units.c_str() << " , " << angle_units.c_str() << " , " << time_units.c_str();
183
184 double old_lunits = lunits;
185 __attribute__((unused)) double old_aunits = aunits;
186 double old_tunits = tunits;
187
188 lunits = utils::units::UnitFromString( length_units ); lunitString = length_units;
189 aunits = utils::units::UnitFromString( angle_units );
190 tunits = utils::units::UnitFromString( time_units ); tunitString = time_units;
191
192 // convert to new units
193 fSx /= lunits/old_lunits; fSy /= lunits/old_lunits; fSz /= lunits/old_lunits;
194 fPx /= lunits/old_lunits; fPy /= lunits/old_lunits; fPz /= lunits/old_lunits;
195 fEx /= lunits/old_lunits; fEy /= lunits/old_lunits; fEz /= lunits/old_lunits;
196 fXx /= lunits/old_lunits; fXy /= lunits/old_lunits; fXz /= lunits/old_lunits;
197 fLx /= lunits/old_lunits; fLy /= lunits/old_lunits; fLz /= lunits/old_lunits;
198
199 fDx /= lunits/old_lunits; fDy /= lunits/old_lunits; fDz /= lunits/old_lunits;
200 fOx /= lunits/old_lunits; fOy /= lunits/old_lunits; fOz /= lunits/old_lunits;
201
202 kNewSpeedOfLight /= (lunits / old_lunits) / (tunits / old_tunits);
203
204 LOG( "HNL", pDEBUG )
205 << "kNewSpeedOfLight = " << kNewSpeedOfLight << " [" << lunitString.c_str() << "/"
206 << tunitString.c_str() << "]";
207}
#define pDEBUG
Definition Messenger.h:63
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
#define pWARN
Definition Messenger.h:60
double UnitFromString(string u)
Definition UnitUtils.cxx:18

References aunits, fDx, fDy, fDz, fEx, fEy, fEz, fLx, fLy, fLz, fOx, fOy, fOz, fPx, fPy, fPz, fSx, fSy, fSz, fXx, fXy, fXz, kNewSpeedOfLight, LOG, lunits, lunitString, pDEBUG, pWARN, tunits, tunitString, and genie::utils::units::UnitFromString().

Referenced by MakeSDV(), and ProcessEventRecord().

◆ GetDecayPoint()

TVector3 VertexGenerator::GetDecayPoint ( double travelLength,
TVector3 & entryPoint,
TVector3 & momentum ) const
private

Definition at line 250 of file HNLVertexGenerator.cxx.

251{
252 double ex = entryPoint.X(); double ey = entryPoint.Y(); double ez = entryPoint.Z();
253 double px = momentum.X(); double py = momentum.Y(); double pz = momentum.Z();
254 double p2 = px*px + py*py + pz*pz; double p = std::sqrt(p2);
255 px *= 1./p; py *= 1./p; pz *= 1./p;
256
257 double dx = ex + travelLength * px; fDx = dx;
258 double dy = ey + travelLength * py; fDy = dy;
259 double dz = ez + travelLength * pz; fDz = dz;
260
264
265 TVector3 decayPoint( dx, dy, dz );
266 return decayPoint;
267}
static constexpr double cm
Definition Units.h:68

References genie::units::cm, fDx, fDxROOT, fDy, fDyROOT, fDz, fDzROOT, and lunits.

Referenced by ProcessEventRecord().

◆ GetInterestingPoints()

void VertexGenerator::GetInterestingPoints ( TVector3 & entryPoint,
TVector3 & exitPoint,
TVector3 & decayPoint ) const
private

Definition at line 658 of file HNLVertexGenerator.cxx.

659{
660 entryPoint.SetXYZ( fEx, fEy, fEz );
661 exitPoint.SetXYZ( fXx, fXy, fXz );
662 decayPoint.SetXYZ( fDx, fDy, fDz );
663}

References fDx, fDy, fDz, fEx, fEy, fEz, fXx, fXy, and fXz.

◆ GetMaxLength()

double VertexGenerator::GetMaxLength ( TVector3 & entryPoint,
TVector3 & exitPoint ) const
private

Definition at line 269 of file HNLVertexGenerator.cxx.

270{
271 double ex = entryPoint.X(); double ey = entryPoint.Y(); double ez = entryPoint.Z();
272 double xx = exitPoint.X(); double xy = exitPoint.Y(); double xz = exitPoint.Z();
273
274 return std::sqrt( (ex-xx)*(ex-xx) + (ey-xy)*(ey-xy) + (ez-xz)*(ez-xz) );
275}

◆ LoadConfig()

void VertexGenerator::LoadConfig ( )
private

Definition at line 639 of file HNLVertexGenerator.cxx.

640{
641 if( fIsConfigLoaded ) return;
642
643 LOG( "HNL", pDEBUG )
644 << "Loading geometry parameters from file. . .";
645
646 this->GetParamVect( "Near2User_T", fB2UTranslation );
647 this->GetParamVect( "Near2User_R", fDetRotation );
648 this->GetParamVect( "Near2Beam_R", fB2URotation );
649 this->GetParamVect( "DetCentre_User", fDetTranslation );
650 fCx = fB2UTranslation.at(0); fCy = fB2UTranslation.at(1); fCz = fB2UTranslation.at(2);
651 fUx = fDetTranslation.at(0); fUy = fDetTranslation.at(1); fUz = fDetTranslation.at(2);
652 fAx1 = fB2URotation.at(0); fAz = fB2URotation.at(1); fAx2 = fB2URotation.at(2);
653 fBx1 = fDetRotation.at(0); fBz = fDetRotation.at(1); fBx2 = fDetRotation.at(2);
654
655 fIsConfigLoaded = true;
656}
int GetParamVect(const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
Handle to load vectors of parameters.
std::vector< double > fB2UTranslation
std::vector< double > fDetTranslation
std::vector< double > fDetRotation
std::vector< double > fB2URotation

References fAx1, fAx2, fAz, fB2URotation, fB2UTranslation, fBx1, fBx2, fBz, fCx, fCy, fCz, fDetRotation, fDetTranslation, fIsConfigLoaded, fUx, fUy, fUz, genie::Algorithm::GetParamVect(), LOG, and pDEBUG.

Referenced by Configure(), and Configure().

◆ MakeSDV()

void VertexGenerator::MakeSDV ( ) const
private

Definition at line 277 of file HNLVertexGenerator.cxx.

278{
279 fOx = 0.0; fOy = 0.0; fOz = 0.0;
280 fLx = 1.0; fLy = 1.0; fLz = 1.0; // m
281
285
289
290 LOG("HNL", pDEBUG)
291 << "Setting simple decay volume with unit-m side."
292 << "\nSetting units to \"mm\", \"rad\", \"ns\"";
293
294 EnforceUnits("mm","rad","ns");
295}
void EnforceUnits(std::string length_units, std::string angle_units, std::string time_units) const
static constexpr double m
Definition Units.h:71
static constexpr double kSpeedOfLight
Definition Units.h:32
static constexpr double s
Definition Units.h:95

References aunits, EnforceUnits(), fLx, fLy, fLz, fOx, fOy, fOz, kNewSpeedOfLight, genie::units::kSpeedOfLight, LOG, lunits, genie::units::m, pDEBUG, genie::units::s, tunits, and genie::utils::units::UnitFromString().

◆ ProcessEventRecord()

void VertexGenerator::ProcessEventRecord ( GHepRecord * event_rec) const
virtual

Uses ROOT's TGeoManager to find out where the intersections with the detector volume live Label them as entry and exit point. Then use them to determine: 1) A decay vertex within the detector 2) A time-of-decay (== delay of HNL to reach the decay vertex wrt a massless SM v) 3) Geom weight: Survival to detector * decay within detector.

Implements genie::hnl::GeomRecordVisitorI.

Definition at line 41 of file HNLVertexGenerator.cxx.

42{
43 /*!
44 * Uses ROOT's TGeoManager to find out where the intersections with the detector volume live
45 * Label them as entry and exit point. Then use them to determine:
46 * 1) A decay vertex within the detector
47 * 2) A time-of-decay (== delay of HNL to reach the decay vertex wrt a massless SM v)
48 * 3) Geom weight: Survival to detector * decay within detector.
49 */
50
51 // before anything else: find the geometry!
52 if( !fGeoManager ){
53 LOG( "HNL", pINFO )
54 << "Getting geometry information from " << fGeomFile;
55
56 fGeoManager = TGeoManager::Import(fGeomFile.c_str());
57
58 TGeoVolume * top_volume = fGeoManager->GetTopVolume();
59 assert( top_volume );
60 TGeoShape * ts = top_volume->GetShape();
61 TGeoBBox * box = (TGeoBBox *) ts;
62
63 this->ImportBoundingBox(box);
64 }
65
66 this->SetStartingParameters( event_rec );
67
68 double weight = 1.0; // pure geom weight
69
70 TVector3 startPoint, momentum, entryPoint, exitPoint;
71 startPoint.SetXYZ( fSx, fSy, fSz );
72 momentum.SetXYZ( fPx, fPy, fPz );
73
74 bool didIntersectDet = this->VolumeEntryAndExitPoints( startPoint, momentum, entryPoint, exitPoint, fGeoManager, fGeoVolume );
75
76 if( isUsingDk2nu ) assert( didIntersectDet ); // forced to hit detector somewhere!
77 else {
78 std::vector< double > * newProdVtx = new std::vector< double >();
79 newProdVtx->emplace_back( startPoint.X() );
80 newProdVtx->emplace_back( startPoint.Y() );
81 newProdVtx->emplace_back( startPoint.Z() );
82
83 }
84 if( !didIntersectDet ){ // bail
85 LOG( "HNL", pERROR )
86 << "Bailing...";
87 TLorentzVector v4dummy( -999.9, -999.9, -999.9, -999.9 );
88 event_rec->SetVertex( v4dummy );
89 return;
90 }
91
92 this->EnforceUnits( "mm", "rad", "ns" );
93
94 // move fCoMLifetime to ns from GeV^{-1}
95 fCoMLifetime *= 1.0 / ( units::ns * units::GeV );
96
97 double maxDx = exitPoint.X() - entryPoint.X();
98 double maxDy = exitPoint.Y() - entryPoint.Y();
99 double maxDz = exitPoint.Z() - entryPoint.Z();
100
101 double maxLength = std::sqrt( std::pow( maxDx , 2.0 ) +
102 std::pow( maxDy , 2.0 ) +
103 std::pow( maxDz , 2.0 ) );
104
105 TLorentzVector * p4HNL = event_rec->Particle(0)->GetP4();
106 double betaMag = p4HNL->P() / p4HNL->E();
107 double gamma = std::sqrt( 1.0 / ( 1.0 - betaMag * betaMag ) );
108
109 double elapsed_length = this->CalcTravelLength( betaMag, fCoMLifetime, maxLength ); //mm
110 __attribute__((unused)) double ratio_length = elapsed_length / maxLength;
111
112 // from these we can also make the weight. It's P( survival ) * P( decay in detector | survival )
113 double distanceBeforeDet = std::sqrt( std::pow( (entryPoint.X() - startPoint.X()), 2.0 ) +
114 std::pow( (entryPoint.Y() - startPoint.Y()), 2.0 ) +
115 std::pow( (entryPoint.Y() - startPoint.Z()), 2.0 ) ); // mm
116
117 double timeBeforeDet = distanceBeforeDet / ( betaMag * kNewSpeedOfLight ); // ns lab
118 double timeInsideDet = maxLength / ( betaMag * kNewSpeedOfLight ); // ns lab
119
120 double LabToRestTime = 1.0 / ( gamma );
121 timeBeforeDet *= LabToRestTime; // ns rest
122 timeInsideDet *= LabToRestTime; // ns rest
123
124 double survProb = std::exp( - timeBeforeDet / fCoMLifetime );
125 weight *= 1.0 / survProb;
126 double decayProb = 1.0 - std::exp( - timeInsideDet / fCoMLifetime );
127 weight *= 1.0 / decayProb;
128
129 // save the survival and decay probabilities
130 if( event_rec->Particle(1) && event_rec->Particle(2) ){
131 event_rec->Particle(1)->SetPosition( 0.0, 0.0, 0.0, survProb );
132 event_rec->Particle(2)->SetPosition( 0.0, 0.0, 0.0, decayProb );
133 }
134
135 // update the weight
136 event_rec->SetWeight( event_rec->Weight() * weight );
137
138 TVector3 decayPoint = this->GetDecayPoint( elapsed_length, entryPoint, momentum ); // USER, mm
139
140 // write out vtx in [m, ns]
141 TLorentzVector x4( decayPoint.X() * units::mm / units::m,
142 decayPoint.Y() * units::mm / units::m,
143 decayPoint.Z() * units::mm / units::m,
144 event_rec->Vertex()->T() );
145
146 event_rec->SetVertex(x4);
147
148 // the validation app doesn't run the Decayer. So we will insert two neutrinos (not a valid
149 // decay mode), to store entry and exit point
150 if( !isUsingDk2nu ){
151 assert( !event_rec->Particle(1) );
152
153 TLorentzVector tmpp4( 0.0, 0.0, 0.0, 0.5 );
154 TLorentzVector ex4( 0.0, 0.0, 0.0, 0.0 );
155 ex4.SetXYZT( entryPoint.X(), entryPoint.Y(), entryPoint.Z(), 0.0 );
156 TLorentzVector xx4( 0.0, 0.0, 0.0, 0.0 );
157 xx4.SetXYZT( exitPoint.X(), exitPoint.Y(), exitPoint.Z(), 0.0 );
158
159 GHepParticle nu1( genie::kPdgNuMu, kIStStableFinalState, -1, -1, -1, -1, tmpp4, ex4 );
160 GHepParticle nu2( genie::kPdgAntiNuMu, kIStStableFinalState, -1, -1, -1, -1, tmpp4, xx4 );
161
162 event_rec->AddParticle( nu1 ); event_rec->AddParticle( nu2 );
163
164 // save the survival and decay probabilities
165 // event_rec->Particle(1)->SetPolarization( survProb, decayProb );
166 event_rec->Particle(1)->SetPosition( 0.0, 0.0, 0.0, survProb );
167 event_rec->Particle(2)->SetPosition( 0.0, 0.0, 0.0, decayProb );
168 event_rec->SetWeight(weight);
169 }
170
171 // also set entry and exit points. Do this in x4 of Particles(1,2)
172 if( event_rec->Particle(1) && event_rec->Particle(2) ){
173 (event_rec->Particle(1))->SetPosition( entryPoint.X(), entryPoint.Y(), entryPoint.Z(), event_rec->Particle(1)->Vt() );
174 (event_rec->Particle(2))->SetPosition( exitPoint.X(), exitPoint.Y(), exitPoint.Z(), event_rec->Particle(2)->Vt() );
175 }
176
177}
#define pINFO
Definition Messenger.h:62
#define pERROR
Definition Messenger.h:59
void SetPosition(const TLorentzVector &v4)
TLorentzVector * GetP4(void) const
double Vt(void) const
Get production time.
virtual double Weight(void) const
Definition GHepRecord.h:124
virtual void AddParticle(const GHepParticle &p)
virtual TLorentzVector * Vertex(void) const
Definition GHepRecord.h:140
virtual void SetWeight(double wght)
Definition GHepRecord.h:130
virtual void SetVertex(double x, double y, double z, double t)
virtual GHepParticle * Particle(int position) const
TVector3 GetDecayPoint(double travelLength, TVector3 &entryPoint, TVector3 &momentum) const
void SetStartingParameters(GHepRecord *event_rec) const
double CalcTravelLength(double betaMag, double CoMLifetime, double maxLength) const
static constexpr double ns
Definition Units.h:98
static constexpr double GeV
Definition Units.h:28
static constexpr double mm
Definition Units.h:65
@ kIStStableFinalState
Definition GHepStatus.h:30
const int kPdgAntiNuMu
Definition PDGCodes.h:31
const int kPdgNuMu
Definition PDGCodes.h:30

References genie::GHepRecord::AddParticle(), CalcTravelLength(), EnforceUnits(), fCoMLifetime, fGeoManager, fGeomFile, fGeoVolume, fPx, fPy, fPz, fSx, fSy, fSz, GetDecayPoint(), genie::GHepParticle::GetP4(), genie::units::GeV, isUsingDk2nu, genie::kIStStableFinalState, kNewSpeedOfLight, genie::kPdgAntiNuMu, genie::kPdgNuMu, LOG, genie::units::m, genie::units::mm, genie::units::ns, genie::GHepRecord::Particle(), pERROR, pINFO, genie::GHepParticle::SetPosition(), SetStartingParameters(), genie::GHepRecord::SetVertex(), genie::GHepRecord::SetWeight(), genie::GHepRecord::Vertex(), genie::GHepParticle::Vt(), and genie::GHepRecord::Weight().

Referenced by GeneratePosition(), main(), and TestDecay().

◆ SDVEntryAndExitPoints()

bool VertexGenerator::SDVEntryAndExitPoints ( TVector3 & startPoint,
TVector3 momentum,
TVector3 & entryPoint,
TVector3 & exitPoint ) const
private

Definition at line 298 of file HNLVertexGenerator.cxx.

300{
301 assert( fOx == 0.0 && fOy == 0.0 && fOz == 0.0 &&
302 fLx == 1000.0 && fLy == 1000.0 && fLz == 1000.0 ); // SDV, mm
303 fSx = startPoint.X(); fSy = startPoint.Y(); fSz = startPoint.Z(); // mm
304 fPx = momentum.X(); fPy = momentum.Y(); fPz = momentum.Z(); // GeV
305 double fP2 = fPx*fPx + fPy*fPy + fPz*fPz; double fP = std::sqrt(fP2); // GeV
306 fPx *= 1.0/fP; fPy *= 1.0/fP; fPz *= 1.0/fP; // GeV / GeV
307
308 // calc parameter for line at each face [mm]
309 double txP = ( fLx - fSx ) / fPx;
310 double txM = ( -fLx - fSx ) / fPx;
311 double tyP = ( fLy - fSy ) / fPy;
312 double tyM = ( -fLy - fSy ) / fPy;
313 double tzP = ( fLz - fSz ) / fPz;
314 double tzM = ( -fLz - fSz ) / fPz;
315
316 // do we have an entry or exit anywhere?
317 // entry from face Q = const <==> { pr(momentum, Q) points to origin && within bounding square }
318 // exit from face Q = const <==> { -pr(momentum, Q) points to origin && within bounding square }
319 double q1t = 0.0, q2t = 0.0;
320 bool pointsOnX = false, pointsOnY = false, pointsOnZ = false;
321
322 // case x = +fLx
323 q1t = fSy + txP * fPy; q2t = fSz + txP * fPz;
324 if( std::abs( q1t ) <= fLy && std::abs( q2t ) <= fLz ){ // within bounding square
325 pointsOnX = true;
326 if( fSx * fPx < 0 ){ // pointing towards origin
327 fEx = fLx; fEy = q1t; fEz = q2t;
328 } else if( fSx * fPx > 0 ){ // pointing away from origin
329 fXx = fLx; fXy = q1t; fXz = q2t;
330 } else return false; // treat tangent as no entry
331 }
332 // case x = -fLx
333 q1t = fSy + txM * fPy; q2t = fSz + txM * fPz;
334 if( std::abs( q1t ) <= fLy && std::abs( q2t ) <= fLz ){ // within bounding square
335 pointsOnX = true;
336 if( fSx * fPx < 0 ){ // pointing towards origin
337 fEx = -fLx; fEy = q1t; fEz = q2t;
338 } else if( fSx * fPx > 0 ){ // pointing away from origin
339 fXx = -fLx; fXy = q1t; fXz = q2t;
340 } else return false; // treat tangent as no entry
341 }
342
343 // case y = +fLy
344 q1t = fSz + tyP * fPz; q2t = fSx + tyP * fPx;
345 if( std::abs( q1t ) <= fLz && std::abs( q2t ) <= fLx ){ // within bounding square
346 pointsOnY = true;
347 if( fSy * fPy < 0 ){ // pointing towards origin
348 fEx = q2t; fEy = fLy; fEz = q1t;
349 } else if( fSy * fPy > 0 ){ // pointing away from origin
350 fXx = q2t; fXy = fLy; fXz = q1t;
351 } else return false; // treat tangent as no entry
352 }
353 // case y = -fLy
354 q1t = fSz + tyM * fPz; q2t = fSx + tyM * fPx;
355 if( std::abs( q1t ) <= fLz && std::abs( q2t ) <= fLx ){ // within bounding square
356 pointsOnY = true;
357 if( fSy * fPy < 0 ){ // pointing towards origin
358 fEx = q2t; fEy = -fLy; fEz = q1t;
359 } else if( fSy * fPy > 0 ){ // pointing away from origin
360 fXx = q2t; fXy = -fLy; fXz = q1t;
361 } else return false; // treat tangent as no entry
362 }
363
364 // case z = +fLz
365 q1t = fSx + tzP * fPx; q2t = fSy + tzP * fPy;
366 if( std::abs( q1t ) <= fLx && std::abs( q2t ) <= fLy ){ // within bounding square
367 pointsOnZ = true;
368 if( fSz * fPz < 0 ){ // pointing towards origin
369 fEx = q1t; fEy = q2t; fEz = fLz;
370 } else if( fSz * fPz > 0 ){ // pointing away from origin
371 fXx = q1t; fXy = q2t; fXz = fLz;
372 } else return false; // treat tangent as no entry
373 }
374 // case z = -fLz
375 q1t = fSx + tzM * fPx; q2t = fSy + tzM * fPy;
376 if( std::abs( q1t ) <= fLx && std::abs( q2t ) <= fLy ){ // within bounding square
377 pointsOnZ = true;
378 if( fSz * fPz < 0 ){ // pointing towards origin
379 fEx = q1t; fEy = q2t; fEz = -fLz;
380 } else if( fSz * fPz > 0 ){ // pointing away from origin
381 fXx = q1t; fXy = q2t; fXz = -fLz;
382 } else return false; // treat tangent as no entry
383 }
384
385 bool finalPoints = ( pointsOnX || pointsOnY || pointsOnZ );
386 if( finalPoints ){
387 entryPoint.SetXYZ( fEx, fEy, fEz );
388 exitPoint.SetXYZ( fXx, fXy, fXz );
389 return true;
390 }
391
392 // missed detector
393 return false;
394}

References fEx, fEy, fEz, fLx, fLy, fLz, fOx, fOy, fOz, fPx, fPy, fPz, fSx, fSy, fSz, fXx, fXy, and fXz.

◆ SetGeomFile()

void VertexGenerator::SetGeomFile ( std::string geomfile) const
virtual

Implements genie::hnl::GeomRecordVisitorI.

Definition at line 721 of file HNLVertexGenerator.cxx.

722{
723 fGeomFile = geomfile;
724}

References fGeomFile.

Referenced by main(), and TestDecay().

◆ SetStartingParameters()

void genie::hnl::VertexGenerator::SetStartingParameters ( GHepRecord * event_rec) const
private

References CoMLifetime.

Referenced by ProcessEventRecord().

Member Data Documentation

◆ aunits

double genie::hnl::VertexGenerator::aunits = genie::units::rad
mutableprivate

Definition at line 134 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), and MakeSDV().

◆ fAx1

double genie::hnl::VertexGenerator::fAx1
mutableprivate

Definition at line 168 of file HNLVertexGenerator.h.

Referenced by ApplyUserRotation(), and LoadConfig().

◆ fAx2

double genie::hnl::VertexGenerator::fAx2
private

Definition at line 168 of file HNLVertexGenerator.h.

Referenced by ApplyUserRotation(), and LoadConfig().

◆ fAz

double genie::hnl::VertexGenerator::fAz
private

Definition at line 168 of file HNLVertexGenerator.h.

Referenced by ApplyUserRotation(), and LoadConfig().

◆ fB2URotation

std::vector< double > genie::hnl::VertexGenerator::fB2URotation
private

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fB2UTranslation

std::vector< double > genie::hnl::VertexGenerator::fB2UTranslation
mutableprivate

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fBx1

double genie::hnl::VertexGenerator::fBx1
mutableprivate

Definition at line 169 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fBx2

double genie::hnl::VertexGenerator::fBx2
private

Definition at line 169 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fBz

double genie::hnl::VertexGenerator::fBz
private

Definition at line 169 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fCoMLifetime

double genie::hnl::VertexGenerator::fCoMLifetime = 0.0
mutableprivate

Definition at line 154 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

◆ fCx

double genie::hnl::VertexGenerator::fCx
mutableprivate

Definition at line 166 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fCy

double genie::hnl::VertexGenerator::fCy
private

Definition at line 166 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fCz

double genie::hnl::VertexGenerator::fCz
private

Definition at line 166 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fDetRotation

std::vector< double > genie::hnl::VertexGenerator::fDetRotation
private

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fDetTranslation

std::vector< double > genie::hnl::VertexGenerator::fDetTranslation
private

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fDx

double genie::hnl::VertexGenerator::fDx = 0.0
mutableprivate

Definition at line 146 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetDecayPoint(), and GetInterestingPoints().

◆ fDxROOT

double genie::hnl::VertexGenerator::fDxROOT = 0.0
mutableprivate

Definition at line 150 of file HNLVertexGenerator.h.

Referenced by GetDecayPoint().

◆ fDy

double genie::hnl::VertexGenerator::fDy = 0.0
private

Definition at line 146 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetDecayPoint(), and GetInterestingPoints().

◆ fDyROOT

double genie::hnl::VertexGenerator::fDyROOT = 0.0
private

Definition at line 150 of file HNLVertexGenerator.h.

Referenced by GetDecayPoint().

◆ fDz

double genie::hnl::VertexGenerator::fDz = 0.0
private

Definition at line 146 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetDecayPoint(), and GetInterestingPoints().

◆ fDzROOT

double genie::hnl::VertexGenerator::fDzROOT = 0.0
private

Definition at line 150 of file HNLVertexGenerator.h.

Referenced by GetDecayPoint().

◆ fEx

double genie::hnl::VertexGenerator::fEx = 0.0
mutableprivate

Definition at line 139 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetInterestingPoints(), and SDVEntryAndExitPoints().

◆ fExROOT

double genie::hnl::VertexGenerator::fExROOT = 0.0
mutableprivate

Definition at line 143 of file HNLVertexGenerator.h.

◆ fEy

double genie::hnl::VertexGenerator::fEy = 0.0
private

Definition at line 139 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetInterestingPoints(), and SDVEntryAndExitPoints().

◆ fEyROOT

double genie::hnl::VertexGenerator::fEyROOT = 0.0
private

Definition at line 143 of file HNLVertexGenerator.h.

◆ fEz

double genie::hnl::VertexGenerator::fEz = 0.0
private

Definition at line 139 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetInterestingPoints(), and SDVEntryAndExitPoints().

◆ fEzROOT

double genie::hnl::VertexGenerator::fEzROOT = 0.0
private

Definition at line 143 of file HNLVertexGenerator.h.

◆ fGeoManager

TGeoManager* genie::hnl::VertexGenerator::fGeoManager = 0
mutableprivate

Definition at line 159 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

◆ fGeomFile

string genie::hnl::VertexGenerator::fGeomFile = ""
mutableprivate

Definition at line 158 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord(), and SetGeomFile().

◆ fGeoVolume

TGeoVolume* genie::hnl::VertexGenerator::fGeoVolume = 0
mutableprivate

Definition at line 160 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

◆ fIsConfigLoaded

bool genie::hnl::VertexGenerator::fIsConfigLoaded = false
mutableprivate

Definition at line 131 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fLx

double genie::hnl::VertexGenerator::fLx = 0.0
mutableprivate

Definition at line 148 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), MakeSDV(), and SDVEntryAndExitPoints().

◆ fLxROOT

double genie::hnl::VertexGenerator::fLxROOT = 0.0
mutableprivate

Definition at line 152 of file HNLVertexGenerator.h.

◆ fLy

double genie::hnl::VertexGenerator::fLy = 0.0
private

Definition at line 148 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), MakeSDV(), and SDVEntryAndExitPoints().

◆ fLyROOT

double genie::hnl::VertexGenerator::fLyROOT = 0.0
private

Definition at line 152 of file HNLVertexGenerator.h.

◆ fLz

double genie::hnl::VertexGenerator::fLz = 0.0
private

Definition at line 148 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), MakeSDV(), and SDVEntryAndExitPoints().

◆ fLzROOT

double genie::hnl::VertexGenerator::fLzROOT = 0.0
private

Definition at line 152 of file HNLVertexGenerator.h.

◆ fOx

double genie::hnl::VertexGenerator::fOx = 0.0
mutableprivate

Definition at line 147 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), MakeSDV(), and SDVEntryAndExitPoints().

◆ fOxROOT

double genie::hnl::VertexGenerator::fOxROOT = 0.0
mutableprivate

Definition at line 151 of file HNLVertexGenerator.h.

◆ fOy

double genie::hnl::VertexGenerator::fOy = 0.0
private

Definition at line 147 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), MakeSDV(), and SDVEntryAndExitPoints().

◆ fOyROOT

double genie::hnl::VertexGenerator::fOyROOT = 0.0
private

Definition at line 151 of file HNLVertexGenerator.h.

◆ fOz

double genie::hnl::VertexGenerator::fOz = 0.0
private

Definition at line 147 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), MakeSDV(), and SDVEntryAndExitPoints().

◆ fOzROOT

double genie::hnl::VertexGenerator::fOzROOT = 0.0
private

Definition at line 151 of file HNLVertexGenerator.h.

◆ fPx

double genie::hnl::VertexGenerator::fPx = 0.0
mutableprivate

Definition at line 138 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), ProcessEventRecord(), and SDVEntryAndExitPoints().

◆ fPy

double genie::hnl::VertexGenerator::fPy = 0.0
private

Definition at line 138 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), ProcessEventRecord(), and SDVEntryAndExitPoints().

◆ fPz

double genie::hnl::VertexGenerator::fPz = 0.0
private

Definition at line 138 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), ProcessEventRecord(), and SDVEntryAndExitPoints().

◆ fSx

double genie::hnl::VertexGenerator::fSx = 0.0
mutableprivate

Definition at line 137 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), ProcessEventRecord(), and SDVEntryAndExitPoints().

◆ fSxROOT

double genie::hnl::VertexGenerator::fSxROOT = 0.0
mutableprivate

Definition at line 142 of file HNLVertexGenerator.h.

◆ fSy

double genie::hnl::VertexGenerator::fSy = 0.0
private

Definition at line 137 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), ProcessEventRecord(), and SDVEntryAndExitPoints().

◆ fSyROOT

double genie::hnl::VertexGenerator::fSyROOT = 0.0
private

Definition at line 142 of file HNLVertexGenerator.h.

◆ fSz

double genie::hnl::VertexGenerator::fSz = 0.0
private

Definition at line 137 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), ProcessEventRecord(), and SDVEntryAndExitPoints().

◆ fSzROOT

double genie::hnl::VertexGenerator::fSzROOT = 0.0
private

Definition at line 142 of file HNLVertexGenerator.h.

◆ fUx

double genie::hnl::VertexGenerator::fUx
mutableprivate

Definition at line 167 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fUy

double genie::hnl::VertexGenerator::fUy
private

Definition at line 167 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fUz

double genie::hnl::VertexGenerator::fUz
private

Definition at line 167 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

◆ fXx

double genie::hnl::VertexGenerator::fXx = 0.0
mutableprivate

Definition at line 140 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetInterestingPoints(), and SDVEntryAndExitPoints().

◆ fXxROOT

double genie::hnl::VertexGenerator::fXxROOT = 0.0
mutableprivate

Definition at line 144 of file HNLVertexGenerator.h.

◆ fXy

double genie::hnl::VertexGenerator::fXy = 0.0
private

Definition at line 140 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetInterestingPoints(), and SDVEntryAndExitPoints().

◆ fXyROOT

double genie::hnl::VertexGenerator::fXyROOT = 0.0
private

Definition at line 144 of file HNLVertexGenerator.h.

◆ fXz

double genie::hnl::VertexGenerator::fXz = 0.0
private

Definition at line 140 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetInterestingPoints(), and SDVEntryAndExitPoints().

◆ fXzROOT

double genie::hnl::VertexGenerator::fXzROOT = 0.0
private

Definition at line 144 of file HNLVertexGenerator.h.

◆ isUsingDk2nu

bool genie::hnl::VertexGenerator::isUsingDk2nu = false
mutableprivate

Definition at line 162 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

◆ isUsingRootGeom

bool genie::hnl::VertexGenerator::isUsingRootGeom = false
mutableprivate

Definition at line 163 of file HNLVertexGenerator.h.

◆ kNewSpeedOfLight

double genie::hnl::VertexGenerator::kNewSpeedOfLight = genie::units::kSpeedOfLight * ( genie::units::m / lunits ) / ( genie::units::s / tunits )
mutableprivate

Definition at line 156 of file HNLVertexGenerator.h.

Referenced by CalcTravelLength(), EnforceUnits(), MakeSDV(), and ProcessEventRecord().

◆ lunits

double genie::hnl::VertexGenerator::lunits = genie::units::mm
mutableprivate

Definition at line 133 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), GetDecayPoint(), and MakeSDV().

◆ lunitString

std::string genie::hnl::VertexGenerator::lunitString = "mm"
mutableprivate

Definition at line 133 of file HNLVertexGenerator.h.

Referenced by EnforceUnits().

◆ tunits

double genie::hnl::VertexGenerator::tunits = genie::units::ns
mutableprivate

Definition at line 135 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), and MakeSDV().

◆ tunitString

std::string genie::hnl::VertexGenerator::tunitString = "ns"
mutableprivate

Definition at line 135 of file HNLVertexGenerator.h.

Referenced by EnforceUnits().

◆ uMult

double genie::hnl::VertexGenerator::uMult = 1.0
mutableprivate

Definition at line 164 of file HNLVertexGenerator.h.

◆ xMult

double genie::hnl::VertexGenerator::xMult = 1.0
private

Definition at line 164 of file HNLVertexGenerator.h.


The documentation for this class was generated from the following files: