G4E1SingleProbability1.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 //  Class G4E1SingleProbability1.cc
00029 //
00030 
00031 #include "G4E1SingleProbability1.hh"
00032 #include "G4ConstantLevelDensityParameter.hh"
00033 #include "Randomize.hh"
00034 #include "G4Pow.hh"
00035 #include "G4PhysicalConstants.hh"
00036 #include "G4SystemOfUnits.hh"
00037 
00038 // Constructors and operators
00039 //
00040 
00041 G4E1SingleProbability1::G4E1SingleProbability1()
00042 {}
00043 
00044 G4E1SingleProbability1::~G4E1SingleProbability1()
00045 {}
00046 
00047 // Calculate the emission probability
00048 //
00049 
00050 G4double G4E1SingleProbability1::EmissionProbDensity(const G4Fragment& frag, 
00051                                                      G4double exciteE)
00052 {
00053 
00054   // Calculate the probability density here
00055 
00056   // From nuclear fragment properties and the excitation energy, calculate
00057   // the probability density for photon evaporation from U to U - exciteE
00058   // (U = nucleus excitation energy, exciteE = total evaporated photon
00059   // energy).
00060   // fragment = nuclear fragment BEFORE de-excitation
00061 
00062   G4double theProb = 0.0;
00063 
00064   G4int Afrag = frag.GetA_asInt();
00065   G4int Zfrag = frag.GetZ_asInt();
00066   G4double Uexcite = frag.GetExcitationEnergy();
00067 
00068   if( (Uexcite-exciteE) < 0.0 || exciteE < 0 || Uexcite <= 0) return theProb;
00069 
00070   // Need a level density parameter.
00071   // For now, just use the constant approximation (not reliable near magic
00072   // nuclei).
00073 
00074   G4ConstantLevelDensityParameter a;
00075   G4double aLevelDensityParam = a.LevelDensityParameter(Afrag,Zfrag,Uexcite);
00076 
00077   G4double levelDensBef = std::exp(2.0*std::sqrt(aLevelDensityParam*Uexcite));
00078   G4double levelDensAft = std::exp(2.0*std::sqrt(aLevelDensityParam*(Uexcite-exciteE)));
00079 
00080   // Now form the probability density
00081 
00082   // Define constants for the photoabsorption cross-section (the reverse
00083   // process of our de-excitation)
00084 
00085   G4double sigma0 = 2.5 * Afrag * millibarn;  // millibarns
00086 
00087   G4double Egdp = (40.3 / G4Pow::GetInstance()->powZ(Afrag,0.2) )*MeV;
00088   G4double GammaR = 0.30 * Egdp;
00089  
00090   const G4double normC = 1.0 / ((pi * hbarc)*(pi * hbarc));
00091 
00092   // CD
00093   //cout<<"  PROB TESTS "<<G4endl;
00094   //cout<<" hbarc = "<<hbarc<<G4endl;
00095   //cout<<" pi = "<<pi<<G4endl;
00096   //cout<<" Uexcite, exciteE = "<<Uexcite<<"  "<<exciteE<<G4endl;
00097   //cout<<" Uexcite, exciteE = "<<Uexcite*MeV<<"  "<<exciteE*MeV<<G4endl;
00098   //cout<<" lev density param = "<<aLevelDensityParam<<G4endl;
00099   //cout<<" level densities = "<<levelDensBef<<"  "<<levelDensAft<<G4endl;
00100   //cout<<" sigma0 = "<<sigma0<<G4endl;
00101   //cout<<" Egdp, GammaR = "<<Egdp<<"  "<<GammaR<<G4endl;
00102   //cout<<" normC = "<<normC<<G4endl;
00103 
00104   G4double numerator = sigma0 * exciteE*exciteE * GammaR*GammaR;
00105   G4double denominator = (exciteE*exciteE - Egdp*Egdp)*
00106            (exciteE*exciteE - Egdp*Egdp) + GammaR*GammaR*exciteE*exciteE;
00107 
00108   G4double sigmaAbs = numerator/denominator; 
00109 
00110   theProb = normC * sigmaAbs * exciteE*exciteE *
00111             levelDensAft/levelDensBef;
00112 
00113   // CD
00114   //cout<<" sigmaAbs = "<<sigmaAbs<<G4endl;
00115   //cout<<" Probability = "<<theProb<<G4endl;
00116 
00117   return theProb;
00118 
00119 }
00120 
00121 G4double G4E1SingleProbability1::EmissionProbability(const G4Fragment& frag, 
00122                                                      G4double exciteE)
00123 {
00124 
00125   // From nuclear fragment properties and the excitation energy, calculate
00126   // the probability for photon evaporation down to the level
00127   // Uexcite-exciteE.
00128   // fragment = nuclear fragment BEFORE de-excitation
00129 
00130   G4double theProb = 0.0;
00131 
00132   G4double ScaleFactor = 1.0;     // playing with scale factors
00133 
00134   const G4double Uexcite = frag.GetExcitationEnergy();
00135   G4double Uafter = Uexcite - exciteE;
00136 
00137   G4double normC = 3.0;
00138 
00139   const G4double upperLim = Uexcite;
00140   const G4double lowerLim = Uafter;
00141   const G4int numIters = 25;
00142 
00143   // Need to integrate EmissionProbDensity from lowerLim to upperLim 
00144   // and multiply by normC
00145 
00146   G4double integ = normC *
00147            EmissionIntegration(frag,exciteE,lowerLim,upperLim,numIters);
00148 
00149   if(integ > 0.0) theProb = integ;
00150 
00151   return theProb * ScaleFactor;
00152 
00153 }
00154 
00155 G4double G4E1SingleProbability1::EmissionIntegration(const G4Fragment& frag, 
00156                                                      G4double ,
00157                                                      G4double lowLim, G4double upLim,
00158                                                      G4int numIters)
00159 
00160 {
00161 
00162   // Simple Gaussian quadrature integration
00163 
00164   G4double x;
00165   const G4double root3 = 1.0/std::sqrt(3.0);
00166 
00167   G4double Step = (upLim-lowLim)/(2.0*numIters);
00168   G4double Delta = Step*root3;
00169 
00170   G4double mean = 0.0;
00171 
00172   G4double theInt = 0.0;
00173 
00174   for(G4int i = 0; i < numIters; i++) {
00175 
00176     x = (2*i + 1)/Step;
00177     G4double E1ProbDensityA = EmissionProbDensity(frag,x+Delta);
00178     G4double E1ProbDensityB = EmissionProbDensity(frag,x-Delta);
00179 
00180     mean += E1ProbDensityA + E1ProbDensityB;
00181 
00182   }
00183 
00184   if(mean*Step > 0.0) theInt = mean*Step;
00185 
00186   return theInt;
00187 
00188 }
00189 
00190 
00191 

Generated on Mon May 27 17:48:04 2013 for Geant4 by  doxygen 1.4.7