GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
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:
Inheritance graph
[legend]
Collaboration diagram for genie::hnl::VertexGenerator:
Collaboration graph
[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. More...
 
virtual AlgStatus_t GetStatus (void) const
 Get algorithm status. More...
 
virtual bool AllowReconfig (void) const
 
virtual AlgCmp_t Compare (const Algorithm *alg) const
 Compare with input algorithm. More...
 
virtual void SetId (const AlgId &id)
 Set algorithm ID. More...
 
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. More...
 

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. More...
 
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. More...
 
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. More...
 
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 More...
 
int AddLowRegistry (Registry *rp, bool owns=true)
 add registry with lowest priority, also update ownership More...
 
int MergeTopRegistry (const Registry &r)
 
int AddTopRegisties (const vector< Registry * > &rs, bool owns=false)
 Add registries with top priority, also udated Ownerships. More...
 
- Protected Attributes inherited from genie::Algorithm
bool fAllowReconfig
 
bool fOwnsSubstruc
 true if it owns its substructure (sub-algs,...) More...
 
AlgId fID
 algorithm name and configuration set More...
 
vector< Registry * > fConfVect
 
vector< bool > fOwnerships
 ownership for every registry in fConfVect More...
 
AlgStatus_t fStatus
 algorithm execution status More...
 
AlgMapfOwnedSubAlgMp
 local pool for owned sub-algs (taken out of the factory pool) More...
 

Detailed Description

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

Author
John Plows <komninos-john.plows physics.ox.ac.uk>
Created:
March 31st, 2022
License:
Copyright (c) 2003-2024, 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::VertexGenerator ( )

Definition at line 18 of file HNLVertexGenerator.cxx.

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

Definition at line 24 of file HNLVertexGenerator.cxx.

24  :
26 {
27 
28 }
const char * name
VertexGenerator::VertexGenerator ( string  name,
string  config 
)

Definition at line 30 of file HNLVertexGenerator.cxx.

30  :
31  GeomRecordVisitorI(name, config)
32 {
33 
34 }
const char * name
VertexGenerator::~VertexGenerator ( )

Definition at line 36 of file HNLVertexGenerator.cxx.

37 {
38 
39 }

Member Function Documentation

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

Definition at line 665 of file HNLVertexGenerator.cxx.

References fAx1, fAx2, and fAz.

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 }
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 }
double VertexGenerator::CalcTravelLength ( double  betaMag,
double  CoMLifetime,
double  maxLength 
) const
private

Definition at line 209 of file HNLVertexGenerator.cxx.

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

Referenced by ProcessEventRecord().

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 }
double CoMLifetime
static RandomGen * Instance()
Access instance.
Definition: RandomGen.cxx:71
A singleton holding random number generator classes. All random number generation in GENIE should tak...
Definition: RandomGen.h:29
TRandom3 & RndGen(void) const
rnd number generator for generic usage
Definition: RandomGen.h:80
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 }
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.

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

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

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

634 {
635  Algorithm::Configure(config);
636  this->LoadConfig();
637 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
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.

References genie::hnl::selector::__attribute__(), 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().

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 LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
double UnitFromString(string u)
Definition: UnitUtils.cxx:18
#define pWARN
Definition: Messenger.h:60
static __attribute__((unused)) double fDecayGammas[]
#define pDEBUG
Definition: Messenger.h:63
TVector3 VertexGenerator::GetDecayPoint ( double  travelLength,
TVector3 &  entryPoint,
TVector3 &  momentum 
) const
private

Definition at line 250 of file HNLVertexGenerator.cxx.

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

Referenced by ProcessEventRecord().

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 
261  fDxROOT = fDx * lunits / units::cm;
262  fDyROOT = fDy * lunits / units::cm;
263  fDzROOT = fDz * lunits / units::cm;
264 
265  TVector3 decayPoint( dx, dy, dz );
266  return decayPoint;
267 }
static constexpr double cm
Definition: Units.h:68
void VertexGenerator::GetInterestingPoints ( TVector3 &  entryPoint,
TVector3 &  exitPoint,
TVector3 &  decayPoint 
) const
private
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 }
void VertexGenerator::LoadConfig ( void  )
private

Definition at line 639 of file HNLVertexGenerator.cxx.

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().

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 }
std::vector< double > fDetRotation
int GetParamVect(const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
Handle to load vectors of parameters.
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
std::vector< double > fDetTranslation
std::vector< double > fB2URotation
std::vector< double > fB2UTranslation
#define pDEBUG
Definition: Messenger.h:63
void VertexGenerator::MakeSDV ( ) const
private

Definition at line 277 of file HNLVertexGenerator.cxx.

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().

278 {
279  fOx = 0.0; fOy = 0.0; fOz = 0.0;
280  fLx = 1.0; fLy = 1.0; fLz = 1.0; // m
281 
285 
287  * (genie::units::m / lunits)
288  / (genie::units::s / tunits);
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 }
static constexpr double s
Definition: Units.h:95
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
double UnitFromString(string u)
Definition: UnitUtils.cxx:18
void EnforceUnits(std::string length_units, std::string angle_units, std::string time_units) const
static constexpr double kSpeedOfLight
Definition: Units.h:32
static constexpr double m
Definition: Units.h:71
#define pDEBUG
Definition: Messenger.h:63
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.

References genie::hnl::selector::__attribute__(), 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 main(), and TestDecay().

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 }
virtual GHepParticle * Particle(int position) const
Definition: GHepRecord.cxx:104
virtual void SetWeight(double wght)
Definition: GHepRecord.h:130
#define pERROR
Definition: Messenger.h:59
const int kPdgNuMu
Definition: PDGCodes.h:30
virtual double Weight(void) const
Definition: GHepRecord.h:124
static constexpr double ns
Definition: Units.h:98
virtual TLorentzVector * Vertex(void) const
Definition: GHepRecord.h:140
double Vt(void) const
Get production time.
Definition: GHepParticle.h:97
void SetPosition(const TLorentzVector &v4)
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
static constexpr double GeV
Definition: Units.h:28
TLorentzVector * GetP4(void) const
#define pINFO
Definition: Messenger.h:62
double CalcTravelLength(double betaMag, double CoMLifetime, double maxLength) const
const int kPdgAntiNuMu
Definition: PDGCodes.h:31
void SetStartingParameters(GHepRecord *event_rec) const
static __attribute__((unused)) double fDecayGammas[]
virtual void SetVertex(double x, double y, double z, double t)
Definition: GHepRecord.cxx:827
static constexpr double mm
Definition: Units.h:65
virtual void AddParticle(const GHepParticle &p)
Definition: GHepRecord.cxx:499
void EnforceUnits(std::string length_units, std::string angle_units, std::string time_units) const
static constexpr double m
Definition: Units.h:71
STDHEP-like event record entry that can fit a particle or a nucleus.
Definition: GHepParticle.h:39
TVector3 GetDecayPoint(double travelLength, TVector3 &entryPoint, TVector3 &momentum) const
bool VertexGenerator::SDVEntryAndExitPoints ( TVector3 &  startPoint,
TVector3  momentum,
TVector3 &  entryPoint,
TVector3 &  exitPoint 
) const
private

Definition at line 298 of file HNLVertexGenerator.cxx.

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

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 }
void VertexGenerator::SetGeomFile ( std::string  geomfile) const
virtual

Implements genie::hnl::GeomRecordVisitorI.

Definition at line 721 of file HNLVertexGenerator.cxx.

References fGeomFile.

Referenced by main(), and TestDecay().

722 {
723  fGeomFile = geomfile;
724 }
void genie::hnl::VertexGenerator::SetStartingParameters ( GHepRecord event_rec) const
private

Referenced by ProcessEventRecord().

Member Data Documentation

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

Definition at line 134 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), and MakeSDV().

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

Definition at line 168 of file HNLVertexGenerator.h.

Referenced by ApplyUserRotation(), and LoadConfig().

double genie::hnl::VertexGenerator::fAx2
mutableprivate

Definition at line 168 of file HNLVertexGenerator.h.

Referenced by ApplyUserRotation(), and LoadConfig().

double genie::hnl::VertexGenerator::fAz
mutableprivate

Definition at line 168 of file HNLVertexGenerator.h.

Referenced by ApplyUserRotation(), and LoadConfig().

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

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 169 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

double genie::hnl::VertexGenerator::fBx2
mutableprivate

Definition at line 169 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

double genie::hnl::VertexGenerator::fBz
mutableprivate

Definition at line 169 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 154 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

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

Definition at line 166 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

double genie::hnl::VertexGenerator::fCy
mutableprivate

Definition at line 166 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

double genie::hnl::VertexGenerator::fCz
mutableprivate

Definition at line 166 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 170 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 146 of file HNLVertexGenerator.h.

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

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

Definition at line 150 of file HNLVertexGenerator.h.

Referenced by GetDecayPoint().

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

Definition at line 146 of file HNLVertexGenerator.h.

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

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

Definition at line 150 of file HNLVertexGenerator.h.

Referenced by GetDecayPoint().

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

Definition at line 146 of file HNLVertexGenerator.h.

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

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

Definition at line 150 of file HNLVertexGenerator.h.

Referenced by GetDecayPoint().

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

Definition at line 139 of file HNLVertexGenerator.h.

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

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

Definition at line 143 of file HNLVertexGenerator.h.

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

Definition at line 139 of file HNLVertexGenerator.h.

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

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

Definition at line 143 of file HNLVertexGenerator.h.

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

Definition at line 139 of file HNLVertexGenerator.h.

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

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

Definition at line 143 of file HNLVertexGenerator.h.

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

Definition at line 159 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

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

Definition at line 158 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord(), and SetGeomFile().

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

Definition at line 160 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

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

Definition at line 131 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 148 of file HNLVertexGenerator.h.

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

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

Definition at line 152 of file HNLVertexGenerator.h.

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

Definition at line 148 of file HNLVertexGenerator.h.

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

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

Definition at line 152 of file HNLVertexGenerator.h.

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

Definition at line 148 of file HNLVertexGenerator.h.

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

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

Definition at line 152 of file HNLVertexGenerator.h.

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

Definition at line 147 of file HNLVertexGenerator.h.

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

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

Definition at line 151 of file HNLVertexGenerator.h.

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

Definition at line 147 of file HNLVertexGenerator.h.

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

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

Definition at line 151 of file HNLVertexGenerator.h.

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

Definition at line 147 of file HNLVertexGenerator.h.

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

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

Definition at line 151 of file HNLVertexGenerator.h.

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

Definition at line 138 of file HNLVertexGenerator.h.

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

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

Definition at line 138 of file HNLVertexGenerator.h.

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

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

Definition at line 138 of file HNLVertexGenerator.h.

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

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

Definition at line 137 of file HNLVertexGenerator.h.

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

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

Definition at line 142 of file HNLVertexGenerator.h.

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

Definition at line 137 of file HNLVertexGenerator.h.

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

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

Definition at line 142 of file HNLVertexGenerator.h.

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

Definition at line 137 of file HNLVertexGenerator.h.

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

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

Definition at line 142 of file HNLVertexGenerator.h.

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

Definition at line 167 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

double genie::hnl::VertexGenerator::fUy
mutableprivate

Definition at line 167 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

double genie::hnl::VertexGenerator::fUz
mutableprivate

Definition at line 167 of file HNLVertexGenerator.h.

Referenced by LoadConfig().

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

Definition at line 140 of file HNLVertexGenerator.h.

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

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

Definition at line 144 of file HNLVertexGenerator.h.

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

Definition at line 140 of file HNLVertexGenerator.h.

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

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

Definition at line 144 of file HNLVertexGenerator.h.

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

Definition at line 140 of file HNLVertexGenerator.h.

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

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

Definition at line 144 of file HNLVertexGenerator.h.

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

Definition at line 162 of file HNLVertexGenerator.h.

Referenced by ProcessEventRecord().

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

Definition at line 163 of file HNLVertexGenerator.h.

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().

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

Definition at line 133 of file HNLVertexGenerator.h.

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

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

Definition at line 133 of file HNLVertexGenerator.h.

Referenced by EnforceUnits().

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

Definition at line 135 of file HNLVertexGenerator.h.

Referenced by EnforceUnits(), and MakeSDV().

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

Definition at line 135 of file HNLVertexGenerator.h.

Referenced by EnforceUnits().

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

Definition at line 164 of file HNLVertexGenerator.h.

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

Definition at line 164 of file HNLVertexGenerator.h.


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