source: trunk/source/processes/hadronic/models/high_energy/include/G4HEInelastic.hh @ 962

Last change on this file since 962 was 962, checked in by garnier, 15 years ago

update processes

File size: 10.7 KB
Line 
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// $Id: G4HEInelastic.hh,v 1.14 2007/04/11 18:11:30 dennis Exp $
28// GEANT4 tag $Name: geant4-09-02-ref-02 $
29//
30//
31// G4 Gheisha High Energy (GHE) model class -- header file
32// H. Fesefeldt, RWTH Aachen 23-October-1996
33// Last modified: 10-December-1996
34
35// A prototype of the Gheisha High Energy collision model.
36// It includes all Physics Routines from Geant3,
37// relevant for simulation of hadronic processes
38// above approx. 20 GeV incident momentum.
39// Not included are the Physics Routines for
40// stopping particles, the low energy neutron
41// slowing down description and the low energy
42// nuclear reactions a(A,A')b.
43// All routines pass the compiler and give
44// some reasonable numbers as output.
45// A statistically significant comparison
46// with GEANT3 and experimental data has
47// still to be done.
48
49#ifndef G4HEInelastic_h
50#define G4HEInelastic_h 1
51
52// Class description:
53// Each of the high energy parameterized models (e.g. G4HEProtonInelastic)
54// derives from the G4HEInelastic class. This class contains the various
55// algorithms needed to implement the interaction. These include
56// lambda-fragmentation, meson and nucleon cluster formation and decay,
57// nuclear cascade, and nuclear de-excitation. 
58//
59// This class is derived from G4HadronicInteraction.
60
61// Class Description - End
62
63#include "G4HEVector.hh"
64#include "G4HadronicInteraction.hh"
65
66class G4HEInelastic : public G4HadronicInteraction
67{
68 public:  // with description
69   G4HEInelastic(const G4String& modelName = "HEInelastic") 
70    : G4HadronicInteraction(modelName)
71   { 
72     SetParticles();
73     conserveEnergy = true;
74   };
75
76   ~G4HEInelastic(){ };
77         
78   void       SetMaxNumberOfSecondaries( const G4int maxnumber ) 
79                   { MAXPART = maxnumber;}     
80 
81   void       SetVerboseLevel( const G4int level)
82                   { verboseLevel = level;}
83
84   G4int      verboseLevel; 
85   G4int      MAXPART;
86   G4bool     conserveEnergy;
87
88   void       ForceEnergyConservation(G4bool energyConservation)
89                   { conserveEnergy = energyConservation;}
90   G4bool     EnergyConservation(void)
91                   { return conserveEnergy;} 
92
93   G4double   Amin(G4double a, G4double b);
94   G4double   Amax(G4double a, G4double b);
95   G4int      Imin(G4int a, G4int b);
96   G4int      Imax(G4int a, G4int b);
97 
98   void       FillParticleChange(G4HEVector pv[], G4int aVecLength);
99
100   G4double   pmltpc(G4int np, G4int nm, G4int nz, G4int n, G4double b, G4double c);
101
102   G4int      Factorial(G4int n); 
103
104   G4double   NuclearInelasticity(G4double incidentKineticEnergy,
105                                  G4double atomicWeight,
106                                  G4double atomicNumber);
107   G4double   NuclearExcitation(G4double  incidentKineticEnergy,
108                                G4double  atomicWeight,
109                                G4double  atomicNumber,
110                                G4double& excitationEnergyCascade,
111                                G4double& excitationEnergyEvaporation); 
112   
113   void       HighEnergyCascading(G4bool &successful,
114                                  G4HEVector pv[],
115                                  G4int &vecLen,
116                                  G4double &excitationEnergyGNP,
117                                  G4double &excitationEnergyDTA, 
118                                  G4HEVector incidentParticle,
119                                  G4HEVector targetParticle,
120                                  G4double atomicWeight,
121                                  G4double atomicNumber);                       
122
123   void       HighEnergyClusterProduction(G4bool &successful,
124                                          G4HEVector pv[],
125                                          G4int &vecLen,
126                                          G4double &excitationEnergyGNP,
127                                          G4double &excitationEnergyDTA, 
128                                          G4HEVector incidentParticle,
129                                          G4HEVector targetParticle,
130                                          G4double atomicWeight,
131                                          G4double atomicNumber);             
132
133   void       TuningOfHighEnergyCascading(G4HEVector pv[],
134                                          G4int &vecLen,
135                                          G4HEVector incidentParticle,
136                                          G4HEVector targetParticle,
137                                          G4double atomicWeight,
138                                          G4double atomicNumber);   
139
140   void       MediumEnergyCascading(G4bool &successful,
141                                    G4HEVector pv[],
142                                    G4int &vecLen,
143                                    G4double &excitationEnergyGNP,
144                                    G4double &excitationEnergyDTA,
145                                    G4HEVector incidentParticle,
146                                    G4HEVector targetParticle,
147                                    G4double atomicWeight,
148                                    G4double atomicNumber);           
149
150   void       MediumEnergyClusterProduction(G4bool &successful,
151                                            G4HEVector pv[],
152                                            G4int &vecLen,
153                                            G4double &excitationEnergyGNP,
154                                            G4double &excitationEnergyDTA,
155                                            G4HEVector incidentParticle,
156                                            G4HEVector targetParticle,
157                                            G4double atomicWeight,
158                                            G4double atomicNumber);           
159
160   void       QuasiElasticScattering(G4bool &successful,
161                                     G4HEVector pv[],
162                                     G4int &vecLen,
163                                     G4double &excitationEnergyGNP,
164                                     G4double &excitationEnergyDTA, 
165                                     G4HEVector incidentParticle,
166                                     G4HEVector targetParticle,
167                                     G4double atomicWeight,
168                                     G4double atomicNumber);
169
170   void       ElasticScattering(G4bool &successful,
171                                G4HEVector pv[],
172                                G4int &vecLen,                     
173                                G4HEVector incidentParticle,
174                                G4double atomicWeight,
175                                G4double atomicNumber); 
176
177   G4int      rtmi(G4double *x, G4double xli, G4double xri, G4double eps,
178                   G4int iend, G4double aa, G4double bb, G4double cc, 
179                   G4double dd, G4double rr);
180
181   G4double   fctcos(G4double t, G4double aa, G4double bb,G4double cc, 
182                     G4double dd, G4double rr);     
183       
184   void       StrangeParticlePairProduction(const G4double availableEnergy,
185                                            const G4double centerOfMassEnergy,
186                                            G4HEVector pv[],
187                                            G4int &vecLen,
188                                            G4HEVector incidentParticle,
189                                            G4HEVector targetParticle); 
190
191   G4double   NBodyPhaseSpace(const G4double totalEnergy,
192                              const G4bool   constantCrossSection,
193                              G4HEVector pv[],
194                              G4int &vecLen);
195     
196   G4double   NBodyPhaseSpace(G4int npart, 
197                              G4HEVector pv[],
198                              G4double wmax,
199                              G4double wfcn,
200                              G4int maxtrial,
201                              G4int ntrial);
202
203   G4double   gpdk(G4double a, G4double b, G4double c);
204
205   void       QuickSort(G4double arr[], const G4int lidx, const G4int ridx);
206
207   G4double   Alam(G4double a, G4double b, G4double c);
208 
209   G4double   CalculatePhaseSpaceWeight( G4int npart);
210       
211   G4double   normal(void);
212   G4double   GammaRand(G4double avalue);
213   G4double   Erlang(G4int mvalue);
214   G4int      Poisson(G4double x);
215   void       SetParticles(void);
216
217   G4HEVector PionPlus;
218   G4HEVector PionZero;
219   G4HEVector PionMinus;             
220   G4HEVector KaonPlus;
221   G4HEVector KaonZero;
222   G4HEVector AntiKaonZero;             
223   G4HEVector KaonMinus;
224   G4HEVector KaonZeroShort; 
225   G4HEVector KaonZeroLong;
226   G4HEVector Proton;
227   G4HEVector AntiProton;
228   G4HEVector Neutron;             
229   G4HEVector AntiNeutron;
230   G4HEVector Lambda;
231   G4HEVector AntiLambda;             
232   G4HEVector SigmaPlus;
233   G4HEVector SigmaZero; 
234   G4HEVector SigmaMinus;
235   G4HEVector AntiSigmaPlus;
236   G4HEVector AntiSigmaZero; 
237   G4HEVector AntiSigmaMinus;
238   G4HEVector XiZero;             
239   G4HEVector XiMinus;
240   G4HEVector AntiXiZero; 
241   G4HEVector AntiXiMinus;
242   G4HEVector OmegaMinus;
243   G4HEVector AntiOmegaMinus; 
244   G4HEVector Deuteron;
245   G4HEVector Triton;
246   G4HEVector Alpha;                         
247   G4HEVector Gamma;
248};
249
250#endif                     
251                                         
252
Note: See TracBrowser for help on using the repository browser.