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 {
18 public:
19 
21  const G4String& processName = "FullModelHadronicProcess");
22 
23  ~FullModelHadronicProcess() override;
24 
25 
26  G4bool IsApplicable(const G4ParticleDefinition& aP) override;
27 
28  G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override;
29 
30 protected:
31 
32  const G4ParticleDefinition *theParticle;
33  G4ParticleDefinition *newParticle;
34 
35  G4ParticleChange theParticleChange;
36 
37 private:
38 
39  virtual G4double GetMicroscopicCrossSection( const G4DynamicParticle *aParticle,
40  const G4Element *anElement,
41  G4double aTemp );
42 
43  G4double GetMeanFreePath(const G4Track& aTrack, G4double, G4ForceCondition*) override;
44 
45  void CalculateMomenta( G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
46  G4int &vecLen,
47  const G4HadProjectile *originalIncident,
48  const G4DynamicParticle *originalTarget,
49  G4ReactionProduct &modifiedOriginal,
50  G4Nucleus &targetNucleus,
51  G4ReactionProduct &currentParticle,
52  G4ReactionProduct &targetParticle,
53  G4bool &incidentHasChanged,
54  G4bool &targetHasChanged,
55  G4bool quasiElastic );
56 
58  const G4ReactionProduct &currentParticle,
59  const G4ReactionProduct &targetParticle,
60  G4ReactionProduct &leadParticle );
61 
62  void Rotate(G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec, G4int &vecLen);
63 
64  const G4DynamicParticle* FindRhadron(G4ParticleChange*);
65 
67  G4bool toyModel;
68  G4double cache;
69  G4ThreeVector what;
70 };
71 
72 #endif
73 
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