Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4PiNuclearCrossSection Class Reference

#include <G4PiNuclearCrossSection.hh>

Inheritance diagram for G4PiNuclearCrossSection:
Collaboration diagram for G4PiNuclearCrossSection:

Public Member Functions

 G4PiNuclearCrossSection ()
 
virtual ~G4PiNuclearCrossSection ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *aParticle, G4int Z, const G4Material *)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *particle, G4int Z, const G4Material *)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
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 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 37 of file G4PiNuclearCrossSection.hh.

Constructor & Destructor Documentation

G4PiNuclearCrossSection::G4PiNuclearCrossSection ( )

Definition at line 388 of file G4PiNuclearCrossSection.cc.

390  fTotalXsc(0.0), fElasticXsc(0.0)
391 {
392  SetMinKinEnergy(0.0);
393  SetMaxKinEnergy(99.9*TeV);
394 
395  thePimData.push_back(new G4PiData(he_t, he_in, e1, 38));
396  thePipData.push_back(new G4PiData(he_t, he_in, e1, 38));
397  thePimData.push_back(new G4PiData(be_m_t, be_m_in, e1, 38));
398  thePipData.push_back(new G4PiData(be_p_t, be_p_in, e1, 24));
399  thePimData.push_back(new G4PiData(c_m_t, c_m_in, e2, 39));
400  thePipData.push_back(new G4PiData(c_p_t, c_p_in, e2, 24));
401  thePimData.push_back(new G4PiData(n_m_t, n_m_in, e2, 39));
402  thePipData.push_back(new G4PiData(n_p_t, n_p_in, e2, 27));
403  thePimData.push_back(new G4PiData(o_m_t, o_m_in, e3, 31));
404  thePipData.push_back(new G4PiData(o_p_t, o_p_in, e3, 20));
405  thePimData.push_back(new G4PiData(na_m_t, na_m_in, e3, 31));
406  thePipData.push_back(new G4PiData(na_p_t, na_p_in, e3, 22));
407  thePimData.push_back(new G4PiData(al_m_t, al_m_in, e3_1, 31));
408  thePipData.push_back(new G4PiData(al_p_t, al_p_in, e3_1, 21));
409  thePimData.push_back(new G4PiData(ca_m_t, ca_m_in, e3_1, 31));
410  thePipData.push_back(new G4PiData(ca_p_t, ca_p_in, e3_1, 23));
411  thePimData.push_back(new G4PiData(fe_m_t, fe_m_in, e4, 32));
412  thePipData.push_back(new G4PiData(fe_p_t, fe_p_in, e4, 25));
413  thePimData.push_back(new G4PiData(cu_m_t, cu_m_in, e4, 32));
414  thePipData.push_back(new G4PiData(cu_p_t, cu_p_in, e4, 25));
415  thePimData.push_back(new G4PiData(mo_m_t, mo_m_in, e5, 34));
416  thePipData.push_back(new G4PiData(mo_p_t, mo_p_in, e5, 27));
417  thePimData.push_back(new G4PiData(cd_m_t, cd_m_in, e5, 34));
418  thePipData.push_back(new G4PiData(cd_p_t, cd_p_in, e5, 28));
419  thePimData.push_back(new G4PiData(sn_m_t, sn_m_in, e6, 35));
420  thePipData.push_back(new G4PiData(sn_p_t, sn_p_in, e6, 29));
421  thePimData.push_back(new G4PiData(w_m_t, w_m_in, e6, 35));
422  thePipData.push_back(new G4PiData(w_p_t, w_p_in, e6, 30));
423  thePimData.push_back(new G4PiData(pb_m_t, pb_m_in, e7, 35));
424  thePipData.push_back(new G4PiData(pb_p_t, pb_p_in, e7, 30));
425  thePimData.push_back(new G4PiData(u_m_t, u_m_in, e7, 35));
426  thePipData.push_back(new G4PiData(u_p_t, u_p_in, e7, 30));
427 
428  theZ.push_back(2); // He
429  theZ.push_back(4); // Be
430  theZ.push_back(6); // C
431  theZ.push_back(7); // N
432  theZ.push_back(8); // O
433  theZ.push_back(11); // Na
434  theZ.push_back(13); // Al
435  theZ.push_back(20); // Ca
436  theZ.push_back(26); // Fe
437  theZ.push_back(29); // Cu
438  theZ.push_back(42); // Mo
439  theZ.push_back(48); // Cd
440  theZ.push_back(50); // Sn
441  theZ.push_back(74); // W
442  theZ.push_back(82); // Pb
443  theZ.push_back(92); // U
444 }
G4VCrossSectionDataSet(const G4String &nam="")
static const char * Default_Name()
static constexpr double TeV
Definition: G4SIunits.hh:218
void SetMinKinEnergy(G4double value)
void SetMaxKinEnergy(G4double value)

Here is the call graph for this function:

G4PiNuclearCrossSection::~G4PiNuclearCrossSection ( )
virtual

Definition at line 447 of file G4PiNuclearCrossSection.cc.

448 {
449  std::for_each(thePimData.begin(), thePimData.end(), G4PiData::Delete());
450  std::for_each(thePipData.begin(), thePipData.end(), G4PiData::Delete());
451 }

Member Function Documentation

void G4PiNuclearCrossSection::BuildPhysicsTable ( const G4ParticleDefinition &  p)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 471 of file G4PiNuclearCrossSection.cc.

472 {
473  if(&p == G4PionMinus::PionMinus() || &p == G4PionPlus::PionPlus()) { return; }
474  throw G4HadronicException(__FILE__, __LINE__,"Is applicable only for pions");
475 }
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98

Here is the call graph for this function:

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 454 of file G4PiNuclearCrossSection.cc.

455 {
456  outFile << "G4PiNuclearCrossSection calculates the pion inelastic cross\n"
457  << "section for all nuclei heavier than hydrogen. It uses the\n"
458  << "Barashenkov cross sections and is valid for all incident\n"
459  << "energies.\n";
460 }
static const char* G4PiNuclearCrossSection::Default_Name ( )
inlinestatic

Definition at line 44 of file G4PiNuclearCrossSection.hh.

44 {return "G4PiNuclearCrossSection";}

Here is the caller graph for this function:

G4double G4PiNuclearCrossSection::GetElasticXsc ( )
inline

Definition at line 60 of file G4PiNuclearCrossSection.hh.

60 {return fElasticXsc;};
G4double G4PiNuclearCrossSection::GetElementCrossSection ( const G4DynamicParticle *  particle,
G4int  Z,
const G4Material *   
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 478 of file G4PiNuclearCrossSection.cc.

480 {
481  G4double charge = particle->GetDefinition()->GetPDGCharge();
482  G4double kineticEnergy = particle->GetKineticEnergy();
483 
484  // body
485 
486  G4double result = 0;
487  // debug.push_back(Z);
488  size_t it = 0;
489 
490  while(it < theZ.size() && Z > theZ[it]) it++; /* Loop checking, 08.01.2016, W. Pokorski */
491 
492  // debug.push_back(theZ[it]);
493  // debug.push_back(kineticEnergy);
494 
495  if(Z > theZ[it])
496  {
497  throw G4HadronicException(__FILE__, __LINE__,
498  "Called G4PiNuclearCrossSection outside parametrization");
499  }
500  G4int Z1, Z2;
501  G4double x1, x2, xt1, xt2;
502  if( charge < 0 )
503  {
504  if( theZ[it] == Z )
505  {
506  result = thePimData[it]->ReactionXSection(kineticEnergy);
507  fTotalXsc = thePimData[it]->TotalXSection(kineticEnergy);
508 
509  // debug.push_back("D1 ");
510  // debug.push_back(result);
511  // debug.push_back(fTotalXsc);
512  }
513  else
514  {
515  x1 = thePimData[it-1]->ReactionXSection(kineticEnergy);
516  xt1 = thePimData[it-1]->TotalXSection(kineticEnergy);
517  Z1 = theZ[it-1];
518  x2 = thePimData[it]->ReactionXSection(kineticEnergy);
519  xt2 = thePimData[it]->TotalXSection(kineticEnergy);
520  Z2 = theZ[it];
521 
522  result = Interpolate(Z1, Z2, Z, x1, x2);
523  fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
524 
525  // debug.push_back("D2 ");
526  // debug.push_back(x1);
527  // debug.push_back(x2);
528  // debug.push_back(xt1);
529  // debug.push_back(xt2);
530  // debug.push_back(Z1);
531  // debug.push_back(Z2);
532  // debug.push_back(result);
533  // debug.push_back(fTotalXsc);
534  }
535  }
536  else
537  {
538  if(theZ[it]==Z)
539  {
540  // at high energies, when no data for pi+, use pi-
541  std::vector<G4PiData *> * theData = &thePimData;
542  if(thePipData[it]->AppliesTo(kineticEnergy))
543  {
544  theData = &thePipData;
545  }
546  result = theData->operator[](it)->ReactionXSection(kineticEnergy);
547  fTotalXsc = theData->operator[](it)->TotalXSection(kineticEnergy);
548 
549  // debug.push_back("D3 ");
550  // debug.push_back(result);
551  // debug.push_back(fTotalXsc);
552  }
553  else
554  {
555  std::vector<G4PiData *> * theLData = &thePimData;
556  if(thePipData[it-1]->AppliesTo(kineticEnergy))
557  {
558  theLData = &thePipData;
559  }
560  std::vector<G4PiData *> * theHData = &thePimData;
561  if(thePipData[it]->AppliesTo(kineticEnergy))
562  {
563  theHData = &thePipData;
564  }
565  x1 = theLData->operator[](it-1)->ReactionXSection(kineticEnergy);
566  xt1 = theLData->operator[](it-1)->TotalXSection(kineticEnergy);
567  Z1 = theZ[it-1];
568  x2 = theHData->operator[](it)->ReactionXSection(kineticEnergy);
569  xt2 = theHData->operator[](it)->TotalXSection(kineticEnergy);
570  Z2 = theZ[it];
571 
572  result = Interpolate(Z1, Z2, Z, x1, x2);
573  fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
574 
575  // debug.push_back("D4 ");
576  // debug.push_back(x1);
577  // debug.push_back(xt1);
578  // debug.push_back(x2);
579  // debug.push_back(xt2);
580  // debug.push_back(Z1);
581  // debug.push_back(Z2);
582  // debug.push_back(result);
583  // debug.push_back(fTotalXsc);
584  }
585  }
586  // debug.dump();
587 
588  fElasticXsc = fTotalXsc - result;
589  if( fElasticXsc < 0.) fElasticXsc = 0.;
590 
591  return result;
592 }
G4double G4ParticleHPJENDLHEData::G4double result
G4double GetKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
int G4int
Definition: G4Types.hh:78
double G4double
Definition: G4Types.hh:76
G4double GetPDGCharge() const

Here is the call graph for this function:

G4double G4PiNuclearCrossSection::GetTotalXsc ( )
inline

Definition at line 59 of file G4PiNuclearCrossSection.hh.

59 {return fTotalXsc;};
G4bool G4PiNuclearCrossSection::IsElementApplicable ( const G4DynamicParticle *  aParticle,
G4int  Z,
const G4Material *   
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 464 of file G4PiNuclearCrossSection.cc.

466 {
467  return (1 < Z);
468 }

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