CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes | Static Private Attributes
fastsim::NuclearInteractionFTF Class Reference

Implementation of nuclear interactions of hadrons in the tracker layers (based on FTF model of Geant4). More...

Inheritance diagram for fastsim::NuclearInteractionFTF:
fastsim::InteractionModel

Public Member Functions

void interact (fastsim::Particle &particle, const SimplifiedGeometry &layer, std::vector< std::unique_ptr< fastsim::Particle > > &secondaries, const RandomEngineAndDistribution &random) override
 Perform the interaction. More...
 
 NuclearInteractionFTF (const std::string &name, const edm::ParameterSet &cfg)
 Constructor. More...
 
 ~NuclearInteractionFTF () override
 Default destructor. More...
 
- Public Member Functions inherited from fastsim::InteractionModel
const std::string getName ()
 Return (unique) name of this interaction. More...
 
 InteractionModel (std::string name)
 Constructor. More...
 
virtual void registerProducts (edm::ProducerBase &producer) const
 In case interaction produces and stores content in the event (e.g. TrackerSimHits). More...
 
virtual void storeProducts (edm::Event &iEvent)
 In case interaction produces and stores content in the event (e.g. TrackerSimHits). More...
 
virtual ~InteractionModel ()
 Default destructor. More...
 

Private Attributes

const double corrfactors_el [numHadrons][npoints]
 elastic interaction length corrections per particle and energy More...
 
const double corrfactors_inel [numHadrons][npoints]
 inelastic interaction length corrections per particle and energy More...
 
G4LorentzVector curr4Mom
 
int currIdx
 Index of particle in vector of Geant4 particles. More...
 
const G4ParticleDefinition * currParticle
 
G4Track * currTrack
 
G4Step * dummyStep
 
size_t index
 Index for energy of particle (vectors parametrized as a function of energy) More...
 
double intLengthElastic
 Elastic interaction length. More...
 
double intLengthInelastic
 Inelastic interaction length. More...
 
const double nuclElLength [numHadrons]
 elastic interaction length in Silicon at 1 TeV per particle More...
 
const double nuclInelLength [numHadrons]
 inelastic interaction length in Silicon at 1 TeV per particle More...
 
G4Nucleus targetNucleus
 
G4CascadeInterface * theBertiniCascade
 
double theBertiniLimit
 Bertini cascade for low-energy hadrons. More...
 
G4ThreeVector theBoost
 
G4GeneratorPrecompoundInterface * theCascade
 
G4DiffuseElastic * theDiffuseElastic
 
double theDistCut
 Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking) More...
 
double theEnergyLimit
 Minimum energy of interacting particle. More...
 
G4TheoFSGenerator * theHadronicModel
 
G4LundStringFragmentation * theLund
 
G4HadProjectile theProjectile
 
G4ExcitedStringDecay * theStringDecay
 
G4FTFModel * theStringModel
 
G4PhysicsLogVector * vect
 
G4ThreeVector vectProj
 

Static Private Attributes

static const int npoints = 21
 Number of steps to cover range of particle energies. More...
 
static const int numHadrons = 30
 Number of G4 hadrons. More...
 
static const G4ParticleDefinition * theG4Hadron [numHadrons] = { 0 }
 The Geant4 particles. More...
 
static int theId [numHadrons] = {0}
 The pdgIDs of the Geant4 particles. More...
 

Detailed Description

Implementation of nuclear interactions of hadrons in the tracker layers (based on FTF model of Geant4).

Computes the probability for hadrons to interact with a nucleon of the tracker material (inelastically) and then sample nuclear interaction using FTF model of Geant4 Also, another implementation of nuclear interactions can be used that is based on FullSim events (NuclearInteraction).

Definition at line 106 of file NuclearInteractionFTF.cc.

Constructor & Destructor Documentation

fastsim::NuclearInteractionFTF::NuclearInteractionFTF ( const std::string &  name,
const edm::ParameterSet cfg 
)

Constructor.

Definition at line 248 of file NuclearInteractionFTF.cc.

References currIdx, currParticle, currTrack, dummyStep, edm::ParameterSet::getParameter(), GeV, mps_fire::i, index, fastsim::initializeOnce, intLengthElastic, intLengthInelastic, BPhysicsValidation_cfi::Lambda, MeV, npoints, numHadrons, phase2TrackerDigitizer_cfi::SigmaZero, targetNucleus, theBertiniCascade, theBertiniLimit, theDiffuseElastic, theDistCut, theEnergyLimit, theG4Hadron, theHadronicModel, theId, theLund, theStringDecay, theStringModel, and vect.

250  , curr4Mom(0.,0.,0.,0.)
251  , vectProj(0.,0.,1.)
252  , theBoost(0.,0.,0.)
253 {
254  // Angular distance of particle before/after interaction. If it too large, a daughter is created instead
255  theDistCut = cfg.getParameter<double>("distCut");
256  // Set energy limits for processes
257  theBertiniLimit = cfg.getParameter<double>("bertiniLimit") * CLHEP::GeV;
258  theEnergyLimit = cfg.getParameter<double>("energyLimit") * CLHEP::GeV;
259 
260  // FTF model
261  theHadronicModel = new G4TheoFSGenerator("FTF");
262  theStringModel = new G4FTFModel();
263  G4GeneratorPrecompoundInterface* cascade
264  = new G4GeneratorPrecompoundInterface(new CMSDummyDeexcitation());
265  theLund = new G4LundStringFragmentation();
266  theStringDecay = new G4ExcitedStringDecay(theLund);
267  theStringModel->SetFragmentationModel(theStringDecay);
268 
269  theHadronicModel->SetTransport(cascade);
270  theHadronicModel->SetHighEnergyGenerator(theStringModel);
271  theHadronicModel->SetMinEnergy(theEnergyLimit);
272 
273  // Bertini Cascade
274  theBertiniCascade = new G4CascadeInterface();
275 
276  theDiffuseElastic = new G4DiffuseElastic();
277 
278  // Geant4 particles and cross sections
279  std::call_once(initializeOnce, [] () {
280  theG4Hadron[0] = G4Proton::Proton();
281  theG4Hadron[1] = G4Neutron::Neutron();
282  theG4Hadron[2] = G4PionPlus::PionPlus();
283  theG4Hadron[3] = G4PionMinus::PionMinus();
284  theG4Hadron[4] = G4KaonPlus::KaonPlus();
285  theG4Hadron[5] = G4KaonMinus::KaonMinus();
286  theG4Hadron[6] = G4KaonZeroLong::KaonZeroLong();
287  theG4Hadron[7] = G4KaonZeroShort::KaonZeroShort();
288  theG4Hadron[8] = G4KaonZero::KaonZero();
289  theG4Hadron[9] = G4AntiKaonZero::AntiKaonZero();
291  theG4Hadron[11]= G4OmegaMinus::OmegaMinus();
292  theG4Hadron[12]= G4SigmaMinus::SigmaMinus();
293  theG4Hadron[13]= G4SigmaPlus::SigmaPlus();
295  theG4Hadron[15]= G4XiMinus::XiMinus();
296  theG4Hadron[16]= G4XiZero::XiZero();
297  theG4Hadron[17]= G4AntiProton::AntiProton();
298  theG4Hadron[18]= G4AntiNeutron::AntiNeutron();
299  theG4Hadron[19]= G4AntiLambda::AntiLambda();
300  theG4Hadron[20]= G4AntiOmegaMinus::AntiOmegaMinus();
301  theG4Hadron[21]= G4AntiSigmaMinus::AntiSigmaMinus();
302  theG4Hadron[22]= G4AntiSigmaPlus::AntiSigmaPlus();
303  theG4Hadron[23]= G4AntiSigmaZero::AntiSigmaZero();
304  theG4Hadron[24]= G4AntiXiMinus::AntiXiMinus();
305  theG4Hadron[25]= G4AntiXiZero::AntiXiZero();
306  theG4Hadron[26]= G4AntiAlpha::AntiAlpha();
307  theG4Hadron[27]= G4AntiDeuteron::AntiDeuteron();
308  theG4Hadron[28]= G4AntiTriton::AntiTriton();
309  theG4Hadron[29]= G4AntiHe3::AntiHe3();
310 
311  // other Geant4 particles
312  G4ParticleDefinition* ion = G4GenericIon::GenericIon();
313  ion->SetProcessManager(new G4ProcessManager(ion));
314  G4DecayPhysics decays;
315  decays.ConstructParticle();
316  G4ParticleTable* partTable = G4ParticleTable::GetParticleTable();
317  partTable->SetVerboseLevel(0);
318  partTable->SetReadiness();
319 
320  for(int i=0; i<numHadrons; ++i) {
321  theId[i] = theG4Hadron[i]->GetPDGEncoding();
322  }
323  });
324 
325  // local objects
326  vect = new G4PhysicsLogVector(npoints-1,100*MeV,TeV);
328  currIdx = 0;
329  index = 0;
330  currTrack = nullptr;
332 
333  // fill projectile particle definitions
334  dummyStep = new G4Step();
335  dummyStep->SetPreStepPoint(new G4StepPoint());
336 
337  // target is always Silicon
338  targetNucleus.SetParameters(28, 14);
339 }
T getParameter(std::string const &) const
G4LundStringFragmentation * theLund
const double GeV
Definition: MathUtil.h:16
const G4ParticleDefinition * currParticle
double theDistCut
Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking)
size_t index
Index for energy of particle (vectors parametrized as a function of energy)
double intLengthElastic
Elastic interaction length.
const double MeV
Base class for any interaction model between a particle and a tracker layer.
double theEnergyLimit
Minimum energy of interacting particle.
double theBertiniLimit
Bertini cascade for low-energy hadrons.
static const G4ParticleDefinition * theG4Hadron[numHadrons]
The Geant4 particles.
static const int npoints
Number of steps to cover range of particle energies.
int currIdx
Index of particle in vector of Geant4 particles.
double intLengthInelastic
Inelastic interaction length.
static std::once_flag initializeOnce
static int theId[numHadrons]
The pdgIDs of the Geant4 particles.
static const int numHadrons
Number of G4 hadrons.
fastsim::NuclearInteractionFTF::~NuclearInteractionFTF ( )
override

Default destructor.

Definition at line 341 of file NuclearInteractionFTF.cc.

References theLund, theStringDecay, theStringModel, and vect.

341  {
342  delete theStringDecay;
343  delete theStringModel;
344  delete theLund;
345  delete vect;
346 }
G4LundStringFragmentation * theLund

Member Function Documentation

void fastsim::NuclearInteractionFTF::interact ( fastsim::Particle particle,
const SimplifiedGeometry layer,
std::vector< std::unique_ptr< fastsim::Particle > > &  secondaries,
const RandomEngineAndDistribution random 
)
overridevirtual

Perform the interaction.

Parameters
particleThe particle that interacts with the matter.
layerThe detector layer that interacts with the particle.
secondariesParticles that are produced in the interaction (if any).
randomThe Random Engine.

Implements fastsim::InteractionModel.

Definition at line 349 of file NuclearInteractionFTF.cc.

References funct::abs(), fastsim::Particle::charge(), corrfactors_el, corrfactors_inel, funct::cos(), curr4Mom, currIdx, currParticle, currTrack, DEFINE_EDM_PLUGIN, dir, dummyStep, MillePedeFileConverter_cfg::e, RandomEngineAndDistribution::flatShoot(), fastsim::Particle::getMotherDeltaR(), fastsim::Particle::getMotherPdgId(), fastsim::SimplifiedGeometry::getNuclearInteractionThicknessFactor(), fastsim::SimplifiedGeometry::getThickness(), GeV, index, intLengthElastic, intLengthInelastic, ResonanceBuilder::mass, fastsim::Particle::momentum(), npoints, nuclElLength, nuclInelLength, numHadrons, fastsim::Particle::pdgId(), fastsim::Particle::position(), mps_fire::result, fastsim::Particle::simTrackIndex(), funct::sin(), mathSSE::sqrt(), targetNucleus, theBertiniCascade, theBertiniLimit, theBoost, theDiffuseElastic, theDistCut, theEnergyLimit, theG4Hadron, theHadronicModel, theId, theProjectile, vect, and vectProj.

350 {
351  int thePid = particle.pdgId();
352  //
353  // no valid PDGid
354  //
355  if(abs(thePid) <= 100 || abs(thePid) >= 1000000)
356  {
357  return;
358  }
359 
360  // particle lost all its enrgy in previous interaction
361  if (particle.momentum().E() < 1E-10)
362  {
363  return;
364  }
365 
366  double radLengths = layer.getThickness(particle.position(),particle.momentum());
367  // TEC layers have some fudge factor for nuclear interactions
368  radLengths *= layer.getNuclearInteractionThicknessFactor();
369  //
370  // no material
371  //
372  if(radLengths < 1E-10)
373  {
374  return;
375  }
376 
377  // get the G4 hadron
378  if(thePid != theId[currIdx]) {
379  currParticle = nullptr;
380  currIdx = 0;
381  for(; currIdx<numHadrons; ++currIdx) {
382  if(theId[currIdx] == thePid) {
384  // neutral kaons
385  if(7 == currIdx || 8 == currIdx) {
387  if(random.flatShoot() > 0.5) { currParticle = theG4Hadron[10]; }
388  }
389  break;
390  }
391  }
392  }
393 
394  // no valid G4 hadron found
395  if(!currParticle){
396  return;
397  }
398 
399  // fill projectile for Geant4
400  double mass = currParticle->GetPDGMass();
401  double ekin = CLHEP::GeV * particle.momentum().e() - mass;
402 
403  // check interaction length
406  if(0.0 == intLengthInelastic){
407  return;
408  }
409 
410  // apply corrections
411  if(ekin <= vect->Energy(0)){
414  }else if(ekin < vect->Energy(npoints-1)){
415  index = vect->FindBin(ekin, index);
416  double e1 = vect->Energy(index);
417  double e2 = vect->Energy(index+1);
418  intLengthElastic *= ((corrfactors_el[currIdx][index] * (e2 - ekin) +
419  corrfactors_el[currIdx][index+1] * (ekin - e1)) / (e2 - e1));
420  intLengthInelastic *= ((corrfactors_inel[currIdx][index] * (e2 - ekin) +
421  corrfactors_inel[currIdx][index+1] * (ekin - e1)) / (e2 - e1));
422  }
423 
424  double currInteractionLength = -G4Log(random.flatShoot()) *
426 
427  // Check position of nuclear interaction
428  if(currInteractionLength > radLengths)
429  {
430  return;
431  }
432 
433  // fill projectile for Geant4
434  double px = particle.momentum().px();
435  double py = particle.momentum().py();
436  double pz = particle.momentum().pz();
437  double ptot = sqrt(px*px + py*py + pz*pz);
438  double norm = 1./ptot;
439  G4ThreeVector dir(px*norm, py*norm, pz*norm);
440 
441  G4DynamicParticle* dynParticle = new G4DynamicParticle(theG4Hadron[currIdx],dir,ekin);
442  currTrack = new G4Track(dynParticle, 0.0, vectProj);
443  currTrack->SetStep(dummyStep);
444 
445  theProjectile.Initialise(*currTrack);
446  delete currTrack;
447 
448  G4HadFinalState* result;
449 
450  // elastic interaction
452  result = theDiffuseElastic->ApplyYourself(theProjectile, targetNucleus);
453  G4ThreeVector dirnew = result->GetMomentumChange().unit();
454  double cost = (dir*dirnew);
455  double sint = std::sqrt((1. - cost) * (1. + cost));
456 
457  // This vector is already in units of GeV (FastSim standard even if it is a G4Vector)
458  curr4Mom.set(ptot*dirnew.x(),ptot*dirnew.y(),ptot*dirnew.z(),particle.momentum().e());
459 
460  // Always create a daughter if the kink is large enough
461  if(sint > theDistCut){
462  // Create secondary
463  secondaries.emplace_back(new fastsim::Particle(thePid
464  ,particle.position()
465  ,XYZTLorentzVector(curr4Mom.px(), curr4Mom.py(), curr4Mom.pz(), curr4Mom.e())));
466 
467  // ClosestChargedDaughter thing for FastSim tracking
468  if(particle.charge() != 0){
469  secondaries.back()->setMotherDeltaR(particle.momentum());
470  secondaries.back()->setMotherPdgId(thePid);
471  secondaries.back()->setMotherSimTrackIndex(particle.simTrackIndex());
472  }
473 
474  // The particle is destroyed
475  particle.momentum().SetXYZT(0., 0., 0., 0.);
476  }else{
477  // ... or just rotate particle
478  particle.momentum().SetXYZT(curr4Mom.px(), curr4Mom.py(), curr4Mom.pz(), curr4Mom.e());
479  }
480 
481  // inelastic interaction
482  }else{
483  // Bertini cascade for low-energy hadrons (except light anti-nuclei)
484  // FTFP is applied above energy limit and for all anti-hyperons and anti-ions
485  if(ekin <= theBertiniLimit && currIdx < 17){
486  result = theBertiniCascade->ApplyYourself(theProjectile, targetNucleus);
487  }else{
488  result = theHadronicModel->ApplyYourself(theProjectile, targetNucleus);
489  }
490 
491  if(result){
492  int nsec = result->GetNumberOfSecondaries();
493  if(nsec > 0){
494  result->SetTrafoToLab(theProjectile.GetTrafoToLab());
495 
496  // Generate angle
497  double phi = random.flatShoot()*CLHEP::twopi;
498 
499  // rotate and store secondaries
500  for (int j=0; j<nsec; ++j) {
501  const G4DynamicParticle* dp = result->GetSecondary(j)->GetParticle();
502  int daughterID = dp->GetParticleDefinition()->GetPDGEncoding();
503 
504  // rotate around primary direction
505  curr4Mom = dp->Get4Momentum();
506  curr4Mom.rotate(phi, vectProj);
507  curr4Mom *= result->GetTrafoToLab();
508 
509  // prompt 2-gamma decay for pi0, eta, eta'p
510  // don't have a charge so the closest daughter thing does not have to be done
511  if(111 == daughterID || 221 == daughterID || 331 == daughterID){
512  theBoost = curr4Mom.boostVector();
513  double e = 0.5*dp->GetParticleDefinition()->GetPDGMass();
514  double fi = random.flatShoot()*CLHEP::twopi;
515  double cth = 2.*random.flatShoot() - 1.0;
516  double sth = sqrt((1.0 - cth)*(1.0 + cth));
517  G4LorentzVector lv(e*sth*cos(fi),e*sth*sin(fi),e*cth,e);
518  lv.boost(theBoost);
519 
520  // create secondaries
521  secondaries.emplace_back(new fastsim::Particle(22
522  ,particle.position()
523  ,XYZTLorentzVector(lv.px()/CLHEP::GeV, lv.py()/CLHEP::GeV, lv.pz()/CLHEP::GeV, lv.e()/CLHEP::GeV)));
524 
525  curr4Mom -= lv;
526  if(curr4Mom.e() > theEnergyLimit) {
527  secondaries.emplace_back(new fastsim::Particle(22
528  ,particle.position()
530  }
531 
532  // The mother particle is destroyed
533  particle.momentum().SetXYZT(0., 0., 0., 0.);
534  }else{
535  // Copied from the original code, however I am not sure if all that is correct!
536  // Energy of particles increases during the interaction!
537  // std::cout << particle.momentum().e() << "(" << dynParticle->GetParticleDefinition()->GetPDGMass()/CLHEP::GeV << ") -> " << curr4Mom.e()/CLHEP::GeV << "(" << dp->GetParticleDefinition()->GetPDGMass()/CLHEP::GeV << ")" << std::endl;
538 
539  if(curr4Mom.e() > theEnergyLimit + dp->GetParticleDefinition()->GetPDGMass()){
540  // Create secondary
541  secondaries.emplace_back(new fastsim::Particle(daughterID
542  ,particle.position()
544 
545  // ClosestChargedDaughter thing for FastSim tracking
546  if(particle.charge() != 0 && std::abs(particle.charge()-dp->GetParticleDefinition()->GetPDGCharge()) < 1E-10){
547  secondaries.back()->setMotherDeltaR(particle.momentum());
548  secondaries.back()->setMotherPdgId(particle.getMotherDeltaR() == -1 ? particle.pdgId() : particle.getMotherPdgId());
549  secondaries.back()->setMotherSimTrackIndex(particle.simTrackIndex());
550  }
551 
552  // The mother particle is destroyed
553  particle.momentum().SetXYZT(0., 0., 0., 0.);
554  }
555  }
556  }
557  }
558 
559  // Clear the final state
560  result->Clear();
561  }
562  }
563 }
const double corrfactors_el[numHadrons][npoints]
elastic interaction length corrections per particle and energy
const double GeV
Definition: MathUtil.h:16
const G4ParticleDefinition * currParticle
const math::XYZTLorentzVector & position() const
Return position of the particle.
Definition: Particle.h:142
double flatShoot(double xmin=0.0, double xmax=1.0) const
double theDistCut
Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking)
int getMotherPdgId() const
Get pdgIdto mother particle (only makes sense if mother and daughter charged).
Definition: Particle.h:213
size_t index
Index for energy of particle (vectors parametrized as a function of energy)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
double intLengthElastic
Elastic interaction length.
int pdgId() const
Return pdgId of the particle.
Definition: Particle.h:136
double theEnergyLimit
Minimum energy of interacting particle.
T sqrt(T t)
Definition: SSEVec.h:18
double theBertiniLimit
Bertini cascade for low-energy hadrons.
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
static const G4ParticleDefinition * theG4Hadron[numHadrons]
The Geant4 particles.
static const int npoints
Number of steps to cover range of particle energies.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int currIdx
Index of particle in vector of Geant4 particles.
double intLengthInelastic
Inelastic interaction length.
int simTrackIndex() const
Return index of the SimTrack.
Definition: Particle.h:155
const double corrfactors_inel[numHadrons][npoints]
inelastic interaction length corrections per particle and energy
const double nuclInelLength[numHadrons]
inelastic interaction length in Silicon at 1 TeV per particle
double getMotherDeltaR() const
Get delta R to mother particle (only makes sense if mother and daughter charged). ...
Definition: Particle.h:206
double charge() const
Return charge of the particle.
Definition: Particle.h:139
math::XYZTLorentzVector XYZTLorentzVector
const double nuclElLength[numHadrons]
elastic interaction length in Silicon at 1 TeV per particle
static int theId[numHadrons]
The pdgIDs of the Geant4 particles.
const math::XYZTLorentzVector & momentum() const
Return momentum of the particle.
Definition: Particle.h:145
dbl *** dir
Definition: mlp_gen.cc:35
Definition of a generic FastSim Particle which can be propagated through the detector (formerly Parti...
Definition: Particle.h:19
static const int numHadrons
Number of G4 hadrons.

Member Data Documentation

const double fastsim::NuclearInteractionFTF::corrfactors_el[numHadrons][npoints]
private

elastic interaction length corrections per particle and energy

Definition at line 197 of file NuclearInteractionFTF.cc.

Referenced by interact().

const double fastsim::NuclearInteractionFTF::corrfactors_inel[numHadrons][npoints]
private

inelastic interaction length corrections per particle and energy

Definition at line 163 of file NuclearInteractionFTF.cc.

Referenced by interact().

G4LorentzVector fastsim::NuclearInteractionFTF::curr4Mom
private

Definition at line 147 of file NuclearInteractionFTF.cc.

Referenced by interact().

int fastsim::NuclearInteractionFTF::currIdx
private

Index of particle in vector of Geant4 particles.

Definition at line 159 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

const G4ParticleDefinition* fastsim::NuclearInteractionFTF::currParticle
private

Definition at line 143 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4Track* fastsim::NuclearInteractionFTF::currTrack
private

Definition at line 142 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4Step* fastsim::NuclearInteractionFTF::dummyStep
private

Definition at line 141 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

size_t fastsim::NuclearInteractionFTF::index
private

Index for energy of particle (vectors parametrized as a function of energy)

Definition at line 160 of file NuclearInteractionFTF.cc.

Referenced by BeautifulSoup.PageElement::insert(), interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::intLengthElastic
private

Elastic interaction length.

Definition at line 156 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::intLengthInelastic
private

Inelastic interaction length.

Definition at line 157 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

const int fastsim::NuclearInteractionFTF::npoints = 21
staticprivate

Number of steps to cover range of particle energies.

Definition at line 126 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

const double fastsim::NuclearInteractionFTF::nuclElLength[numHadrons]
private
Initial value:
= {
9.248, 9.451, 11.545, 11.671, 32.081, 34.373, 34.373, 32.081, 0, 0, 15.739, 20.348, 15.739, 15.739, 0, 20.349, 0, 9.7514, 12.864, 15.836, 20.516, 15.836, 15.744, 0, 20.517, 20.44, 4.129, 6.0904, 4.5204, 4.5204
}

elastic interaction length in Silicon at 1 TeV per particle

Definition at line 236 of file NuclearInteractionFTF.cc.

Referenced by interact().

const double fastsim::NuclearInteractionFTF::nuclInelLength[numHadrons]
private
Initial value:
= {
4.5606, 4.4916, 5.7511, 5.7856, 6.797, 6.8373, 6.8171, 6.8171, 0, 0, 4.6926, 4.6926, 4.6926, 4.6926, 0, 4.6926, 4.6926, 4.3171, 4.3171, 4.6926, 4.6926, 4.6926, 4.6926, 0, 4.6926, 4.6926, 2.509, 2.9048, 2.5479, 2.5479
}

inelastic interaction length in Silicon at 1 TeV per particle

Definition at line 231 of file NuclearInteractionFTF.cc.

Referenced by interact().

const int fastsim::NuclearInteractionFTF::numHadrons = 30
staticprivate

Number of G4 hadrons.

Definition at line 125 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4Nucleus fastsim::NuclearInteractionFTF::targetNucleus
private

Definition at line 145 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4CascadeInterface* fastsim::NuclearInteractionFTF::theBertiniCascade
private

Definition at line 138 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theBertiniLimit
private

Bertini cascade for low-energy hadrons.

Definition at line 151 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4ThreeVector fastsim::NuclearInteractionFTF::theBoost
private

Definition at line 149 of file NuclearInteractionFTF.cc.

Referenced by interact().

G4GeneratorPrecompoundInterface* fastsim::NuclearInteractionFTF::theCascade
private

Definition at line 136 of file NuclearInteractionFTF.cc.

G4DiffuseElastic* fastsim::NuclearInteractionFTF::theDiffuseElastic
private

Definition at line 139 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theDistCut
private

Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking)

Definition at line 154 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theEnergyLimit
private

Minimum energy of interacting particle.

Definition at line 152 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

const G4ParticleDefinition * fastsim::NuclearInteractionFTF::theG4Hadron = { 0 }
staticprivate

The Geant4 particles.

Definition at line 128 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4TheoFSGenerator* fastsim::NuclearInteractionFTF::theHadronicModel
private

Definition at line 132 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

int fastsim::NuclearInteractionFTF::theId = {0}
staticprivate

The pdgIDs of the Geant4 particles.

Definition at line 129 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4LundStringFragmentation* fastsim::NuclearInteractionFTF::theLund
private

Definition at line 135 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF(), and ~NuclearInteractionFTF().

G4HadProjectile fastsim::NuclearInteractionFTF::theProjectile
private

Definition at line 146 of file NuclearInteractionFTF.cc.

Referenced by interact().

G4ExcitedStringDecay* fastsim::NuclearInteractionFTF::theStringDecay
private

Definition at line 134 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF(), and ~NuclearInteractionFTF().

G4FTFModel* fastsim::NuclearInteractionFTF::theStringModel
private

Definition at line 133 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF(), and ~NuclearInteractionFTF().

G4PhysicsLogVector* fastsim::NuclearInteractionFTF::vect
private
G4ThreeVector fastsim::NuclearInteractionFTF::vectProj
private

Definition at line 148 of file NuclearInteractionFTF.cc.

Referenced by interact().