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