64 #include "Conventions/GBuild.h" 85 using std::ostringstream;
87 using namespace genie;
121 LOG(
"HNIntranuke2015",
pINFO) <<
"No nuclear target found - INTRANUKE exits";
162 TVector3 vtx(999999.,999999.,999999.);
167 double x=999999.,
y=999999., epsilon = 0.001;
169 double rp2 = TMath::Power(x,2.) + TMath::Power(
y,2.);
170 while(rp2 > R2-epsilon) {
173 y -= ((
y>0) ? epsilon : -epsilon);
174 rp2 = TMath::Power(x,2.) + TMath::Power(
y,2.);
176 vtx.SetXYZ(x,
y, -1.*TMath::Sqrt(TMath::Max(0.,R2-rp2)) + epsilon);
182 vtx.RotateUz(direction);
185 <<
"Generated vtx @ R = " << vtx.Mag() <<
" fm / " 188 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);
313 <<
" >> Stepping a " << p->
Name()
314 <<
" with kinetic E = " << p->
KinE() <<
" GeV";
327 <<
"... Current version can't rescatter a " << sp->
Name();
336 bool has_interacted =
false;
345 if(has_interacted)
break;
351 if(has_interacted &&
fRemnA>0) {
354 <<
"Particle has interacted at location: " 357 }
else if(has_interacted &&
fRemnA<=0) {
360 <<
"*** Nothing left to interact with, escaping.";
367 <<
"*** Hadron escaped the nucleus! Done with it.";
381 TLorentzVector v4(0.,0.,0.,0.);
406 double d = -1.*L * TMath::Log(rnd->
RndFsi().Rndm());
409 <<
"Mean free path = " << L <<
" fm / " 410 <<
"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
#include "Numerical/GSFunc.h"
bool CanRescatter(const GHepParticle *p) const
bool fUseOset
Oset model for low energy pion in hN.
double fR0
effective nuclear size param
static RandomGen * Instance()
Access instance.
Defines the EventRecordVisitorI interface. Concrete implementations of this interface use the 'Visito...
virtual string GetINukeMode() const
const int kPdgHadronicBlob
virtual int RemnantNucleusPosition(void) const
string Vec3AsString(const TVector3 *vec)
bool fXsecNNCorr
use nuclear medium correction for NN cross section
bool IsInNucleus(const GHepParticle *p) const
double fTrackingRadius
tracking radius for the nucleus in the current event
double MeanFreePath(int pdgc, const TLorentzVector &x4, const TLorentzVector &p4, double A, double Z, double nRpi=0.5, double nRnuc=1.0, const bool useOset=false, const bool altOset=false, const bool xsecNNCorr=false, string INukeMode="XX2015")
Mean free path (pions, nucleons)
A singleton holding random number generator classes. All random number generation in GENIE should tak...
GHepStatus_t Status(void) const
void GenerateVertex(GHepRecord *ev) const
double fNR
param multiplying the nuclear radius, determining how far to track hadrons beyond the "nuclear bounda...
virtual GHepParticle * Probe(void) const
int FirstMother(void) const
void Configure(const Registry &config)
Configure the algorithm.
string Name(void) const
Name that corresponds to the PDG code.
void SetPosition(const TLorentzVector &v4)
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
virtual void SimulateHadronicFinalState(GHepRecord *ev, GHepParticle *p) const =0
virtual void Configure(const Registry &config)
Configure the algorithm.
GEvGenMode_t EventGenerationMode(void) const
void StepParticle(GHepParticle *p, double step, double nuclear_radius=-1.)
Step particle.
virtual void LoadConfig(void)=0
virtual GHepParticle * TargetNucleus(void) const
void TransportHadrons(GHepRecord *ev) const
double GenerateStep(GHepRecord *ev, GHepParticle *p) const
Misc GENIE control constants.
double KinE(bool mass_from_pdg=false) const
Get kinetic energy.
TLorentzVector * X4(void) const
void SetStatus(GHepStatus_t s)
A registry. Provides the container for algorithm configuration parameters.
bool NeedsRescattering(const GHepParticle *p) const
virtual void ProcessEventRecord(GHepRecord *event_rec) const
bool IsPseudoParticle(int pdgc)
GEvGenMode_t fGMode
event generation mode (lepton+A, hadron+A, ...)
bool fAltOset
NuWro's table-based implementation (not recommended)
int fRemnZ
remnant nucleus Z
TLorentzVector fRemnP4
P4 of remnant system.
virtual void AddParticle(const GHepParticle &p)
void SetTrackingRadius(const GHepParticle *p) const
TLorentzVector * P4(void) const
double fDelRNucleon
factor by which Nucleon Compton wavelength gets multiplied to become nuclear size enhancement ...
int fRemnA
remnant nucleus A
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.
double fHadStep
step size for intranuclear hadron transport
virtual int TargetNucleusPosition(void) const
Root of GENIE utility namespaces.
double fDelRPion
factor by which Pion Compton wavelength gets multiplied to become nuclear size enhancement ...