62 #include "Framework/Conventions/GBuild.h"
83 using std::ostringstream;
85 using namespace genie;
86 using namespace genie::utils;
87 using namespace genie::constants;
88 using namespace genie::controls;
119 LOG(
"HNIntranuke",
pINFO) <<
"No nuclear target found - INTRANUKE exits";
160 TVector3 vtx(999999.,999999.,999999.);
165 double x=999999., y=999999.,
epsilon = 0.001;
167 double rp2 = TMath::Power(x,2.) + TMath::Power(y,2.);
172 rp2 = TMath::Power(x,2.) + TMath::Power(y,2.);
174 vtx.SetXYZ(x,y, -1.*TMath::Sqrt(TMath::Max(0.,R2-rp2)) +
epsilon);
177 TVector3 direction = evrec->
Probe()->
P4()->Vect().Unit();
180 vtx.RotateUz(direction);
183 <<
"Generated vtx @ R = " << vtx.Mag() <<
" fm / "
186 TObjArrayIter piter(evrec);
281 <<
"Propagating hadrons within nucleus found in position = " << inucl;
285 <<
"No nucleus found in position = " << inucl;
295 <<
"Nucleus (A,Z) = (" <<
fRemnA <<
", " <<
fRemnZ <<
")";
297 const TLorentzVector & p4nucl = *(nucl->
P4());
301 TObjArrayIter piter(evrec);
315 <<
" >> Stepping a " << p->
Name()
316 <<
" with kinetic E = " << p->
KinE() <<
" GeV";
329 <<
"... Current version can't rescatter a " << sp->
Name();
338 bool has_interacted =
false;
347 if(has_interacted)
break;
350 if(has_interacted &&
fRemnA>0) {
353 <<
"Particle has interacted at location: "
356 }
else if(has_interacted &&
fRemnA<=0) {
359 <<
"*** Nothing left to interact with, escaping.";
366 <<
"*** Hadron escaped the nucleus! Done with it.";
380 TLorentzVector v4(0.,0.,0.,0.);
417 double d = -1.*L * TMath::Log(rnd->
RndFsi().Rndm());
420 <<
"Mean free path = " << L <<
" fm / "
421 <<
"Generated path length = " << d <<
" fm";
void SetFirstMother(int m)
virtual GHepParticle * Particle(int position) const
TRandom3 & RndFsi(void) const
rnd number generator used by intranuclear cascade monte carlos
TLorentzVector fRemnP4
P4 of remnant system.
static RandomGen * Instance()
Access instance.
const TLorentzVector * P4(void) const
Defines the EventRecordVisitorI interface. Concrete implementations of this interface use the 'Visito...
const int kPdgHadronicBlob
virtual int RemnantNucleusPosition(void) const
double fHadStep
step size for intranuclear hadron transport
double fTrackingRadius
tracking radius for the nucleus in the current event
virtual void ProcessEventRecord(GHepRecord *event_rec) const
void SetTrackingRadius(const GHepParticle *p) const
A singleton holding random number generator classes. All random number generation in GENIE should tak...
GHepStatus_t Status(void) const
virtual void SimulateHadronicFinalState(GHepRecord *ev, GHepParticle *p) const =0
virtual GHepParticle * Probe(void) const
double fDelRNucleon
factor by which Nucleon Compton wavelength gets multiplied to become nuclear size enhancement ...
int FirstMother(void) const
string Name(void) const
Name that corresponds to the PDG code.
GEvGenMode_t fGMode
event generation mode (lepton+A, hadron+A, ...)
double fDelRPion
factor by which Pion Compton wavelength gets multiplied to become nuclear size enhancement ...
void SetPosition(const TLorentzVector &v4)
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double A
bool NeedsRescattering(const GHepParticle *p) const
virtual void Configure(const Registry &config)
GEvGenMode_t EventGenerationMode(void) const
virtual void LoadConfig(void)=0
double fR0
effective nuclear size param
virtual GHepParticle * TargetNucleus(void) const
int fRemnA
remnant nucleus A
bool CanRescatter(const GHepParticle *p) const
void GenerateVertex(GHepRecord *ev) const
double MeanFreePath(int pdgc, const TLorentzVector &x4, const TLorentzVector &p4, double A, double Z, double nRpi=0.5, double nRnuc=1.0)
Mean free path (pions, nucleons)
double KinE(bool mass_from_pdg=false) const
Get kinetic energy.
void StepParticle(GHepParticle *p, double step, double nuclear_radius=-1.)
Step particle.
void TransportHadrons(GHepRecord *ev) const
const TLorentzVector * X4(void) const
void SetStatus(GHepStatus_t s)
A registry. Provides the container for algorithm configuration parameters.
bool IsPseudoParticle(int pdgc)
double fChPionMFPScale
tweaking factors for tuning
int fRemnZ
remnant nucleus Z
virtual bool HandleCompoundNucleus(GHepRecord *ev, GHepParticle *p, int mom) const =0
virtual void AddParticle(const GHepParticle &p)
double GenerateStep(GHepRecord *ev, GHepParticle *p) const
double fNeutralPionMFPScale
GENIE's GHEP MC event record.
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
STDHEP-like event record entry that can fit a particle or a nucleus.
string Vec3AsString(const TVector3 *vec)
bool IsInNucleus(const GHepParticle *p) const
virtual int TargetNucleusPosition(void) const
void Configure(const Registry &config)
double fNR
param multiplying the nuclear radius, determining how far to track hadrons beyond the "nuclear bounda...