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...
 
virtual void interact (Particle &particle, const SimplifiedGeometry &layer, std::vector< std::unique_ptr< Particle > > &secondaries, const RandomEngineAndDistribution &random)=0
 Perform the 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 102 of file NuclearInteractionFTF.cc.

Constructor & Destructor Documentation

◆ NuclearInteractionFTF()

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

Constructor.

Definition at line 299 of file NuclearInteractionFTF.cc.

References looper::cfg, currIdx, currParticle, currTrack, bJpsiMuMuTrigSettings_cff::decays, dummyStep, mps_fire::i, index, fastsim::initializeOnce, intLengthElastic, intLengthInelastic, BPhysicsValidation_cfi::Lambda, npoints, numHadrons, phase2TrackerDigitizer_cfi::SigmaZero, targetNucleus, theBertiniCascade, theBertiniLimit, theDiffuseElastic, theDistCut, theEnergyLimit, theG4Hadron, theHadronicModel, theId, theLund, theStringDecay, theStringModel, and vect.

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

◆ ~NuclearInteractionFTF()

fastsim::NuclearInteractionFTF::~NuclearInteractionFTF ( )
override

Default destructor.

Definition at line 387 of file NuclearInteractionFTF.cc.

387  {
388  delete theStringDecay;
389  delete theStringModel;
390  delete theLund;
391  delete vect;
392 }
G4LundStringFragmentation * theLund

Member Function Documentation

◆ interact()

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

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.

Definition at line 394 of file NuclearInteractionFTF.cc.

References funct::abs(), fastsim::Particle::charge(), corrfactors_el, corrfactors_inel, funct::cos(), DeadROC_duringRun::dir, Calorimetry_cff::dp, MillePedeFileConverter_cfg::e, StorageManager_cfg::e1, EcalCondDBWriter_cfi::Energy, RandomEngineAndDistribution::flatShoot(), fastsim::Particle::getMotherDeltaR(), fastsim::Particle::getMotherPdgId(), dqmiolumiharvest::j, EgHLTOffHistBins_cfi::mass, fastsim::Particle::momentum(), npoints, nuclElLength, nuclInelLength, numHadrons, fastsim::Particle::pdgId(), fastsim::Particle::position(), multPhiCorr_741_25nsDY_cfi::px, multPhiCorr_741_25nsDY_cfi::py, mps_fire::result, fastsim::Particle::simTrackIndex(), funct::sin(), and mathSSE::sqrt().

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

Member Data Documentation

◆ corrfactors_el

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

elastic interaction length corrections per particle and energy

Definition at line 221 of file NuclearInteractionFTF.cc.

◆ corrfactors_inel

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

inelastic interaction length corrections per particle and energy

Definition at line 161 of file NuclearInteractionFTF.cc.

◆ curr4Mom

G4LorentzVector fastsim::NuclearInteractionFTF::curr4Mom
private

Definition at line 145 of file NuclearInteractionFTF.cc.

◆ currIdx

int fastsim::NuclearInteractionFTF::currIdx
private

Index of particle in vector of Geant4 particles.

Definition at line 157 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ currParticle

const G4ParticleDefinition* fastsim::NuclearInteractionFTF::currParticle
private

Definition at line 141 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ currTrack

G4Track* fastsim::NuclearInteractionFTF::currTrack
private

Definition at line 140 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ dummyStep

G4Step* fastsim::NuclearInteractionFTF::dummyStep
private

Definition at line 139 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ index

size_t fastsim::NuclearInteractionFTF::index
private

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

Definition at line 158 of file NuclearInteractionFTF.cc.

Referenced by edmTracerCompactLogViewer.EDModuleTransitionParser::_postJson(), edmTracerCompactLogViewer.ESModuleTransitionParser::_postJson(), edmModuleAllocMonitorAnalyze.EDModuleTransitionParser::_postJsonInfo(), edmModuleAllocMonitorAnalyze.ESModuleTransitionParser::_postJsonInfo(), edmModuleAllocMonitorAnalyze.EDModuleTransitionParser::_postJsonVis(), edmModuleAllocMonitorAnalyze.ESModuleTransitionParser::_postJsonVis(), edmTracerCompactLogViewer.EDModuleTransitionParser::_preJson(), edmTracerCompactLogViewer.ESModuleTransitionParser::_preJson(), edmModuleAllocMonitorAnalyze.EDModuleTransitionParser::_preJsonInfo(), edmModuleAllocMonitorAnalyze.ESModuleTransitionParser::_preJsonInfo(), edmModuleAllocMonitorAnalyze.EDModuleTransitionParser::_preJsonVis(), edmModuleAllocMonitorAnalyze.ESModuleTransitionParser::_preJsonVis(), edmTracerCompactLogViewer.PostSourceTransitionParser::jsonInfo(), edmModuleAllocMonitorAnalyze.PostFrameworkTransitionParser::jsonInfo(), edmModuleAllocMonitorAnalyze.PreSourceTransitionParser::jsonInfo(), edmTracerCompactLogViewer.PostEDModulePrefetchingParser::jsonInfo(), edmTracerCompactLogViewer.PostEDModuleAcquireParser::jsonInfo(), edmModuleAllocMonitorAnalyze.PostSourceTransitionParser::jsonInfo(), edmModuleAllocMonitorAnalyze.PreEventReadFromSourceParser::jsonInfo(), edmModuleAllocMonitorAnalyze.PostEventReadFromSourceParser::jsonInfo(), edmModuleAllocMonitorAnalyze.PreFrameworkTransitionParser::jsonVisInfo(), edmModuleAllocMonitorAnalyze.PostFrameworkTransitionParser::jsonVisInfo(), edmModuleAllocMonitorAnalyze.PostSourceTransitionParser::jsonVisInfo(), edmModuleAllocMonitorAnalyze.PostEDModuleAcquireParser::jsonVisInfo(), NuclearInteractionFTF(), edmTracerCompactLogViewer.EDModuleTransitionParser::textPrefix(), edmTracerCompactLogViewer.ESModuleTransitionParser::textPrefix(), edmModuleAllocMonitorAnalyze.EDModuleTransitionParser::textPrefix(), and edmModuleAllocMonitorAnalyze.ESModuleTransitionParser::textPrefix().

◆ intLengthElastic

double fastsim::NuclearInteractionFTF::intLengthElastic
private

Elastic interaction length.

Definition at line 154 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ intLengthInelastic

double fastsim::NuclearInteractionFTF::intLengthInelastic
private

Inelastic interaction length.

Definition at line 155 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ npoints

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

Number of steps to cover range of particle energies.

Definition at line 124 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ nuclElLength

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

◆ nuclInelLength

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

◆ numHadrons

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

Number of G4 hadrons.

Definition at line 123 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ targetNucleus

G4Nucleus fastsim::NuclearInteractionFTF::targetNucleus
private

Definition at line 143 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theBertiniCascade

G4CascadeInterface* fastsim::NuclearInteractionFTF::theBertiniCascade
private

Definition at line 136 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theBertiniLimit

double fastsim::NuclearInteractionFTF::theBertiniLimit
private

Bertini cascade for low-energy hadrons.

Definition at line 149 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theBoost

G4ThreeVector fastsim::NuclearInteractionFTF::theBoost
private

Definition at line 147 of file NuclearInteractionFTF.cc.

◆ theCascade

G4GeneratorPrecompoundInterface* fastsim::NuclearInteractionFTF::theCascade
private

Definition at line 134 of file NuclearInteractionFTF.cc.

◆ theDiffuseElastic

G4DiffuseElastic* fastsim::NuclearInteractionFTF::theDiffuseElastic
private

Definition at line 137 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theDistCut

double fastsim::NuclearInteractionFTF::theDistCut
private

Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking)

Definition at line 152 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theEnergyLimit

double fastsim::NuclearInteractionFTF::theEnergyLimit
private

Minimum energy of interacting particle.

Definition at line 150 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theG4Hadron

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

The Geant4 particles.

Definition at line 126 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theHadronicModel

G4TheoFSGenerator* fastsim::NuclearInteractionFTF::theHadronicModel
private

Definition at line 130 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theId

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

The pdgIDs of the Geant4 particles.

Definition at line 127 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theLund

G4LundStringFragmentation* fastsim::NuclearInteractionFTF::theLund
private

Definition at line 133 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theProjectile

G4HadProjectile fastsim::NuclearInteractionFTF::theProjectile
private

Definition at line 144 of file NuclearInteractionFTF.cc.

◆ theStringDecay

G4ExcitedStringDecay* fastsim::NuclearInteractionFTF::theStringDecay
private

Definition at line 132 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theStringModel

G4FTFModel* fastsim::NuclearInteractionFTF::theStringModel
private

Definition at line 131 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ vect

G4PhysicsLogVector* fastsim::NuclearInteractionFTF::vect
private

Definition at line 129 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ vectProj

G4ThreeVector fastsim::NuclearInteractionFTF::vectProj
private

Definition at line 146 of file NuclearInteractionFTF.cc.