#include <G4HadronCrossSections.hh>
Inheritance diagram for G4HadronCrossSections:
Public Member Functions | |
G4HadronCrossSections () | |
~G4HadronCrossSections () | |
G4bool | IsApplicable (const G4DynamicParticle *aParticle) |
G4double | GetElasticCrossSection (const G4DynamicParticle *, G4int, G4int) |
G4double | GetInelasticCrossSection (const G4DynamicParticle *, G4int, G4int) |
G4double | GetCaptureCrossSection (const G4DynamicParticle *, G4int) |
G4double | GetFissionCrossSection (const G4DynamicParticle *, G4int, G4int) |
void | SetVerboseLevel (G4int value) |
G4int | GetVerboseLevel () |
Static Public Member Functions | |
static G4HadronCrossSections * | Instance () |
static void | SetCorrectInelasticNearZero (G4bool value) |
static G4bool | GetCorrectInelasticNearZero () |
Definition at line 63 of file G4HadronCrossSections.hh.
G4HadronCrossSections::G4HadronCrossSections | ( | ) |
Definition at line 1217 of file G4HadronCrossSections.cc.
References G4Pow::GetInstance().
01218 : prevParticleDefinition(0), prevElement(0), prevZZ(0), prevAA(0), 01219 prevKineticEnergy(DBL_MAX), lastEkx(0.), lastEkxPower(0.), verboseLevel(0) 01220 { 01221 siginelastic = sigelastic = 0.0; 01222 g4pow = G4Pow::GetInstance(); 01223 }
G4HadronCrossSections::~G4HadronCrossSections | ( | ) |
G4double G4HadronCrossSections::GetCaptureCrossSection | ( | const G4DynamicParticle * | , | |
G4int | ||||
) |
Definition at line 1556 of file G4HadronCrossSections.cc.
References G4DynamicParticle::GetKineticEnergy().
Referenced by G4HadronCaptureDataSet::GetElementCrossSection().
01558 { 01559 if (GetParticleCode(aParticle) != 16) return 0.; 01560 G4double ek = aParticle->GetKineticEnergy()/GeV; 01561 if (ek > 0.0327) { return 0.; } 01562 01563 G4double ekx = std::max(ek, 1.e-9); 01564 if (ekx != lastEkx) { 01565 lastEkx = ekx; 01566 lastEkxPower = std::pow(ekx*1.e6, 0.577); 01567 } 01568 01569 G4int izno = ZZ; 01570 if (izno > 100) izno = 100; // Not in GHESIG 01571 izno = izno - 1; // For array indexing 01572 G4double sigcap = 11.12*cscap[izno]/lastEkxPower; 01573 01574 // Convert cross section from mb to default units 01575 sigcap = sigcap*millibarn; 01576 return sigcap; 01577 }
static G4bool G4HadronCrossSections::GetCorrectInelasticNearZero | ( | ) | [inline, static] |
G4double G4HadronCrossSections::GetElasticCrossSection | ( | const G4DynamicParticle * | , | |
G4int | , | |||
G4int | ||||
) |
Definition at line 1260 of file G4HadronCrossSections.cc.
References G4cout, G4endl, G4DynamicParticle::GetDefinition(), and G4DynamicParticle::GetKineticEnergy().
Referenced by G4HadronElasticDataSet::GetElementCrossSection().
01262 { 01263 if (particle->GetDefinition() != prevParticleDefinition || 01264 particle->GetKineticEnergy() != prevKineticEnergy || 01265 ZZ != prevZZ || AA != prevAA) 01266 { CalcScatteringCrossSections(particle, ZZ, AA); } 01267 01268 if (verboseLevel > 1) { 01269 G4cout << " x-section elastic(mb)= " 01270 << sigelastic/millibarn << G4endl; 01271 } 01272 return sigelastic; 01273 }
G4double G4HadronCrossSections::GetFissionCrossSection | ( | const G4DynamicParticle * | , | |
G4int | , | |||
G4int | ||||
) |
Definition at line 1581 of file G4HadronCrossSections.cc.
References G4DynamicParticle::GetKineticEnergy(), NFISS, and G4Pow::Z13().
01583 { 01584 if (AA < 230) return 0; 01585 01586 G4double ek = aParticle->GetKineticEnergy()/GeV; 01587 01588 G4int ie1 = 0; 01589 G4int ie2 = NFISS - 1; 01590 do { 01591 G4int midBin = (ie1 + ie2)/2; 01592 if (ek < ekfiss[midBin]) 01593 ie2 = midBin; 01594 else 01595 ie1 = midBin; 01596 } while (ie2 - ie1 > 1); 01597 G4int i = ie2; 01598 if (ek < ekfiss[0]) i = 0; 01599 01600 G4int j = 4; 01601 if (ek <= 0.01) { 01602 if (ZZ == 92 && AA == 233) j = 1; 01603 else if (ZZ == 92 && AA == 235) j = 2; 01604 else if (ZZ == 94 && AA == 239) j = 3; 01605 } 01606 01607 G4double z43ba; 01608 if (j == 4) { 01609 z43ba = ZZ*g4pow->Z13(ZZ)/G4double(AA); 01610 z43ba = std::max(-67. + 38.7*z43ba, 0.); 01611 } else { 01612 z43ba = 1.; 01613 } 01614 j = j - 1; // For array indexing 01615 01616 G4double sigfiss = csfiss[j][i]*z43ba; 01617 sigfiss = sigfiss*millibarn; 01618 return sigfiss; 01619 }
G4double G4HadronCrossSections::GetInelasticCrossSection | ( | const G4DynamicParticle * | , | |
G4int | , | |||
G4int | ||||
) |
Definition at line 1243 of file G4HadronCrossSections.cc.
References G4cout, G4endl, G4DynamicParticle::GetDefinition(), and G4DynamicParticle::GetKineticEnergy().
Referenced by G4HadronInelasticDataSet::GetElementCrossSection().
01245 { 01246 if (particle->GetDefinition() != prevParticleDefinition || 01247 particle->GetKineticEnergy() != prevKineticEnergy || 01248 ZZ != prevZZ || AA != prevAA) 01249 { CalcScatteringCrossSections(particle, ZZ, AA); } 01250 if (verboseLevel > 1) { 01251 G4cout << " x-section inelastic(mb)= " 01252 << siginelastic/millibarn << G4endl; 01253 } 01254 01255 return siginelastic; 01256 }
G4int G4HadronCrossSections::GetVerboseLevel | ( | ) | [inline] |
G4HadronCrossSections * G4HadronCrossSections::Instance | ( | ) | [static] |
Definition at line 1228 of file G4HadronCrossSections.cc.
Referenced by G4HadronCaptureDataSet::G4HadronCaptureDataSet(), G4HadronElasticDataSet::G4HadronElasticDataSet(), and G4HadronInelasticDataSet::G4HadronInelasticDataSet().
01229 { 01230 if (!theInstance) { 01231 static G4HadronCrossSections xsection; 01232 theInstance = &xsection; 01233 } 01234 return theInstance; 01235 }
G4bool G4HadronCrossSections::IsApplicable | ( | const G4DynamicParticle * | aParticle | ) |
Definition at line 1237 of file G4HadronCrossSections.cc.
Referenced by G4HadronInelasticDataSet::IsElementApplicable(), and G4HadronElasticDataSet::IsElementApplicable().
static void G4HadronCrossSections::SetCorrectInelasticNearZero | ( | G4bool | value | ) | [inline, static] |
void G4HadronCrossSections::SetVerboseLevel | ( | G4int | value | ) | [inline] |