Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4GEMChannelVI Class Reference

#include <G4GEMChannelVI.hh>

Inheritance diagram for G4GEMChannelVI:
Collaboration diagram for G4GEMChannelVI:

Public Member Functions

 G4GEMChannelVI (G4int theA, G4int theZ)
 
virtual ~G4GEMChannelVI ()
 
virtual void Initialise () final
 
virtual G4double GetEmissionProbability (G4Fragment *theNucleus) final
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus) final
 
virtual void Dump () const
 
- Public Member Functions inherited from G4VEvaporationChannel
 G4VEvaporationChannel (const G4String &aName="")
 
virtual ~G4VEvaporationChannel ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual G4bool BreakUpChain (G4FragmentVector *theResult, G4Fragment *theNucleus)
 
G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual void SetICM (G4bool)
 
virtual void RDMForced (G4bool)
 
virtual G4double GetFinalLevelEnergy (G4int Z, G4int A, G4double energy)
 
virtual G4double GetUpperLevelEnergy (G4int Z, G4int A)
 
G4double GetMaxLevelEnergy (G4int Z, G4int A)
 
G4double GetNearestLevelEnergy (G4int Z, G4int A, G4double energy)
 
void SetPhotonEvaporation (G4VEvaporationChannel *p)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 49 of file G4GEMChannelVI.hh.

Constructor & Destructor Documentation

G4GEMChannelVI::G4GEMChannelVI ( G4int  theA,
G4int  theZ 
)
explicit

Definition at line 71 of file G4GEMChannelVI.cc.

72  : A(theA), Z(theZ), levelDensity(0.1)
73 {
74  fG4pow = G4Pow::GetInstance();
75  Z13 = fG4pow->Z13(Z);
76  A13 = fG4pow->Z13(A);
77 
78  cBarrier = new G4CoulombBarrier(A, Z);
79  pairingCorrection = G4PairingCorrection::GetInstance();
80 
82  levelManager = nData->GetLevelManager(Z, A);
83  maxLevelE = levelManager->MaxLevelEnergy();
84 
85  massGround = G4NucleiProperties::GetNuclearMass(A, Z);
86 
87  resA = resZ = fragZ = fragA = nWarn = 0;
88  massGround = maxLevelE = Z13 = A13 = massFrag = eCBarrier
89  = resMassGround = resZ13 = resA13 = delta0
90  = delta1 = maxExc = maxProb = alphaP = betaP = maxKinEnergy = 0.0;
92 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
static G4double GetNuclearMass(const G4double A, const G4double Z)
#define A13
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
static constexpr double hbarc
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
double A(double temperature)
static G4PairingCorrection * GetInstance()
static constexpr double fermi
Definition: SystemOfUnits.h:83
G4float MaxLevelEnergy() const
static G4NuclearLevelData * GetInstance()
static constexpr double pi
Definition: SystemOfUnits.h:54

Here is the call graph for this function:

G4GEMChannelVI::~G4GEMChannelVI ( )
virtual

Definition at line 94 of file G4GEMChannelVI.cc.

95 {
96  delete cBarrier;
97 }

Member Function Documentation

void G4GEMChannelVI::Dump ( ) const
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 368 of file G4GEMChannelVI.cc.

369 {
370 }
G4Fragment * G4GEMChannelVI::EmittedFragment ( G4Fragment theNucleus)
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 180 of file G4GEMChannelVI.cc.

181 {
182  G4double exc;
183  G4double resExc;
184 
185  static G4double factor = 1.2;
186  maxProb *= factor;
187 
188  CLHEP::HepRandomEngine* rndm = G4Random::getTheEngine();
189  for(G4int i=0; i<100; ++i) {
190  do {
191  exc = maxExc*rndm->flat();
192  resExc = maxExc*rndm->flat();
193  } while (exc + resExc > maxExc);
194 
195  G4double prob = ProbabilityDistributionFunction(exc, resExc);
196  if(prob > maxProb && nWarn < 10) {
197  ++nWarn;
198  G4cout << "### G4GEMChannelVI::EmittedFragment WARNING: majoranta "
199  << maxProb << " is exceeded " << prob << "\n"
200  << " fragZ= " << fragZ << " fragA= " << fragA
201  << " Z= " << Z << " A= " << A
202  << " resZ= " << resZ << " resA= " << resA << "\n"
203  << " exc(MeV)= " << exc << " resExc(MeV)= " << resExc
204  << " maxExc(MeV)= " << maxExc << G4endl;
205  }
206  if(maxProb*rndm->flat() <= prob) { break; }
207  }
208  if(exc <= maxLevelE) {
209  exc = FindLevel(levelManager, exc, maxExc - resExc);
210  }
211  if(resA >= nData->GetMinA(resZ) && resA <= nData->GetMaxA(resZ)
212  && resExc < nData->GetMaxLevelEnergy(Z, A)) {
213  const G4LevelManager* lman = nData->GetLevelManager(Z, A);
214  if(lman) { resExc = FindLevel(lman, resExc, maxExc - exc); }
215  }
216 
217  G4LorentzVector lv0 = theNucleus->GetMomentum();
218  G4double mass1 = massGround + exc;
219  G4double mass2 = resMassGround + resExc;
220 
221  G4double e1 = 0.5*((massFrag - mass2)*(massFrag + mass2)
222  + mass1*mass1)/massFrag;
223 
224  G4double p1(0.0);
225  if(e1 > mass1) {
226  p1 = std::sqrt((e1 - mass1)*(e1 + mass1));
227  } else {
228  e1 = mass1;
229  }
231  G4LorentzVector lv1(p1*v, e1);
232 
233  G4ThreeVector boostVector = lv0.boostVector();
234  lv1.boost(boostVector);
235 
236  G4Fragment* frag = new G4Fragment(A, Z, lv1);
237 
238  G4double e2 = massFrag - e1;
239  if(e2 < mass2) {
240  e2 = mass2;
241  p1 = 0.0;
242  }
243  lv0.set(-v*p1, e2);
244  lv0.boost(boostVector);
245 
246  theNucleus->SetZandA_asInt(resZ, resA);
247  theNucleus->SetMomentum(lv0);
248 
249  return frag;
250 }
G4int GetMinA(G4int Z) const
Hep3Vector boostVector() const
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
G4ThreeVector G4RandomDirection()
virtual double flat()=0
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:307
HepLorentzVector & boost(double, double, double)
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:312
G4int GetMaxA(G4int Z) const
void set(double x, double y, double z, double t)
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:276
G4double GetMaxLevelEnergy(G4int Z, G4int A) const
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

G4double G4GEMChannelVI::GetEmissionProbability ( G4Fragment theNucleus)
finalvirtual

Implements G4VEvaporationChannel.

Definition at line 106 of file G4GEMChannelVI.cc.

107 {
108  fragZ = fragment->GetZ_asInt();
109  fragA = fragment->GetA_asInt();
110  resZ = fragZ - Z;
111  resA = fragA - A;
112  G4double prob = 0.0;
113  if(resA < A || resA < resZ || resZ < 0 || (resA == A && resZ < Z)) {
114  return prob;
115  }
116 
117  resMassGround = G4NucleiProperties::GetNuclearMass(resA, resZ);
118  G4double exc = fragment->GetExcitationEnergy();
119  massFrag = fragment->GetGroundStateMass() + exc;
120  delta0 = pairingCorrection->GetPairingCorrection(fragA, fragZ);
121  eCBarrier = cBarrier->GetCoulombBarrier(resA, resZ, exc);
122 
123  maxExc = massFrag - massGround - resMassGround - eCBarrier - delta0;
124  if(maxExc < 0.0) { return prob; }
125 
126  resZ13 = fG4pow->Z13(resZ);
127  resA13 = fG4pow->Z13(resA);
128  delta1 = pairingCorrection->GetPairingCorrection(resA, resZ);
129 
130  G4double C = 0.0;
131  if(resA >= 50) {
132  C = -0.10/G4double(A);
133  } else if(resZ > 20) {
134  C = (0.123482-0.00534691*Z-0.0000610624*(Z*Z)+5.93719*1e-7*(Z*Z*Z)+
135  1.95687*1e-8*(Z*Z*Z*Z))/G4double(A);
136  }
137  if(0 == Z) {
138  alphaP = 0.76+1.93/resA13;
139  betaP = (1.66/(resA13*resA13)-0.05)*CLHEP::MeV/alphaP;
140  } else {
141  alphaP = 1.0 + C;
142  betaP = - eCBarrier;
143  }
144 
145  maxProb = 0.0;
146  G4double e0 = maxExc*0.5;
147 
148  // e is an excitation of emitted fragment
149  for (G4int i=0; i<NPOINTSGEM; ++i) {
150  prob += ws[i]*IntegratedProbability(e0*(xs[i] + 1.0));
151  }
152  prob *= coeff*e0*e0;
153 
154  /*
155  G4cout << "G4GEMChannelVI: Z= " << Z << " A= " << A
156  << " FragmentZ= " << aZ << " FragmentA= " << anA
157  << " Zres= " << ResidualZ << " Ares= " << ResidualA
158  << G4endl;
159  */
160 
161  //G4cout << "Prob= " << prob << G4endl;
162  return prob;
163 }
static G4double GetNuclearMass(const G4double A, const G4double Z)
double C(double temp)
int G4int
Definition: G4Types.hh:78
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
double A(double temperature)
static constexpr double MeV
G4double GetPairingCorrection(G4int A, G4int Z) const
virtual G4double GetCoulombBarrier(G4int ARes, G4int ZRes, G4double U) const =0
double G4double
Definition: G4Types.hh:76
const G4int NPOINTSGEM

Here is the call graph for this function:

void G4GEMChannelVI::Initialise ( )
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 99 of file G4GEMChannelVI.cc.

100 {
101  G4DeexPrecoParameters* param =
103  levelDensity = param->GetLevelDensity();
104 }
G4double GetLevelDensity() const
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()

Here is the call graph for this function:


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