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 #ifndef G4VComponentCrossSection_h
00046 #define G4VComponentCrossSection_h 1
00047
00048 #include "G4ParticleDefinition.hh"
00049 #include "G4Element.hh"
00050 #include "globals.hh"
00051
00052 class G4VComponentCrossSection
00053 {
00054 public:
00055
00056 G4VComponentCrossSection(const G4String& nam = "");
00057
00058 virtual ~G4VComponentCrossSection();
00059
00060 inline
00061 G4double GetTotalElementCrossSection(const G4ParticleDefinition*,
00062 G4double kinEnergy,
00063 const G4Element*);
00064
00065 virtual
00066 G4double GetTotalElementCrossSection(const G4ParticleDefinition*,
00067 G4double kinEnergy,
00068 G4int , G4double ) = 0;
00069
00070 virtual
00071 G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition*,
00072 G4double kinEnergy,
00073 G4int , G4int ) = 0;
00074
00075 inline
00076 G4double GetInelasticElementCrossSection(const G4ParticleDefinition*,
00077 G4double kinEnergy,
00078 const G4Element*);
00079
00080 virtual
00081 G4double GetInelasticElementCrossSection(const G4ParticleDefinition*,
00082 G4double kinEnergy,
00083 G4int , G4double ) = 0;
00084
00085 virtual
00086 G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition*,
00087 G4double kinEnergy,
00088 G4int , G4int ) = 0;
00089
00090 inline
00091 G4double GetElasticElementCrossSection(const G4ParticleDefinition*,
00092 G4double kinEnergy,
00093 const G4Element*);
00094
00095 virtual
00096 G4double GetElasticElementCrossSection(const G4ParticleDefinition*,
00097 G4double kinEnergy,
00098 G4int , G4double ) = 0;
00099
00100 virtual
00101 G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition*,
00102 G4double kinEnergy,
00103 G4int , G4int ) = 0;
00104
00105 virtual
00106 G4double ComputeQuasiElasticRatio(const G4ParticleDefinition*,
00107 G4double kinEnergy,
00108 G4int , G4int );
00109
00110 virtual
00111 void BuildPhysicsTable(const G4ParticleDefinition&);
00112
00113 virtual
00114 void DumpPhysicsTable(const G4ParticleDefinition&);
00115
00116 virtual
00117 void Description() const;
00118
00119 inline void SetVerboseLevel(G4int value);
00120
00121 inline G4int GetVerboseLevel() const;
00122
00123 inline G4double GetMinKinEnergy() const;
00124
00125 inline void SetMinKinEnergy(G4double value);
00126
00127 inline G4double GetMaxKinEnergy() const;
00128
00129 inline void SetMaxKinEnergy(G4double value);
00130
00131 inline const G4String& GetName() const;
00132
00133 private:
00134
00135 G4VComponentCrossSection & operator=(const G4VComponentCrossSection &right);
00136 G4VComponentCrossSection(const G4VComponentCrossSection&);
00137
00138 G4int verboseLevel;
00139
00140 G4double minKinEnergy;
00141 G4double maxKinEnergy;
00142
00143 const G4String name;
00144 };
00145
00146 inline G4double
00147 G4VComponentCrossSection::GetTotalElementCrossSection(
00148 const G4ParticleDefinition* p,
00149 G4double kinEnergy,
00150 const G4Element* elm)
00151 {
00152 return GetTotalElementCrossSection(p,kinEnergy,
00153 (G4int)elm->GetZ(),elm->GetN());
00154 }
00155
00156 inline G4double
00157 G4VComponentCrossSection::GetInelasticElementCrossSection(
00158 const G4ParticleDefinition* p,
00159 G4double kinEnergy,
00160 const G4Element* elm)
00161 {
00162 return GetInelasticElementCrossSection(p,kinEnergy,
00163 (G4int)elm->GetZ(),elm->GetN());
00164 }
00165
00166 inline G4double
00167 G4VComponentCrossSection::GetElasticElementCrossSection(
00168 const G4ParticleDefinition* p,
00169 G4double kinEnergy,
00170 const G4Element* elm)
00171 {
00172 return GetElasticElementCrossSection(p,kinEnergy,
00173 (G4int)elm->GetZ(),elm->GetN());
00174 }
00175
00176 inline void G4VComponentCrossSection::SetVerboseLevel(G4int value)
00177 {
00178 verboseLevel = value;
00179 }
00180
00181 inline G4int G4VComponentCrossSection::GetVerboseLevel() const
00182 {
00183 return verboseLevel;
00184 }
00185
00186 inline void G4VComponentCrossSection::SetMinKinEnergy(G4double value)
00187 {
00188 minKinEnergy = value;
00189 }
00190
00191 inline G4double G4VComponentCrossSection::GetMinKinEnergy() const
00192 {
00193 return minKinEnergy;
00194 }
00195
00196 inline void G4VComponentCrossSection::SetMaxKinEnergy(G4double value)
00197 {
00198 maxKinEnergy = value;
00199 }
00200
00201 inline G4double G4VComponentCrossSection::GetMaxKinEnergy() const
00202 {
00203 return maxKinEnergy;
00204 }
00205
00206 inline const G4String& G4VComponentCrossSection::GetName() const
00207 {
00208 return name;
00209 }
00210
00211 #endif