File indexing completed on 2023-03-17 11:00:46
0001 #ifndef FastSimulation_MaterialEffects_NuclearInteractionFTFSimulator_H
0002 #define FastSimulation_MaterialEffects_NuclearInteractionFTFSimulator_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "FastSimulation/MaterialEffects/interface/MaterialEffectsSimulator.h"
0017
0018 #include "G4Nucleus.hh"
0019 #include "G4HadProjectile.hh"
0020 #include "G4LorentzVector.hh"
0021 #include "G4ThreeVector.hh"
0022
0023 class ParticlePropagator;
0024 class RandomEngineAndDistribution;
0025 class G4ParticleDefinition;
0026 class G4Track;
0027 class G4Step;
0028 class G4TheoFSGenerator;
0029 class G4FTFModel;
0030 class G4ExcitedStringDecay;
0031 class G4LundStringFragmentation;
0032 class G4GeneratorPrecompoundInterface;
0033 class G4CascadeInterface;
0034 class G4DiffuseElastic;
0035 class G4PhysicsLogVector;
0036
0037 static const int numHadrons = 30;
0038 static const int npoints = 21;
0039
0040 class NuclearInteractionFTFSimulator : public MaterialEffectsSimulator {
0041 public:
0042
0043 NuclearInteractionFTFSimulator(unsigned int distAlgo, double distCut, double elimit, double eth);
0044
0045
0046 ~NuclearInteractionFTFSimulator() override;
0047
0048 private:
0049
0050 void compute(ParticlePropagator& Particle, RandomEngineAndDistribution const*) override;
0051
0052 void saveDaughter(ParticlePropagator& Particle, const G4LorentzVector& lv, int pdgid);
0053
0054 double distanceToPrimary(const RawParticle& Particle, const RawParticle& aDaughter) const;
0055
0056 static const G4ParticleDefinition* theG4Hadron[numHadrons];
0057 static int theId[numHadrons];
0058 G4PhysicsLogVector* vect;
0059
0060 G4TheoFSGenerator* theHadronicModel;
0061 G4FTFModel* theStringModel;
0062 G4ExcitedStringDecay* theStringDecay;
0063 G4LundStringFragmentation* theLund;
0064 G4GeneratorPrecompoundInterface* theCascade;
0065
0066 G4CascadeInterface* theBertiniCascade;
0067 G4DiffuseElastic* theDiffuseElastic;
0068
0069 G4Step* dummyStep;
0070 G4Track* currTrack;
0071 const G4ParticleDefinition* currParticle;
0072
0073 G4Nucleus targetNucleus;
0074 G4HadProjectile theProjectile;
0075 G4LorentzVector curr4Mom;
0076 G4ThreeVector vectProj;
0077 G4ThreeVector theBoost;
0078
0079 double theBertiniLimit;
0080 double theEnergyLimit;
0081
0082 double theDistCut;
0083 double distMin;
0084
0085 double intLengthElastic;
0086 double intLengthInelastic;
0087
0088 int currIdx;
0089 size_t index;
0090 unsigned int theDistAlgo;
0091 };
0092 #endif