CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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::ProducesCollector) 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] = {nullptr}
 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 101 of file NuclearInteractionFTF.cc.

Constructor & Destructor Documentation

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

Constructor.

Definition at line 298 of file NuclearInteractionFTF.cc.

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

299  : fastsim::InteractionModel(name), curr4Mom(0., 0., 0., 0.), vectProj(0., 0., 1.), theBoost(0., 0., 0.) {
300  // Angular distance of particle before/after interaction. If it too large, a daughter is created instead
301  theDistCut = cfg.getParameter<double>("distCut");
302  // Set energy limits for processes
303  theBertiniLimit = cfg.getParameter<double>("bertiniLimit") * CLHEP::GeV;
304  theEnergyLimit = cfg.getParameter<double>("energyLimit") * CLHEP::GeV;
305 
306  // FTF model
307  theHadronicModel = new G4TheoFSGenerator("FTF");
308  theStringModel = new G4FTFModel();
309  G4GeneratorPrecompoundInterface* cascade = new G4GeneratorPrecompoundInterface(new CMSDummyDeexcitation());
310  theLund = new G4LundStringFragmentation();
311  theStringDecay = new G4ExcitedStringDecay(theLund);
312  theStringModel->SetFragmentationModel(theStringDecay);
313 
314  theHadronicModel->SetTransport(cascade);
315  theHadronicModel->SetHighEnergyGenerator(theStringModel);
316  theHadronicModel->SetMinEnergy(theEnergyLimit);
317 
318  // Bertini Cascade
319  theBertiniCascade = new G4CascadeInterface();
320 
321  theDiffuseElastic = new G4DiffuseElastic();
322 
323  // Geant4 particles and cross sections
324  std::call_once(initializeOnce, []() {
325  theG4Hadron[0] = G4Proton::Proton();
326  theG4Hadron[1] = G4Neutron::Neutron();
327  theG4Hadron[2] = G4PionPlus::PionPlus();
328  theG4Hadron[3] = G4PionMinus::PionMinus();
329  theG4Hadron[4] = G4KaonPlus::KaonPlus();
330  theG4Hadron[5] = G4KaonMinus::KaonMinus();
331  theG4Hadron[6] = G4KaonZeroLong::KaonZeroLong();
332  theG4Hadron[7] = G4KaonZeroShort::KaonZeroShort();
333  theG4Hadron[8] = G4KaonZero::KaonZero();
334  theG4Hadron[9] = G4AntiKaonZero::AntiKaonZero();
335  theG4Hadron[10] = G4Lambda::Lambda();
336  theG4Hadron[11] = G4OmegaMinus::OmegaMinus();
337  theG4Hadron[12] = G4SigmaMinus::SigmaMinus();
338  theG4Hadron[13] = G4SigmaPlus::SigmaPlus();
339  theG4Hadron[14] = G4SigmaZero::SigmaZero();
340  theG4Hadron[15] = G4XiMinus::XiMinus();
341  theG4Hadron[16] = G4XiZero::XiZero();
342  theG4Hadron[17] = G4AntiProton::AntiProton();
343  theG4Hadron[18] = G4AntiNeutron::AntiNeutron();
344  theG4Hadron[19] = G4AntiLambda::AntiLambda();
345  theG4Hadron[20] = G4AntiOmegaMinus::AntiOmegaMinus();
346  theG4Hadron[21] = G4AntiSigmaMinus::AntiSigmaMinus();
347  theG4Hadron[22] = G4AntiSigmaPlus::AntiSigmaPlus();
348  theG4Hadron[23] = G4AntiSigmaZero::AntiSigmaZero();
349  theG4Hadron[24] = G4AntiXiMinus::AntiXiMinus();
350  theG4Hadron[25] = G4AntiXiZero::AntiXiZero();
351  theG4Hadron[26] = G4AntiAlpha::AntiAlpha();
352  theG4Hadron[27] = G4AntiDeuteron::AntiDeuteron();
353  theG4Hadron[28] = G4AntiTriton::AntiTriton();
354  theG4Hadron[29] = G4AntiHe3::AntiHe3();
355 
356  // other Geant4 particles
357  G4ParticleDefinition* ion = G4GenericIon::GenericIon();
358  ion->SetProcessManager(new G4ProcessManager(ion));
359  G4DecayPhysics decays;
360  decays.ConstructParticle();
361  G4ParticleTable* partTable = G4ParticleTable::GetParticleTable();
362  partTable->SetVerboseLevel(0);
363  partTable->SetReadiness();
364 
365  for (int i = 0; i < numHadrons; ++i) {
366  theId[i] = theG4Hadron[i]->GetPDGEncoding();
367  }
368  });
369 
370  // local objects
371  vect = new G4PhysicsLogVector(npoints - 1, 100 * MeV, TeV);
373  currIdx = 0;
374  index = 0;
375  currTrack = nullptr;
377 
378  // fill projectile particle definitions
379  dummyStep = new G4Step();
380  dummyStep->SetPreStepPoint(new G4StepPoint());
381 
382  // target is always Silicon
383  targetNucleus.SetParameters(28, 14);
384 }
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.
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
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 386 of file NuclearInteractionFTF.cc.

386  {
387  delete theStringDecay;
388  delete theStringModel;
389  delete theLund;
390  delete vect;
391 }
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 393 of file NuclearInteractionFTF.cc.

References funct::abs(), fastsim::Particle::charge(), corrfactors_el, corrfactors_inel, funct::cos(), DeadROC_duringRun::dir, alignCSCRings::e, RandomEngineAndDistribution::flatShoot(), fastsim::Particle::getMotherDeltaR(), fastsim::Particle::getMotherPdgId(), fastsim::SimplifiedGeometry::getNuclearInteractionThicknessFactor(), fastsim::SimplifiedGeometry::getThickness(), GeV, dqmiolumiharvest::j, ResonanceBuilder::mass, fastsim::Particle::momentum(), npoints, nuclElLength, nuclInelLength, numHadrons, fastsim::Particle::pdgId(), fastsim::Particle::position(), mps_fire::result, fastsim::Particle::simTrackIndex(), funct::sin(), and mathSSE::sqrt().

396  {
397  int thePid = particle.pdgId();
398  //
399  // no valid PDGid
400  //
401  if (abs(thePid) <= 100 || abs(thePid) >= 1000000) {
402  return;
403  }
404 
405  // particle lost all its enrgy in previous interaction
406  if (particle.momentum().E() < 1E-10) {
407  return;
408  }
409 
410  double radLengths = layer.getThickness(particle.position(), particle.momentum());
411  // TEC layers have some fudge factor for nuclear interactions
412  radLengths *= layer.getNuclearInteractionThicknessFactor();
413  //
414  // no material
415  //
416  if (radLengths < 1E-10) {
417  return;
418  }
419 
420  // get the G4 hadron
421  if (thePid != theId[currIdx]) {
422  currParticle = nullptr;
423  currIdx = 0;
424  for (; currIdx < numHadrons; ++currIdx) {
425  if (theId[currIdx] == thePid) {
427  // neutral kaons
428  if (7 == currIdx || 8 == currIdx) {
430  if (random.flatShoot() > 0.5) {
432  }
433  }
434  break;
435  }
436  }
437  }
438 
439  // no valid G4 hadron found
440  if (!currParticle) {
441  return;
442  }
443 
444  // fill projectile for Geant4
445  double mass = currParticle->GetPDGMass();
446  double ekin = CLHEP::GeV * particle.momentum().e() - mass;
447 
448  // check interaction length
451  if (0.0 == intLengthInelastic) {
452  return;
453  }
454 
455  // apply corrections
456  if (ekin <= vect->Energy(0)) {
459  } else if (ekin < vect->Energy(npoints - 1)) {
460  index = vect->FindBin(ekin, index);
461  double e1 = vect->Energy(index);
462  double e2 = vect->Energy(index + 1);
464  ((corrfactors_el[currIdx][index] * (e2 - ekin) + corrfactors_el[currIdx][index + 1] * (ekin - e1)) / (e2 - e1));
466  ((corrfactors_inel[currIdx][index] * (e2 - ekin) + corrfactors_inel[currIdx][index + 1] * (ekin - e1)) /
467  (e2 - e1));
468  }
469 
470  double currInteractionLength =
472 
473  // Check position of nuclear interaction
474  if (currInteractionLength > radLengths) {
475  return;
476  }
477 
478  // fill projectile for Geant4
479  double px = particle.momentum().px();
480  double py = particle.momentum().py();
481  double pz = particle.momentum().pz();
482  double ptot = sqrt(px * px + py * py + pz * pz);
483  double norm = 1. / ptot;
484  G4ThreeVector dir(px * norm, py * norm, pz * norm);
485 
486  G4DynamicParticle* dynParticle = new G4DynamicParticle(theG4Hadron[currIdx], dir, ekin);
487  currTrack = new G4Track(dynParticle, 0.0, vectProj);
488  currTrack->SetStep(dummyStep);
489 
490  theProjectile.Initialise(*currTrack);
491  delete currTrack;
492 
493  G4HadFinalState* result;
494 
495  // elastic interaction
497  result = theDiffuseElastic->ApplyYourself(theProjectile, targetNucleus);
498  G4ThreeVector dirnew = result->GetMomentumChange().unit();
499  double cost = (dir * dirnew);
500  double sint = std::sqrt((1. - cost) * (1. + cost));
501 
502  // This vector is already in units of GeV (FastSim standard even if it is a G4Vector)
503  curr4Mom.set(ptot * dirnew.x(), ptot * dirnew.y(), ptot * dirnew.z(), particle.momentum().e());
504 
505  // Always create a daughter if the kink is large enough
506  if (sint > theDistCut) {
507  // Create secondary
508  secondaries.emplace_back(new fastsim::Particle(
509  thePid, particle.position(), XYZTLorentzVector(curr4Mom.px(), curr4Mom.py(), curr4Mom.pz(), curr4Mom.e())));
510 
511  // ClosestChargedDaughter thing for FastSim tracking
512  if (particle.charge() != 0) {
513  secondaries.back()->setMotherDeltaR(particle.momentum());
514  secondaries.back()->setMotherPdgId(thePid);
515  secondaries.back()->setMotherSimTrackIndex(particle.simTrackIndex());
516  }
517 
518  // The particle is destroyed
519  particle.momentum().SetXYZT(0., 0., 0., 0.);
520  } else {
521  // ... or just rotate particle
522  particle.momentum().SetXYZT(curr4Mom.px(), curr4Mom.py(), curr4Mom.pz(), curr4Mom.e());
523  }
524 
525  // inelastic interaction
526  } else {
527  // Bertini cascade for low-energy hadrons (except light anti-nuclei)
528  // FTFP is applied above energy limit and for all anti-hyperons and anti-ions
529  if (ekin <= theBertiniLimit && currIdx < 17) {
530  result = theBertiniCascade->ApplyYourself(theProjectile, targetNucleus);
531  } else {
532  result = theHadronicModel->ApplyYourself(theProjectile, targetNucleus);
533  }
534 
535  if (result) {
536  int nsec = result->GetNumberOfSecondaries();
537  if (nsec > 0) {
538  result->SetTrafoToLab(theProjectile.GetTrafoToLab());
539 
540  // Generate angle
541  double phi = random.flatShoot() * CLHEP::twopi;
542 
543  // rotate and store secondaries
544  for (int j = 0; j < nsec; ++j) {
545  const G4DynamicParticle* dp = result->GetSecondary(j)->GetParticle();
546  int daughterID = dp->GetParticleDefinition()->GetPDGEncoding();
547 
548  // rotate around primary direction
549  curr4Mom = dp->Get4Momentum();
550  curr4Mom.rotate(phi, vectProj);
551  curr4Mom *= result->GetTrafoToLab();
552 
553  // prompt 2-gamma decay for pi0, eta, eta'p
554  // don't have a charge so the closest daughter thing does not have to be done
555  if (111 == daughterID || 221 == daughterID || 331 == daughterID) {
556  theBoost = curr4Mom.boostVector();
557  double e = 0.5 * dp->GetParticleDefinition()->GetPDGMass();
558  double fi = random.flatShoot() * CLHEP::twopi;
559  double cth = 2. * random.flatShoot() - 1.0;
560  double sth = sqrt((1.0 - cth) * (1.0 + cth));
561  G4LorentzVector lv(e * sth * cos(fi), e * sth * sin(fi), e * cth, e);
562  lv.boost(theBoost);
563 
564  // create secondaries
565  secondaries.emplace_back(new fastsim::Particle(
566  22,
567  particle.position(),
569  lv.px() / CLHEP::GeV, lv.py() / CLHEP::GeV, lv.pz() / CLHEP::GeV, lv.e() / CLHEP::GeV)));
570 
571  curr4Mom -= lv;
572  if (curr4Mom.e() > theEnergyLimit) {
573  secondaries.emplace_back(new fastsim::Particle(22,
574  particle.position(),
576  curr4Mom.py() / CLHEP::GeV,
577  curr4Mom.pz() / CLHEP::GeV,
578  curr4Mom.e() / CLHEP::GeV)));
579  }
580 
581  // The mother particle is destroyed
582  particle.momentum().SetXYZT(0., 0., 0., 0.);
583  } else {
584  // Copied from the original code, however I am not sure if all that is correct!
585  // Energy of particles increases during the interaction!
586  // std::cout << particle.momentum().e() << "(" << dynParticle->GetParticleDefinition()->GetPDGMass()/CLHEP::GeV << ") -> " << curr4Mom.e()/CLHEP::GeV << "(" << dp->GetParticleDefinition()->GetPDGMass()/CLHEP::GeV << ")" << std::endl;
587 
588  if (curr4Mom.e() > theEnergyLimit + dp->GetParticleDefinition()->GetPDGMass()) {
589  // Create secondary
590  secondaries.emplace_back(new fastsim::Particle(daughterID,
591  particle.position(),
593  curr4Mom.py() / CLHEP::GeV,
594  curr4Mom.pz() / CLHEP::GeV,
595  curr4Mom.e() / CLHEP::GeV)));
596 
597  // ClosestChargedDaughter thing for FastSim tracking
598  if (particle.charge() != 0 &&
599  std::abs(particle.charge() - dp->GetParticleDefinition()->GetPDGCharge()) < 1E-10) {
600  secondaries.back()->setMotherDeltaR(particle.momentum());
601  secondaries.back()->setMotherPdgId(particle.getMotherDeltaR() == -1 ? particle.pdgId()
602  : particle.getMotherPdgId());
603  secondaries.back()->setMotherSimTrackIndex(particle.simTrackIndex());
604  }
605 
606  // The mother particle is destroyed
607  particle.momentum().SetXYZT(0., 0., 0., 0.);
608  }
609  }
610  }
611  }
612 
613  // Clear the final state
614  result->Clear();
615  }
616  }
617 }
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:140
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:209
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:134
constexpr std::array< uint8_t, layerIndexSize > layer
tuple result
Definition: mps_fire.py:311
double theEnergyLimit
Minimum energy of interacting particle.
T sqrt(T t)
Definition: SSEVec.h:19
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:153
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:202
double charge() const
Return charge of the particle.
Definition: Particle.h:137
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:143
Definition of a generic FastSim Particle which can be propagated through the detector (formerly Parti...
Definition: Particle.h:16
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25
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 220 of file NuclearInteractionFTF.cc.

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

inelastic interaction length corrections per particle and energy

Definition at line 160 of file NuclearInteractionFTF.cc.

G4LorentzVector fastsim::NuclearInteractionFTF::curr4Mom
private

Definition at line 144 of file NuclearInteractionFTF.cc.

int fastsim::NuclearInteractionFTF::currIdx
private

Index of particle in vector of Geant4 particles.

Definition at line 156 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

const G4ParticleDefinition* fastsim::NuclearInteractionFTF::currParticle
private

Definition at line 140 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4Track* fastsim::NuclearInteractionFTF::currTrack
private

Definition at line 139 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4Step* fastsim::NuclearInteractionFTF::dummyStep
private

Definition at line 138 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

size_t fastsim::NuclearInteractionFTF::index
private

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

Definition at line 157 of file NuclearInteractionFTF.cc.

Referenced by BeautifulSoup.PageElement::_invert(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::intLengthElastic
private

Elastic interaction length.

Definition at line 153 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::intLengthInelastic
private

Inelastic interaction length.

Definition at line 154 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

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

Number of steps to cover range of particle energies.

Definition at line 123 of file NuclearInteractionFTF.cc.

Referenced by 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 285 of file NuclearInteractionFTF.cc.

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 279 of file NuclearInteractionFTF.cc.

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

Number of G4 hadrons.

Definition at line 122 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4Nucleus fastsim::NuclearInteractionFTF::targetNucleus
private

Definition at line 142 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4CascadeInterface* fastsim::NuclearInteractionFTF::theBertiniCascade
private

Definition at line 135 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theBertiniLimit
private

Bertini cascade for low-energy hadrons.

Definition at line 148 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4ThreeVector fastsim::NuclearInteractionFTF::theBoost
private

Definition at line 146 of file NuclearInteractionFTF.cc.

G4GeneratorPrecompoundInterface* fastsim::NuclearInteractionFTF::theCascade
private

Definition at line 133 of file NuclearInteractionFTF.cc.

G4DiffuseElastic* fastsim::NuclearInteractionFTF::theDiffuseElastic
private

Definition at line 136 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theDistCut
private

Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking)

Definition at line 151 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theEnergyLimit
private

Minimum energy of interacting particle.

Definition at line 149 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

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

The Geant4 particles.

Definition at line 125 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4TheoFSGenerator* fastsim::NuclearInteractionFTF::theHadronicModel
private

Definition at line 129 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

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

The pdgIDs of the Geant4 particles.

Definition at line 126 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4LundStringFragmentation* fastsim::NuclearInteractionFTF::theLund
private

Definition at line 132 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4HadProjectile fastsim::NuclearInteractionFTF::theProjectile
private

Definition at line 143 of file NuclearInteractionFTF.cc.

G4ExcitedStringDecay* fastsim::NuclearInteractionFTF::theStringDecay
private

Definition at line 131 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4FTFModel* fastsim::NuclearInteractionFTF::theStringModel
private

Definition at line 130 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4PhysicsLogVector* fastsim::NuclearInteractionFTF::vect
private

Definition at line 128 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

G4ThreeVector fastsim::NuclearInteractionFTF::vectProj
private

Definition at line 145 of file NuclearInteractionFTF.cc.