File indexing completed on 2024-04-06 12:30:19
0001 #ifndef SimG4Core_CustomPhysics_FullModelHadronicProcess_h
0002 #define SimG4Core_CustomPhysics_FullModelHadronicProcess_h 1
0003
0004 #include "globals.hh"
0005 #include "G4VDiscreteProcess.hh"
0006 #include "G4EnergyRangeManager.hh"
0007 #include "G4Nucleus.hh"
0008 #include "G4ReactionProduct.hh"
0009 #include <vector>
0010 #include "G4HadronicException.hh"
0011
0012 #include "SimG4Core/CustomPhysics/interface/FullModelReactionDynamics.h"
0013
0014 class G4ProcessHelper;
0015
0016 class FullModelHadronicProcess : public G4VDiscreteProcess {
0017 public:
0018 FullModelHadronicProcess(G4ProcessHelper *aHelper, const G4String &processName = "FullModelHadronicProcess");
0019
0020 ~FullModelHadronicProcess() override;
0021
0022 G4bool IsApplicable(const G4ParticleDefinition &aP) override;
0023
0024 G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override;
0025
0026 protected:
0027 const G4ParticleDefinition *theParticle;
0028 G4ParticleDefinition *newParticle;
0029
0030 G4ParticleChange theParticleChange;
0031
0032 private:
0033 virtual G4double GetMicroscopicCrossSection(const G4DynamicParticle *aParticle,
0034 const G4Element *anElement,
0035 G4double aTemp);
0036
0037 G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override;
0038
0039 void CalculateMomenta(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0040 G4int &vecLen,
0041 const G4HadProjectile *originalIncident,
0042 const G4DynamicParticle *originalTarget,
0043 G4ReactionProduct &modifiedOriginal,
0044 G4Nucleus &targetNucleus,
0045 G4ReactionProduct ¤tParticle,
0046 G4ReactionProduct &targetParticle,
0047 G4bool &incidentHasChanged,
0048 G4bool &targetHasChanged,
0049 G4bool quasiElastic);
0050
0051 G4bool MarkLeadingStrangeParticle(const G4ReactionProduct ¤tParticle,
0052 const G4ReactionProduct &targetParticle,
0053 G4ReactionProduct &leadParticle);
0054
0055 void Rotate(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec, G4int &vecLen);
0056
0057 const G4DynamicParticle *FindRhadron(G4ParticleChange *);
0058
0059 G4ProcessHelper *theHelper;
0060 G4bool toyModel;
0061 G4double cache;
0062 G4ThreeVector what;
0063 };
0064
0065 #endif