Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EMDissociationCrossSection Class Reference

#include <G4EMDissociationCrossSection.hh>

+ Inheritance diagram for G4EMDissociationCrossSection:

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 IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
virtual G4double ComputeCrossSectionPerElement (G4double kinEnergy, G4double loge, const G4ParticleDefinition *, const G4Element *, const G4Material *mat=nullptr)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
virtual G4double ComputeIsoCrossSection (G4double kinEnergy, G4double loge, const G4ParticleDefinition *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
virtual const G4IsotopeSelectIsotope (const G4Element *, G4double kinEnergy, G4double logE)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
virtual void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
bool ForAllAtomsAndEnergies () const
 
void SetForAllAtomsAndEnergies (G4bool val)
 
const G4StringGetName () const
 
void SetName (const G4String &nam)
 
G4VCrossSectionDataSetoperator= (const G4VCrossSectionDataSet &right)=delete
 
 G4VCrossSectionDataSet (const G4VCrossSectionDataSet &)=delete
 

Additional Inherited Members

- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 
G4String name
 

Detailed Description

Definition at line 79 of file G4EMDissociationCrossSection.hh.

Constructor & Destructor Documentation

◆ G4EMDissociationCrossSection()

G4EMDissociationCrossSection::G4EMDissociationCrossSection ( )

Definition at line 79 of file G4EMDissociationCrossSection.cc.

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}

◆ ~G4EMDissociationCrossSection()

G4EMDissociationCrossSection::~G4EMDissociationCrossSection ( )

Definition at line 98 of file G4EMDissociationCrossSection.cc.

99{
100 delete thePhotonSpectrum;
101}

Member Function Documentation

◆ GetCrossSectionForProjectile()

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

Definition at line 169 of file G4EMDissociationCrossSection.cc.

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

Referenced by GetCrossSectionForTarget(), and GetElementCrossSection().

◆ GetCrossSectionForTarget()

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

Definition at line 222 of file G4EMDissociationCrossSection.cc.

224{
225//
226// This is a cheaky little member function to calculate the probability of
227// EMD for the target in the field of the projectile ... just by reversing the
228// A and Z's for the participants.
229//
230 return GetCrossSectionForProjectile (AT, ZT, AP, ZP, b, bmin);
231}
G4PhysicsFreeVector * GetCrossSectionForProjectile(G4double, G4double, G4double, G4double, G4double, G4double)

Referenced by GetElementCrossSection().

◆ GetElementCrossSection()

G4double G4EMDissociationCrossSection::GetElementCrossSection ( const G4DynamicParticle theDynamicParticle,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 124 of file G4EMDissociationCrossSection.cc.

127{
128 // VI protection for Hydrogen
129 if(1 >= Z) { return 0.0; }
130
131 // Zero cross-section for particles with kinetic energy less than 2 MeV to prevent
132 // possible abort signal from bad arithmetic in GetCrossSectionForProjectile
133 if ( theDynamicParticle->GetKineticEnergy() < 2.0*CLHEP::MeV ) { return 0.0; }
134
135 //
136 // Get relevant information about the projectile and target (A, Z) and
137 // velocity of the projectile.
138 //
139 const G4ParticleDefinition *definitionP = theDynamicParticle->GetDefinition();
140 G4double AP = definitionP->GetBaryonNumber();
141 G4double ZP = definitionP->GetPDGCharge();
142 G4double b = theDynamicParticle->Get4Momentum().beta();
143
145 G4double ZT = (G4double)Z;
146 G4double bmin = thePhotonSpectrum->GetClosestApproach(AP, ZP, AT, ZT, b);
147 //
148 //
149 // Calculate the cross-section for the projectile and then the target. The
150 // information is returned in a G4PhysicsFreeVector, which separates out the
151 // cross-sections for the E1 and E2 moments of the virtual photon field, and
152 // the energies (GDR and GQR).
153 //
154 G4PhysicsFreeVector *theProjectileCrossSections =
155 GetCrossSectionForProjectile (AP, ZP, AT, ZT, b, bmin);
156 G4double crossSection =
157 (*theProjectileCrossSections)[0]+(*theProjectileCrossSections)[1];
158 delete theProjectileCrossSections;
159 G4PhysicsFreeVector *theTargetCrossSections =
160 GetCrossSectionForTarget (AP, ZP, AT, ZT, b, bmin);
161 crossSection +=
162 (*theTargetCrossSections)[0]+(*theTargetCrossSections)[1];
163 delete theTargetCrossSections;
164 return crossSection;
165}
const G4int Z[17]
G4ParticleDefinition * GetDefinition() const
G4LorentzVector Get4Momentum() const
G4double GetKineticEnergy() const
G4PhysicsFreeVector * GetCrossSectionForTarget(G4double, G4double, G4double, G4double, G4double, G4double)
G4double GetClosestApproach(const G4double, const G4double, G4double, G4double, G4double)
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetPDGCharge() const

◆ GetWilsonProbabilityForProtonDissociation()

G4double G4EMDissociationCrossSection::GetWilsonProbabilityForProtonDissociation ( G4double  A,
G4double  Z 
)

Definition at line 236 of file G4EMDissociationCrossSection.cc.

238{
239//
240// This is a simple algorithm to choose whether a proton or neutron is ejected
241// from the nucleus in the EMD interaction.
242//
243 G4double p = 0.0;
244 if (Z < 2.0)
245 p = 0.0; // To avoid to remove one proton from hydrogen isotopes
246 else if (Z < 6.0)
247 p = 0.5;
248 else if (Z < 8.0)
249 p = 0.6;
250 else if (Z < 14.0)
251 p = 0.7;
252 else
253 {
254 G4double p1 = (G4double) Z / (G4double) A;
255 G4double p2 = 1.95*G4Exp(-0.075*Z);
256 if (p1 < p2) p = p1;
257 else p = p2;
258 }
259
260 return p;
261}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
const G4double A[17]

◆ IsElementApplicable()

G4bool G4EMDissociationCrossSection::IsElementApplicable ( const G4DynamicParticle part,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 105 of file G4EMDissociationCrossSection.cc.

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}
static G4ParticleTable * GetParticleTable()

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