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

#include <G4PreCompoundTransitionsInt.hh>

Inheritance diagram for G4PreCompoundTransitionsInt:

Public Member Functions

 G4PreCompoundTransitionsInt (G4int verb)
 ~G4PreCompoundTransitionsInt () override=default
G4double CalculateProbability (const G4Fragment &aFragment) override
void PerformTransition (G4Fragment &aFragment) override
 G4PreCompoundTransitionsInt (const G4PreCompoundTransitionsInt &)=delete
const G4PreCompoundTransitionsIntoperator= (const G4PreCompoundTransitionsInt &right)=delete
G4bool operator== (const G4PreCompoundTransitionsInt &right) const =delete
G4bool operator!= (const G4PreCompoundTransitionsInt &right) const =delete
Public Member Functions inherited from G4VPreCompoundTransitions
 G4VPreCompoundTransitions ()
virtual ~G4VPreCompoundTransitions ()
G4double GetTransitionProb1 () const
G4double GetTransitionProb2 () const
G4double GetTransitionProb3 () const
void UseNGB (G4bool use)
void UseCEMtr (G4bool use)
 G4VPreCompoundTransitions (const G4VPreCompoundTransitions &)=delete
const G4VPreCompoundTransitionsoperator= (const G4VPreCompoundTransitions &right)=delete
G4bool operator== (const G4VPreCompoundTransitions &right) const =delete
G4bool operator!= (const G4VPreCompoundTransitions &right) const =delete

Additional Inherited Members

Protected Attributes inherited from G4VPreCompoundTransitions
G4bool useNGB
G4bool useCEMtr
G4double TransitionProb1
G4double TransitionProb2
G4double TransitionProb3

Detailed Description

Definition at line 55 of file G4PreCompoundTransitionsInt.hh.

Constructor & Destructor Documentation

◆ G4PreCompoundTransitionsInt() [1/2]

G4PreCompoundTransitionsInt::G4PreCompoundTransitionsInt ( G4int verb)

Definition at line 44 of file G4PreCompoundTransitionsInt.cc.

45 : fVerbose(verb)
46{
47 proton = G4Proton::Proton();
49 G4DeexPrecoParameters* param = fNuclData->GetParameters();
50 FermiEnergy = param->GetFermiEnergy();
51 r0 = param->GetTransitionsR0();
52}
static G4NuclearLevelData * GetInstance()
static G4Proton * Proton()
Definition G4Proton.cc:90

Referenced by G4PreCompoundTransitionsInt(), operator!=(), operator=(), and operator==().

◆ ~G4PreCompoundTransitionsInt()

G4PreCompoundTransitionsInt::~G4PreCompoundTransitionsInt ( )
overridedefault

◆ G4PreCompoundTransitionsInt() [2/2]

G4PreCompoundTransitionsInt::G4PreCompoundTransitionsInt ( const G4PreCompoundTransitionsInt & )
delete

Member Function Documentation

◆ CalculateProbability()

G4double G4PreCompoundTransitionsInt::CalculateProbability ( const G4Fragment & aFragment)
overridevirtual

Implements G4VPreCompoundTransitions.

Definition at line 54 of file G4PreCompoundTransitionsInt.cc.

56{
57 // Number of Particles
58 G4int P = aFragment.GetNumberOfParticles();
59 // Number of Excitons
60 //G4int N = P+H;
61 // Nucleus
62 G4int A = aFragment.GetA_asInt();
63 G4int Z = aFragment.GetZ_asInt();
64 G4double U = aFragment.GetExcitationEnergy();
65 TransitionProb2 = 0.0;
66 TransitionProb3 = 0.0;
67 /*
68 G4cout << "G4PreCompoundTransitions::CalculateProbability H/P/N/Z/A= "
69 << H << " " << P << " " << N << " " << Z << " " << A <<G4endl;
70 G4cout << aFragment << G4endl;
71 */
72 if(U < 10*eV || 0 == P) { return 0.0; }
73
74 //J. M. Quesada (Feb. 08) new physics
75 // OPT=1 Transitions are calculated according to Gudima's paper
76 // (original in G4PreCompound from VL)
77 // OPT=2 Transitions are calculated according to Gupta's formulae
78 //
79 static const G4double sixdpi2 = 6.0/CLHEP::pi2;
80 G4double GE = sixdpi2*U*fNuclData->GetLevelDensity(Z, A, U);
81 if (useCEMtr) {
82 // Relative Energy (T_{rel})
83 G4double RelativeEnergy = 1.6*FermiEnergy + U/G4double(2*P);
84
85 // Sample kind of nucleon-projectile
86 G4bool ChargedNucleon(false);
87 if(G4lrint(P*G4UniformRand()) <= aFragment.GetNumberOfCharged()) {
88 ChargedNucleon = true;
89 }
90
91 // Relative Velocity:
92 // <V_{rel}>^2
93 G4double RelativeVelocitySqr;
94 if (ChargedNucleon) {
95 RelativeVelocitySqr = 2*RelativeEnergy/CLHEP::proton_mass_c2;
96 } else {
97 RelativeVelocitySqr = 2*RelativeEnergy/CLHEP::neutron_mass_c2;
98 }
99 // <V_{rel}>
100 G4double RelativeVelocity = std::sqrt(RelativeVelocitySqr);
101
102 // Proton-Proton Cross Section
103 G4double ppXSection =
104 (10.63/RelativeVelocitySqr - 29.92/RelativeVelocity + 42.9)
105 * CLHEP::millibarn;
106 // Proton-Neutron Cross Section
107 G4double npXSection =
108 (34.10/RelativeVelocitySqr - 82.20/RelativeVelocity + 82.2)
109 * CLHEP::millibarn;
110
111 // Averaged Cross Section: \sigma(V_{rel})
112 G4double xs = (ChargedNucleon) ?
113 ((Z-1)*ppXSection + (A-Z)*npXSection)/G4double(A-1) :
114 ((A-Z-1)*ppXSection + Z*npXSection)/G4double(A-1);
115
116 // Fermi relative energy ratio
117 G4double FermiRelRatio = FermiEnergy/RelativeEnergy;
118
119 // This factor is introduced to take into account the Pauli principle
120 G4double PauliFactor = 1.0 - 1.4*FermiRelRatio;
121 if (FermiRelRatio > 0.5) {
122 G4double x = 2.0 - 1.0/FermiRelRatio;
123 PauliFactor += 0.4*FermiRelRatio*x*x*std::sqrt(x);
124 }
125 // Interaction volume
126 G4double xx = 2*r0 + CLHEP::hbarc/(CLHEP::proton_mass_c2*RelativeVelocity);
127 G4double Vint = CLHEP::pi*xx*xx*xx/0.75;
128
129 // Transition probability for \Delta n = +2
130 TransitionProb1 = std::max(0.0, xs*PauliFactor
131 *std::sqrt(2.0*RelativeEnergy/CLHEP::proton_mass_c2)/Vint);
132
133 //JMQ 281009 phenomenological factor in order to increase
134 // equilibrium contribution
135 // G4double factor=5.0;
136 // TransitionProb1 *= factor;
137
138 // GE = g*E where E is Excitation Energy
139 G4double Fph = G4double(P*(P - 1))*0.5;
140
141 if(!useNGB) {
142
143 // F(p+1,h+1)
144 G4double Fph1 = Fph + P;
145
146 static const G4double plimit = 100;
147
148 //JMQ/AH bug fixed: if (U-Fph < 0.0)
149 if (GE > Fph1) {
150 G4double x0 = GE-Fph;
151 G4double x1 = (2*P + 1)*G4Log(x0/(GE-Fph1));
152 if(x1 < plimit) {
153 x1 = G4Exp(x1)*TransitionProb1/x0;
154
155 // Transition probability for \Delta n = -2 (at F(p,h) = 0)
156 TransitionProb2 = std::max(0.0, (2*P*P*(2*P + 1)*(P - 1))*x1/x0);
157
158 // Transition probability for \Delta n = 0 (at F(p,h) = 0)
159 TransitionProb3 = std::max(0.0, ((2*P+1)*(3*P-1))*x1);
160 }
161 }
162 }
163
164 } else {
165 //JMQ: Transition probabilities from Gupta's work
166 // GE = g*E where E is Excitation Energy
167 TransitionProb1 = std::max(0.0, U*(4.2e+12 - 3.6e+10*U/G4double(2*P+1)))
168 /(16*CLHEP::c_light);
169
170 if (!useNGB) {
171 TransitionProb2 = (2*(2*P-1)*(P-1)*P*P)*TransitionProb1/(GE*GE);
172 }
173 }
175}
@ GE
Definition Evaluator.cc:68
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:132
G4double G4Log(G4double x)
Definition G4Log.hh:169
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
const G4double A[17]
#define G4UniformRand()
Definition Randomize.hh:52
G4int GetNumberOfParticles() const
G4double GetExcitationEnergy() const
G4int GetZ_asInt() const
G4int GetNumberOfCharged() const
G4int GetA_asInt() const
int G4lrint(double ad)
Definition templates.hh:134

◆ operator!=()

G4bool G4PreCompoundTransitionsInt::operator!= ( const G4PreCompoundTransitionsInt & right) const
delete

◆ operator=()

const G4PreCompoundTransitionsInt & G4PreCompoundTransitionsInt::operator= ( const G4PreCompoundTransitionsInt & right)
delete

◆ operator==()

G4bool G4PreCompoundTransitionsInt::operator== ( const G4PreCompoundTransitionsInt & right) const
delete

◆ PerformTransition()

void G4PreCompoundTransitionsInt::PerformTransition ( G4Fragment & aFragment)
overridevirtual

Implements G4VPreCompoundTransitions.

Definition at line 177 of file G4PreCompoundTransitionsInt.cc.

178{
179 G4int A = frag.GetA_asInt();
180 G4int Z = frag.GetZ_asInt();
181 G4int Npart = frag.GetNumberOfParticles();
182 G4int Ncharged = frag.GetNumberOfCharged();
183
184 G4double ChosenTransition =
186
187 G4int deltaN = 0;
188 // Number of excited particles inside the fragment
189 if (ChosenTransition <= TransitionProb1) {
190 if (Npart < A) { deltaN = 1; }
191 }
192 else if (ChosenTransition <= TransitionProb1+TransitionProb2) {
193 if (Npart > 0) { deltaN = -1; }
194 }
195 if (deltaN != 0) {
196 if (G4lrint(Npart*G4UniformRand()) <= Ncharged) {
197 Ncharged += deltaN;
198 Ncharged = std::min(std::max(Ncharged, 0), Z);
199 }
200 }
201 Npart += deltaN;
202 Ncharged = std::min(Ncharged, Npart);
203
204 // update fragment
205 frag.SetNumberOfExcitedParticle(Npart, Ncharged);
206 if (2 < fVerbose) {
207 G4cout << " # After transition Npart=" << Npart
208 << " Ncharged=" << Ncharged << " deltaN=" << deltaN << G4endl;
209 }
210}
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout

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