File indexing completed on 2025-11-04 10:13:02
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 
0010 
0011 
0012 
0013 
0014 
0015 
0016 
0017 
0018 
0019 
0020 
0021 
0022 
0023 
0024 
0025 
0026 
0027 
0028 
0029 
0030 
0031 
0032 
0033 
0034 
0035 #ifndef G4Nucleus_h
0036 #define G4Nucleus_h 1
0037 
0038 
0039 
0040 
0041 
0042  
0043 #include "globals.hh"
0044 #include "G4ThreeVector.hh"
0045 #include "G4ParticleTypes.hh"
0046 #include "G4ReactionProduct.hh"
0047 #include "G4DynamicParticle.hh"
0048 #include "G4ReactionProductVector.hh"
0049 #include "Randomize.hh"
0050  
0051 class G4Nucleus 
0052 {
0053   public:
0054     
0055     G4Nucleus();
0056     G4Nucleus(const G4double A, const G4double Z, const G4int numberOfLambdas = 0);
0057     G4Nucleus(const G4int A, const G4int Z, const G4int numberOfLambdas = 0);
0058     G4Nucleus(const G4Material* aMaterial);
0059     
0060     ~G4Nucleus();
0061     
0062     inline G4Nucleus( const G4Nucleus &right )
0063     { *this = right; }
0064     
0065     inline G4Nucleus& operator = (const G4Nucleus& right)
0066     {
0067       if (this != &right) {
0068         theA=right.theA;
0069         theZ=right.theZ;
0070         theL=right.theL;
0071         aEff=right.aEff;
0072         zEff=right.zEff;
0073         fIsotope = right.fIsotope;
0074         pnBlackTrackEnergy=right.pnBlackTrackEnergy; 
0075         dtaBlackTrackEnergy=right.dtaBlackTrackEnergy;
0076         pnBlackTrackEnergyfromAnnihilation =
0077                      right.pnBlackTrackEnergyfromAnnihilation; 
0078         dtaBlackTrackEnergyfromAnnihilation =
0079                      right.dtaBlackTrackEnergyfromAnnihilation; 
0080         theTemp = right.theTemp;
0081         excitationEnergy = right.excitationEnergy;
0082         momentum = right.momentum;
0083         fermiMomentum = right.fermiMomentum;
0084       }
0085       return *this;
0086     }
0087    
0088     inline G4bool operator==( const G4Nucleus &right ) const
0089     { return ( this == (G4Nucleus *) &right ); }
0090     
0091     inline G4bool operator!=( const G4Nucleus &right ) const
0092     { return ( this != (G4Nucleus *) &right ); }
0093     
0094     void ChooseParameters( const G4Material *aMaterial );
0095 
0096     void SetParameters( const G4double A, const G4double Z, const G4int numberOfLambdas = 0 );
0097     void SetParameters( const G4int A, const G4int Z, const G4int numberOfLambdas = 0 );
0098    
0099     inline G4int GetA_asInt() const
0100     { return theA; }   
0101     
0102     inline G4int GetN_asInt() const
0103     { return theA-theZ-theL; }   
0104     
0105     inline G4int GetZ_asInt() const
0106     { return theZ; }   
0107 
0108     inline G4int GetL() const  
0109     { return theL; }
0110 
0111     inline const G4Isotope* GetIsotope()
0112     { return fIsotope; }
0113 
0114     inline void SetIsotope(const G4Isotope* iso)
0115     { 
0116       fIsotope = iso;
0117       if(iso) { 
0118     theZ = iso->GetZ();
0119         theA = iso->GetN();
0120     theL = 0;
0121         aEff = theA;
0122         zEff = theZ;
0123       }
0124     }
0125 
0126     G4DynamicParticle *ReturnTargetParticle() const;
0127     
0128     G4double AtomicMass( const G4double A, const G4double Z, const G4int numberOfLambdas = 0 ) const;
0129     G4double AtomicMass( const G4int A, const G4int Z, const G4int numberOfLambdas = 0 ) const;
0130 
0131     G4double GetThermalPz( const G4double mass, const G4double temp ) const;
0132     
0133     G4ReactionProduct GetThermalNucleus(G4double aMass, G4double temp=-1) const;
0134     
0135     G4ReactionProduct GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4double temp=-1) const;
0136 
0137     void DoKinematicsOfThermalNucleus(const G4double mu, const G4double vT_norm, const G4ThreeVector& aVelocity,
0138                                       G4ReactionProduct& result) const;
0139   
0140     G4double Cinema( G4double kineticEnergy );
0141     
0142     G4double EvaporationEffects( G4double kineticEnergy );
0143 
0144     G4double AnnihilationEvaporationEffects(G4double kineticEnergy, G4double ekOrg);
0145     
0146     inline G4double GetPNBlackTrackEnergy() const
0147     { return pnBlackTrackEnergy; }
0148     
0149     inline G4double GetDTABlackTrackEnergy() const
0150     { return dtaBlackTrackEnergy; }
0151     
0152     inline G4double GetAnnihilationPNBlackTrackEnergy() const
0153     { return pnBlackTrackEnergyfromAnnihilation; }
0154     
0155     inline G4double GetAnnihilationDTABlackTrackEnergy() const
0156     { return dtaBlackTrackEnergyfromAnnihilation; }
0157     
0158 
0159    
0160      G4ThreeVector GetFermiMomentum();
0161 
0162 
0163 
0164 
0165 
0166 
0167   
0168   
0169      G4ReactionProductVector* Fragmentate();
0170      
0171 
0172   
0173      void AddExcitationEnergy(G4double anEnergy);
0174   
0175   
0176   
0177      void AddMomentum(const G4ThreeVector aMomentum);
0178      
0179   
0180      G4double GetEnergyDeposit() {return excitationEnergy; }
0181      
0182 
0183 
0184 
0185 
0186 
0187  private:
0188     
0189     G4int    theA;
0190     G4int    theZ;
0191     G4int    theL;  
0192     G4double aEff;  
0193     G4double zEff;  
0194 
0195     const G4Isotope* fIsotope;
0196     
0197     G4double pnBlackTrackEnergy;  
0198                                   
0199     G4double dtaBlackTrackEnergy; 
0200                                   
0201     G4double pnBlackTrackEnergyfromAnnihilation;
0202                      
0203                      
0204     G4double dtaBlackTrackEnergyfromAnnihilation;
0205                      
0206                      
0207 
0208 
0209 
0210   
0211      G4double  excitationEnergy;
0212      
0213   
0214      G4ThreeVector momentum;
0215      
0216   
0217   
0218   
0219   
0220 
0221   
0222      G4double fermiMomentum; 
0223      G4double theTemp; 
0224 
0225 
0226  };
0227  
0228 #endif
0229