#include <G4NucleonNuclearCrossSection.hh>
Inheritance diagram for G4NucleonNuclearCrossSection:
Public Member Functions | |
G4NucleonNuclearCrossSection () | |
virtual | ~G4NucleonNuclearCrossSection () |
virtual G4bool | IsElementApplicable (const G4DynamicParticle *aParticle, G4int Z, const G4Material *mat=0) |
virtual G4double | GetElementCrossSection (const G4DynamicParticle *aParticle, G4int Z, const G4Material *mat=0) |
virtual void | CrossSectionDescription (std::ostream &) const |
G4double | GetElasticCrossSection (const G4DynamicParticle *aParticle, G4int Z) |
G4double | GetTotalXsc () |
G4double | GetElasticXsc () |
Static Public Member Functions | |
static const char * | Default_Name () |
Definition at line 47 of file G4NucleonNuclearCrossSection.hh.
G4NucleonNuclearCrossSection::G4NucleonNuclearCrossSection | ( | ) |
Definition at line 459 of file G4NucleonNuclearCrossSection.cc.
References G4Neutron::Neutron(), and G4Proton::Proton().
00460 : G4VCrossSectionDataSet(Default_Name()), 00461 fTotalXsc(0.0), fElasticXsc(0.0) 00462 { 00463 theNeutron = G4Neutron::Neutron(); 00464 theProton = G4Proton::Proton(); 00465 00466 // He, Be, C 00467 00468 thePimData.push_back(new G4PiData(he_m_t, he_m_in, e1, 44)); 00469 thePipData.push_back(new G4PiData(he_m_t, he_p_in, e1, 44)); 00470 00471 thePimData.push_back(new G4PiData(be_m_t, be_m_in, e1, 44)); 00472 thePipData.push_back(new G4PiData(be_m_t, be_p_in, e1, 44)); 00473 00474 thePimData.push_back(new G4PiData(c_m_t, c_m_in, e1, 44)); 00475 thePipData.push_back(new G4PiData(c_m_t, c_p_in, e1, 44)); 00476 00477 // N, O, Na 00478 00479 thePimData.push_back(new G4PiData(n_m_t, n_m_in, e2, 44)); 00480 thePipData.push_back(new G4PiData(n_m_t, n_p_in, e2, 44)); 00481 00482 thePimData.push_back(new G4PiData(o_m_t, o_m_in, e2, 44)); 00483 thePipData.push_back(new G4PiData(o_m_t, o_p_in, e2, 44)); 00484 00485 thePimData.push_back(new G4PiData(na_m_t, na_m_in, e2, 44)); 00486 thePipData.push_back(new G4PiData(na_m_t, na_p_in, e2, 44)); 00487 00488 // Al, Si, Ca 00489 00490 thePimData.push_back(new G4PiData(al_m_t, al_m_in, e3, 45)); 00491 thePipData.push_back(new G4PiData(al_m_t, al_p_in, e3, 45)); 00492 00493 thePimData.push_back(new G4PiData(si_m_t, si_m_in, e3, 45)); 00494 thePipData.push_back(new G4PiData(si_m_t, si_p_in, e3, 45)); 00495 00496 thePimData.push_back(new G4PiData(ca_m_t, ca_m_in, e3, 45)); 00497 thePipData.push_back(new G4PiData(ca_m_t, ca_p_in, e3, 45)); 00498 00499 // Fe, Cu, Mo 00500 00501 thePimData.push_back(new G4PiData(fe_m_t, fe_m_in, e4, 47)); 00502 thePipData.push_back(new G4PiData(fe_m_t, fe_p_in, e4, 47)); 00503 00504 thePimData.push_back(new G4PiData(cu_m_t, cu_m_in, e4, 47)); 00505 thePipData.push_back(new G4PiData(cu_m_t, cu_p_in, e4, 47)); 00506 00507 thePimData.push_back(new G4PiData(mo_m_t, mo_m_in, e4, 47)); 00508 thePipData.push_back(new G4PiData(mo_m_t, mo_p_in, e4, 47)); 00509 00510 // Cd, Sn, W 00511 00512 thePimData.push_back(new G4PiData(cd_m_t, cd_m_in, e5, 48)); 00513 thePipData.push_back(new G4PiData(cd_m_t, cd_p_in, e5, 48)); 00514 00515 thePimData.push_back(new G4PiData(sn_m_t, sn_m_in, e5, 48)); 00516 thePipData.push_back(new G4PiData(sn_m_t, sn_p_in, e5, 48)); 00517 00518 thePimData.push_back(new G4PiData(w_m_t, w_m_in, e5, 48)); 00519 thePipData.push_back(new G4PiData(w_m_t, w_p_in, e5, 48)); 00520 00521 // Pb, U 00522 00523 thePimData.push_back(new G4PiData(pb_m_t, pb_m_in, e6, 46)); 00524 thePipData.push_back(new G4PiData(pb_m_t, pb_p_in, e6, 46)); 00525 00526 thePimData.push_back(new G4PiData(u_m_t, u_m_in, e6, 46)); 00527 thePipData.push_back(new G4PiData(u_m_t, u_p_in, e6, 46)); 00528 00529 theZ.push_back(2); // He 00530 theZ.push_back(4); // Be 00531 theZ.push_back(6); // C 00532 theZ.push_back(7); // N 00533 theZ.push_back(8); // O 00534 theZ.push_back(11); // Na 00535 theZ.push_back(13); // Al 00536 theZ.push_back(14); // Si 00537 theZ.push_back(20); // Ca 00538 theZ.push_back(26); // Fe 00539 theZ.push_back(29); // Cu 00540 theZ.push_back(42); // Mo 00541 theZ.push_back(48); // Cd 00542 theZ.push_back(50); // Sn 00543 theZ.push_back(74); // W 00544 theZ.push_back(82); // Pb 00545 theZ.push_back(92); // U 00546 00547 }
G4NucleonNuclearCrossSection::~G4NucleonNuclearCrossSection | ( | ) | [virtual] |
Definition at line 552 of file G4NucleonNuclearCrossSection.cc.
00553 { 00554 std::for_each(thePimData.begin(), thePimData.end(), G4PiData::Delete()); 00555 std::for_each(thePipData.begin(), thePipData.end(), G4PiData::Delete()); 00556 }
void G4NucleonNuclearCrossSection::CrossSectionDescription | ( | std::ostream & | ) | const [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 674 of file G4NucleonNuclearCrossSection.cc.
00675 { 00676 outFile << "G4NucleonNuclearCrossSection is a variant of the Barashenkov\n" 00677 << "cross section parameterization to be used of protons and\n" 00678 << "nucleons on targets heavier than hydrogen. It is intended for\n" 00679 << "use as a cross section component and is currently used by\n" 00680 << "G4BGGNucleonInelasticXS. It is valid for incident energies up\n" 00681 << "to 1 TeV.\n"; 00682 }
static const char* G4NucleonNuclearCrossSection::Default_Name | ( | ) | [inline, static] |
Definition at line 54 of file G4NucleonNuclearCrossSection.hh.
Referenced by G4BGGNucleonInelasticXS::BuildPhysicsTable(), and G4BGGNucleonElasticXS::BuildPhysicsTable().
G4double G4NucleonNuclearCrossSection::GetElasticCrossSection | ( | const G4DynamicParticle * | aParticle, | |
G4int | Z | |||
) | [inline] |
Definition at line 184 of file G4NucleonNuclearCrossSection.hh.
References GetElementCrossSection().
Referenced by G4BGGNucleonElasticXS::BuildPhysicsTable(), and G4BGGNucleonElasticXS::GetElementCrossSection().
00186 { 00187 GetElementCrossSection(dp, Z); 00188 return fElasticXsc; 00189 }
G4double G4NucleonNuclearCrossSection::GetElasticXsc | ( | ) | [inline] |
G4double G4NucleonNuclearCrossSection::GetElementCrossSection | ( | const G4DynamicParticle * | aParticle, | |
G4int | Z, | |||
const G4Material * | mat = 0 | |||
) | [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 578 of file G4NucleonNuclearCrossSection.cc.
References G4DynamicParticle::GetDefinition(), and G4DynamicParticle::GetKineticEnergy().
Referenced by G4BGGNucleonInelasticXS::BuildPhysicsTable(), GetElasticCrossSection(), and G4BGGNucleonInelasticXS::GetElementCrossSection().
00580 { 00581 G4double kineticEnergy = aParticle->GetKineticEnergy(); 00582 00583 G4double result = 0; 00584 // G4cout<<"Z = "<<Z<<G4endl; 00585 00586 size_t it = 0; 00587 size_t itmax = theZ.size() - 1; 00588 for(; it <= itmax; ++it) { if(Z <= theZ[it]) { break; } } 00589 if( it > itmax ) { it = itmax; } 00590 G4int Z1, Z2; 00591 G4double x1, x2, xt1, xt2; 00592 00593 std::vector<G4PiData *> * theData = &thePimData; 00594 if(aParticle->GetDefinition() == theProton) { theData = &thePipData; } 00595 00596 if( theZ[it] == Z ) 00597 { 00598 result = (*theData)[it]->ReactionXSection(kineticEnergy); 00599 fTotalXsc = (*theData)[it]->TotalXSection(kineticEnergy); 00600 } 00601 else 00602 { 00603 if(0 == it) { it = 1; } 00604 x1 = (*theData)[it-1]->ReactionXSection(kineticEnergy); 00605 xt1 = (*theData)[it-1]->TotalXSection(kineticEnergy); 00606 Z1 = theZ[it-1]; 00607 x2 = (*theData)[it]->ReactionXSection(kineticEnergy); 00608 xt2 = (*theData)[it]->TotalXSection(kineticEnergy); 00609 Z2 = theZ[it]; 00610 00611 result = Interpolate(Z1, Z2, Z, x1, x2); 00612 fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2); 00613 } 00614 00615 fElasticXsc = fTotalXsc - result; 00616 if( fElasticXsc < 0.) { fElasticXsc = 0.; } 00617 00618 return result; 00619 }
G4double G4NucleonNuclearCrossSection::GetTotalXsc | ( | ) | [inline] |
G4bool G4NucleonNuclearCrossSection::IsElementApplicable | ( | const G4DynamicParticle * | aParticle, | |
G4int | Z, | |||
const G4Material * | mat = 0 | |||
) | [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 562 of file G4NucleonNuclearCrossSection.cc.
References G4DynamicParticle::GetDefinition(), and G4DynamicParticle::GetKineticEnergy().
00565 { 00566 G4bool result = false; 00567 if(aParticle->GetDefinition() == theNeutron ) result = true; 00568 if(aParticle->GetDefinition() == theProton) result = true; 00569 if(Z < 2) result = false; 00570 if(aParticle->GetKineticEnergy() > 999.9*GeV) result = false; 00571 return result; 00572 }