#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 *) |
G4PhysicsFreeVector * | GetCrossSectionForProjectile (G4double, G4double, G4double, G4double, G4double, G4double) |
G4PhysicsFreeVector * | GetCrossSectionForTarget (G4double, G4double, G4double, G4double, G4double, G4double) |
G4double | GetWilsonProbabilityForProtonDissociation (G4double, G4double) |
Definition at line 79 of file G4EMDissociationCrossSection.hh.
G4EMDissociationCrossSection::G4EMDissociationCrossSection | ( | ) |
Definition at line 79 of file G4EMDissociationCrossSection.cc.
00080 : G4VCrossSectionDataSet("Electromagnetic dissociation") 00081 { 00082 // This function makes use of the class which can sample the virtual photon 00083 // spectrum, G4EMDissociationSpectrum. 00084 00085 thePhotonSpectrum = new G4EMDissociationSpectrum(); 00086 00087 // Define other constants. 00088 00089 r0 = 1.18 * fermi; 00090 J = 36.8 * MeV; 00091 Qprime = 17.0 * MeV; 00092 epsilon = 0.0768; 00093 xd = 0.25; 00094 }
G4EMDissociationCrossSection::~G4EMDissociationCrossSection | ( | ) |
G4PhysicsFreeVector * G4EMDissociationCrossSection::GetCrossSectionForProjectile | ( | G4double | , | |
G4double | , | |||
G4double | , | |||
G4double | , | |||
G4double | , | |||
G4double | ||||
) |
Definition at line 165 of file G4EMDissociationCrossSection.cc.
References G4EMDissociationSpectrum::GetGeneralE1Spectrum(), G4EMDissociationSpectrum::GetGeneralE2Spectrum(), and G4PhysicsFreeVector::PutValue().
Referenced by GetCrossSectionForTarget().
00167 { 00168 // 00169 // 00170 // Use Wilson et al's approach to calculate the cross-sections due to the E1 00171 // and E2 moments of the field at the giant dipole and quadrupole resonances 00172 // respectively, Note that the algorithm is traditionally applied to the 00173 // EMD break-up of the projectile in the field of the target, as is implemented 00174 // here. 00175 // 00176 // Initialise variables and calculate the energies for the GDR and GQR. 00177 // 00178 G4double AProot3 = std::pow(AP,1.0/3.0); 00179 G4double u = 3.0 * J / Qprime / AProot3; 00180 G4double R0 = r0 * AProot3; 00181 G4double E_GDR = hbarc / std::sqrt(0.7*amu_c2*R0*R0/8.0/J* 00182 (1.0 + u - (1.0 + epsilon + 3.0*u)/(1.0 + epsilon + u)*epsilon)); 00183 G4double E_GQR = 63.0 * MeV / AProot3; 00184 // 00185 // 00186 // Determine the virtual photon spectra at these energies. 00187 // 00188 G4double ZTsq = ZT * ZT; 00189 G4double nE1 = ZTsq * 00190 thePhotonSpectrum->GetGeneralE1Spectrum(E_GDR, b, bmin); 00191 G4double nE2 = ZTsq * 00192 thePhotonSpectrum->GetGeneralE2Spectrum(E_GQR, b, bmin); 00193 // 00194 // 00195 // Now calculate the cross-section of the projectile for interaction with the 00196 // E1 and E2 fields. 00197 // 00198 G4double sE1 = 60.0 * millibarn * MeV * (AP-ZP)*ZP/AP; 00199 G4double sE2 = 0.22 * microbarn / MeV * ZP * AProot3 * AProot3; 00200 if (AP > 100.0) sE2 *= 0.9; 00201 else if (AP > 40.0) sE2 *= 0.6; 00202 else sE2 *= 0.3; 00203 // 00204 // 00205 // ... and multiply with the intensity of the virtual photon spectra to get 00206 // the probability of interaction. 00207 // 00208 G4PhysicsFreeVector *theCrossSectionVector = new G4PhysicsFreeVector(2); 00209 theCrossSectionVector->PutValue(0, E_GDR, sE1*nE1); 00210 theCrossSectionVector->PutValue(1, E_GQR, sE2*nE2*E_GQR*E_GQR); 00211 00212 return theCrossSectionVector; 00213 }
G4PhysicsFreeVector * G4EMDissociationCrossSection::GetCrossSectionForTarget | ( | G4double | , | |
G4double | , | |||
G4double | , | |||
G4double | , | |||
G4double | , | |||
G4double | ||||
) |
Definition at line 218 of file G4EMDissociationCrossSection.cc.
References GetCrossSectionForProjectile().
00220 { 00221 // 00222 // This is a cheaky little member function to calculate the probability of 00223 // EMD for the target in the field of the projectile ... just by reversing the 00224 // A and Z's for the participants. 00225 // 00226 return GetCrossSectionForProjectile (AT, ZT, AP, ZP, b, bmin); 00227 }
G4double G4EMDissociationCrossSection::GetElementCrossSection | ( | const G4DynamicParticle * | , | |
G4int | Z, | |||
const G4Material * | ||||
) | [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 125 of file G4EMDissociationCrossSection.cc.
References G4DynamicParticle::Get4Momentum(), G4NistManager::GetAtomicMassAmu(), G4ParticleDefinition::GetBaryonNumber(), G4DynamicParticle::GetDefinition(), G4ParticleDefinition::GetPDGCharge(), and G4NistManager::Instance().
00127 { 00128 // VI protection for Hydrogen 00129 if(1 >= Z) { return 0.0; } 00130 00131 // 00132 // Get relevant information about the projectile and target (A, Z) and 00133 // velocity of the projectile. 00134 // 00135 G4ParticleDefinition *definitionP = theDynamicParticle->GetDefinition(); 00136 G4double AP = definitionP->GetBaryonNumber(); 00137 G4double ZP = definitionP->GetPDGCharge(); 00138 G4double b = theDynamicParticle->Get4Momentum().beta(); 00139 00140 G4double AT = G4NistManager::Instance()->GetAtomicMassAmu(Z); 00141 G4double ZT = (G4double)Z; 00142 G4double bmin = thePhotonSpectrum->GetClosestApproach(AP, ZP, AT, ZT, b); 00143 // 00144 // 00145 // Calculate the cross-section for the projectile and then the target. The 00146 // information is returned in a G4PhysicsFreeVector, which separates out the 00147 // cross-sections for the E1 and E2 moments of the virtual photon field, and 00148 // the energies (GDR and GQR). 00149 // 00150 G4PhysicsFreeVector *theProjectileCrossSections = 00151 GetCrossSectionForProjectile (AP, ZP, AT, ZT, b, bmin); 00152 G4double crossSection = 00153 (*theProjectileCrossSections)[0]+(*theProjectileCrossSections)[1]; 00154 delete theProjectileCrossSections; 00155 G4PhysicsFreeVector *theTargetCrossSections = 00156 GetCrossSectionForTarget (AP, ZP, AT, ZT, b, bmin); 00157 crossSection += 00158 (*theTargetCrossSections)[0]+(*theTargetCrossSections)[1]; 00159 delete theTargetCrossSections; 00160 return crossSection; 00161 }
G4double G4EMDissociationCrossSection::GetWilsonProbabilityForProtonDissociation | ( | G4double | , | |
G4double | ||||
) |
Definition at line 232 of file G4EMDissociationCrossSection.cc.
00234 { 00235 // 00236 // This is a simple algorithm to choose whether a proton or neutron is ejected 00237 // from the nucleus in the EMD interaction. 00238 // 00239 G4double p = 0.0; 00240 if (Z < 6.0) 00241 p = 0.5; 00242 else if (Z < 8.0) 00243 p = 0.6; 00244 else if (Z < 14.0) 00245 p = 0.7; 00246 else 00247 { 00248 G4double p1 = (G4double) Z / (G4double) A; 00249 G4double p2 = 1.95*std::exp(-0.075*Z); 00250 if (p1 < p2) p = p1; 00251 else p = p2; 00252 } 00253 00254 return p; 00255 }
G4bool G4EMDissociationCrossSection::IsElementApplicable | ( | const G4DynamicParticle * | , | |
G4int | Z, | |||
const G4Material * | ||||
) | [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 105 of file G4EMDissociationCrossSection.cc.
References G4DynamicParticle::GetDefinition(), and G4ParticleTable::GetParticleTable().
00107 { 00108 // 00109 // The condition for the applicability of this class is that the projectile 00110 // must be an ion and the target must have more than one nucleon. In reality 00111 // the value of A for either the projectile or target could be much higher, 00112 // since for cases where both he projectile and target are medium to small 00113 // Z, the probability of the EMD process is, I think, VERY small. 00114 // 00115 if (G4ParticleTable::GetParticleTable()->GetIonTable()->IsIon(part->GetDefinition())) { 00116 return true; 00117 } else { 00118 return false; 00119 } 00120 }