CMS 3D CMS Logo

FullModelReactionDynamics.h
Go to the documentation of this file.
1 
2 //
3 // Hadronic Process: Reaction Dynamics
4 // original by H.P. Wellisch
5 // Modified by J.L.Chuma 19-Nov-96
6 // Modified by J.L.Chuma 27-Mar-97
7 // Modified by J.L.Chuma 30-Apr-97
8 // Modified by J.L.Chuma 06-Aug-97 to include the original incident particle
9 // before Fermi motion and evaporation effects
10 
11 #ifndef SimG4Core_CustomPhysics_FullModelReactionDynamics_h
12 #define SimG4Core_CustomPhysics_FullModelReactionDynamics_h 1
13 
14 #include "G4ParticleTypes.hh"
15 #include "G4DynamicParticle.hh"
16 #include "G4ReactionProduct.hh"
17 #include "G4Nucleus.hh"
18 #include "G4FastVector.hh"
19 #include "G4HadProjectile.hh"
20 
21 enum { MYGHADLISTSIZE = 256 };
22 
24 public:
26 
28 
29  virtual G4double FindInelasticity() { return 0.0; }
30 
31  virtual G4double FindTimeDelay() { return 0.0; }
32 
33  G4bool GenerateXandPt( // derived from GENXPT
34  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
35  G4int &vecLen,
36  G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
37  const G4HadProjectile *originalIncident,
38  G4ReactionProduct &currentParticle,
39  G4ReactionProduct &targetParticle,
40  const G4Nucleus &targetNucleus,
41  G4bool &incidentHasChanged,
42  G4bool &targetHasChanged,
43  G4bool leadFlag,
44  G4ReactionProduct &leadingStrangeParticle);
45 
46  void SuppressChargedPions(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
47  G4int &vecLen,
48  const G4ReactionProduct &modifiedOriginal,
49  G4ReactionProduct &currentParticle,
50  G4ReactionProduct &targetParticle,
51  const G4Nucleus &targetNucleus,
52  G4bool &incidentHasChanged,
53  G4bool &targetHasChanged);
54 
55  G4bool TwoCluster( // derived from TWOCLU
56  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
57  G4int &vecLen,
58  G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
59  const G4HadProjectile *originalIncident,
60  G4ReactionProduct &currentParticle,
61  G4ReactionProduct &targetParticle,
62  const G4Nucleus &targetNucleus,
63  G4bool &incidentHasChanged,
64  G4bool &targetHasChanged,
65  G4bool leadFlag,
66  G4ReactionProduct &leadingStrangeParticle);
67 
68  void TwoBody( // derived from TWOB
69  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
70  G4int &vecLen,
71  G4ReactionProduct &modifiedOriginal,
72  const G4DynamicParticle *originalTarget,
73  G4ReactionProduct &currentParticle,
74  G4ReactionProduct &targetParticle,
75  const G4Nucleus &targetNucleus,
76  G4bool &targetHasChanged);
77 
78  G4int Factorial(G4int n);
79 
80  G4double GenerateNBodyEvent( // derived from PHASP
81  const G4double totalEnergy,
82  const G4bool constantCrossSection,
83  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
84  G4int &vecLen);
85 
86  void ProduceStrangeParticlePairs(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
87  G4int &vecLen,
88  const G4ReactionProduct &modifiedOriginal,
89  const G4DynamicParticle *originalTarget,
90  G4ReactionProduct &currentParticle,
91  G4ReactionProduct &targetParticle,
92  G4bool &incidentHasChanged,
93  G4bool &targetHasChanged);
94 
95  void NuclearReaction( // derived from NUCREC
96  G4FastVector<G4ReactionProduct, 4> &vec,
97  G4int &vecLen,
98  const G4HadProjectile *originalIncident,
99  const G4Nucleus &aNucleus,
100  const G4double theAtomicMass,
101  const G4double *massVec);
102 
103 private:
104  void Rotate(const G4double numberofFinalStateNucleons,
105  const G4ThreeVector &temp,
106  const G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
107  const G4HadProjectile *originalIncident,
108  const G4Nucleus &targetNucleus,
109  G4ReactionProduct &currentParticle,
110  G4ReactionProduct &targetParticle,
111  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
112  G4int &vecLen);
113 
114  void Defs1(const G4ReactionProduct &modifiedOriginal,
115  G4ReactionProduct &currentParticle,
116  G4ReactionProduct &targetParticle,
117  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
118  G4int &vecLen);
119 
120  void AddBlackTrackParticles(const G4double epnb,
121  const G4int npnb,
122  const G4double edta,
123  const G4int ndta,
124  const G4double sprob,
125  const G4double kineticMinimum,
126  const G4double kineticFactor,
127  const G4ReactionProduct &modifiedOriginal,
128  G4double spall,
129  const G4Nucleus &aNucleus,
130  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
131  G4int &vecLen);
132 
133  void MomentumCheck(const G4ReactionProduct &modifiedOriginal,
134  G4ReactionProduct &currentParticle,
135  G4ReactionProduct &targetParticle,
136  G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
137  G4int &vecLen);
138 
139  G4double normal();
140 
141  G4int Poisson(G4double x);
142 };
143 
144 #endif
void Defs1(const G4ReactionProduct &modifiedOriginal, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen)
void MomentumCheck(const G4ReactionProduct &modifiedOriginal, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen)
void TwoBody(G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen, G4ReactionProduct &modifiedOriginal, const G4DynamicParticle *originalTarget, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4Nucleus &targetNucleus, G4bool &targetHasChanged)
void ProduceStrangeParticlePairs(G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen, const G4ReactionProduct &modifiedOriginal, const G4DynamicParticle *originalTarget, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4bool &incidentHasChanged, G4bool &targetHasChanged)
G4bool TwoCluster(G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen, G4ReactionProduct &modifiedOriginal, const G4HadProjectile *originalIncident, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4Nucleus &targetNucleus, G4bool &incidentHasChanged, G4bool &targetHasChanged, G4bool leadFlag, G4ReactionProduct &leadingStrangeParticle)
void NuclearReaction(G4FastVector< G4ReactionProduct, 4 > &vec, G4int &vecLen, const G4HadProjectile *originalIncident, const G4Nucleus &aNucleus, const G4double theAtomicMass, const G4double *massVec)
G4double GenerateNBodyEvent(const G4double totalEnergy, const G4bool constantCrossSection, G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen)
G4bool GenerateXandPt(G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen, G4ReactionProduct &modifiedOriginal, const G4HadProjectile *originalIncident, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4Nucleus &targetNucleus, G4bool &incidentHasChanged, G4bool &targetHasChanged, G4bool leadFlag, G4ReactionProduct &leadingStrangeParticle)
void AddBlackTrackParticles(const G4double epnb, const G4int npnb, const G4double edta, const G4int ndta, const G4double sprob, const G4double kineticMinimum, const G4double kineticFactor, const G4ReactionProduct &modifiedOriginal, G4double spall, const G4Nucleus &aNucleus, G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen)
void Rotate(const G4double numberofFinalStateNucleons, const G4ThreeVector &temp, const G4ReactionProduct &modifiedOriginal, const G4HadProjectile *originalIncident, const G4Nucleus &targetNucleus, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen)
void SuppressChargedPions(G4FastVector< G4ReactionProduct, MYGHADLISTSIZE > &vec, G4int &vecLen, const G4ReactionProduct &modifiedOriginal, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4Nucleus &targetNucleus, G4bool &incidentHasChanged, G4bool &targetHasChanged)