00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 #ifndef G4HadronCrossSections_h
00051 #define G4HadronCrossSections_h 1
00052
00053 #include "globals.hh"
00054 #include "G4Element.hh"
00055 #include "G4VProcess.hh"
00056 #include "G4DynamicParticle.hh"
00057 #include "G4HadTmpUtil.hh"
00058
00059 enum { TSIZE=41, NPARTS=35, NELAB=17, NCNLW=15, NFISS=21 };
00060
00061 class G4Pow;
00062
00063 class G4HadronCrossSections
00064 {
00065 public:
00066
00067 G4HadronCrossSections();
00068
00069 ~G4HadronCrossSections();
00070
00071 static G4HadronCrossSections* Instance();
00072
00073 G4bool IsApplicable(const G4DynamicParticle* aParticle);
00074
00075 G4double GetElasticCrossSection(const G4DynamicParticle*,
00076 G4int , G4int );
00077
00078 G4double GetInelasticCrossSection(const G4DynamicParticle*,
00079 G4int , G4int );
00080
00081 G4double GetCaptureCrossSection(const G4DynamicParticle*, G4int );
00082
00083 G4double GetFissionCrossSection(const G4DynamicParticle*, G4int ,
00084 G4int );
00085
00086 static void SetCorrectInelasticNearZero(G4bool value)
00087 {correctInelasticNearZero = value;}
00088
00089 static G4bool GetCorrectInelasticNearZero()
00090 {return correctInelasticNearZero;}
00091
00092 void SetVerboseLevel(G4int value) {verboseLevel = value;}
00093
00094 G4int GetVerboseLevel() {return verboseLevel;}
00095
00096 private:
00097
00098 G4int GetParticleCode(const G4DynamicParticle*);
00099
00100 void CalcScatteringCrossSections(const G4DynamicParticle*,
00101 G4int , G4int );
00102
00103 static G4HadronCrossSections* theInstance;
00104
00105 G4Pow* g4pow;
00106
00107 G4double sigelastic;
00108 G4double siginelastic;
00109 G4ParticleDefinition* prevParticleDefinition;
00110 G4Element* prevElement;
00111 G4int prevZZ;
00112 G4int prevAA;
00113 G4double prevKineticEnergy;
00114 G4double lastEkx, lastEkxPower;
00115
00116 static G4bool correctInelasticNearZero;
00117
00118 G4int verboseLevel;
00119
00120
00121
00122
00123
00124 static G4float plab[TSIZE];
00125 static G4float csel[NPARTS][TSIZE];
00126 static G4float csin[NPARTS][TSIZE];
00127
00128 static G4float cspiel[3][TSIZE];
00129 static G4float cspiin[3][TSIZE];
00130
00131 static G4float cspnel[3][TSIZE];
00132 static G4float cspnin[3][TSIZE];
00133
00134 static G4float elab[NELAB];
00135 static G4float cnlwat[NCNLW], cnlwel[NCNLW][NELAB], cnlwin[NCNLW][NELAB];
00136
00137 static G4float cscap[100];
00138
00139 static G4float ekfiss[NFISS], csfiss[4][NFISS];
00140
00141 static G4float alpha[NPARTS], alphac[TSIZE];
00142
00143 static G4float partel[35], partin[35];
00144 static G4int icorr[35], intrc[35];
00145
00146 static G4float csa[4];
00147 static G4int ipart2[7];
00148 };
00149 #endif
00150