source: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc @ 847

Last change on this file since 847 was 819, checked in by garnier, 16 years ago

import all except CVS

File size: 5.5 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26//
27// $Id: G4EvaporationProbability.cc,v 1.5 2006/06/29 20:10:31 gunter Exp $
28// GEANT4 tag $Name: geant4-09-01-patch-02 $
29//
30// Hadronic Process: Nuclear De-excitations
31// by V. Lara (Oct 1998)
32//
33
34
35#include "G4EvaporationProbability.hh"
36#include "G4PairingCorrection.hh"
37
38
39
40G4EvaporationProbability::G4EvaporationProbability(const G4EvaporationProbability &) : G4VEmissionProbability()
41{
42    throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationProbability::copy_constructor meant to not be accessable");
43}
44
45
46
47
48const G4EvaporationProbability & G4EvaporationProbability::
49operator=(const G4EvaporationProbability &)
50{
51    throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationProbability::operator= meant to not be accessable");
52    return *this;
53}
54
55
56G4bool G4EvaporationProbability::operator==(const G4EvaporationProbability &) const
57{
58    return false;
59}
60
61G4bool G4EvaporationProbability::operator!=(const G4EvaporationProbability &) const
62{
63    return true;
64}
65
66G4double G4EvaporationProbability::EmissionProbability(const G4Fragment & fragment, const G4double anEnergy)
67{
68    G4double EmissionProbability = 0.0;
69    G4double MaximalKineticEnergy = anEnergy;
70    if (MaximalKineticEnergy > 0.0 && fragment.GetExcitationEnergy() > 0.0) {
71        EmissionProbability = CalcProbability(fragment,MaximalKineticEnergy);
72        //              // Next there is a loop over excited states for this channel summing probabilities
73        //              G4double SavedGamma = Gamma;
74        //              for (G4int i = 0; i < ExcitationEnergies->length(); i++) {
75        //                      if (ExcitationSpins->operator()(i) < 0.1) continue;
76        //                      Gamma = ExcitationSpins->operator()(i)*A; // A is the channel mass number
77        //                      // substract excitation energies
78        //                      MaximalKineticEnergy -= ExcitationEnergies->operator()(i);
79        //                      // update probability
80        //                      EmissionProbability += CalcProbability(fragment,MaximalKineticEnergy);
81        //                              EmissionProbability += tmp;
82        //                      }
83        //              // restore Gamma and MaximalKineticEnergy
84        //              MaximalKineticEnergy = SavedMaximalKineticEnergy;
85        //              Gamma = SavedGamma;
86        //              }
87    }
88    return EmissionProbability;
89}
90
91G4double G4EvaporationProbability::CalcProbability(const G4Fragment & fragment, 
92                                                   const G4double MaximalKineticEnergy)
93    // Calculate integrated probability (width) for rvaporation channel
94{       
95    G4double ResidualA = static_cast<G4double>(fragment.GetA() - theA);
96    G4double ResidualZ = static_cast<G4double>(fragment.GetZ() - theZ);
97    G4double U = fragment.GetExcitationEnergy();
98       
99    G4double NuclearMass = G4ParticleTable::GetParticleTable()->GetIonTable()->GetNucleusMass(theZ,theA);
100
101
102    G4double delta0 = G4PairingCorrection::GetInstance()->GetPairingCorrection(static_cast<G4int>(fragment.GetA()),
103                                                                               static_cast<G4int>(fragment.GetZ()));
104
105    G4double SystemEntropy = 2.0*std::sqrt(theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(fragment.GetA()),
106                                                                           static_cast<G4int>(fragment.GetZ()),U)*
107                                      (U-delta0));
108                                                                 
109    // compute the integrated probability of evaporation channel
110    G4double RN = 1.5*fermi;
111
112    G4double Alpha = CalcAlphaParam(fragment);
113    G4double Beta = CalcBetaParam(fragment);
114       
115    G4double Rmax = MaximalKineticEnergy;
116    G4double a = theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(ResidualA),
117                                                      static_cast<G4int>(ResidualZ),
118                                                      Rmax);
119    G4double GlobalFactor = static_cast<G4double>(Gamma) * (Alpha/(a*a)) *
120        (NuclearMass*RN*RN*std::pow(ResidualA,2./3.))/
121        (2.*pi* hbar_Planck*hbar_Planck);
122    G4double Term1 = (2.0*Beta*a-3.0)/2.0 + Rmax*a;
123    G4double Term2 = (2.0*Beta*a-3.0)*std::sqrt(Rmax*a) + 2.0*a*Rmax;
124       
125    G4double ExpTerm1 = 0.0;
126    if (SystemEntropy <= 600.0) ExpTerm1 = std::exp(-SystemEntropy);
127       
128    G4double ExpTerm2 = 2.*std::sqrt(a*Rmax) - SystemEntropy;
129    if (ExpTerm2 > 700.0) ExpTerm2 = 700.0;
130    ExpTerm2 = std::exp(ExpTerm2);
131       
132    G4double Width = GlobalFactor*(Term1*ExpTerm1 + Term2*ExpTerm2);
133       
134    return Width;
135}
136
137
138
139
Note: See TracBrowser for help on using the repository browser.