Geant4  10.02.p03
G4GEMChannel Class Reference

#include <G4GEMChannel.hh>

Inherits G4VEvaporationChannel.

Inherited by G4AlphaGEMChannel, G4B10GEMChannel, G4B11GEMChannel, G4B12GEMChannel, G4B13GEMChannel, G4B8GEMChannel, G4Be10GEMChannel, G4Be11GEMChannel, G4Be12GEMChannel, G4Be7GEMChannel, G4Be9GEMChannel, G4C10GEMChannel, G4C11GEMChannel, G4C12GEMChannel, G4C13GEMChannel, G4C14GEMChannel, G4C15GEMChannel, G4C16GEMChannel, G4DeuteronGEMChannel, G4F17GEMChannel, G4F18GEMChannel, G4F19GEMChannel, G4F20GEMChannel, G4F21GEMChannel, G4He3GEMChannel, G4He6GEMChannel, G4He8GEMChannel, G4Li6GEMChannel, G4Li7GEMChannel, G4Li8GEMChannel, G4Li9GEMChannel, G4Mg22GEMChannel, G4Mg23GEMChannel, G4Mg24GEMChannel, G4Mg25GEMChannel, G4Mg26GEMChannel, G4Mg27GEMChannel, G4Mg28GEMChannel, G4N12GEMChannel, G4N13GEMChannel, G4N14GEMChannel, G4N15GEMChannel, G4N16GEMChannel, G4N17GEMChannel, G4Na21GEMChannel, G4Na22GEMChannel, G4Na23GEMChannel, G4Na24GEMChannel, G4Na25GEMChannel, G4Ne18GEMChannel, G4Ne19GEMChannel, G4Ne20GEMChannel, G4Ne21GEMChannel, G4Ne22GEMChannel, G4Ne23GEMChannel, G4Ne24GEMChannel, G4NeutronGEMChannel, G4O14GEMChannel, G4O15GEMChannel, G4O16GEMChannel, G4O17GEMChannel, G4O18GEMChannel, G4O19GEMChannel, G4O20GEMChannel, G4ProtonGEMChannel, and G4TritonGEMChannel.

Collaboration diagram for G4GEMChannel:

Public Member Functions

 G4GEMChannel (const G4int theA, const G4int theZ, const G4String &aName, G4GEMProbability *aEmissionStrategy, G4VCoulombBarrier *aCoulombBarrier)
 
virtual ~G4GEMChannel ()
 
virtual G4double GetEmissionProbability (G4Fragment *theNucleus)
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus)
 
virtual G4FragmentVectorBreakUp (const G4Fragment &theNucleus)
 
virtual void Dump () const
 
void SetLevelDensityParameter (G4VLevelDensityParameter *aLevelDensity)
 
- Public Member Functions inherited from G4VEvaporationChannel
 G4VEvaporationChannel (const G4String &aName="")
 
virtual ~G4VEvaporationChannel ()
 
virtual void Initialise ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual G4bool BreakUpChain (G4FragmentVector *theResult, 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)
 

Private Member Functions

G4double SampleKineticEnergy (const G4Fragment &fragment)
 
G4ThreeVector IsotropicVector (G4double Magnitude=1.0)
 
 G4GEMChannel (const G4GEMChannel &right)
 
const G4GEMChanneloperator= (const G4GEMChannel &right)
 
G4bool operator== (const G4GEMChannel &right) const
 
G4bool operator!= (const G4GEMChannel &right) const
 

Private Attributes

G4int A
 
G4int Z
 
G4double EvaporatedMass
 
G4double ResidualMass
 
G4PowfG4pow
 
G4GEMProbabilitytheEvaporationProbabilityPtr
 
G4bool MyOwnLevelDensity
 
G4VLevelDensityParametertheLevelDensityPtr
 
G4VCoulombBarriertheCoulombBarrierPtr
 
G4double CoulombBarrier
 
G4PairingCorrectionpairingCorrection
 
G4int ResidualA
 
G4int ResidualZ
 
G4double EmissionProbability
 
G4double MaximalKineticEnergy
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 49 of file G4GEMChannel.hh.

Constructor & Destructor Documentation

◆ G4GEMChannel() [1/2]

G4GEMChannel::G4GEMChannel ( const G4int  theA,
const G4int  theZ,
const G4String aName,
G4GEMProbability aEmissionStrategy,
G4VCoulombBarrier aCoulombBarrier 
)

Definition at line 46 of file G4GEMChannel.cc.

48  :
49  G4VEvaporationChannel(aName),
50  A(theA),
51  Z(theZ),
52  theEvaporationProbabilityPtr(aEmissionStrategy),
53  theCoulombBarrierPtr(aCoulombBarrier),
56 {
58  MyOwnLevelDensity = true;
62  ResidualZ = ResidualA = 0;
64 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
G4Pow * fG4pow
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4VEvaporationChannel(const G4String &aName="")
G4double CoulombBarrier
G4bool MyOwnLevelDensity
static const double GeV
G4VCoulombBarrier * theCoulombBarrierPtr
G4double ResidualMass
Definition: G4GEMChannel.hh:99
G4PairingCorrection * pairingCorrection
G4double EvaporatedMass
Definition: G4GEMChannel.hh:98
G4double EmissionProbability
static G4PairingCorrection * GetInstance()
G4VLevelDensityParameter * theLevelDensityPtr
G4GEMProbability * theEvaporationProbabilityPtr
G4double MaximalKineticEnergy
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~G4GEMChannel()

G4GEMChannel::~G4GEMChannel ( )
virtual

Definition at line 66 of file G4GEMChannel.cc.

67 {
68  if (MyOwnLevelDensity) { delete theLevelDensityPtr; }
69 }
G4bool MyOwnLevelDensity
G4VLevelDensityParameter * theLevelDensityPtr

◆ G4GEMChannel() [2/2]

G4GEMChannel::G4GEMChannel ( const G4GEMChannel right)
private

Member Function Documentation

◆ BreakUp()

G4FragmentVector * G4GEMChannel::BreakUp ( const G4Fragment theNucleus)
virtual

Implements G4VEvaporationChannel.

Definition at line 144 of file G4GEMChannel.cc.

145 {
146  G4FragmentVector * theResult = new G4FragmentVector();
147  G4Fragment* frag0 = new G4Fragment(theNucleus);
148  G4Fragment* frag1 = EmittedFragment(frag0);
149  if(frag1) { theResult->push_back(frag1); }
150  theResult->push_back(frag0);
151  return theResult;
152 }
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus)
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:63
Here is the call graph for this function:

◆ Dump()

void G4GEMChannel::Dump ( ) const
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 270 of file G4GEMChannel.cc.

271 {
273 }
G4GEMProbability * theEvaporationProbabilityPtr
Here is the call graph for this function:

◆ EmittedFragment()

G4Fragment * G4GEMChannel::EmittedFragment ( G4Fragment theNucleus)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 124 of file G4GEMChannel.cc.

125 {
126  G4Fragment* evFragment = 0;
127  G4double evEnergy = SampleKineticEnergy(*theNucleus) + EvaporatedMass;
128 
130  (std::sqrt((evEnergy - EvaporatedMass)*(evEnergy + EvaporatedMass))));
131 
132  G4LorentzVector EvaporatedMomentum(momentum, evEnergy);
133  G4LorentzVector ResidualMomentum = theNucleus->GetMomentum();
134  EvaporatedMomentum.boost(ResidualMomentum.boostVector());
135 
136  evFragment = new G4Fragment(A, Z, EvaporatedMomentum);
137  ResidualMomentum -= EvaporatedMomentum;
138  theNucleus->SetZandA_asInt(ResidualZ, ResidualA);
139  theNucleus->SetMomentum(ResidualMomentum);
140 
141  return evFragment;
142 }
G4ThreeVector IsotropicVector(G4double Magnitude=1.0)
G4double SampleKineticEnergy(const G4Fragment &fragment)
G4double EvaporatedMass
Definition: G4GEMChannel.hh:98
HepLorentzVector & boost(double, double, double)
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:294
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:289
Hep3Vector boostVector() const
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:266
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetEmissionProbability()

G4double G4GEMChannel::GetEmissionProbability ( G4Fragment theNucleus)
virtual

Implements G4VEvaporationChannel.

Definition at line 71 of file G4GEMChannel.cc.

72 {
73  G4int anA = fragment->GetA_asInt();
74  G4int aZ = fragment->GetZ_asInt();
75  ResidualA = anA - A;
76  ResidualZ = aZ - Z;
77  /*
78  G4cout << "G4GEMChannel: Z= " << Z << " A= " << A
79  << " FragmentZ= " << aZ << " FragmentA= " << anA
80  << " Zres= " << ResidualZ << " Ares= " << ResidualA
81  << G4endl;
82  */
83  // We only take into account channels which are physically allowed
84  EmissionProbability = 0.0;
85 
86  // Only channels which are physically allowed are taken into account
87  if (ResidualA >= ResidualZ && ResidualZ > 0 && ResidualA >= A) {
88 
89  //Effective excitation energy
90  G4double ExEnergy = fragment->GetExcitationEnergy()
92  if(ExEnergy > 0.0) {
94  G4double FragmentMass = fragment->GetGroundStateMass();
95  G4double Etot = FragmentMass + ExEnergy;
96  // Coulomb Barrier calculation
99  /*
100  G4cout << "Eexc(MeV)= " << ExEnergy/MeV
101  << " CoulBarrier(MeV)= " << CoulombBarrier/MeV << G4endl;
102  */
104 
105  // Maximal Kinetic Energy
107  + EvaporatedMass*EvaporatedMass)/(2.0*Etot)
109 
110  //G4cout << "CBarrier(MeV)= " << CoulombBarrier/MeV << G4endl;
111 
112  if (MaximalKineticEnergy > 0.0) {
113  // Total emission probability for this channel
116  }
117  }
118  }
119  }
120  //G4cout << "Prob= " << EmissionProbability << G4endl;
121  return EmissionProbability;
122 }
G4double GetPairingCorrection(G4int A, G4int Z) const
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double CoulombBarrier
int G4int
Definition: G4Types.hh:78
G4VCoulombBarrier * theCoulombBarrierPtr
G4double ResidualMass
Definition: G4GEMChannel.hh:99
G4PairingCorrection * pairingCorrection
G4double EvaporatedMass
Definition: G4GEMChannel.hh:98
G4double EmissionProbability
virtual G4double GetCoulombBarrier(G4int ARes, G4int ZRes, G4double U) const =0
G4GEMProbability * theEvaporationProbabilityPtr
double G4double
Definition: G4Types.hh:76
G4double MaximalKineticEnergy
Here is the call graph for this function:

◆ IsotropicVector()

G4ThreeVector G4GEMChannel::IsotropicVector ( G4double  Magnitude = 1.0)
private

Definition at line 257 of file G4GEMChannel.cc.

260 {
261  G4double CosTheta = 1.0 - 2.0*G4UniformRand();
262  G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta);
263  G4double Phi = twopi*G4UniformRand();
264  G4ThreeVector Vector(Magnitude*std::cos(Phi)*SinTheta,
265  Magnitude*std::sin(Phi)*SinTheta,
266  Magnitude*CosTheta);
267  return Vector;
268 }
#define G4UniformRand()
Definition: Randomize.hh:97
static const double twopi
Definition: G4SIunits.hh:75
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ operator!=()

G4bool G4GEMChannel::operator!= ( const G4GEMChannel right) const
private
Here is the caller graph for this function:

◆ operator=()

const G4GEMChannel& G4GEMChannel::operator= ( const G4GEMChannel right)
private
Here is the caller graph for this function:

◆ operator==()

G4bool G4GEMChannel::operator== ( const G4GEMChannel right) const
private
Here is the caller graph for this function:

◆ SampleKineticEnergy()

G4double G4GEMChannel::SampleKineticEnergy ( const G4Fragment fragment)
private

Definition at line 154 of file G4GEMChannel.cc.

156 {
157  G4double U = fragment.GetExcitationEnergy();
158 
161 
162  // ***RESIDUAL***
163  //JMQ (September 2009) the following quantities refer to the RESIDUAL:
165  G4double Ux = (2.5 + 150.0/ResidualA)*MeV;
166  G4double Ex = Ux + delta0;
167  G4double InitialLevelDensity;
168  // ***end RESIDUAL ***
169 
170  // ***PARENT***
171  //JMQ (September 2009) the following quantities refer to the PARENT:
172 
174  fragment.GetZ_asInt());
176  fragment.GetZ_asInt(),
177  U-deltaCN);
178  G4double UxCN = (2.5 + 150.0/G4double(fragment.GetA_asInt()))*MeV;
179  G4double ExCN = UxCN + deltaCN;
180  G4double TCN = 1.0/(std::sqrt(aCN/UxCN) - 1.5/UxCN);
181  // ***end PARENT***
182 
183  //JMQ quantities calculated for CN in InitialLevelDensity
184  if ( U < ExCN )
185  {
186  G4double E0CN = ExCN - TCN*(G4Log(TCN/MeV) - G4Log(aCN*MeV)/4.0
187  - 1.25*G4Log(UxCN/MeV) + 2.0*std::sqrt(aCN*UxCN));
188  InitialLevelDensity = (pi/12.0)*G4Exp((U-E0CN)/TCN)/TCN;
189  }
190  else
191  {
192  G4double x = U-deltaCN;
193  G4double x1 = std::sqrt(aCN*x);
194  InitialLevelDensity = (pi/12.0)*G4Exp(2*x1)/(x*std::sqrt(x1));
195  }
196 
198  //JMQ BIG BUG fixed: hbarc instead of hbar_Planck !!!!
199  // it was fixed in total probability (for this channel) but remained still here!!
200  // G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbar_Planck*hbar_Planck);
201  G4double gg = (2.0*Spin+1.0)*EvaporatedMass/(pi2* hbarc*hbarc);
202  //
203  //JMQ fix on Rb and geometrical cross sections according to Furihata's paper
204  // (JAERI-Data/Code 2001-105, p6)
205  G4double Rb = 0.0;
206  if (A > 4)
207  {
208  G4double Ad = fG4pow->Z13(ResidualA);
209  G4double Aj = fG4pow->Z13(A);
210  Rb = (1.12*(Aj + Ad) - 0.86*((Aj+Ad)/(Aj*Ad))+2.85)*fermi;
211  }
212  else if (A>1)
213  {
214  G4double Ad = fG4pow->Z13(ResidualA);
215  G4double Aj = fG4pow->Z13(A);
216  Rb=1.5*(Aj+Ad)*fermi;
217  }
218  else
219  {
220  G4double Ad = fG4pow->Z13(ResidualA);
221  Rb = 1.5*Ad*fermi;
222  }
223  G4double GeometricalXS = pi*Rb*Rb;
224 
225  G4double ConstantFactor = gg*GeometricalXS*Alpha*pi/(InitialLevelDensity*12);
226  //JMQ : this is the assimptotic maximal kinetic energy of the ejectile
227  // (obtained by energy-momentum conservation).
228  // In general smaller than U-theSeparationEnergy
230  G4double KineticEnergy;
231  G4double Probability;
232 
233  for(G4int i=0; i<100; ++i) {
234  KineticEnergy = CoulombBarrier + G4UniformRand()*(MaximalKineticEnergy);
235  G4double edelta = theEnergy-KineticEnergy-delta0;
236  Probability = ConstantFactor*(KineticEnergy + Beta);
237  G4double a =
239  G4double T = 1.0/(std::sqrt(a/Ux) - 1.5/Ux);
240  //JMQ fix in units
241 
242  if (theEnergy - KineticEnergy < Ex) {
243  G4double E0 = Ex - T*(G4Log(T) - G4Log(a)*0.25
244  - 1.25*G4Log(Ux) + 2.0*std::sqrt(a*Ux));
245  Probability *= G4Exp((theEnergy-KineticEnergy-E0)/T)/T;
246  } else {
247  G4double e2 = edelta*edelta;
248  Probability *=
249  G4Exp(2*std::sqrt(a*edelta) - 0.25*G4Log(a*edelta*e2*e2));
250  }
251  if(EmissionProbability*G4UniformRand() <= Probability) { break; }
252  }
253 
254  return KineticEnergy;
255 }
G4double CalcAlphaParam(const G4Fragment &) const
G4Pow * fG4pow
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:273
static const double MeV
Definition: G4SIunits.hh:211
G4double GetPairingCorrection(G4int A, G4int Z) const
G4int GetA_asInt() const
Definition: G4Fragment.hh:256
static const G4double e2
G4double CoulombBarrier
G4double CalcBetaParam(const G4Fragment &) const
static const double pi2
Definition: G4SIunits.hh:77
int G4int
Definition: G4Types.hh:78
#define G4UniformRand()
Definition: Randomize.hh:97
G4int GetZ_asInt() const
Definition: G4Fragment.hh:261
float hbarc
Definition: hepunit.py:265
G4PairingCorrection * pairingCorrection
G4double EvaporatedMass
Definition: G4GEMChannel.hh:98
Double_t x1[nxs]
G4double EmissionProbability
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
static const double pi
Definition: G4SIunits.hh:74
G4VLevelDensityParameter * theLevelDensityPtr
virtual G4double LevelDensityParameter(G4int A, G4int Z, G4double U) const =0
G4GEMProbability * theEvaporationProbabilityPtr
double G4double
Definition: G4Types.hh:76
G4double MaximalKineticEnergy
G4double GetSpin(void) const
static const double fermi
Definition: G4SIunits.hh:102
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetLevelDensityParameter()

void G4GEMChannel::SetLevelDensityParameter ( G4VLevelDensityParameter aLevelDensity)
inline

Definition at line 68 of file G4GEMChannel.hh.

69  {
70  if (MyOwnLevelDensity) { delete theLevelDensityPtr; }
71  theLevelDensityPtr = aLevelDensity;
72  MyOwnLevelDensity = false;
73  }
G4bool MyOwnLevelDensity
G4VLevelDensityParameter * theLevelDensityPtr
Here is the call graph for this function:

Member Data Documentation

◆ A

G4int G4GEMChannel::A
private

Definition at line 93 of file G4GEMChannel.hh.

◆ CoulombBarrier

G4double G4GEMChannel::CoulombBarrier
private

Definition at line 112 of file G4GEMChannel.hh.

◆ EmissionProbability

G4double G4GEMChannel::EmissionProbability
private

Definition at line 129 of file G4GEMChannel.hh.

◆ EvaporatedMass

G4double G4GEMChannel::EvaporatedMass
private

Definition at line 98 of file G4GEMChannel.hh.

◆ fG4pow

G4Pow* G4GEMChannel::fG4pow
private

Definition at line 101 of file G4GEMChannel.hh.

◆ MaximalKineticEnergy

G4double G4GEMChannel::MaximalKineticEnergy
private

Definition at line 132 of file G4GEMChannel.hh.

◆ MyOwnLevelDensity

G4bool G4GEMChannel::MyOwnLevelDensity
private

Definition at line 107 of file G4GEMChannel.hh.

◆ pairingCorrection

G4PairingCorrection* G4GEMChannel::pairingCorrection
private

Definition at line 114 of file G4GEMChannel.hh.

◆ ResidualA

G4int G4GEMChannel::ResidualA
private

Definition at line 123 of file G4GEMChannel.hh.

◆ ResidualMass

G4double G4GEMChannel::ResidualMass
private

Definition at line 99 of file G4GEMChannel.hh.

◆ ResidualZ

G4int G4GEMChannel::ResidualZ
private

Definition at line 126 of file G4GEMChannel.hh.

◆ theCoulombBarrierPtr

G4VCoulombBarrier* G4GEMChannel::theCoulombBarrierPtr
private

Definition at line 111 of file G4GEMChannel.hh.

◆ theEvaporationProbabilityPtr

G4GEMProbability* G4GEMChannel::theEvaporationProbabilityPtr
private

Definition at line 104 of file G4GEMChannel.hh.

◆ theLevelDensityPtr

G4VLevelDensityParameter* G4GEMChannel::theLevelDensityPtr
private

Definition at line 108 of file G4GEMChannel.hh.

◆ Z

G4int G4GEMChannel::Z
private

Definition at line 96 of file G4GEMChannel.hh.


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