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::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

◆ NuclearInteractionFTF()

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

Constructor.

Definition at line 298 of file NuclearInteractionFTF.cc.

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();
336  theG4Hadron[11] = G4OmegaMinus::OmegaMinus();
337  theG4Hadron[12] = G4SigmaMinus::SigmaMinus();
338  theG4Hadron[13] = G4SigmaPlus::SigmaPlus();
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 }

References looper::cfg, currIdx, currParticle, currTrack, bJpsiMuMuTrigSettings_cff::decays, dummyStep, 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.

◆ ~NuclearInteractionFTF()

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 }

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 
)
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.

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
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) {
531  } else {
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 }

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(), GeV, dqmiolumiharvest::j, phase1PixelTopology::layer, 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().

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

◆ curr4Mom

G4LorentzVector fastsim::NuclearInteractionFTF::curr4Mom
private

Definition at line 144 of file NuclearInteractionFTF.cc.

◆ currIdx

int fastsim::NuclearInteractionFTF::currIdx
private

Index of particle in vector of Geant4 particles.

Definition at line 156 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ currParticle

const G4ParticleDefinition* fastsim::NuclearInteractionFTF::currParticle
private

Definition at line 140 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ currTrack

G4Track* fastsim::NuclearInteractionFTF::currTrack
private

Definition at line 139 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ dummyStep

G4Step* fastsim::NuclearInteractionFTF::dummyStep
private

Definition at line 138 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 157 of file NuclearInteractionFTF.cc.

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

◆ intLengthElastic

double fastsim::NuclearInteractionFTF::intLengthElastic
private

Elastic interaction length.

Definition at line 153 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ intLengthInelastic

double fastsim::NuclearInteractionFTF::intLengthInelastic
private

Inelastic interaction length.

Definition at line 154 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 123 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 285 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 279 of file NuclearInteractionFTF.cc.

◆ numHadrons

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

Number of G4 hadrons.

Definition at line 122 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ targetNucleus

G4Nucleus fastsim::NuclearInteractionFTF::targetNucleus
private

Definition at line 142 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theBertiniCascade

G4CascadeInterface* fastsim::NuclearInteractionFTF::theBertiniCascade
private

Definition at line 135 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theBertiniLimit

double fastsim::NuclearInteractionFTF::theBertiniLimit
private

Bertini cascade for low-energy hadrons.

Definition at line 148 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theBoost

G4ThreeVector fastsim::NuclearInteractionFTF::theBoost
private

Definition at line 146 of file NuclearInteractionFTF.cc.

◆ theCascade

G4GeneratorPrecompoundInterface* fastsim::NuclearInteractionFTF::theCascade
private

Definition at line 133 of file NuclearInteractionFTF.cc.

◆ theDiffuseElastic

G4DiffuseElastic* fastsim::NuclearInteractionFTF::theDiffuseElastic
private

Definition at line 136 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theDistCut

double fastsim::NuclearInteractionFTF::theDistCut
private

Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking)

Definition at line 151 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theEnergyLimit

double fastsim::NuclearInteractionFTF::theEnergyLimit
private

Minimum energy of interacting particle.

Definition at line 149 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theG4Hadron

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

The Geant4 particles.

Definition at line 125 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theHadronicModel

G4TheoFSGenerator* fastsim::NuclearInteractionFTF::theHadronicModel
private

Definition at line 129 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theId

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

The pdgIDs of the Geant4 particles.

Definition at line 126 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theLund

G4LundStringFragmentation* fastsim::NuclearInteractionFTF::theLund
private

Definition at line 132 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theProjectile

G4HadProjectile fastsim::NuclearInteractionFTF::theProjectile
private

Definition at line 143 of file NuclearInteractionFTF.cc.

◆ theStringDecay

G4ExcitedStringDecay* fastsim::NuclearInteractionFTF::theStringDecay
private

Definition at line 131 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ theStringModel

G4FTFModel* fastsim::NuclearInteractionFTF::theStringModel
private

Definition at line 130 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ vect

G4PhysicsLogVector* fastsim::NuclearInteractionFTF::vect
private

Definition at line 128 of file NuclearInteractionFTF.cc.

Referenced by NuclearInteractionFTF().

◆ vectProj

G4ThreeVector fastsim::NuclearInteractionFTF::vectProj
private

Definition at line 145 of file NuclearInteractionFTF.cc.

fastsim::NuclearInteractionFTF::theBoost
G4ThreeVector theBoost
Definition: NuclearInteractionFTF.cc:146
fastsim::Particle::momentum
const math::XYZTLorentzVector & momentum() const
Return momentum of the particle.
Definition: Particle.h:143
bJpsiMuMuTrigSettings_cff.decays
decays
Definition: bJpsiMuMuTrigSettings_cff.py:15
mps_fire.i
i
Definition: mps_fire.py:428
EcalCondDBWriter_cfi.Energy
Energy
Definition: EcalCondDBWriter_cfi.py:152
fastsim::NuclearInteractionFTF::corrfactors_el
const double corrfactors_el[numHadrons][npoints]
elastic interaction length corrections per particle and energy
Definition: NuclearInteractionFTF.cc:220
fastsim::NuclearInteractionFTF::theBertiniCascade
G4CascadeInterface * theBertiniCascade
Definition: NuclearInteractionFTF.cc:135
multPhiCorr_741_25nsDY_cfi.py
py
Definition: multPhiCorr_741_25nsDY_cfi.py:12
fastsim::NuclearInteractionFTF::theProjectile
G4HadProjectile theProjectile
Definition: NuclearInteractionFTF.cc:143
fastsim::NuclearInteractionFTF::intLengthElastic
double intLengthElastic
Elastic interaction length.
Definition: NuclearInteractionFTF.cc:153
fastsim::NuclearInteractionFTF::index
size_t index
Index for energy of particle (vectors parametrized as a function of energy)
Definition: NuclearInteractionFTF.cc:157
fastsim::NuclearInteractionFTF::theStringDecay
G4ExcitedStringDecay * theStringDecay
Definition: NuclearInteractionFTF.cc:131
fastsim::NuclearInteractionFTF::curr4Mom
G4LorentzVector curr4Mom
Definition: NuclearInteractionFTF.cc:144
MeV
const double MeV
fastsim::Particle::simTrackIndex
int simTrackIndex() const
Return index of the SimTrack.
Definition: Particle.h:153
fastsim::NuclearInteractionFTF::theEnergyLimit
double theEnergyLimit
Minimum energy of interacting particle.
Definition: NuclearInteractionFTF.cc:149
BPhysicsValidation_cfi.Lambda
Lambda
Definition: BPhysicsValidation_cfi.py:63
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
fastsim::InteractionModel
Base class for any interaction model between a particle and a tracker layer.
Definition: InteractionModel.h:29
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
phase2TrackerDigitizer_cfi.SigmaZero
SigmaZero
Definition: phase2TrackerDigitizer_cfi.py:28
Calorimetry_cff.dp
dp
Definition: Calorimetry_cff.py:158
fastsim::NuclearInteractionFTF::theG4Hadron
static const G4ParticleDefinition * theG4Hadron[numHadrons]
The Geant4 particles.
Definition: NuclearInteractionFTF.cc:125
fastsim::NuclearInteractionFTF::dummyStep
G4Step * dummyStep
Definition: NuclearInteractionFTF.cc:138
fastsim::NuclearInteractionFTF::npoints
static const int npoints
Number of steps to cover range of particle energies.
Definition: NuclearInteractionFTF.cc:123
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
fastsim::NuclearInteractionFTF::intLengthInelastic
double intLengthInelastic
Inelastic interaction length.
Definition: NuclearInteractionFTF.cc:154
fastsim::Particle::position
const math::XYZTLorentzVector & position() const
Return position of the particle.
Definition: Particle.h:140
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
fastsim::NuclearInteractionFTF::theDiffuseElastic
G4DiffuseElastic * theDiffuseElastic
Definition: NuclearInteractionFTF.cc:136
fastsim::NuclearInteractionFTF::theHadronicModel
G4TheoFSGenerator * theHadronicModel
Definition: NuclearInteractionFTF.cc:129
fastsim::NuclearInteractionFTF::vect
G4PhysicsLogVector * vect
Definition: NuclearInteractionFTF.cc:128
fastsim::Particle::getMotherPdgId
int getMotherPdgId() const
Get pdgIdto mother particle (only makes sense if mother and daughter charged).
Definition: Particle.h:209
fastsim::NuclearInteractionFTF::targetNucleus
G4Nucleus targetNucleus
Definition: NuclearInteractionFTF.cc:142
GeV
const double GeV
Definition: MathUtil.h:16
fastsim::Particle::pdgId
int pdgId() const
Return pdgId of the particle.
Definition: Particle.h:134
StorageManager_cfg.e1
e1
Definition: StorageManager_cfg.py:16
fastsim::NuclearInteractionFTF::corrfactors_inel
const double corrfactors_inel[numHadrons][npoints]
inelastic interaction length corrections per particle and energy
Definition: NuclearInteractionFTF.cc:160
fastsim::NuclearInteractionFTF::vectProj
G4ThreeVector vectProj
Definition: NuclearInteractionFTF.cc:145
fastsim::Particle::charge
double charge() const
Return charge of the particle.
Definition: Particle.h:137
fastsim::NuclearInteractionFTF::currIdx
int currIdx
Index of particle in vector of Geant4 particles.
Definition: NuclearInteractionFTF.cc:156
fastsim::Particle
Definition of a generic FastSim Particle which can be propagated through the detector (formerly Parti...
Definition: Particle.h:16
fastsim::initializeOnce
static std::once_flag initializeOnce
Definition: NuclearInteraction.cc:343
fastsim::NuclearInteractionFTF::theStringModel
G4FTFModel * theStringModel
Definition: NuclearInteractionFTF.cc:130
RandomEngineAndDistribution::flatShoot
double flatShoot(double xmin=0.0, double xmax=1.0) const
Definition: RandomEngineAndDistribution.h:27
fastsim::NuclearInteractionFTF::theBertiniLimit
double theBertiniLimit
Bertini cascade for low-energy hadrons.
Definition: NuclearInteractionFTF.cc:148
fastsim::NuclearInteractionFTF::nuclInelLength
const double nuclInelLength[numHadrons]
inelastic interaction length in Silicon at 1 TeV per particle
Definition: NuclearInteractionFTF.cc:279
looper.cfg
cfg
Definition: looper.py:297
DDAxes::phi
multPhiCorr_741_25nsDY_cfi.px
px
Definition: multPhiCorr_741_25nsDY_cfi.py:10
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
fastsim::NuclearInteractionFTF::nuclElLength
const double nuclElLength[numHadrons]
elastic interaction length in Silicon at 1 TeV per particle
Definition: NuclearInteractionFTF.cc:285
fastsim::NuclearInteractionFTF::currParticle
const G4ParticleDefinition * currParticle
Definition: NuclearInteractionFTF.cc:140
mps_fire.result
result
Definition: mps_fire.py:311
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
fastsim::Particle::getMotherDeltaR
double getMotherDeltaR() const
Get delta R to mother particle (only makes sense if mother and daughter charged).
Definition: Particle.h:202
fastsim::NuclearInteractionFTF::numHadrons
static const int numHadrons
Number of G4 hadrons.
Definition: NuclearInteractionFTF.cc:122
fastsim::NuclearInteractionFTF::theId
static int theId[numHadrons]
The pdgIDs of the Geant4 particles.
Definition: NuclearInteractionFTF.cc:126
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
fastsim::NuclearInteractionFTF::currTrack
G4Track * currTrack
Definition: NuclearInteractionFTF.cc:139
fastsim::NuclearInteractionFTF::theDistCut
double theDistCut
Cut on deltaR for ClosestChargedDaughter algorithm (FastSim tracking)
Definition: NuclearInteractionFTF.cc:151
XYZTLorentzVector
math::XYZTLorentzVector XYZTLorentzVector
Definition: NuclearInteractionFTF.cc:93
CMSDummyDeexcitation
Definition: CMSDummyDeexcitation.h:20
fastsim::NuclearInteractionFTF::theLund
G4LundStringFragmentation * theLund
Definition: NuclearInteractionFTF.cc:132
DeadROC_duringRun.dir
dir
Definition: DeadROC_duringRun.py:23
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37