Geant4-11
Public Member Functions | Protected Attributes | Private Attributes
G4PreCompoundTransitions Class Reference

#include <G4PreCompoundTransitions.hh>

Inheritance diagram for G4PreCompoundTransitions:
G4VPreCompoundTransitions

Public Member Functions

G4double CalculateProbability (const G4Fragment &aFragment) override
 
 G4PreCompoundTransitions ()
 
 G4PreCompoundTransitions (const G4PreCompoundTransitions &)=delete
 
G4double GetTransitionProb1 () const
 
G4double GetTransitionProb2 () const
 
G4double GetTransitionProb3 () const
 
G4bool operator!= (const G4PreCompoundTransitions &right) const =delete
 
G4bool operator!= (const G4VPreCompoundTransitions &right) const =delete
 
const G4PreCompoundTransitionsoperator= (const G4PreCompoundTransitions &right)=delete
 
G4bool operator== (const G4PreCompoundTransitions &right) const =delete
 
G4bool operator== (const G4VPreCompoundTransitions &right) const =delete
 
virtual void PerformTransition (G4Fragment &aFragment) override
 
void UseCEMtr (G4bool use)
 
void UseNGB (G4bool use)
 
virtual ~G4PreCompoundTransitions ()
 

Protected Attributes

G4double TransitionProb1
 
G4double TransitionProb2
 
G4double TransitionProb3
 
G4bool useCEMtr
 
G4bool useNGB
 

Private Attributes

G4double FermiEnergy
 
G4NuclearLevelDatafNuclData
 
const G4ParticleDefinitionproton
 
G4double r0
 

Detailed Description

Definition at line 50 of file G4PreCompoundTransitions.hh.

Constructor & Destructor Documentation

◆ G4PreCompoundTransitions() [1/2]

G4PreCompoundTransitions::G4PreCompoundTransitions ( )

◆ ~G4PreCompoundTransitions()

G4PreCompoundTransitions::~G4PreCompoundTransitions ( )
virtual

Definition at line 67 of file G4PreCompoundTransitions.cc.

68{}

◆ G4PreCompoundTransitions() [2/2]

G4PreCompoundTransitions::G4PreCompoundTransitions ( const G4PreCompoundTransitions )
delete

Member Function Documentation

◆ CalculateProbability()

G4double G4PreCompoundTransitions::CalculateProbability ( const G4Fragment aFragment)
overridevirtual

Implements G4VPreCompoundTransitions.

Definition at line 72 of file G4PreCompoundTransitions.cc.

74{
75 // Number of holes
76 G4int H = aFragment.GetNumberOfHoles();
77 // Number of Particles
78 G4int P = aFragment.GetNumberOfParticles();
79 // Number of Excitons
80 G4int N = P+H;
81 // Nucleus
82 G4int A = aFragment.GetA_asInt();
83 G4int Z = aFragment.GetZ_asInt();
84 G4double U = aFragment.GetExcitationEnergy();
85 TransitionProb2 = 0.0;
86 TransitionProb3 = 0.0;
87 /*
88 G4cout << "G4PreCompoundTransitions::CalculateProbability H/P/N/Z/A= "
89 << H << " " << P << " " << N << " " << Z << " " << A <<G4endl;
90 G4cout << aFragment << G4endl;
91 */
92 if(U < 10*eV || 0==N) { return 0.0; }
93
94 //J. M. Quesada (Feb. 08) new physics
95 // OPT=1 Transitions are calculated according to Gudima's paper
96 // (original in G4PreCompound from VL)
97 // OPT=2 Transitions are calculated according to Gupta's formulae
98 //
99 static const G4double sixdpi2 = 6.0/CLHEP::pi2;
100 G4double GE = sixdpi2*U*fNuclData->GetLevelDensity(Z,A,U);
101 if (useCEMtr) {
102 // Relative Energy (T_{rel})
103 G4double RelativeEnergy = 1.6*FermiEnergy + U/G4double(N);
104
105 // Sample kind of nucleon-projectile
106 G4bool ChargedNucleon(false);
107 if(G4int(P*G4UniformRand()) <= aFragment.GetNumberOfCharged()) {
108 ChargedNucleon = true;
109 }
110
111 // Relative Velocity:
112 // <V_{rel}>^2
113 G4double RelativeVelocitySqr;
114 if (ChargedNucleon) {
115 RelativeVelocitySqr = 2*RelativeEnergy/CLHEP::proton_mass_c2;
116 } else {
117 RelativeVelocitySqr = 2*RelativeEnergy/CLHEP::neutron_mass_c2;
118 }
119 // <V_{rel}>
120 G4double RelativeVelocity = std::sqrt(RelativeVelocitySqr);
121
122 // Proton-Proton Cross Section
123 G4double ppXSection =
124 (10.63/RelativeVelocitySqr - 29.92/RelativeVelocity + 42.9)
126 // Proton-Neutron Cross Section
127 G4double npXSection =
128 (34.10/RelativeVelocitySqr - 82.20/RelativeVelocity + 82.2)
130
131 // Averaged Cross Section: \sigma(V_{rel})
132 G4double AveragedXSection;
133 if (ChargedNucleon)
134 {
135 //JMQ: small bug fixed
136 AveragedXSection = ((Z-1)*ppXSection + (A-Z)*npXSection)/G4double(A-1);
137 }
138 else
139 {
140 AveragedXSection = ((A-Z-1)*ppXSection + Z*npXSection)/G4double(A-1);
141 }
142
143 // Fermi relative energy ratio
144 G4double FermiRelRatio = FermiEnergy/RelativeEnergy;
145
146 // This factor is introduced to take into account the Pauli principle
147 G4double PauliFactor = 1.0 - 1.4*FermiRelRatio;
148 if (FermiRelRatio > 0.5) {
149 G4double x = 2.0 - 1.0/FermiRelRatio;
150 PauliFactor += 0.4*FermiRelRatio*x*x*std::sqrt(x);
151 }
152 // Interaction volume
153 G4double xx = 2*r0 + CLHEP::hbarc/(CLHEP::proton_mass_c2*RelativeVelocity);
154 G4double Vint = CLHEP::pi*xx*xx*xx/0.75;
155
156 // Transition probability for \Delta n = +2
157
158 TransitionProb1 = std::max(0.0, AveragedXSection*PauliFactor
159 *std::sqrt(2.0*RelativeEnergy/CLHEP::proton_mass_c2)/Vint);
160
161 //JMQ 281009 phenomenological factor in order to increase
162 // equilibrium contribution
163 // G4double factor=5.0;
164 // TransitionProb1 *= factor;
165
166 // GE = g*E where E is Excitation Energy
167 G4double Fph = G4double(P*P+H*H+P-3*H)*0.25;
168
169 if(!useNGB) {
170
171 // F(p+1,h+1)
172 G4double Fph1 = Fph + N*0.5;
173
174 static const G4double plimit = 100;
175
176 //JMQ/AH bug fixed: if (U-Fph < 0.0)
177 if (GE > Fph1) {
178 G4double x0 = GE-Fph;
179 G4double x1 = (N+1)*G4Log(x0/(GE-Fph1));
180 if(x1 < plimit) {
181 x1 = G4Exp(x1)*TransitionProb1/x0;
182
183 // Transition probability for \Delta n = -2 (at F(p,h) = 0)
184 TransitionProb2 = std::max(0.0, (P*H*(N+1)*(N-2))*x1/x0);
185
186 // Transition probability for \Delta n = 0 (at F(p,h) = 0)
187 TransitionProb3 = std::max(0.0,((N+1)*(P*(P-1) + 4*P*H + H*(H-1)))*x1
188 /static_cast<G4double>(N));
189 }
190 }
191 }
192
193 } else {
194 //JMQ: Transition probabilities from Gupta's work
195 // GE = g*E where E is Excitation Energy
196 TransitionProb1 = std::max(0.0, U*(4.2e+12 - 3.6e+10*U/G4double(N+1)))
197 /(16*CLHEP::c_light);
198
199 if (!useNGB && N > 1) {
200 TransitionProb2 = ((N-1)*(N-2)*P*H)*TransitionProb1/(GE*GE);
201 }
202 }
203 // G4cout<<"U = "<<U<<G4endl;
204 // G4cout<<"N="<<N<<" P="<<P<<" H="<<H<<G4endl;
205 // G4cout<<"l+ ="<<TransitionProb1<<" l- ="<< TransitionProb2
206 // <<" l0 ="<< TransitionProb3<<G4endl;
208}
@ GE
Definition: Evaluator.cc:65
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
G4double G4Log(G4double x)
Definition: G4Log.hh:226
static constexpr double eV
Definition: G4SIunits.hh:201
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
#define G4UniformRand()
Definition: Randomize.hh:52
G4int GetNumberOfParticles() const
Definition: G4Fragment.hh:361
G4int GetNumberOfHoles() const
Definition: G4Fragment.hh:381
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:299
G4int GetZ_asInt() const
Definition: G4Fragment.hh:276
G4int GetNumberOfCharged() const
Definition: G4Fragment.hh:366
G4int GetA_asInt() const
Definition: G4Fragment.hh:271
G4double GetLevelDensity(G4int Z, G4int A, G4double U)
static constexpr double millibarn
Definition: SystemOfUnits.h:87
static constexpr double proton_mass_c2
static constexpr double pi2
Definition: SystemOfUnits.h:58
static constexpr double neutron_mass_c2
static constexpr double hbarc
static constexpr double c_light
static constexpr double pi
Definition: SystemOfUnits.h:55
T max(const T t1, const T t2)
brief Return the largest of the two arguments
static double P[]

References A, CLHEP::c_light, eV, FermiEnergy, fNuclData, G4Exp(), G4Log(), G4UniformRand, GE, G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4NuclearLevelData::GetLevelDensity(), G4Fragment::GetNumberOfCharged(), G4Fragment::GetNumberOfHoles(), G4Fragment::GetNumberOfParticles(), G4Fragment::GetZ_asInt(), CLHEP::hbarc, G4INCL::Math::max(), CLHEP::millibarn, CLHEP::neutron_mass_c2, P, CLHEP::pi, CLHEP::pi2, CLHEP::proton_mass_c2, r0, G4VPreCompoundTransitions::TransitionProb1, G4VPreCompoundTransitions::TransitionProb2, G4VPreCompoundTransitions::TransitionProb3, G4VPreCompoundTransitions::useCEMtr, G4VPreCompoundTransitions::useNGB, and Z.

◆ GetTransitionProb1()

G4double G4VPreCompoundTransitions::GetTransitionProb1 ( ) const
inlineinherited

Definition at line 76 of file G4VPreCompoundTransitions.hh.

77 {
78 return TransitionProb1;
79 }

References G4VPreCompoundTransitions::TransitionProb1.

Referenced by G4PreCompoundModel::DeExcite().

◆ GetTransitionProb2()

G4double G4VPreCompoundTransitions::GetTransitionProb2 ( ) const
inlineinherited

Definition at line 80 of file G4VPreCompoundTransitions.hh.

81 {
82 return TransitionProb2;
83 }

References G4VPreCompoundTransitions::TransitionProb2.

Referenced by G4PreCompoundModel::DeExcite().

◆ GetTransitionProb3()

G4double G4VPreCompoundTransitions::GetTransitionProb3 ( ) const
inlineinherited

Definition at line 84 of file G4VPreCompoundTransitions.hh.

85 {
86 return TransitionProb3;
87 }

References G4VPreCompoundTransitions::TransitionProb3.

Referenced by G4PreCompoundModel::DeExcite().

◆ operator!=() [1/2]

G4bool G4PreCompoundTransitions::operator!= ( const G4PreCompoundTransitions right) const
delete

◆ operator!=() [2/2]

G4bool G4VPreCompoundTransitions::operator!= ( const G4VPreCompoundTransitions right) const
deleteinherited

◆ operator=()

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

◆ operator==() [1/2]

G4bool G4PreCompoundTransitions::operator== ( const G4PreCompoundTransitions right) const
delete

◆ operator==() [2/2]

G4bool G4VPreCompoundTransitions::operator== ( const G4VPreCompoundTransitions right) const
deleteinherited

◆ PerformTransition()

void G4PreCompoundTransitions::PerformTransition ( G4Fragment aFragment)
overridevirtual

Implements G4VPreCompoundTransitions.

Definition at line 210 of file G4PreCompoundTransitions.cc.

211{
212 G4double ChosenTransition =
214 G4int deltaN = 0;
215 G4int Npart = result.GetNumberOfParticles();
216 G4int Ncharged = result.GetNumberOfCharged();
217 G4int Nholes = result.GetNumberOfHoles();
218 if (ChosenTransition <= TransitionProb1)
219 {
220 // Number of excitons is increased on \Delta n = +2
221 deltaN = 2;
222 }
223 else if (ChosenTransition <= TransitionProb1+TransitionProb2)
224 {
225 // Number of excitons is increased on \Delta n = -2
226 deltaN = -2;
227 }
228
229 // AH/JMQ: Randomly decrease the number of charges if deltaN is -2 and
230 // in proportion to the number charges w.r.t. number of particles,
231 // PROVIDED that there are charged particles
232 deltaN /= 2;
233
234 //G4cout << "deltaN= " << deltaN << G4endl;
235
236 // JMQ the following lines have to be before SetNumberOfCharged,
237 // otherwise the check on number of charged vs. number of particles fails
238 result.SetNumberOfParticles(Npart+deltaN);
239 result.SetNumberOfHoles(Nholes+deltaN);
240
241 if(deltaN < 0) {
242 if( (Ncharged == Npart) ||
243 (Ncharged >= 1 && G4int(Npart*G4UniformRand()) <= Ncharged))
244 {
245 result.SetNumberOfCharged(Ncharged+deltaN); // deltaN is negative!
246 }
247
248 } else if ( deltaN > 0 ) {
249 // With weight Z/A, number of charged particles is increased with +1
250 G4int A = result.GetA_asInt() - Npart;
251 G4int Z = result.GetZ_asInt() - Ncharged;
252 if((Z == A) || (Z > 0 && G4lrint(A*G4UniformRand()) <= Z))
253 {
254 result.SetNumberOfCharged(Ncharged+deltaN);
255 }
256 }
257
258 // Number of charged can not be greater that number of particles
259 if ( Npart < Ncharged )
260 {
261 result.SetNumberOfCharged(Npart);
262 }
263 //G4cout << "### After transition" << G4endl;
264 //G4cout << result << G4endl;
265}
int G4lrint(double ad)
Definition: templates.hh:134

References A, G4lrint(), G4UniformRand, G4Fragment::GetA_asInt(), G4Fragment::GetNumberOfCharged(), G4Fragment::GetNumberOfHoles(), G4Fragment::GetNumberOfParticles(), G4Fragment::GetZ_asInt(), G4Fragment::SetNumberOfCharged(), G4Fragment::SetNumberOfHoles(), G4Fragment::SetNumberOfParticles(), G4VPreCompoundTransitions::TransitionProb1, G4VPreCompoundTransitions::TransitionProb2, G4VPreCompoundTransitions::TransitionProb3, and Z.

◆ UseCEMtr()

void G4VPreCompoundTransitions::UseCEMtr ( G4bool  use)
inlineinherited

◆ UseNGB()

void G4VPreCompoundTransitions::UseNGB ( G4bool  use)
inlineinherited

Field Documentation

◆ FermiEnergy

G4double G4PreCompoundTransitions::FermiEnergy
private

Definition at line 73 of file G4PreCompoundTransitions.hh.

Referenced by CalculateProbability(), and G4PreCompoundTransitions().

◆ fNuclData

G4NuclearLevelData* G4PreCompoundTransitions::fNuclData
private

Definition at line 71 of file G4PreCompoundTransitions.hh.

Referenced by CalculateProbability(), and G4PreCompoundTransitions().

◆ proton

const G4ParticleDefinition* G4PreCompoundTransitions::proton
private

Definition at line 70 of file G4PreCompoundTransitions.hh.

Referenced by G4PreCompoundTransitions().

◆ r0

G4double G4PreCompoundTransitions::r0
private

Definition at line 74 of file G4PreCompoundTransitions.hh.

Referenced by CalculateProbability(), and G4PreCompoundTransitions().

◆ TransitionProb1

G4double G4VPreCompoundTransitions::TransitionProb1
protectedinherited

◆ TransitionProb2

G4double G4VPreCompoundTransitions::TransitionProb2
protectedinherited

◆ TransitionProb3

G4double G4VPreCompoundTransitions::TransitionProb3
protectedinherited

◆ useCEMtr

G4bool G4VPreCompoundTransitions::useCEMtr
protectedinherited

◆ useNGB

G4bool G4VPreCompoundTransitions::useNGB
protectedinherited

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