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

Constructor & Destructor Documentation

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

Constructor.

Definition at line 246 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.

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

References theLund, theStringDecay, theStringModel, and vect.

339  {
340  delete theStringDecay;
341  delete theStringModel;
342  delete theLund;
343  delete vect;
344 }
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 347 of file NuclearInteractionFTF.cc.

References funct::abs(), fastsim::Particle::charge(), corrfactors_el, corrfactors_inel, funct::cos(), curr4Mom, currIdx, currParticle, currTrack, DEFINE_EDM_PLUGIN, dir, reco::dp, dummyStep, MillePedeFileConverter_cfg::e, reco::e1, reco::e2, 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.

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

Referenced by interact().

G4LorentzVector fastsim::NuclearInteractionFTF::curr4Mom
private

Definition at line 145 of file NuclearInteractionFTF.cc.

Referenced by interact().

int fastsim::NuclearInteractionFTF::currIdx
private

Index of particle in vector of Geant4 particles.

Definition at line 157 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

const G4ParticleDefinition* fastsim::NuclearInteractionFTF::currParticle
private

Definition at line 141 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4Track* fastsim::NuclearInteractionFTF::currTrack
private

Definition at line 140 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4Step* fastsim::NuclearInteractionFTF::dummyStep
private

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

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

double fastsim::NuclearInteractionFTF::intLengthElastic
private

Elastic interaction length.

Definition at line 154 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::intLengthInelastic
private

Inelastic interaction length.

Definition at line 155 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 124 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 234 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 229 of file NuclearInteractionFTF.cc.

Referenced by interact().

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

Number of G4 hadrons.

Definition at line 123 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4Nucleus fastsim::NuclearInteractionFTF::targetNucleus
private

Definition at line 143 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4CascadeInterface* fastsim::NuclearInteractionFTF::theBertiniCascade
private

Definition at line 136 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theBertiniLimit
private

Bertini cascade for low-energy hadrons.

Definition at line 149 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4ThreeVector fastsim::NuclearInteractionFTF::theBoost
private

Definition at line 147 of file NuclearInteractionFTF.cc.

Referenced by interact().

G4GeneratorPrecompoundInterface* fastsim::NuclearInteractionFTF::theCascade
private

Definition at line 134 of file NuclearInteractionFTF.cc.

G4DiffuseElastic* fastsim::NuclearInteractionFTF::theDiffuseElastic
private

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

Referenced by interact(), and NuclearInteractionFTF().

double fastsim::NuclearInteractionFTF::theEnergyLimit
private

Minimum energy of interacting particle.

Definition at line 150 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

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

The Geant4 particles.

Definition at line 126 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4TheoFSGenerator* fastsim::NuclearInteractionFTF::theHadronicModel
private

Definition at line 130 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

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

The pdgIDs of the Geant4 particles.

Definition at line 127 of file NuclearInteractionFTF.cc.

Referenced by interact(), and NuclearInteractionFTF().

G4LundStringFragmentation* fastsim::NuclearInteractionFTF::theLund
private

Definition at line 133 of file NuclearInteractionFTF.cc.

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

G4HadProjectile fastsim::NuclearInteractionFTF::theProjectile
private

Definition at line 144 of file NuclearInteractionFTF.cc.

Referenced by interact().

G4ExcitedStringDecay* fastsim::NuclearInteractionFTF::theStringDecay
private

Definition at line 132 of file NuclearInteractionFTF.cc.

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

G4FTFModel* fastsim::NuclearInteractionFTF::theStringModel
private

Definition at line 131 of file NuclearInteractionFTF.cc.

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

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

Definition at line 146 of file NuclearInteractionFTF.cc.

Referenced by interact().