Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4GEMProbabilityVI.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// GEM de-excitation model
27// by V. Ivanchenko (July 2019)
28//
29#include "G4GEMProbabilityVI.hh"
30#include "G4NuclearLevelData.hh"
31#include "G4LevelManager.hh"
33#include "G4NucleiProperties.hh"
34#include "G4RandomDirection.hh"
36#include "G4SystemOfUnits.hh"
37#include "Randomize.hh"
38#include "G4Pow.hh"
39#include "G4Exp.hh"
40
41
43 : G4VEmissionProbability(aZ, anA), lManager(p)
44{
45 fragA = fragZ = 0;
46 resA13 = U = delta0 = delta1 = a0 = a1 = probmax = alphaP = betaP = 0.0;
47 Umax = bCoulomb = 0.0;
48 Gamma = 1.0;
49 pcoeff = Gamma*pEvapMass*CLHEP::millibarn
50 /((CLHEP::pi*CLHEP::hbarc)*(CLHEP::pi*CLHEP::hbarc));
51 coeff = CLHEP::fermi*CLHEP::fermi/(CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc);
52
53 isExcited = (!lManager || 0.0 == lManager->MaxLevelEnergy()) ? false : true;
54 A13 = pG4pow->Z13(theA);
55
56 if(0 == aZ) {
57 ResetIntegrator(30, 0.25*CLHEP::MeV, 0.02);
58 } else {
59 ResetIntegrator(30, 0.5*CLHEP::MeV, 0.03);
60 }
61}
62
64 const G4Fragment& fragment,
65 const G4double tmin, const G4double tmax,
66 const G4double CB, const G4double exEnergy,
67 const G4double exEvap)
68{
69 fragA = fragment.GetA_asInt();
70 fragZ = fragment.GetZ_asInt();
71
72 bCoulomb = CB;
73 U = fragment.GetExcitationEnergy();
74 delta0 = pNuclearLevelData->GetPairingCorrection(fragZ,fragA);
75 delta1 = pNuclearLevelData->GetPairingCorrection(resZ,resA);
76 Umax = pMass - pEvapMass - pResMass - CB;
77 if(0.0 >= Umax) { return 0.0; }
78
79 resA13 = pG4pow->Z13(resA);
80 a0 = pNuclearLevelData->GetLevelDensity(fragZ,fragA,U);
81 const G4double twoMass = pMass + pMass;
82 const G4double evapMass2 = pEvapMass*pEvapMass;
83 G4double ekinmax =
84 ((pMass-pResMass)*(pMass+pResMass) + evapMass2)/twoMass - pEvapMass;
85 G4double ekinmin =
86 std::max((CB*(twoMass - CB) + evapMass2)/twoMass - pEvapMass,0.0);
87 if(ekinmax <= ekinmin) { return 0.0; }
88 pProbability = IntegrateProbability(ekinmin, ekinmax, CB);
89 pProbability += tmax - tmin + exEnergy -exEvap;
90 /*
91 G4cout << "G4GEMProbabilityVI: Z= " << theZ << " A= " << theA
92 << " resZ= " << resZ << " resA= " << resA
93 << " fragZ= " << fragZ << " fragA= " << fragA
94 << " prob= " << pProbability
95 << "\n U= " << U << " Umax= " << Umax << " d0= " << delta0
96 << " a0= " << a0 << G4endl;
97 */
98 return pProbability;
99}
100
102{
103 // abnormal case - should never happens
104 if(pMass < pEvapMass + pResMass) { return 0.0; }
105
106 const G4double m02 = pMass*pMass;
107 const G4double m12 = pEvapMass*pEvapMass;
108 const G4double mres = std::sqrt(m02 + m12 - 2.*pMass*(pEvapMass + ekin));
109
110 G4double excRes = std::max(mres - pResMass, 0.0);
111 a1 = pNuclearLevelData->GetLevelDensity(resZ,resA,excRes);
112 G4double prob = 0.5; //CrossSection(0.0, excRes);
113
114 //G4cout<<"### G4GEMProbabilityVI::ComputeProbability: Ekin(MeV)= "<<ekin
115 //<< " excRes(MeV)= " << excRes << " prob= " << prob << << G4endl;
116 return prob;
117}
118
120 const G4double tmin, const G4double tmax,
121 const G4double CB, const G4double exEnergy,
122 const G4double exEvap)
123{
124 G4double ekin = tmax - tmin - CB -exEnergy + exEvap;
125 return ekin;
126}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4double GetExcitationEnergy() const
G4int GetZ_asInt() const
G4int GetA_asInt() const
G4double TotalProbability(const G4Fragment &, const G4double tmin, const G4double tmax, const G4double CB, const G4double exEnergy, const G4double exEvap)
G4GEMProbabilityVI(G4int anA, G4int aZ, const G4LevelManager *)
G4double ComputeProbability(G4double ekin, G4double CB) override
G4VEmissionProbability(G4int Z, G4int A)
void ResetIntegrator(size_t nbin, G4double de, G4double eps)
G4double IntegrateProbability(G4double elow, G4double ehigh, G4double CB)
G4NuclearLevelData * pNuclearLevelData