00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #ifndef G4INUCL_NUCLEI_HH
00055 #define G4INUCL_NUCLEI_HH
00056
00057 #include <CLHEP/Units/SystemOfUnits.h>
00058
00059 #include "G4InuclParticle.hh"
00060 #include "G4LorentzVector.hh"
00061 #include "G4ExitonConfiguration.hh"
00062
00063 class G4Fragment;
00064 class G4ParticleDefinition;
00065 class G4V3DNucleus;
00066
00067
00068 class G4InuclNuclei : public G4InuclParticle {
00069 public:
00070 G4InuclNuclei() : G4InuclParticle() {}
00071
00072 G4InuclNuclei(const G4DynamicParticle& dynPart, Model model=DefaultModel)
00073 : G4InuclParticle(dynPart, model) {}
00074
00075 G4InuclNuclei(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
00076 : G4InuclParticle(makeDefinition(a,z), model) {
00077 setExitationEnergy(exc);
00078 }
00079
00080 G4InuclNuclei(const G4LorentzVector& mom, G4int a, G4int z,
00081 G4double exc=0., Model model=DefaultModel)
00082 : G4InuclParticle(makeDefinition(a,z), mom, model) {
00083 setExitationEnergy(exc);
00084 }
00085
00086 G4InuclNuclei(G4double ekin, G4int a, G4int z, G4double exc,
00087 Model model=DefaultModel)
00088 : G4InuclParticle(makeDefinition(a,z), ekin, model) {
00089 setExitationEnergy(exc);
00090 }
00091
00092 G4InuclNuclei(const G4Fragment& aFragment, Model model=DefaultModel);
00093
00094 G4InuclNuclei(G4V3DNucleus* a3DNucleus, Model model=DefaultModel);
00095
00096 virtual ~G4InuclNuclei() {}
00097
00098
00099 G4InuclNuclei(const G4InuclNuclei& right)
00100 : G4InuclParticle(right),
00101 theExitonConfiguration(right.theExitonConfiguration) {}
00102
00103 G4InuclNuclei& operator=(const G4InuclNuclei& right);
00104
00105
00106 bool operator==(const G4InuclNuclei& right) {
00107 return ( G4InuclParticle::operator==(right) &&
00108 theExitonConfiguration == right.theExitonConfiguration );
00109 }
00110
00111
00112 void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel) {
00113 fill(0., a, z, exc, model);
00114 }
00115
00116 void fill(const G4LorentzVector& mom, G4int a, G4int z,
00117 G4double exc=0., Model model=DefaultModel);
00118
00119 void fill(G4double ekin, G4int a, G4int z, G4double exc,
00120 Model model=DefaultModel);
00121
00122 void copy(const G4Fragment& aFragment, Model model=DefaultModel);
00123
00124 void copy(G4V3DNucleus* a3DNucleus, Model model=DefaultModel);
00125
00126 void clear();
00127
00128
00129 void setExitationEnergy(G4double e);
00130
00131 void setExitonConfiguration(const G4ExitonConfiguration& config) {
00132 theExitonConfiguration = config;
00133 }
00134
00135 void clearExitonConfiguration() { theExitonConfiguration.clear(); }
00136
00137 G4int getA() const { return getDefinition()->GetAtomicMass(); }
00138 G4int getZ() const { return getDefinition()->GetAtomicNumber(); }
00139
00140 G4double getNucleiMass() const {
00141 return getDefinition()->GetPDGMass()*CLHEP::MeV/CLHEP::GeV;
00142 }
00143
00144 G4double getExitationEnergy() const {
00145 return (getMass()-getNucleiMass())*CLHEP::GeV/CLHEP::MeV;
00146 }
00147
00148 G4double getExitationEnergyInGeV() const { return getExitationEnergy()/CLHEP::GeV; }
00149
00150 const G4ExitonConfiguration& getExitonConfiguration() const {
00151 return theExitonConfiguration;
00152 }
00153
00154 static G4double getNucleiMass(G4int a, G4int z, G4double exc=0.);
00155
00156 virtual void print(std::ostream& os) const;
00157
00158
00159 G4Fragment makeG4Fragment() const;
00160 operator G4Fragment() const;
00161
00162 protected:
00163
00164 static G4ParticleDefinition* makeDefinition(G4int a, G4int z);
00165 static G4ParticleDefinition* makeNuclearFragment(G4int a, G4int z);
00166
00167 private:
00168 G4ExitonConfiguration theExitonConfiguration;
00169 };
00170
00171 #endif // G4INUCL_NUCLEI_HH