Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ComponentBarNucleonNucleusXsc Class Reference

#include <G4ComponentBarNucleonNucleusXsc.hh>

Inheritance diagram for G4ComponentBarNucleonNucleusXsc:
Collaboration diagram for G4ComponentBarNucleonNucleusXsc:

Public Member Functions

 G4ComponentBarNucleonNucleusXsc ()
 
virtual ~G4ComponentBarNucleonNucleusXsc ()
 
virtual G4double GetTotalIsotopeCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int)
 
virtual G4double GetTotalElementCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double)
 
virtual G4double GetInelasticIsotopeCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int)
 
virtual G4double GetInelasticElementCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double)
 
virtual G4double GetElasticElementCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double)
 
virtual G4double GetElasticIsotopeCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int)
 
G4bool IsElementApplicable (const G4DynamicParticle *aParticle, G4int Z)
 
G4double GetElementCrossSection (const G4DynamicParticle *aParticle, G4int Z)
 
void CrossSectionDescription (std::ostream &) const
 
G4double GetElasticCrossSection (const G4DynamicParticle *aParticle, G4int Z)
 
G4double GetTotalXsc ()
 
G4double GetElasticXsc ()
 
- Public Member Functions inherited from G4VComponentCrossSection
 G4VComponentCrossSection (const G4String &nam="")
 
virtual ~G4VComponentCrossSection ()
 
G4double GetTotalElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
G4double GetInelasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
G4double GetElasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
virtual G4double ComputeQuasiElasticRatio (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void Description () const
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
const G4StringGetName () const
 

Detailed Description

Definition at line 47 of file G4ComponentBarNucleonNucleusXsc.hh.

Constructor & Destructor Documentation

G4ComponentBarNucleonNucleusXsc::G4ComponentBarNucleonNucleusXsc ( )

Definition at line 451 of file G4ComponentBarNucleonNucleusXsc.cc.

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

Here is the call graph for this function:

G4ComponentBarNucleonNucleusXsc::~G4ComponentBarNucleonNucleusXsc ( )
virtual

Definition at line 544 of file G4ComponentBarNucleonNucleusXsc.cc.

545 {
546  std::for_each(thePimData.begin(), thePimData.end(), G4PiData::Delete());
547  std::for_each(thePipData.begin(), thePipData.end(), G4PiData::Delete());
548 }

Member Function Documentation

void G4ComponentBarNucleonNucleusXsc::CrossSectionDescription ( std::ostream &  outFile) const

Definition at line 752 of file G4ComponentBarNucleonNucleusXsc.cc.

753 {
754  outFile << "G4ComponentBarNucleonNucleusXsc is a variant of the Barashenkov\n"
755  << "cross section parameterization to be used of protons and\n"
756  << "nucleons on targets heavier than hydrogen. It is intended for\n"
757  << "use as a cross section component and is currently used by\n"
758  << "G4BGGNucleonInelasticXS. It is valid for incident energies up\n"
759  << "to 1 TeV.\n";
760 }
G4double G4ComponentBarNucleonNucleusXsc::GetElasticCrossSection ( const G4DynamicParticle aParticle,
G4int  Z 
)
inline

Definition at line 221 of file G4ComponentBarNucleonNucleusXsc.hh.

223 {
224  fInelasticXsc = GetElementCrossSection(dp, Z);
225  return fElasticXsc;
226 }
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)

Here is the call graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetElasticElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double   
)
virtual

Implements G4VComponentCrossSection.

Definition at line 608 of file G4ComponentBarNucleonNucleusXsc.cc.

611 {
612  G4DynamicParticle* aDP = new G4DynamicParticle(aParticle,G4ParticleMomentum(1.,0.,0.),
613  kinEnergy);
614  fInelasticXsc = GetElementCrossSection(aDP, Z);
615  delete aDP;
616 
617  return fElasticXsc;
618 }
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4ThreeVector G4ParticleMomentum

Here is the call graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetElasticIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int   
)
virtual

Implements G4VComponentCrossSection.

Definition at line 622 of file G4ComponentBarNucleonNucleusXsc.cc.

625 {
626  G4DynamicParticle* aDP = new G4DynamicParticle(aParticle,G4ParticleMomentum(1.,0.,0.),
627  kinEnergy);
628  fInelasticXsc = GetElementCrossSection(aDP, Z);
629  delete aDP;
630 
631  return fElasticXsc;
632 }
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4ThreeVector G4ParticleMomentum

Here is the call graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetElasticXsc ( )
inline

Definition at line 106 of file G4ComponentBarNucleonNucleusXsc.hh.

106 { return fElasticXsc; };
G4double G4ComponentBarNucleonNucleusXsc::GetElementCrossSection ( const G4DynamicParticle aParticle,
G4int  Z 
)

Definition at line 656 of file G4ComponentBarNucleonNucleusXsc.cc.

658 {
659  G4double kineticEnergy = aParticle->GetKineticEnergy();
660 
661  G4double result = 0;
662  // G4cout<<"Z = "<<Z<<G4endl;
663 
664  size_t it = 0;
665  size_t itmax = theZ.size() - 1;
666  for(; it <= itmax; ++it) { if(Z <= theZ[it]) { break; } }
667  if( it > itmax ) { it = itmax; }
668  G4int Z1, Z2;
669  G4double x1, x2, xt1, xt2;
670 
671  std::vector<G4PiData *> * theData = &thePimData;
672  if(aParticle->GetDefinition() == theProton) { theData = &thePipData; }
673 
674  if( theZ[it] == Z )
675  {
676  result = (*theData)[it]->ReactionXSection(kineticEnergy);
677  fTotalXsc = (*theData)[it]->TotalXSection(kineticEnergy);
678  }
679  else
680  {
681  if(0 == it) { it = 1; }
682  x1 = (*theData)[it-1]->ReactionXSection(kineticEnergy);
683  xt1 = (*theData)[it-1]->TotalXSection(kineticEnergy);
684  Z1 = theZ[it-1];
685  x2 = (*theData)[it]->ReactionXSection(kineticEnergy);
686  xt2 = (*theData)[it]->TotalXSection(kineticEnergy);
687  Z2 = theZ[it];
688 
689  result = Interpolate(Z1, Z2, Z, x1, x2);
690  fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
691  }
692 
693  fElasticXsc = fTotalXsc - result;
694  if( fElasticXsc < 0.) { fElasticXsc = 0.; }
695 
696  return result;
697 }
G4double G4ParticleHPJENDLHEData::G4double result
G4double GetKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
int G4int
Definition: G4Types.hh:78
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetInelasticElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double   
)
virtual

Implements G4VComponentCrossSection.

Definition at line 594 of file G4ComponentBarNucleonNucleusXsc.cc.

597 {
598  G4DynamicParticle* aDP = new G4DynamicParticle(aParticle,G4ParticleMomentum(1.,0.,0.),
599  kinEnergy);
600  fInelasticXsc = GetElementCrossSection(aDP, Z);
601  delete aDP;
602 
603  return fInelasticXsc;
604 }
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4ThreeVector G4ParticleMomentum

Here is the call graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetInelasticIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int   
)
virtual

Implements G4VComponentCrossSection.

Definition at line 580 of file G4ComponentBarNucleonNucleusXsc.cc.

583 {
584  G4DynamicParticle* aDP = new G4DynamicParticle(aParticle,G4ParticleMomentum(1.,0.,0.),
585  kinEnergy);
586  fInelasticXsc = GetElementCrossSection(aDP, Z);
587  delete aDP;
588 
589  return fInelasticXsc;
590 }
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4ThreeVector G4ParticleMomentum

Here is the call graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetTotalElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double   
)
virtual

Implements G4VComponentCrossSection.

Definition at line 566 of file G4ComponentBarNucleonNucleusXsc.cc.

569 {
570  G4DynamicParticle* aDP = new G4DynamicParticle(aParticle,G4ParticleMomentum(1.,0.,0.),
571  kinEnergy);
572  fInelasticXsc = GetElementCrossSection(aDP, Z);
573  delete aDP;
574 
575  return fTotalXsc;
576 }
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4ThreeVector G4ParticleMomentum

Here is the call graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetTotalIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int   
)
virtual

Implements G4VComponentCrossSection.

Definition at line 552 of file G4ComponentBarNucleonNucleusXsc.cc.

555 {
556  G4DynamicParticle* aDP = new G4DynamicParticle(aParticle,G4ParticleMomentum(1.,0.,0.),
557  kinEnergy);
558  fInelasticXsc = GetElementCrossSection(aDP, Z);
559  delete aDP;
560 
561  return fTotalXsc;
562 }
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4ThreeVector G4ParticleMomentum

Here is the call graph for this function:

G4double G4ComponentBarNucleonNucleusXsc::GetTotalXsc ( )
inline

Definition at line 105 of file G4ComponentBarNucleonNucleusXsc.hh.

105 { return fTotalXsc; };
G4bool G4ComponentBarNucleonNucleusXsc::IsElementApplicable ( const G4DynamicParticle aParticle,
G4int  Z 
)

Definition at line 640 of file G4ComponentBarNucleonNucleusXsc.cc.

642 {
643  G4bool result = false;
644  if(aParticle->GetDefinition() == theNeutron ) result = true;
645  if(aParticle->GetDefinition() == theProton) result = true;
646  if(Z < 2) result = false;
647  if(aParticle->GetKineticEnergy() > 999.9*GeV) result = false;
648  return result;
649 }
G4double G4ParticleHPJENDLHEData::G4double result
G4double GetKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
bool G4bool
Definition: G4Types.hh:79
static constexpr double GeV
Definition: G4SIunits.hh:217

Here is the call graph for this function:


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