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  {
25  public:
26 
28 
30 
31  virtual G4double FindInelasticity()
32  { return 0.0; }
33 
34  virtual G4double FindTimeDelay()
35  { return 0.0; }
36 
37  G4bool GenerateXandPt( // derived from GENXPT
38  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
39  G4int &vecLen,
40  G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
41  const G4HadProjectile *originalIncident,
42  G4ReactionProduct &currentParticle,
43  G4ReactionProduct &targetParticle,
44  const G4Nucleus &targetNucleus,
45  G4bool &incidentHasChanged,
46  G4bool &targetHasChanged,
47  G4bool leadFlag,
48  G4ReactionProduct &leadingStrangeParticle );
49 
51  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
52  G4int &vecLen,
53  const G4ReactionProduct &modifiedOriginal,
54  G4ReactionProduct &currentParticle,
55  G4ReactionProduct &targetParticle,
56  const G4Nucleus &targetNucleus,
57  G4bool &incidentHasChanged,
58  G4bool &targetHasChanged );
59 
60  G4bool TwoCluster( // derived from TWOCLU
61  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
62  G4int &vecLen,
63  G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
64  const G4HadProjectile *originalIncident,
65  G4ReactionProduct &currentParticle,
66  G4ReactionProduct &targetParticle,
67  const G4Nucleus &targetNucleus,
68  G4bool &incidentHasChanged,
69  G4bool &targetHasChanged,
70  G4bool leadFlag,
71  G4ReactionProduct &leadingStrangeParticle );
72 
73  void TwoBody( // derived from TWOB
74  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
75  G4int &vecLen,
76  G4ReactionProduct &modifiedOriginal,
77  const G4DynamicParticle *originalTarget,
78  G4ReactionProduct &currentParticle,
79  G4ReactionProduct &targetParticle,
80  const G4Nucleus &targetNucleus,
81  G4bool &targetHasChanged );
82 
83  G4int Factorial( G4int n );
84 
85  G4double GenerateNBodyEvent( // derived from PHASP
86  const G4double totalEnergy,
87  const G4bool constantCrossSection,
88  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
89  G4int &vecLen );
90 
92  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
93  G4int &vecLen,
94  const G4ReactionProduct &modifiedOriginal,
95  const G4DynamicParticle *originalTarget,
96  G4ReactionProduct &currentParticle,
97  G4ReactionProduct &targetParticle,
98  G4bool &incidentHasChanged,
99  G4bool &targetHasChanged );
100 
101  void NuclearReaction( // derived from NUCREC
102  G4FastVector<G4ReactionProduct,4> &vec,
103  G4int &vecLen,
104  const G4HadProjectile *originalIncident,
105  const G4Nucleus &aNucleus,
106  const G4double theAtomicMass,
107  const G4double *massVec );
108 
109  private:
110 
111  void Rotate(
112  const G4double numberofFinalStateNucleons,
113  const G4ThreeVector &temp,
114  const G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
115  const G4HadProjectile *originalIncident,
116  const G4Nucleus &targetNucleus,
117  G4ReactionProduct &currentParticle,
118  G4ReactionProduct &targetParticle,
119  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
120  G4int &vecLen );
121 
122  void Defs1(
123  const G4ReactionProduct &modifiedOriginal,
124  G4ReactionProduct &currentParticle,
125  G4ReactionProduct &targetParticle,
126  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
127  G4int &vecLen );
128 
130  const G4double epnb,
131  const G4int npnb,
132  const G4double edta,
133  const G4int ndta,
134  const G4double sprob,
135  const G4double kineticMinimum,
136  const G4double kineticFactor,
137  const G4ReactionProduct &modifiedOriginal,
138  G4double spall,
139  const G4Nucleus &aNucleus,
140  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
141  G4int &vecLen );
142 
143  void MomentumCheck(
144  const G4ReactionProduct &modifiedOriginal,
145  G4ReactionProduct &currentParticle,
146  G4ReactionProduct &targetParticle,
147  G4FastVector<G4ReactionProduct,MYGHADLISTSIZE> &vec,
148  G4int &vecLen );
149 
150  G4double normal();
151 
152  G4int Poisson( G4double x );
153 
154  };
155 
156 #endif
157 
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)