Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4StatMFMicroPartition Class Reference

#include <G4StatMFMicroPartition.hh>

Public Member Functions

 G4StatMFMicroPartition (G4int A, G4int Z)
 
 ~G4StatMFMicroPartition ()
 
G4bool operator== (const G4StatMFMicroPartition &right) const
 
G4bool operator!= (const G4StatMFMicroPartition &right) const
 
G4StatMFChannelChooseZ (G4int A0, G4int Z0, G4double MeanT)
 
G4double GetProbability (void)
 
void SetPartitionFragment (G4int anA)
 
void Normalize (G4double Normalization)
 
G4double CalcPartitionProbability (G4double U, G4double FreeInternalE0, G4double SCompound)
 
G4double GetTemperature (void)
 
G4double GetEntropy (void)
 

Detailed Description

Definition at line 41 of file G4StatMFMicroPartition.hh.

Constructor & Destructor Documentation

G4StatMFMicroPartition::G4StatMFMicroPartition ( G4int  A,
G4int  Z 
)
inline

Definition at line 45 of file G4StatMFMicroPartition.hh.

45  :
46  theA(A), theZ(Z), _Probability(0.0), _Temperature(0.0),
47  _Entropy(0.0) {};
G4StatMFMicroPartition::~G4StatMFMicroPartition ( )
inline

Definition at line 51 of file G4StatMFMicroPartition.hh.

51 {};

Member Function Documentation

G4double G4StatMFMicroPartition::CalcPartitionProbability ( G4double  U,
G4double  FreeInternalE0,
G4double  SCompound 
)

Definition at line 225 of file G4StatMFMicroPartition.cc.

References G4StatMFParameters::DBetaDT(), python.hepunit::elm_coupling, python.hepunit::fermi, G4StatMFParameters::Getr0(), G4INCL::Math::max(), and python.hepunit::pi.

228 {
229  G4double T = CalcPartitionTemperature(U,FreeInternalE0);
230  if ( T <= 0.0) return _Probability = 0.0;
231  _Temperature = T;
232 
233 
234  // Factorial of fragment multiplicity
235  G4double Fact = 1.0;
236  unsigned int i;
237  for (i = 0; i < _thePartition.size() - 1; i++)
238  {
239  G4double f = 1.0;
240  for (unsigned int ii = i+1; i< _thePartition.size(); i++)
241  {
242  if (_thePartition[i] == _thePartition[ii]) f++;
243  }
244  Fact *= f;
245  }
246 
247  G4double ProbDegeneracy = 1.0;
248  G4double ProbA32 = 1.0;
249 
250  for (i = 0; i < _thePartition.size(); i++)
251  {
252  ProbDegeneracy *= GetDegeneracyFactor(static_cast<G4int>(_thePartition[i]));
253  ProbA32 *= static_cast<G4double>(_thePartition[i])*
254  std::sqrt(static_cast<G4double>(_thePartition[i]));
255  }
256 
257  // Compute entropy
258  G4double PartitionEntropy = 0.0;
259  for (i = 0; i < _thePartition.size(); i++)
260  {
261  // interaction entropy for alpha
262  if (_thePartition[i] == 4)
263  {
264  PartitionEntropy +=
265  2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i]);
266  }
267  // interaction entropy for Af > 4
268  else if (_thePartition[i] > 4)
269  {
270  PartitionEntropy +=
271  2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i])
273  * std::pow(static_cast<G4double>(_thePartition[i]),2.0/3.0);
274  }
275  }
276 
277  // Thermal Wave Lenght = std::sqrt(2 pi hbar^2 / nucleon_mass T)
278  G4double ThermalWaveLenght3 = 16.15*fermi/std::sqrt(T);
279  ThermalWaveLenght3 = ThermalWaveLenght3*ThermalWaveLenght3*ThermalWaveLenght3;
280 
281  // Translational Entropy
282  G4double kappa = (1. + elm_coupling*(std::pow(static_cast<G4double>(_thePartition.size()),1./3.)-1.0)
283  /(G4StatMFParameters::Getr0()*std::pow(static_cast<G4double>(theA),1./3.)));
284  kappa = kappa*kappa*kappa;
285  kappa -= 1.;
288  G4double FreeVolume = kappa*V0;
289  G4double TranslationalS = std::max(0.0, std::log(ProbA32/Fact) +
290  (_thePartition.size()-1.0)*std::log(FreeVolume/ThermalWaveLenght3) +
291  1.5*(_thePartition.size()-1.0) - (3./2.)*std::log(G4double(theA)));
292 
293  PartitionEntropy += std::log(ProbDegeneracy) + TranslationalS;
294  _Entropy = PartitionEntropy;
295 
296  // And finally compute probability of fragment configuration
297  G4double exponent = PartitionEntropy-SCompound;
298  if (exponent > 700.0) exponent = 700.0;
299  return _Probability = std::exp(exponent);
300 }
tuple elm_coupling
Definition: hepunit.py:286
static G4double Getr0()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
static G4double DBetaDT(G4double T)
double G4double
Definition: G4Types.hh:76
G4StatMFChannel * G4StatMFMicroPartition::ChooseZ ( G4int  A0,
G4int  Z0,
G4double  MeanT 
)

Definition at line 315 of file G4StatMFMicroPartition.cc.

References G4StatMFChannel::CreateFragment(), G4StatMFParameters::GetGamma0(), and G4INCL::DeJongSpin::shoot().

317 {
318  std::vector<G4int> FragmentsZ;
319 
320  G4int ZBalance = 0;
321  do
322  {
324  G4int SumZ = 0;
325  for (unsigned int i = 0; i < _thePartition.size(); i++)
326  {
327  G4double ZMean;
328  G4double Af = _thePartition[i];
329  if (Af > 1.5 && Af < 4.5) ZMean = 0.5*Af;
330  else ZMean = Af*Z0/A0;
331  G4double ZDispersion = std::sqrt(Af * MeanT/CC);
332  G4int Zf;
333  do
334  {
335  Zf = static_cast<G4int>(G4RandGauss::shoot(ZMean,ZDispersion));
336  }
337  while (Zf < 0 || Zf > Af);
338  FragmentsZ.push_back(Zf);
339  SumZ += Zf;
340  }
341  ZBalance = Z0 - SumZ;
342  }
343  while (std::abs(ZBalance) > 1);
344  FragmentsZ[0] += ZBalance;
345 
346  G4StatMFChannel * theChannel = new G4StatMFChannel;
347  for (unsigned int i = 0; i < _thePartition.size(); i++)
348  {
349  theChannel->CreateFragment(_thePartition[i],FragmentsZ[i]);
350  }
351 
352  return theChannel;
353 }
static G4double GetGamma0()
ThreeVector shoot(const G4int Ap, const G4int Af)
int G4int
Definition: G4Types.hh:78
void CreateFragment(G4int A, G4int Z)
double G4double
Definition: G4Types.hh:76
G4double G4StatMFMicroPartition::GetEntropy ( void  )
inline

Definition at line 93 of file G4StatMFMicroPartition.hh.

94  {
95  return _Entropy;
96  }
G4double G4StatMFMicroPartition::GetProbability ( void  )
inline

Definition at line 72 of file G4StatMFMicroPartition.hh.

73  { return _Probability; }
G4double G4StatMFMicroPartition::GetTemperature ( void  )
inline

Definition at line 88 of file G4StatMFMicroPartition.hh.

89  {
90  return _Temperature;
91  }
void G4StatMFMicroPartition::Normalize ( G4double  Normalization)
inline

Definition at line 81 of file G4StatMFMicroPartition.hh.

82  { _Probability /= Normalization; }
G4bool G4StatMFMicroPartition::operator!= ( const G4StatMFMicroPartition right) const

Definition at line 60 of file G4StatMFMicroPartition.cc.

61 {
62  //throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMicroPartition::operator!= meant to not be accessable");
63  return true;
64 }
G4bool G4StatMFMicroPartition::operator== ( const G4StatMFMicroPartition right) const

Definition at line 53 of file G4StatMFMicroPartition.cc.

54 {
55  //throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMicroPartition::operator== meant to not be accessable");
56  return false;
57 }
void G4StatMFMicroPartition::SetPartitionFragment ( G4int  anA)
inline

Definition at line 75 of file G4StatMFMicroPartition.hh.

76  {
77  _thePartition.push_back(anA);
78  CoulombFreeEnergy(anA);
79  }

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