62#include "Framework/Conventions/GBuild.h"
83using std::ostringstream;
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";
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
virtual void Configure(const Registry &config)
STDHEP-like event record entry that can fit a particle or a nucleus.
string Name(void) const
Name that corresponds to the PDG code.
int FirstMother(void) const
void SetPosition(const TLorentzVector &v4)
void SetRescatterCode(int code)
void SetFirstMother(int m)
const TLorentzVector * P4(void) const
const TLorentzVector * X4(void) const
void SetStatus(GHepStatus_t s)
double KinE(bool mass_from_pdg=false) const
Get kinetic energy.
GHepStatus_t Status(void) const
GENIE's GHEP MC event record.
virtual GHepParticle * Probe(void) const
virtual GHepParticle * TargetNucleus(void) const
GEvGenMode_t EventGenerationMode(void) const
virtual void AddParticle(const GHepParticle &p)
virtual int TargetNucleusPosition(void) const
virtual int RemnantNucleusPosition(void) const
virtual GHepParticle * Particle(int position) const
double fR0
effective nuclear size param
virtual bool HandleCompoundNucleus(GHepRecord *ev, GHepParticle *p, int mom) const =0
int fRemnZ
remnant nucleus Z
void Configure(const Registry &config)
void GenerateVertex(GHepRecord *ev) const
double fHadStep
step size for intranuclear hadron transport
virtual void ProcessEventRecord(GHepRecord *event_rec) const
double fTrackingRadius
tracking radius for the nucleus in the current event
void SetTrackingRadius(const GHepParticle *p) const
double fChPionMFPScale
tweaking factors for tuning
int fRemnA
remnant nucleus A
virtual void SimulateHadronicFinalState(GHepRecord *ev, GHepParticle *p) const =0
TLorentzVector fRemnP4
P4 of remnant system.
double fDelRPion
factor by which Pion Compton wavelength gets multiplied to become nuclear size enhancement
void TransportHadrons(GHepRecord *ev) const
double fNR
param multiplying the nuclear radius, determining how far to track hadrons beyond the "nuclear bounda...
virtual void LoadConfig(void)=0
double fNeutralPionMFPScale
bool IsInNucleus(const GHepParticle *p) const
bool NeedsRescattering(const GHepParticle *p) const
GEvGenMode_t fGMode
event generation mode (lepton+A, hadron+A, ...)
double GenerateStep(GHepRecord *ev, GHepParticle *p) const
double fDelRNucleon
factor by which Nucleon Compton wavelength gets multiplied to become nuclear size enhancement
bool CanRescatter(const GHepParticle *p) const
A singleton holding random number generator classes. All random number generation in GENIE should tak...
static RandomGen * Instance()
Access instance.
TRandom3 & RndFsi(void) const
rnd number generator used by intranuclear cascade monte carlos
A registry. Provides the container for algorithm configuration parameters.
Misc GENIE control constants.
bool IsPseudoParticle(int pdgc)
Simple functions for loading and reading nucleus dependent keys from config files.
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)
void StepParticle(GHepParticle *p, double step, double nuclear_radius=-1.)
Step particle.
string Vec3AsString(const TVector3 *vec)
Root of GENIE utility namespaces.
THE MAIN GENIE PROJECT NAMESPACE
@ kIStFinalStateNuclearRemnant
const int kPdgHadronicBlob