Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4BGGPionElasticXS Class Reference

#include <G4BGGPionElasticXS.hh>

Inheritance diagram for G4BGGPionElasticXS:
G4VCrossSectionDataSet

Public Member Functions

 G4BGGPionElasticXS (const G4ParticleDefinition *)
 
virtual ~G4BGGPionElasticXS ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *)
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, 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 void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
- Public Member Functions inherited from G4VCrossSectionDataSet
 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
virtual G4IsotopeSelectIsotope (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 G4StringGetName () const
 

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 64 of file G4BGGPionElasticXS.hh.

Constructor & Destructor Documentation

G4BGGPionElasticXS::G4BGGPionElasticXS ( const G4ParticleDefinition )

Definition at line 56 of file G4BGGPionElasticXS.cc.

References python.hepunit::GeV, python.hepunit::MeV, G4Proton::Proton(), G4VCrossSectionDataSet::SetMaxKinEnergy(), G4VCrossSectionDataSet::SetMinKinEnergy(), python.hepunit::TeV, and G4VCrossSectionDataSet::verboseLevel.

57  : G4VCrossSectionDataSet("Barashenkov-Glauber")
58 {
59  verboseLevel = 0;
60  fGlauberEnergy = 91.*GeV;
61  fLowEnergy = 20.*MeV;
62  fSAIDHighEnergyLimit = 2.6*GeV;
63  SetMinKinEnergy(0.0);
64  SetMaxKinEnergy(100*TeV);
65 
66  for (G4int i = 0; i < 93; i++) {
67  theGlauberFac[i] = 0.0;
68  theCoulombFac[i] = 0.0;
69  theA[i] = 1;
70  }
71  fPion = 0;
72  fGlauber = 0;
73  fHadron = 0;
74  fSAID = 0;
75  particle = 0;
76  theProton= G4Proton::Proton();
77  isPiplus = false;
78  isInitialized = false;
79 }
G4VCrossSectionDataSet(const G4String &nam="")
int G4int
Definition: G4Types.hh:78
void SetMinKinEnergy(G4double value)
static G4Proton * Proton()
Definition: G4Proton.cc:93
void SetMaxKinEnergy(G4double value)
G4bool isInitialized()
G4BGGPionElasticXS::~G4BGGPionElasticXS ( )
virtual

Definition at line 83 of file G4BGGPionElasticXS.cc.

84 {
85  delete fGlauber;
86  delete fPion;
87  delete fHadron;
88  delete fSAID;
89 }

Member Function Documentation

void G4BGGPionElasticXS::BuildPhysicsTable ( const G4ParticleDefinition p)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 191 of file G4BGGPionElasticXS.cc.

References G4UPiNuclearCrossSection::BuildPhysicsTable(), G4VCrossSectionDataSet::BuildPhysicsTable(), G4cout, G4endl, G4lrint(), G4NistManager::GetAtomicMassAmu(), G4UPiNuclearCrossSection::GetElasticCrossSection(), G4GlauberGribovCrossSection::GetElasticGlauberGribov(), G4HadronNucleonXsc::GetElasticHadronNucleonXsc(), G4ComponentSAIDTotalXS::GetElasticIsotopeCrossSection(), G4HadronNucleonXsc::GetHadronNucleonXscPDG(), G4ParticleDefinition::GetParticleName(), G4NistManager::Instance(), iz, G4PionMinus::PionMinus(), G4PionPlus::PionPlus(), G4DynamicParticle::SetKineticEnergy(), and G4VCrossSectionDataSet::verboseLevel.

192 {
193  if(&p == G4PionPlus::PionPlus() || &p == G4PionMinus::PionMinus()) {
194  particle = &p;
195  } else {
196  G4cout << "### G4BGGPionElasticXS WARNING: is not applicable to "
197  << p.GetParticleName()
198  << G4endl;
199  throw G4HadronicException(__FILE__, __LINE__,
200  "G4BGGPionElasticXS::BuildPhysicsTable is used for wrong particle");
201  return;
202  }
203 
204  if(isInitialized) { return; }
205  isInitialized = true;
206 
207  fPion = new G4UPiNuclearCrossSection();
208  fGlauber = new G4GlauberGribovCrossSection();
209  fHadron = new G4HadronNucleonXsc();
210  fSAID = new G4ComponentSAIDTotalXS();
211  fPion->BuildPhysicsTable(*particle);
212  fGlauber->BuildPhysicsTable(*particle);
213  if(particle == G4PionPlus::PionPlus()) { isPiplus = true; }
214 
215  G4ParticleDefinition* part = const_cast<G4ParticleDefinition*>(particle);
216  G4ThreeVector mom(0.0,0.0,1.0);
217  G4DynamicParticle dp(part, mom, fGlauberEnergy);
218 
220 
221  G4double csup, csdn;
222  G4int A;
223 
224  if(verboseLevel > 0) {
225  G4cout << "### G4BGGPionElasticXS::Initialise for "
226  << particle->GetParticleName() << G4endl;
227  }
228  for(G4int iz=2; iz<93; iz++) {
229 
230  A = G4lrint(nist->GetAtomicMassAmu(iz));
231  theA[iz] = A;
232 
233  csup = fGlauber->GetElasticGlauberGribov(&dp, iz, A);
234  csdn = fPion->GetElasticCrossSection(&dp, iz, A);
235 
236  theGlauberFac[iz] = csdn/csup;
237  if(verboseLevel > 0) {
238  G4cout << "Z= " << iz << " A= " << A
239  << " factor= " << theGlauberFac[iz] << G4endl;
240  }
241  }
242  /*
243  dp.SetKineticEnergy(fLowEnergy);
244  fHadron->GetHadronNucleonXscNS(&dp, G4Proton::Proton());
245  theCoulombFac[1] = fHadron->GetElasticHadronNucleonXsc();
246  */
247  dp.SetKineticEnergy(fSAIDHighEnergyLimit);
248  fHadron->GetHadronNucleonXscPDG(&dp, theProton);
249  theCoulombFac[1] =
250  fSAID->GetElasticIsotopeCrossSection(particle,fSAIDHighEnergyLimit,1,1)
251  /fHadron->GetElasticHadronNucleonXsc();
252 
253  dp.SetKineticEnergy(fLowEnergy);
254  for(G4int iz=2; iz<93; iz++) {
255  theCoulombFac[iz] = fPion->GetElasticCrossSection(&dp, iz, theA[iz]);
256  if(verboseLevel > 0) {
257  G4cout << "Z= " << iz << " A= " << A
258  << " factor= " << theCoulombFac[iz] << G4endl;
259  }
260  }
261 }
G4double GetElasticHadronNucleonXsc()
G4double GetElasticCrossSection(const G4DynamicParticle *aParticle, G4int Z, G4int A)
const char * p
Definition: xmltok.h:285
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
virtual G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4double iz
Definition: TRTMaterials.hh:39
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
int G4lrint(double ad)
Definition: templates.hh:163
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4bool isInitialized()
void BuildPhysicsTable(const G4ParticleDefinition &)
G4double GetElasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
void G4BGGPionElasticXS::CrossSectionDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 264 of file G4BGGPionElasticXS.cc.

265 {
266  outFile << "The Barashenkov-Glauber-Gribov cross section handles elastic\n"
267  << "scattering of pions from nuclei at all energies. The\n"
268  << "Barashenkov parameterization is used below 91 GeV and the\n"
269  << "Glauber-Gribov parameterization is used above 91 GeV.\n";
270 }
std::ofstream outFile
Definition: GammaRayTel.cc:68
G4double G4BGGPionElasticXS::GetElementCrossSection ( const G4DynamicParticle dp,
G4int  Z,
const G4Material mat = 0 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 113 of file G4BGGPionElasticXS.cc.

References python.hepunit::barn, G4cout, G4endl, G4DynamicParticle::GetDefinition(), G4UPiNuclearCrossSection::GetElasticCrossSection(), G4GlauberGribovCrossSection::GetElasticGlauberGribov(), GetIsoCrossSection(), G4DynamicParticle::GetKineticEnergy(), G4ParticleDefinition::GetParticleName(), and G4VCrossSectionDataSet::verboseLevel.

115 {
116  // this method should be called only for Z > 1
117 
118  G4double cross = 0.0;
119  G4double ekin = dp->GetKineticEnergy();
120  G4int Z = ZZ;
121  if(1 == Z) {
122  cross = 1.0115*GetIsoCrossSection(dp,1,1);
123  } else {
124  if(Z > 92) { Z = 92; }
125 
126  if(ekin <= fLowEnergy) {
127  cross = theCoulombFac[Z];
128  } else if(ekin > fGlauberEnergy) {
129  cross = theGlauberFac[Z]*fGlauber->GetElasticGlauberGribov(dp, Z, theA[Z]);
130  } else {
131  cross = fPion->GetElasticCrossSection(dp, Z, theA[Z]);
132  }
133  }
134  if(verboseLevel > 1) {
135  G4cout << "G4BGGPionElasticXS::GetElementCrossSection for "
136  << dp->GetDefinition()->GetParticleName()
137  << " Ekin(GeV)= " << dp->GetKineticEnergy()
138  << " in nucleus Z= " << Z << " A= " << theA[Z]
139  << " XS(b)= " << cross/barn
140  << G4endl;
141  }
142  return cross;
143 }
G4double GetElasticCrossSection(const G4DynamicParticle *aParticle, G4int Z, G4int A)
G4double GetKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
int G4int
Definition: G4Types.hh:78
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double GetElasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
G4double G4BGGPionElasticXS::GetIsoCrossSection ( const G4DynamicParticle dp,
G4int  Z,
G4int  A,
const G4Isotope iso = 0,
const G4Element elm = 0,
const G4Material mat = 0 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 146 of file G4BGGPionElasticXS.cc.

References python.hepunit::barn, G4cout, G4endl, G4DynamicParticle::GetDefinition(), G4HadronNucleonXsc::GetElasticHadronNucleonXsc(), G4ComponentSAIDTotalXS::GetElasticIsotopeCrossSection(), G4HadronNucleonXsc::GetHadronNucleonXscPDG(), G4DynamicParticle::GetKineticEnergy(), G4ParticleDefinition::GetParticleName(), and G4VCrossSectionDataSet::verboseLevel.

Referenced by GetElementCrossSection().

151 {
152  // this method should be called only for Z = 1
153 
154  G4double cross = 0.0;
155  G4double ekin = dp->GetKineticEnergy();
156 
157  if(ekin <= fSAIDHighEnergyLimit) {
158  cross = fSAID->GetElasticIsotopeCrossSection(particle, ekin, 1, 1);
159  } else {
160  fHadron->GetHadronNucleonXscPDG(dp, theProton);
161  cross = theCoulombFac[1]*fHadron->GetElasticHadronNucleonXsc();
162  }
163  cross *= A;
164  /*
165  if(ekin <= fLowEnergy) {
166  cross = theCoulombFac[1];
167 
168  } else if( A < 2) {
169  fHadron->GetHadronNucleonXscNS(dp, G4Proton::Proton());
170  cross = fHadron->GetElasticHadronNucleonXsc();
171  } else {
172  fHadron->GetHadronNucleonXscNS(dp, G4Proton::Proton());
173  cross = fHadron->GetElasticHadronNucleonXsc();
174  fHadron->GetHadronNucleonXscNS(dp, G4Neutron::Neutron());
175  cross += fHadron->GetElasticHadronNucleonXsc();
176  }
177  */
178  if(verboseLevel > 1) {
179  G4cout << "G4BGGPionElasticXS::GetIsoCrossSection for "
180  << dp->GetDefinition()->GetParticleName()
181  << " Ekin(GeV)= " << dp->GetKineticEnergy()
182  << " in nucleus Z= " << Z << " A= " << A
183  << " XS(b)= " << cross/barn
184  << G4endl;
185  }
186  return cross;
187 }
G4double GetElasticHadronNucleonXsc()
G4double GetKineticEnergy() const
virtual G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)
G4ParticleDefinition * GetDefinition() const
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4bool G4BGGPionElasticXS::IsElementApplicable ( const G4DynamicParticle ,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 94 of file G4BGGPionElasticXS.cc.

96 {
97  return true;
98 }
G4bool G4BGGPionElasticXS::IsIsoApplicable ( const G4DynamicParticle ,
G4int  Z,
G4int  A,
const G4Element elm = 0,
const G4Material mat = 0 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 102 of file G4BGGPionElasticXS.cc.

106 {
107  return (1 == Z && 2 >= A);
108 }

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