G4NucleonNuclearCrossSection Class Reference

#include <G4NucleonNuclearCrossSection.hh>

Inheritance diagram for G4NucleonNuclearCrossSection:

G4VCrossSectionDataSet

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 ()

Detailed Description

Definition at line 47 of file G4NucleonNuclearCrossSection.hh.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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().

00054 {return "G4NucleonNuclearCrossSection";}

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]

Definition at line 70 of file G4NucleonNuclearCrossSection.hh.

00070 { return fElasticXsc; };

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]

Definition at line 69 of file G4NucleonNuclearCrossSection.hh.

00069 { return fTotalXsc;   };

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 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:45 2013 for Geant4 by  doxygen 1.4.7