62 #include "Framework/Conventions/GBuild.h" 83 using std::ostringstream;
85 using namespace genie;
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.);
168 while(rp2 > R2-epsilon) {
171 y -= ((
y>0) ? epsilon : -epsilon);
172 rp2 = TMath::Power(x,2.) + TMath::Power(
y,2.);
174 vtx.SetXYZ(x,
y, -1.*TMath::Sqrt(TMath::Max(0.,R2-rp2)) + epsilon);
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
THE MAIN GENIE PROJECT NAMESPACE
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 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)
virtual void SimulateHadronicFinalState(GHepRecord *ev, GHepParticle *p) const =0
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
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
virtual bool HandleCompoundNucleus(GHepRecord *ev, GHepParticle *p, int mom) const =0
Misc GENIE control constants.
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 void AddParticle(const GHepParticle &p)
std::string nucl(const std::string &A, const std::string &elem)
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
Root of GENIE utility namespaces.
void Configure(const Registry &config)
double fNR
param multiplying the nuclear radius, determining how far to track hadrons beyond the "nuclear bounda...