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

Last change on this file was 1347, checked in by garnier, 14 years ago

geant4 tag 9.4

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