Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:20

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 //---------------------------------------------------------------------
0028 //
0029 // Geant4 header G4GEMProbability
0030 //
0031 //
0032 // Hadronic Process: Nuclear De-excitations
0033 // by V. Lara (Sept 2001) 
0034 //
0035 // 18.05.2010 V.Ivanchenko trying to speedup the most slow method
0036 //            by usage of G4Pow, integer Z and A; moved constructor, 
0037 //            destructor and virtual functions to source
0038 //
0039 
0040 #ifndef G4GEMProbability_h
0041 #define G4GEMProbability_h 1
0042 
0043 #include <CLHEP/Units/SystemOfUnits.h>
0044 
0045 #include "G4VEmissionProbability.hh"
0046 #include "G4VLevelDensityParameter.hh"
0047 #include "G4EvaporationLevelDensityParameter.hh"
0048 #include "G4VCoulombBarrier.hh"
0049 #include "G4NuclearLevelData.hh"
0050 #include "G4Pow.hh"
0051 #include "G4Exp.hh"
0052 
0053 class G4GEMProbability : public G4VEmissionProbability
0054 {
0055 public:
0056 
0057   G4GEMProbability(G4int anA, G4int aZ, G4double aSpin);
0058     
0059   virtual ~G4GEMProbability();
0060 
0061   // not used for evaporation
0062   G4double EmissionProbability(const G4Fragment& fragment,
0063                                G4double maxKineticEnergy) override;
0064 
0065   void Dump() const;
0066 
0067   inline G4double GetSpin(void) const;
0068 
0069   inline void SetCoulomBarrier(const G4VCoulombBarrier * aCoulombBarrierStrategy);
0070 
0071   inline G4double GetCoulombBarrier(const G4Fragment& fragment) const; 
0072 
0073   inline G4double CalcAlphaParam(const G4Fragment & ) const;
0074 
0075   inline G4double CalcBetaParam(const G4Fragment & ) const;
0076         
0077 private:
0078     
0079   G4double ComputeInitialLevelDensity(const G4Fragment & fragment) const;
0080 
0081   void PrecomputeResidualQuantities(const G4Fragment & fragment, G4double &Ux,
0082                                     G4double &UxSqrt, G4double &UxLog) const;
0083 
0084   G4double CalcProbability(const G4Fragment & fragment, 
0085                G4double MaximalKineticEnergy,
0086                G4double V, G4double spin,
0087                G4double InitialLevelDensity,
0088                G4double Ux, G4double UxSqrt, G4double UxLog) const;
0089 
0090   inline G4double CCoeficient(G4int) const;
0091 
0092   inline G4double I0(G4double t) const;
0093   inline G4double I1(G4double t, G4double tx) const;
0094   inline G4double I2(G4double s0, G4double sx) const;
0095   G4double I3(G4double s0, G4double sx) const;
0096 
0097   // Copy constructor
0098   G4GEMProbability();
0099   G4GEMProbability(const G4GEMProbability &right);    
0100   const G4GEMProbability & operator=(const G4GEMProbability &right);
0101   G4bool operator==(const G4GEMProbability &right) const;
0102   G4bool operator!=(const G4GEMProbability &right) const;
0103     
0104   // Data Members
0105   G4Pow*   fG4pow;
0106   G4NuclearLevelData* fNucData;
0107     
0108   G4VLevelDensityParameter * theEvapLDPptr;
0109     
0110   // Spin is fragment spin
0111   G4double Spin;
0112 
0113   // Coulomb Barrier
0114   const G4VCoulombBarrier * theCoulombBarrierPtr;
0115   
0116 protected:
0117 
0118   G4double fPlanck;
0119 
0120   // Resonances Energy
0121   std::vector<G4double> ExcitEnergies;
0122     
0123   // Resonances Spin 
0124   std::vector<G4double> ExcitSpins;
0125 
0126   // Resonances half lifetime
0127   std::vector<G4double> ExcitLifetimes;
0128 
0129 };
0130 
0131 inline G4double G4GEMProbability::GetSpin(void) const 
0132 { 
0133   return Spin; 
0134 }
0135 
0136 inline void 
0137 G4GEMProbability::SetCoulomBarrier(const G4VCoulombBarrier * aCoulombBarrierStrategy)
0138 {
0139   theCoulombBarrierPtr = aCoulombBarrierStrategy;
0140 }
0141 
0142 inline G4double 
0143 G4GEMProbability::GetCoulombBarrier(const G4Fragment& fragment) const 
0144 {
0145   G4double res = 0.0;
0146   if (theCoulombBarrierPtr) {
0147     G4int Acomp = fragment.GetA_asInt();
0148     G4int Zcomp = fragment.GetZ_asInt();
0149     res = theCoulombBarrierPtr->GetCoulombBarrier(Acomp-theA, Zcomp-theZ,
0150                 fragment.GetExcitationEnergy() -
0151                 fNucData->GetPairingCorrection(Zcomp,Acomp));
0152   }
0153   return res;
0154 }
0155 
0156 inline G4double G4GEMProbability::CCoeficient(G4int aZ) const
0157 {
0158   //JMQ 190709 C's values from Furihata's paper 
0159   //(notes added on proof in Dostrovskii's paper) 
0160   //data = {{20, 0.}, {30, -0.06}, {40, -0.10}, {50, -0.10}};
0161   G4double C = 0.0;
0162   if (aZ >= 50){
0163     C=-0.10/G4double(theA);
0164   } else if (aZ > 20) {
0165     C=(0.123482-0.00534691*aZ-0.0000610624*aZ*aZ+5.93719*1e-7*aZ*aZ*aZ+
0166        1.95687*1e-8*aZ*aZ*aZ*aZ)/G4double(theA);
0167   }
0168   return C;
0169 }
0170 
0171 
0172 inline G4double G4GEMProbability::CalcAlphaParam(const G4Fragment & fragment) const
0173 {
0174   //JMQ 190709 values according to Furihata's paper (based on notes added 
0175   //on proof in Dostrovskii's paper)
0176   G4double res;
0177   if(theZ == 0) {
0178     res = 0.76+1.93/fG4pow->Z13(fragment.GetA_asInt()-theA);
0179   } else {
0180     res = 1.0 + CCoeficient(fragment.GetZ_asInt()-theZ);
0181   }
0182   return res;
0183 }
0184 
0185 inline G4double 
0186 G4GEMProbability::CalcBetaParam(const G4Fragment & fragment) const
0187 {
0188   //JMQ 190709 values according to Furihata's paper (based on notes added 
0189   //on proof in Dostrovskii's paper)
0190   G4double res;
0191   if(theZ == 0) {
0192     res = (1.66/fG4pow->Z23(fragment.GetA_asInt()-theA)-0.05)*CLHEP::MeV/
0193        CalcAlphaParam(fragment);
0194   } else {
0195     res = -GetCoulombBarrier(fragment);
0196   }
0197   return res;
0198 }
0199 
0200 inline G4double G4GEMProbability::I0(G4double t) const
0201 {
0202   return G4Exp(t) - 1.0;
0203 }
0204 
0205 inline G4double G4GEMProbability::I1(G4double t, G4double tx) const
0206 {
0207   return (t - tx + 1.0)*G4Exp(tx) - t - 1.0;
0208 }
0209 
0210 
0211 inline G4double G4GEMProbability::I2(G4double s0, G4double sx) const
0212 {
0213   G4double S = 1.0/std::sqrt(s0);
0214   G4double Sx = 1.0/std::sqrt(sx);
0215   
0216   G4double p1 = S*S*S*( 1.0 + S*S*( 1.5 + 3.75*S*S) );
0217   G4double p2 = Sx*Sx*Sx*( 1.0 + Sx*Sx*( 1.5 + 3.75*Sx*Sx) )*G4Exp(sx-s0);
0218   
0219   return p1-p2;
0220 }
0221 
0222 
0223 #endif