CMS 3D CMS Logo

FullModelHadronicProcess.h
Go to the documentation of this file.
1 #ifndef SimG4Core_CustomPhysics_FullModelHadronicProcess_h
2 #define SimG4Core_CustomPhysics_FullModelHadronicProcess_h 1
3 
4 #include "globals.hh"
5 #include "G4VDiscreteProcess.hh"
6 #include "G4EnergyRangeManager.hh"
7 #include "G4Nucleus.hh"
8 #include "G4ReactionProduct.hh"
9 #include <vector>
10 #include "G4HadronicException.hh"
11 
13 
14 class G4ProcessHelper;
15 
16 class FullModelHadronicProcess : public G4VDiscreteProcess {
17 public:
18  FullModelHadronicProcess(G4ProcessHelper *aHelper, const G4String &processName = "FullModelHadronicProcess");
19 
20  ~FullModelHadronicProcess() override;
21 
22  G4bool IsApplicable(const G4ParticleDefinition &aP) override;
23 
24  G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override;
25 
26 protected:
27  const G4ParticleDefinition *theParticle;
28  G4ParticleDefinition *newParticle;
29 
30  G4ParticleChange theParticleChange;
31 
32 private:
33  virtual G4double GetMicroscopicCrossSection(const G4DynamicParticle *aParticle,
34  const G4Element *anElement,
35  G4double aTemp);
36 
37  G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override;
38 
39  void CalculateMomenta(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
40  G4int &vecLen,
41  const G4HadProjectile *originalIncident,
42  const G4DynamicParticle *originalTarget,
43  G4ReactionProduct &modifiedOriginal,
44  G4Nucleus &targetNucleus,
45  G4ReactionProduct &currentParticle,
46  G4ReactionProduct &targetParticle,
47  G4bool &incidentHasChanged,
48  G4bool &targetHasChanged,
49  G4bool quasiElastic);
50 
51  G4bool MarkLeadingStrangeParticle(const G4ReactionProduct &currentParticle,
52  const G4ReactionProduct &targetParticle,
53  G4ReactionProduct &leadParticle);
54 
55  void Rotate(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec, G4int &vecLen);
56 
57  const G4DynamicParticle *FindRhadron(G4ParticleChange *);
58 
60  G4bool toyModel;
61  G4double cache;
62  G4ThreeVector what;
63 };
64 
65 #endif
G4bool MarkLeadingStrangeParticle(const G4ReactionProduct &currentParticle, const G4ReactionProduct &targetParticle, G4ReactionProduct &leadParticle)
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override
virtual G4double GetMicroscopicCrossSection(const G4DynamicParticle *aParticle, const G4Element *anElement, G4double aTemp)
G4ParticleDefinition * newParticle
G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override
void CalculateMomenta(G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen, const G4HadProjectile *originalIncident, const G4DynamicParticle *originalTarget, G4ReactionProduct &modifiedOriginal, G4Nucleus &targetNucleus, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4bool &incidentHasChanged, G4bool &targetHasChanged, G4bool quasiElastic)
FullModelHadronicProcess(G4ProcessHelper *aHelper, const G4String &processName="FullModelHadronicProcess")
const G4ParticleDefinition * theParticle
void Rotate(G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen)
const G4DynamicParticle * FindRhadron(G4ParticleChange *)
G4bool IsApplicable(const G4ParticleDefinition &aP) override