Geant4  10.00.p01
G4ReactionDynamics.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 //
28  // Hadronic Process: Reaction Dynamics
29  // original by H.P. Wellisch
30  // Modified by J.L.Chuma 19-Nov-96
31  // Modified by J.L.Chuma 27-Mar-97
32  // Modified by J.L.Chuma 30-Apr-97
33  // Modified by J.L.Chuma 06-Aug-97 to include the original incident particle
34  // before Fermi motion and evaporation effects
35 
36 #ifndef G4ReactionDynamics_h
37 #define G4ReactionDynamics_h 1
38 
39 #include "G4ParticleTypes.hh"
40 #include "G4DynamicParticle.hh"
41 #include "G4ReactionProduct.hh"
42 #include "G4Nucleus.hh"
43 #include "G4FastVector.hh"
44 #include "G4HadProjectile.hh"
45 
46 enum{ GHADLISTSIZE=256};
47 
49  {
50  public:
51 
53 
54  virtual ~G4ReactionDynamics() {}
55 
57  { return 0.0; }
58 
60  { return 0.0; }
61 
62  G4bool GenerateXandPt( // derived from GENXPT
64  G4int &vecLen,
65  G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
66  const G4HadProjectile *originalIncident,
67  G4ReactionProduct &currentParticle,
68  G4ReactionProduct &targetParticle,
69  const G4DynamicParticle* originalTarget,
70  const G4Nucleus &targetNucleus,
71  G4bool &incidentHasChanged,
72  G4bool &targetHasChanged,
73  G4bool leadFlag,
74  G4ReactionProduct &leadingStrangeParticle );
75 
78  G4int &vecLen,
79  const G4ReactionProduct &modifiedOriginal,
80  G4ReactionProduct &currentParticle,
81  G4ReactionProduct &targetParticle,
82  const G4Nucleus &targetNucleus,
83  G4bool &incidentHasChanged,
84  G4bool &targetHasChanged );
85 
86  G4bool TwoCluster( // derived from TWOCLU
88  G4int &vecLen,
89  G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
90  const G4HadProjectile *originalIncident,
91  G4ReactionProduct &currentParticle,
92  G4ReactionProduct &targetParticle,
93  const G4DynamicParticle* originalTarget,
94  const G4Nucleus &targetNucleus,
95  G4bool &incidentHasChanged,
96  G4bool &targetHasChanged,
97  G4bool leadFlag,
98  G4ReactionProduct &leadingStrangeParticle );
99 
100  void TwoBody( // derived from TWOB
102  G4int &vecLen,
103  G4ReactionProduct &modifiedOriginal,
104  const G4DynamicParticle *originalTarget,
105  G4ReactionProduct &currentParticle,
106  G4ReactionProduct &targetParticle,
107  const G4Nucleus &targetNucleus,
108  G4bool &targetHasChanged );
109 
110  G4int Factorial( G4int n );
111 
112  G4double GenerateNBodyEvent( // derived from PHASP
113  const G4double totalEnergy,
114  const G4bool constantCrossSection,
116  G4int &vecLen );
117 
120  G4int &vecLen,
121  const G4ReactionProduct &modifiedOriginal,
122  const G4DynamicParticle *originalTarget,
123  G4ReactionProduct &currentParticle,
124  G4ReactionProduct &targetParticle,
125  G4bool &incidentHasChanged,
126  G4bool &targetHasChanged );
127 
128  void NuclearReaction( // derived from NUCREC
130  G4int &vecLen,
131  const G4HadProjectile *originalIncident,
132  const G4Nucleus &aNucleus,
133  const G4double theAtomicMass,
134  const G4double *massVec );
135 
136  private:
137 
138  void Rotate(
139  const G4double numberofFinalStateNucleons,
140  const G4ThreeVector &temp,
141  const G4ReactionProduct &modifiedOriginal, // Fermi motion & evap. effect included
142  const G4HadProjectile *originalIncident,
143  const G4Nucleus &targetNucleus,
144  G4ReactionProduct &currentParticle,
145  G4ReactionProduct &targetParticle,
147  G4int &vecLen );
148 
149  void Defs1(
150  const G4ReactionProduct &modifiedOriginal,
151  G4ReactionProduct &currentParticle,
152  G4ReactionProduct &targetParticle,
154  G4int &vecLen );
155 
157  const G4double epnb,
158  const G4int npnb,
159  const G4double edta,
160  const G4int ndta,
161  const G4double sprob,
162  const G4double kineticMinimum,
163  const G4double kineticFactor,
164  const G4ReactionProduct &modifiedOriginal,
165  G4int PinNucleus,
166  G4int NinNucleus,
167  const G4Nucleus &aNucleus,
169  G4int &vecLen );
170 
171  std::pair<G4int, G4int> GetFinalStateNucleons(
172  const G4DynamicParticle* originalTarget,
174  const G4int& vecLen );
175 
176  void MomentumCheck(
177  const G4ReactionProduct &modifiedOriginal,
178  G4ReactionProduct &currentParticle,
179  G4ReactionProduct &targetParticle,
181  G4int &vecLen );
182 
183  G4double normal();
184 
185  G4int Poisson( G4double x );
186 
187  };
188 
189 #endif
190 
G4bool TwoCluster(G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen, G4ReactionProduct &modifiedOriginal, const G4HadProjectile *originalIncident, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4DynamicParticle *originalTarget, const G4Nucleus &targetNucleus, G4bool &incidentHasChanged, G4bool &targetHasChanged, G4bool leadFlag, G4ReactionProduct &leadingStrangeParticle)
void ProduceStrangeParticlePairs(G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen, const G4ReactionProduct &modifiedOriginal, const G4DynamicParticle *originalTarget, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4bool &incidentHasChanged, G4bool &targetHasChanged)
void Rotate(const G4double numberofFinalStateNucleons, const G4ThreeVector &temp, const G4ReactionProduct &modifiedOriginal, const G4HadProjectile *originalIncident, const G4Nucleus &targetNucleus, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen)
CLHEP::Hep3Vector G4ThreeVector
void MomentumCheck(const G4ReactionProduct &modifiedOriginal, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen)
int G4int
Definition: G4Types.hh:78
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, G4int PinNucleus, G4int NinNucleus, const G4Nucleus &aNucleus, G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen)
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, GHADLISTSIZE > &vec, G4int &vecLen)
G4bool GenerateXandPt(G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen, G4ReactionProduct &modifiedOriginal, const G4HadProjectile *originalIncident, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4DynamicParticle *originalTarget, const G4Nucleus &targetNucleus, G4bool &incidentHasChanged, G4bool &targetHasChanged, G4bool leadFlag, G4ReactionProduct &leadingStrangeParticle)
void TwoBody(G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen, G4ReactionProduct &modifiedOriginal, const G4DynamicParticle *originalTarget, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4Nucleus &targetNucleus, G4bool &targetHasChanged)
virtual G4double FindTimeDelay()
bool G4bool
Definition: G4Types.hh:79
const G4int n
virtual G4double FindInelasticity()
G4int Poisson(G4double x)
void Defs1(const G4ReactionProduct &modifiedOriginal, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen)
std::pair< G4int, G4int > GetFinalStateNucleons(const G4DynamicParticle *originalTarget, const G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, const G4int &vecLen)
void SuppressChargedPions(G4FastVector< G4ReactionProduct, GHADLISTSIZE > &vec, G4int &vecLen, const G4ReactionProduct &modifiedOriginal, G4ReactionProduct &currentParticle, G4ReactionProduct &targetParticle, const G4Nucleus &targetNucleus, G4bool &incidentHasChanged, G4bool &targetHasChanged)
double G4double
Definition: G4Types.hh:76