G4Nucleus.hh

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 // original by H.P. Wellisch
00027 // modified by J.L. Chuma, TRIUMF, 19-Nov-1996
00028 // last modified: 27-Mar-1997
00029 // Chr. Volcker, 10-Nov-1997: new methods and class variables.
00030 // M.G. Pia, 2 Oct 1998: modified GetFermiMomentum (original design was
00031 //                       the source of memory leaks)
00032 // G.Folger, spring 2010:  add integer A/Z interface
00033  
00034 #ifndef G4Nucleus_h
00035 #define G4Nucleus_h 1
00036 // Class Description
00037 // This class knows how to describe a nucleus; 
00038 // to be used in your physics implementation (not physics list) in case you need this physics.
00039 // Class Description - End
00040 
00041  
00042 #include "globals.hh"
00043 #include "G4ThreeVector.hh"
00044 #include "G4ParticleTypes.hh"
00045 #include "G4ReactionProduct.hh"
00046 #include "G4DynamicParticle.hh"
00047 #include "G4ReactionProductVector.hh"
00048 #include "Randomize.hh"
00049  
00050 class G4Nucleus 
00051 {
00052   public:
00053     
00054     G4Nucleus();
00055     G4Nucleus(const G4double A, const G4double Z);
00056     G4Nucleus(const G4int A, const G4int Z);
00057     G4Nucleus(const G4Material* aMaterial);
00058     
00059     ~G4Nucleus();
00060     
00061     inline G4Nucleus( const G4Nucleus &right )
00062     { *this = right; }
00063     
00064     inline G4Nucleus& operator = (const G4Nucleus& right)
00065     {
00066       if (this != &right) {
00067         theA=right.theA;
00068         theZ=right.theZ;
00069         aEff=right.aEff;
00070         zEff=right.zEff;
00071         fIsotope = right.fIsotope;
00072         pnBlackTrackEnergy=right.pnBlackTrackEnergy; 
00073         dtaBlackTrackEnergy=right.dtaBlackTrackEnergy;
00074         pnBlackTrackEnergyfromAnnihilation =
00075                      right.pnBlackTrackEnergyfromAnnihilation; 
00076         dtaBlackTrackEnergyfromAnnihilation =
00077                      right.dtaBlackTrackEnergyfromAnnihilation; 
00078         theTemp = right.theTemp;
00079         excitationEnergy = right.excitationEnergy;
00080         momentum = right.momentum;
00081         fermiMomentum = right.fermiMomentum;
00082       }
00083       return *this;
00084     }
00085    
00086     inline G4bool operator==( const G4Nucleus &right ) const
00087     { return ( this == (G4Nucleus *) &right ); }
00088     
00089     inline G4bool operator!=( const G4Nucleus &right ) const
00090     { return ( this != (G4Nucleus *) &right ); }
00091     
00092     void ChooseParameters( const G4Material *aMaterial );
00093 
00094     void SetParameters( const G4double A, const G4double Z );
00095     void SetParameters( const G4int A, const G4int Z );
00096    
00097 /* 
00098 #ifndef G4Hadr_Nucleus_IntegerAZ 
00099 //deprecated Jan 2010, GF
00100     inline G4double GetN() const
00101     { return aEff; }
00102     
00103     inline G4double GetZ() const
00104     { return zEff; }
00105 #endif
00106 //to be replaced by new 
00107 */
00108 
00109     inline G4int GetA_asInt() const
00110     { return theA; }   
00111     
00112     inline G4int GetN_asInt() const
00113     { return theA-theZ; }   
00114     
00115     inline G4int GetZ_asInt() const
00116     { return theZ; }   
00117 //... \GF
00118 
00119     inline const G4Isotope* GetIsotope()
00120     { return fIsotope; }
00121 
00122     inline void SetIsotope(const G4Isotope* iso)
00123     { 
00124       fIsotope = iso;
00125       if(iso) { 
00126         theZ = iso->GetZ();
00127         theA = iso->GetN();
00128         aEff = theA;
00129         zEff = theZ;
00130       }
00131     }
00132 
00133     G4DynamicParticle *ReturnTargetParticle() const;
00134     
00135     G4double AtomicMass( const G4double A, const G4double Z ) const;
00136     G4double AtomicMass( const G4int A, const G4int Z ) const;
00137     
00138     G4double GetThermalPz( const G4double mass, const G4double temp ) const;
00139     
00140     G4ReactionProduct GetThermalNucleus(G4double aMass, G4double temp=-1) const;
00141     
00142     G4ReactionProduct GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4double temp=-1) const;
00143 
00144     G4double Cinema( G4double kineticEnergy );
00145     
00146     G4double EvaporationEffects( G4double kineticEnergy );
00147 
00148     G4double AnnihilationEvaporationEffects(G4double kineticEnergy, G4double ekOrg);
00149     
00150     inline G4double GetPNBlackTrackEnergy() const
00151     { return pnBlackTrackEnergy; }
00152     
00153     inline G4double GetDTABlackTrackEnergy() const
00154     { return dtaBlackTrackEnergy; }
00155     
00156     inline G4double GetAnnihilationPNBlackTrackEnergy() const
00157     { return pnBlackTrackEnergyfromAnnihilation; }
00158     
00159     inline G4double GetAnnihilationDTABlackTrackEnergy() const
00160     { return dtaBlackTrackEnergyfromAnnihilation; }
00161     
00162 // ******************  methods introduced by ChV ***********************    
00163    // return fermi momentum
00164      G4ThreeVector GetFermiMomentum();
00165 
00166 /*
00167   // return particle to be absorbed. 
00168      G4DynamicParticle* ReturnAbsorbingParticle(G4double weight);
00169 */
00170 
00171   //  final nucleus fragmentation. Return List of particles
00172   // which should be used for further tracking.
00173      G4ReactionProductVector* Fragmentate();
00174      
00175 
00176   // excitation Energy...
00177      void AddExcitationEnergy(G4double anEnergy);
00178   
00179   
00180   // momentum of absorbed Particles ..
00181      void AddMomentum(const G4ThreeVector aMomentum);
00182      
00183   // return excitation Energy
00184      G4double GetEnergyDeposit() {return excitationEnergy; }
00185      
00186 
00187 
00188 // ****************************** end ChV ******************************
00189 
00190 
00191  private:
00192     
00193     G4int    theA;
00194     G4int    theZ;
00195     G4double aEff;  // effective atomic weight
00196     G4double zEff;  // effective atomic number
00197 
00198     const G4Isotope* fIsotope;
00199     
00200     G4double pnBlackTrackEnergy;  // the kinetic energy available for
00201                                   // proton/neutron black track particles
00202     G4double dtaBlackTrackEnergy; // the kinetic energy available for
00203                                   // deuteron/triton/alpha particles
00204     G4double pnBlackTrackEnergyfromAnnihilation;
00205                      // kinetic energy available for proton/neutron black 
00206                      // track particles based on baryon annihilation 
00207     G4double dtaBlackTrackEnergyfromAnnihilation;
00208                      // kinetic energy available for deuteron/triton/alpha 
00209                      // black track particles based on baryon annihilation 
00210 
00211 
00212 // ************************** member variables by ChV *******************
00213   // Excitation Energy leading to evaporation or deexcitation.
00214      G4double  excitationEnergy;
00215      
00216   // Momentum, accumulated by absorbing Particles
00217      G4ThreeVector momentum;
00218      
00219   // Fermi Gas model: at present, we assume constant nucleon density for all 
00220   // nuclei. The radius of a nucleon is taken to be 1 fm.
00221   // see for example S.Fl"ugge, Encyclopedia of Physics, Vol XXXIX, 
00222   // Structure of Atomic Nuclei (Berlin-Gottingen-Heidelberg, 1957) page 426.
00223 
00224   // maximum momentum possible from fermi gas model:
00225      G4double fermiMomentum; 
00226      G4double theTemp; // temperature
00227 // ****************************** end ChV ******************************
00228 
00229  };
00230  
00231 #endif
00232  

Generated on Mon May 27 17:49:07 2013 for Geant4 by  doxygen 1.4.7