Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions
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 ()
 
- Public Member Functions inherited from G4VCrossSectionDataSet
 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
 
virtual G4Isotope * SelectIsotope (const G4Element *, G4double kinEnergy)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual G4int GetVerboseLevel () const
 
virtual void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
const G4String & GetName () const
 

Static Public Member Functions

static const char * Default_Name ()
 

Additional Inherited Members

- Protected Member Functions inherited from G4VCrossSectionDataSet
void SetName (const G4String &)
 
- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 

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

461  fTotalXsc(0.0), fElasticXsc(0.0)
462 {
463  theNeutron = G4Neutron::Neutron();
464  theProton = G4Proton::Proton();
465 
466  // He, Be, C
467 
468  thePimData.push_back(new G4PiData(he_m_t, he_m_in, e1, 44));
469  thePipData.push_back(new G4PiData(he_m_t, he_p_in, e1, 44));
470 
471  thePimData.push_back(new G4PiData(be_m_t, be_m_in, e1, 44));
472  thePipData.push_back(new G4PiData(be_m_t, be_p_in, e1, 44));
473 
474  thePimData.push_back(new G4PiData(c_m_t, c_m_in, e1, 44));
475  thePipData.push_back(new G4PiData(c_m_t, c_p_in, e1, 44));
476 
477  // N, O, Na
478 
479  thePimData.push_back(new G4PiData(n_m_t, n_m_in, e2, 44));
480  thePipData.push_back(new G4PiData(n_m_t, n_p_in, e2, 44));
481 
482  thePimData.push_back(new G4PiData(o_m_t, o_m_in, e2, 44));
483  thePipData.push_back(new G4PiData(o_m_t, o_p_in, e2, 44));
484 
485  thePimData.push_back(new G4PiData(na_m_t, na_m_in, e2, 44));
486  thePipData.push_back(new G4PiData(na_m_t, na_p_in, e2, 44));
487 
488  // Al, Si, Ca
489 
490  thePimData.push_back(new G4PiData(al_m_t, al_m_in, e3, 45));
491  thePipData.push_back(new G4PiData(al_m_t, al_p_in, e3, 45));
492 
493  thePimData.push_back(new G4PiData(si_m_t, si_m_in, e3, 45));
494  thePipData.push_back(new G4PiData(si_m_t, si_p_in, e3, 45));
495 
496  thePimData.push_back(new G4PiData(ca_m_t, ca_m_in, e3, 45));
497  thePipData.push_back(new G4PiData(ca_m_t, ca_p_in, e3, 45));
498 
499  // Fe, Cu, Mo
500 
501  thePimData.push_back(new G4PiData(fe_m_t, fe_m_in, e4, 47));
502  thePipData.push_back(new G4PiData(fe_m_t, fe_p_in, e4, 47));
503 
504  thePimData.push_back(new G4PiData(cu_m_t, cu_m_in, e4, 47));
505  thePipData.push_back(new G4PiData(cu_m_t, cu_p_in, e4, 47));
506 
507  thePimData.push_back(new G4PiData(mo_m_t, mo_m_in, e4, 47));
508  thePipData.push_back(new G4PiData(mo_m_t, mo_p_in, e4, 47));
509 
510  // Cd, Sn, W
511 
512  thePimData.push_back(new G4PiData(cd_m_t, cd_m_in, e5, 48));
513  thePipData.push_back(new G4PiData(cd_m_t, cd_p_in, e5, 48));
514 
515  thePimData.push_back(new G4PiData(sn_m_t, sn_m_in, e5, 48));
516  thePipData.push_back(new G4PiData(sn_m_t, sn_p_in, e5, 48));
517 
518  thePimData.push_back(new G4PiData(w_m_t, w_m_in, e5, 48));
519  thePipData.push_back(new G4PiData(w_m_t, w_p_in, e5, 48));
520 
521  // Pb, U
522 
523  thePimData.push_back(new G4PiData(pb_m_t, pb_m_in, e6, 46));
524  thePipData.push_back(new G4PiData(pb_m_t, pb_p_in, e6, 46));
525 
526  thePimData.push_back(new G4PiData(u_m_t, u_m_in, e6, 46));
527  thePipData.push_back(new G4PiData(u_m_t, u_p_in, e6, 46));
528 
529  theZ.push_back(2); // He
530  theZ.push_back(4); // Be
531  theZ.push_back(6); // C
532  theZ.push_back(7); // N
533  theZ.push_back(8); // O
534  theZ.push_back(11); // Na
535  theZ.push_back(13); // Al
536  theZ.push_back(14); // Si
537  theZ.push_back(20); // Ca
538  theZ.push_back(26); // Fe
539  theZ.push_back(29); // Cu
540  theZ.push_back(42); // Mo
541  theZ.push_back(48); // Cd
542  theZ.push_back(50); // Sn
543  theZ.push_back(74); // W
544  theZ.push_back(82); // Pb
545  theZ.push_back(92); // U
546 
547 }
G4VCrossSectionDataSet(const G4String &nam="")
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4NucleonNuclearCrossSection::~G4NucleonNuclearCrossSection ( )
virtual

Definition at line 552 of file G4NucleonNuclearCrossSection.cc.

553 {
554  std::for_each(thePimData.begin(), thePimData.end(), G4PiData::Delete());
555  std::for_each(thePipData.begin(), thePipData.end(), G4PiData::Delete());
556 }

Member Function Documentation

void G4NucleonNuclearCrossSection::CrossSectionDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 674 of file G4NucleonNuclearCrossSection.cc.

675 {
676  outFile << "G4NucleonNuclearCrossSection is a variant of the Barashenkov\n"
677  << "cross section parameterization to be used of protons and\n"
678  << "nucleons on targets heavier than hydrogen. It is intended for\n"
679  << "use as a cross section component and is currently used by\n"
680  << "G4BGGNucleonInelasticXS. It is valid for incident energies up\n"
681  << "to 1 TeV.\n";
682 }
std::ofstream outFile
Definition: GammaRayTel.cc:68
static const char* G4NucleonNuclearCrossSection::Default_Name ( )
inlinestatic

Definition at line 54 of file G4NucleonNuclearCrossSection.hh.

Referenced by G4BGGNucleonInelasticXS::BuildPhysicsTable(), and G4BGGNucleonElasticXS::BuildPhysicsTable().

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

186 {
187  GetElementCrossSection(dp, Z);
188  return fElasticXsc;
189 }
virtual G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z, const G4Material *mat=0)
G4double G4NucleonNuclearCrossSection::GetElasticXsc ( )
inline

Definition at line 70 of file G4NucleonNuclearCrossSection.hh.

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

580 {
581  G4double kineticEnergy = aParticle->GetKineticEnergy();
582 
583  G4double result = 0;
584  // G4cout<<"Z = "<<Z<<G4endl;
585 
586  size_t it = 0;
587  size_t itmax = theZ.size() - 1;
588  for(; it <= itmax; ++it) { if(Z <= theZ[it]) { break; } }
589  if( it > itmax ) { it = itmax; }
590  G4int Z1, Z2;
591  G4double x1, x2, xt1, xt2;
592 
593  std::vector<G4PiData *> * theData = &thePimData;
594  if(aParticle->GetDefinition() == theProton) { theData = &thePipData; }
595 
596  if( theZ[it] == Z )
597  {
598  result = (*theData)[it]->ReactionXSection(kineticEnergy);
599  fTotalXsc = (*theData)[it]->TotalXSection(kineticEnergy);
600  }
601  else
602  {
603  if(0 == it) { it = 1; }
604  x1 = (*theData)[it-1]->ReactionXSection(kineticEnergy);
605  xt1 = (*theData)[it-1]->TotalXSection(kineticEnergy);
606  Z1 = theZ[it-1];
607  x2 = (*theData)[it]->ReactionXSection(kineticEnergy);
608  xt2 = (*theData)[it]->TotalXSection(kineticEnergy);
609  Z2 = theZ[it];
610 
611  result = Interpolate(Z1, Z2, Z, x1, x2);
612  fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
613  }
614 
615  fElasticXsc = fTotalXsc - result;
616  if( fElasticXsc < 0.) { fElasticXsc = 0.; }
617 
618  return result;
619 }
G4double GetKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
int G4int
Definition: G4Types.hh:78
double G4double
Definition: G4Types.hh:76
G4double G4NucleonNuclearCrossSection::GetTotalXsc ( )
inline

Definition at line 69 of file G4NucleonNuclearCrossSection.hh.

69 { 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(), G4DynamicParticle::GetKineticEnergy(), and python.hepunit::GeV.

565 {
566  G4bool result = false;
567  if(aParticle->GetDefinition() == theNeutron ) result = true;
568  if(aParticle->GetDefinition() == theProton) result = true;
569  if(Z < 2) result = false;
570  if(aParticle->GetKineticEnergy() > 999.9*GeV) result = false;
571  return result;
572 }
G4double GetKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
bool G4bool
Definition: G4Types.hh:79

The documentation for this class was generated from the following files: