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 G4IsotopeSelectIsotope (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 G4StringGetName () 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: