Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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