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

#include <G4EMDissociationCrossSection.hh>

Inheritance diagram for G4EMDissociationCrossSection:
G4VCrossSectionDataSet

Public Member Functions

 G4EMDissociationCrossSection ()
 
 ~G4EMDissociationCrossSection ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *)
 
G4PhysicsFreeVectorGetCrossSectionForProjectile (G4double, G4double, G4double, G4double, G4double, G4double)
 
G4PhysicsFreeVectorGetCrossSectionForTarget (G4double, G4double, G4double, G4double, G4double, G4double)
 
G4double GetWilsonProbabilityForProtonDissociation (G4double, G4double)
 
- 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 void CrossSectionDescription (std::ostream &) const
 
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 79 of file G4EMDissociationCrossSection.hh.

Constructor & Destructor Documentation

G4EMDissociationCrossSection::G4EMDissociationCrossSection ( )

Definition at line 79 of file G4EMDissociationCrossSection.cc.

References python.hepunit::fermi, and python.hepunit::MeV.

80  : G4VCrossSectionDataSet("Electromagnetic dissociation")
81 {
82  // This function makes use of the class which can sample the virtual photon
83  // spectrum, G4EMDissociationSpectrum.
84 
85  thePhotonSpectrum = new G4EMDissociationSpectrum();
86 
87  // Define other constants.
88 
89  r0 = 1.18 * fermi;
90  J = 36.8 * MeV;
91  Qprime = 17.0 * MeV;
92  epsilon = 0.0768;
93  xd = 0.25;
94 }
G4VCrossSectionDataSet(const G4String &nam="")
G4EMDissociationCrossSection::~G4EMDissociationCrossSection ( )

Definition at line 98 of file G4EMDissociationCrossSection.cc.

99 {
100  delete thePhotonSpectrum;
101 }

Member Function Documentation

G4PhysicsFreeVector * G4EMDissociationCrossSection::GetCrossSectionForProjectile ( G4double  AP,
G4double  ZP,
G4double  ,
G4double  ZT,
G4double  b,
G4double  bmin 
)

Definition at line 165 of file G4EMDissociationCrossSection.cc.

References python.hepunit::amu_c2, G4EMDissociationSpectrum::GetGeneralE1Spectrum(), G4EMDissociationSpectrum::GetGeneralE2Spectrum(), python.hepunit::hbarc, python.hepunit::MeV, python.hepunit::microbarn, python.hepunit::millibarn, and G4PhysicsFreeVector::PutValue().

Referenced by GetCrossSectionForTarget().

167 {
168 //
169 //
170 // Use Wilson et al's approach to calculate the cross-sections due to the E1
171 // and E2 moments of the field at the giant dipole and quadrupole resonances
172 // respectively, Note that the algorithm is traditionally applied to the
173 // EMD break-up of the projectile in the field of the target, as is implemented
174 // here.
175 //
176 // Initialise variables and calculate the energies for the GDR and GQR.
177 //
178  G4double AProot3 = std::pow(AP,1.0/3.0);
179  G4double u = 3.0 * J / Qprime / AProot3;
180  G4double R0 = r0 * AProot3;
181  G4double E_GDR = hbarc / std::sqrt(0.7*amu_c2*R0*R0/8.0/J*
182  (1.0 + u - (1.0 + epsilon + 3.0*u)/(1.0 + epsilon + u)*epsilon));
183  G4double E_GQR = 63.0 * MeV / AProot3;
184 //
185 //
186 // Determine the virtual photon spectra at these energies.
187 //
188  G4double ZTsq = ZT * ZT;
189  G4double nE1 = ZTsq *
190  thePhotonSpectrum->GetGeneralE1Spectrum(E_GDR, b, bmin);
191  G4double nE2 = ZTsq *
192  thePhotonSpectrum->GetGeneralE2Spectrum(E_GQR, b, bmin);
193 //
194 //
195 // Now calculate the cross-section of the projectile for interaction with the
196 // E1 and E2 fields.
197 //
198  G4double sE1 = 60.0 * millibarn * MeV * (AP-ZP)*ZP/AP;
199  G4double sE2 = 0.22 * microbarn / MeV * ZP * AProot3 * AProot3;
200  if (AP > 100.0) sE2 *= 0.9;
201  else if (AP > 40.0) sE2 *= 0.6;
202  else sE2 *= 0.3;
203 //
204 //
205 // ... and multiply with the intensity of the virtual photon spectra to get
206 // the probability of interaction.
207 //
208  G4PhysicsFreeVector *theCrossSectionVector = new G4PhysicsFreeVector(2);
209  theCrossSectionVector->PutValue(0, E_GDR, sE1*nE1);
210  theCrossSectionVector->PutValue(1, E_GQR, sE2*nE2*E_GQR*E_GQR);
211 
212  return theCrossSectionVector;
213 }
void PutValue(size_t binNumber, G4double binValue, G4double dataValue)
G4double GetGeneralE2Spectrum(G4double, G4double, G4double)
int microbarn
Definition: hepunit.py:41
int millibarn
Definition: hepunit.py:40
G4double GetGeneralE1Spectrum(G4double, G4double, G4double)
double G4double
Definition: G4Types.hh:76
float amu_c2
Definition: hepunit.py:277
G4PhysicsFreeVector * G4EMDissociationCrossSection::GetCrossSectionForTarget ( G4double  AP,
G4double  ZP,
G4double  AT,
G4double  ZT,
G4double  b,
G4double  bmin 
)

Definition at line 218 of file G4EMDissociationCrossSection.cc.

References GetCrossSectionForProjectile().

220 {
221 //
222 // This is a cheaky little member function to calculate the probability of
223 // EMD for the target in the field of the projectile ... just by reversing the
224 // A and Z's for the participants.
225 //
226  return GetCrossSectionForProjectile (AT, ZT, AP, ZP, b, bmin);
227 }
G4PhysicsFreeVector * GetCrossSectionForProjectile(G4double, G4double, G4double, G4double, G4double, G4double)
G4double G4EMDissociationCrossSection::GetElementCrossSection ( const G4DynamicParticle theDynamicParticle,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 125 of file G4EMDissociationCrossSection.cc.

References test::b, CLHEP::HepLorentzVector::beta(), G4DynamicParticle::Get4Momentum(), G4NistManager::GetAtomicMassAmu(), G4ParticleDefinition::GetBaryonNumber(), G4DynamicParticle::GetDefinition(), G4ParticleDefinition::GetPDGCharge(), and G4NistManager::Instance().

127 {
128  // VI protection for Hydrogen
129  if(1 >= Z) { return 0.0; }
130 
131  //
132  // Get relevant information about the projectile and target (A, Z) and
133  // velocity of the projectile.
134  //
135  G4ParticleDefinition *definitionP = theDynamicParticle->GetDefinition();
136  G4double AP = definitionP->GetBaryonNumber();
137  G4double ZP = definitionP->GetPDGCharge();
138  G4double b = theDynamicParticle->Get4Momentum().beta();
139 
141  G4double ZT = (G4double)Z;
142  G4double bmin = thePhotonSpectrum->GetClosestApproach(AP, ZP, AT, ZT, b);
143  //
144  //
145  // Calculate the cross-section for the projectile and then the target. The
146  // information is returned in a G4PhysicsFreeVector, which separates out the
147  // cross-sections for the E1 and E2 moments of the virtual photon field, and
148  // the energies (GDR and GQR).
149  //
150  G4PhysicsFreeVector *theProjectileCrossSections =
151  GetCrossSectionForProjectile (AP, ZP, AT, ZT, b, bmin);
152  G4double crossSection =
153  (*theProjectileCrossSections)[0]+(*theProjectileCrossSections)[1];
154  delete theProjectileCrossSections;
155  G4PhysicsFreeVector *theTargetCrossSections =
156  GetCrossSectionForTarget (AP, ZP, AT, ZT, b, bmin);
157  crossSection +=
158  (*theTargetCrossSections)[0]+(*theTargetCrossSections)[1];
159  delete theTargetCrossSections;
160  return crossSection;
161 }
G4ParticleDefinition * GetDefinition() const
static G4NistManager * Instance()
G4PhysicsFreeVector * GetCrossSectionForProjectile(G4double, G4double, G4double, G4double, G4double, G4double)
G4LorentzVector Get4Momentum() const
G4double GetClosestApproach(const G4double, const G4double, G4double, G4double, G4double)
G4double GetAtomicMassAmu(const G4String &symb) const
double G4double
Definition: G4Types.hh:76
G4double GetPDGCharge() const
G4PhysicsFreeVector * GetCrossSectionForTarget(G4double, G4double, G4double, G4double, G4double, G4double)
G4double G4EMDissociationCrossSection::GetWilsonProbabilityForProtonDissociation ( G4double  A,
G4double  Z 
)

Definition at line 232 of file G4EMDissociationCrossSection.cc.

234 {
235 //
236 // This is a simple algorithm to choose whether a proton or neutron is ejected
237 // from the nucleus in the EMD interaction.
238 //
239  G4double p = 0.0;
240  if (Z < 6.0)
241  p = 0.5;
242  else if (Z < 8.0)
243  p = 0.6;
244  else if (Z < 14.0)
245  p = 0.7;
246  else
247  {
248  G4double p1 = (G4double) Z / (G4double) A;
249  G4double p2 = 1.95*std::exp(-0.075*Z);
250  if (p1 < p2) p = p1;
251  else p = p2;
252  }
253 
254  return p;
255 }
const char * p
Definition: xmltok.h:285
double G4double
Definition: G4Types.hh:76
G4bool G4EMDissociationCrossSection::IsElementApplicable ( const G4DynamicParticle part,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 105 of file G4EMDissociationCrossSection.cc.

References G4DynamicParticle::GetDefinition(), and G4ParticleTable::GetParticleTable().

107 {
108 //
109 // The condition for the applicability of this class is that the projectile
110 // must be an ion and the target must have more than one nucleon. In reality
111 // the value of A for either the projectile or target could be much higher,
112 // since for cases where both he projectile and target are medium to small
113 // Z, the probability of the EMD process is, I think, VERY small.
114 //
115  if (G4ParticleTable::GetParticleTable()->GetIonTable()->IsIon(part->GetDefinition())) {
116  return true;
117  } else {
118  return false;
119  }
120 }
G4ParticleDefinition * GetDefinition() const
static G4ParticleTable * GetParticleTable()

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