50 : theA(0), theZ(0), aEff(0.0), zEff(0)
52 pnBlackTrackEnergy = 0.0;
53 dtaBlackTrackEnergy = 0.0;
54 pnBlackTrackEnergyfromAnnihilation = 0.0;
55 dtaBlackTrackEnergyfromAnnihilation = 0.0;
56 excitationEnergy = 0.0;
58 fermiMomentum = 1.52*hbarc/fermi;
59 theTemp = 293.16*kelvin;
66 pnBlackTrackEnergy = 0.0;
67 dtaBlackTrackEnergy = 0.0;
68 pnBlackTrackEnergyfromAnnihilation = 0.0;
69 dtaBlackTrackEnergyfromAnnihilation = 0.0;
70 excitationEnergy = 0.0;
72 fermiMomentum = 1.52*hbarc/fermi;
73 theTemp = 293.16*kelvin;
80 pnBlackTrackEnergy = 0.0;
81 dtaBlackTrackEnergy = 0.0;
82 pnBlackTrackEnergyfromAnnihilation = 0.0;
83 dtaBlackTrackEnergyfromAnnihilation = 0.0;
84 excitationEnergy = 0.0;
86 fermiMomentum = 1.52*hbarc/fermi;
87 theTemp = 293.16*kelvin;
94 pnBlackTrackEnergy = 0.0;
95 dtaBlackTrackEnergy = 0.0;
96 pnBlackTrackEnergyfromAnnihilation = 0.0;
97 dtaBlackTrackEnergyfromAnnihilation = 0.0;
98 excitationEnergy = 0.0;
100 fermiMomentum = 1.52*hbarc/fermi;
119 while(value/norm<random)
123 value = (targetVelocity+aVelocity).mag()/velMag;
133 if(currentTemp < 0) currentTemp = theTemp;
141 G4double tMom = std::sqrt(px*px+py*py+pz*pz);
145 if(1-tEtot/theTarget.
GetMass()>0.001)
169 if (running > random*sum) {
170 element = (*theElementVector)[i];
179 while (iso < element->GetNumberOfIsotopes() &&
180 sumAbundance < randomAbundance) {
189 aEff = element->
GetN();
190 zEff = element->
GetZ();
191 theZ =
G4int(zEff + 0.5);
192 theA =
G4int(aEff + 0.5);
202 if (theA<1 || theZ<0 || theZ>theA) {
204 "G4Nucleus::SetParameters called with non-physical parameters");
216 if( theA<1 || theZ<0 || theZ>theA )
219 "G4Nucleus::SetParameters called with non-physical parameters");
236 return targetParticle;
256 G4double result = G4RandGauss::shoot();
257 result *= std::sqrt(k_Boltzmann*temp*mass);
275 pnBlackTrackEnergy = dtaBlackTrackEnergy = 0.0;
279 G4float ekin = std::min( 4.0, std::max( 0.1, ek ) );
280 const G4float atno = std::min( 120., aEff );
281 const G4float gfa = 2.0*((aEff-1.0)/70.)*std::exp(-(aEff-1.0)/70.);
286 G4float cfa = std::max( 0.15, 0.35 + ((0.35-0.05)/2.3)*std::log(ekin) );
287 G4float exnu = 7.716 * cfa * std::exp(-cfa)
288 * ((atno-1.0)/120.)*std::exp(-(atno-1.0)/120.);
289 G4float fpdiv = std::max( 0.5, 1.0-0.25*ekin*ekin );
296 pnBlackTrackEnergy = exnu*fpdiv;
297 dtaBlackTrackEnergy = exnu*(1.0-fpdiv);
299 if(
G4int(zEff+0.1) != 82 )
303 for(
G4int i=0; i<12; ++i )
308 pnBlackTrackEnergy *= 1.0 + ran1*gfa;
309 dtaBlackTrackEnergy *= 1.0 + ran2*gfa;
311 pnBlackTrackEnergy = std::max( 0.0, pnBlackTrackEnergy );
312 dtaBlackTrackEnergy = std::max( 0.0, dtaBlackTrackEnergy );
313 while( pnBlackTrackEnergy+dtaBlackTrackEnergy >= ek )
320 return (pnBlackTrackEnergy+dtaBlackTrackEnergy)*GeV;
328 if( aEff < 1.5 || ekOrg < 0.)
330 pnBlackTrackEnergyfromAnnihilation = 0.0;
331 dtaBlackTrackEnergyfromAnnihilation = 0.0;
335 G4float ekin = std::min( 4.0, std::max( 0.1, ek ) );
336 const G4float atno = std::min( 120., aEff );
337 const G4float gfa = 2.0*((aEff-1.0)/70.)*std::exp(-(aEff-1.0)/70.);
339 G4float cfa = std::max( 0.15, 0.35 + ((0.35-0.05)/2.3)*std::log(ekin) );
340 G4float exnu = 7.716 * cfa * std::exp(-cfa)
341 * ((atno-1.0)/120.)*std::exp(-(atno-1.0)/120.);
342 G4float fpdiv = std::max( 0.5, 1.0-0.25*ekin*ekin );
344 pnBlackTrackEnergyfromAnnihilation = exnu*fpdiv;
345 dtaBlackTrackEnergyfromAnnihilation = exnu*(1.0-fpdiv);
349 for(
G4int i=0; i<12; ++i ) {
353 pnBlackTrackEnergyfromAnnihilation *= 1.0 + ran1*gfa;
354 dtaBlackTrackEnergyfromAnnihilation *= 1.0 + ran2*gfa;
356 pnBlackTrackEnergyfromAnnihilation = std::max( 0.0, pnBlackTrackEnergyfromAnnihilation);
357 dtaBlackTrackEnergyfromAnnihilation = std::max( 0.0, dtaBlackTrackEnergyfromAnnihilation);
358 G4double blackSum = pnBlackTrackEnergyfromAnnihilation+dtaBlackTrackEnergyfromAnnihilation;
359 if (blackSum >= ekOrg/GeV) {
360 pnBlackTrackEnergyfromAnnihilation *= ekOrg/GeV/blackSum;
361 dtaBlackTrackEnergyfromAnnihilation *= ekOrg/GeV/blackSum;
364 return (pnBlackTrackEnergyfromAnnihilation+dtaBlackTrackEnergyfromAnnihilation)*GeV;
376 static const G4double expxl = -expxu;
381 G4double em = std::min( 1.0, 0.2390 + 0.0408*aLog*aLog );
382 G4double temp1 = -ek * std::min( 0.15, 0.0019*aLog*aLog*aLog );
383 G4double temp2 = std::exp( std::max( expxl, std::min( expxu, -(ekLog-em)*(ekLog-em)*2.0 ) ) );
385 if( std::abs( temp1 ) < 1.0 )
387 if( temp2 > 1.0e-10 )result = temp1*temp2;
389 else result = temp1*temp2;
390 if( result < -ek )result = -ek;
409 G4double ranmax = (ranflat1>ranflat2? ranflat1: ranflat2);
410 ranmax = (ranmax>ranflat3? ranmax : ranflat3);
414 G4double sintheta = std::sqrt(1.0 - costheta*costheta);
418 G4double px=sintheta*std::cos(phi)*ranmax;
419 G4double py=sintheta*std::sin(phi)*ranmax;
432 momentum+=(aMomentum);
437 excitationEnergy+=anEnergy;
std::vector< G4Element * > G4ElementVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
CLHEP::Hep3Vector G4ThreeVector
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
G4double * GetRelativeAbundanceVector() const
const G4Isotope * GetIsotope(G4int iso) const
size_t GetNumberOfIsotopes() const
const G4ElementVector * GetElementVector() const
G4double GetTotNbOfAtomsPerVolume() const
G4double GetTemperature() const
size_t GetNumberOfElements() const
const G4double * GetVecNbOfAtomsPerVolume() const
static G4Neutron * Neutron()
static G4double GetNuclearMass(const G4double A, const G4double Z)
void AddExcitationEnergy(G4double anEnergy)
G4double GetThermalPz(const G4double mass, const G4double temp) const
G4double EvaporationEffects(G4double kineticEnergy)
void ChooseParameters(const G4Material *aMaterial)
G4double AnnihilationEvaporationEffects(G4double kineticEnergy, G4double ekOrg)
G4double Cinema(G4double kineticEnergy)
G4DynamicParticle * ReturnTargetParticle() const
void SetParameters(const G4double A, const G4double Z)
G4ReactionProductVector * Fragmentate()
G4ReactionProduct GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4double temp=-1) const
G4double AtomicMass(const G4double A, const G4double Z) const
void AddMomentum(const G4ThreeVector aMomentum)
G4ReactionProduct GetThermalNucleus(G4double aMass, G4double temp=-1) const
G4ThreeVector GetFermiMomentum()
G4double GetPDGMass() const
static G4Proton * Proton()
void SetMomentum(const G4double x, const G4double y, const G4double z)
void SetTotalEnergy(const G4double en)
G4ThreeVector GetMomentum() const
void SetKineticEnergy(const G4double en)
void SetMass(const G4double mas)