- Timestamp:
- Nov 5, 2010, 3:45:55 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/util/include/G4Fragment.hh
r1337 r1340 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4Fragment.hh,v 1.1 1 2010/05/19 10:23:00 vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 4-beta-01$26 // $Id: G4Fragment.hh,v 1.16 2010/09/28 16:09:00 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-03-ref-09 $ 28 28 // 29 29 //--------------------------------------------------------------------- … … 41 41 // method which allowing to compute this value once and use 42 42 // many times 43 // 26.09.2010 V.Ivanchenko added number of protons, neutrons, proton holes 44 // and neutron holes as members of the class and Get/Set methods; 45 // removed not needed 'const'; removed old debug staff and unused 46 // private methods; add comments and reorder methods for 47 // better reading 43 48 44 49 #ifndef G4Fragment_h 45 50 #define G4Fragment_h 1 46 51 47 #include "G4ios.hh"48 #include <iomanip>49 52 #include <vector> 50 53 51 54 #include "globals.hh" 52 55 #include "G4LorentzVector.hh" 53 //#include "G4ParticleMomentum.hh"54 56 #include "G4ThreeVector.hh" 55 57 #include "G4NucleiProperties.hh" 56 #include "G4ParticleTable.hh"57 #include "G4IonTable.hh"58 //#include "G4ParticleTable.hh" 59 //#include "G4IonTable.hh" 58 60 #include "Randomize.hh" 59 61 #include "G4Proton.hh" 60 62 #include "G4Neutron.hh" 61 #include "G4HadronicException.hh"62 63 #include "G4HadTmpUtil.hh" 63 64 64 65 65 class G4ParticleDefinition; 66 66 67 class G4Fragment; // Forward deckaration67 class G4Fragment; 68 68 typedef std::vector<G4Fragment*> G4FragmentVector; 69 69 … … 84 84 85 85 // A,Z and 4-momentum - main constructor for fragment 86 G4Fragment(const G4int A, const G4int Z, const G4LorentzVector& aMomentum); 87 88 // 4-momentum and pointer to G4particleDefinition (for gammas) 89 G4Fragment(const G4LorentzVector& aMomentum, G4ParticleDefinition * aParticleDefinition); 86 G4Fragment(G4int A, G4int Z, const G4LorentzVector& aMomentum); 87 88 // 4-momentum and pointer to G4particleDefinition (for gammas, e-) 89 G4Fragment(const G4LorentzVector& aMomentum, 90 G4ParticleDefinition* aParticleDefinition); 90 91 91 92 // ============= OPERATORS ================== … … 98 99 friend std::ostream& operator<<(std::ostream&, const G4Fragment&); 99 100 100 // ============= METHODS ================== 101 102 inline G4double GetA() const; 103 inline void SetA(const G4double value); 104 105 inline G4double GetZ() const; 106 inline void SetZ(const G4double value); 101 // ============= GENERAL METHODS ================== 107 102 108 103 inline G4int GetZ_asInt() const; … … 111 106 112 107 inline G4double GetExcitationEnergy() const; 113 void SetExcitationEnergy(const G4double value);114 115 inline const G4LorentzVector& GetMomentum() const;116 inline void SetMomentum(const G4LorentzVector& value);117 118 inline const G4ThreeVector& GetAngularMomentum() const;119 inline void SetAngularMomentum(const G4ThreeVector& value);120 121 inline G4int GetNumberOfExcitons() const;122 123 inline G4int GetNumberOfHoles() const;124 inline void SetNumberOfHoles(const G4int value);125 126 inline G4int GetNumberOfCharged() const;127 void SetNumberOfCharged(const G4int value);128 129 inline G4int GetNumberOfParticles() const;130 inline void SetNumberOfParticles(const G4int value);131 132 inline G4ParticleDefinition * GetParticleDefinition() const;133 inline void SetParticleDefinition(G4ParticleDefinition * aParticleDefinition);134 135 inline G4double GetCreationTime() const;136 inline void SetCreationTime(const G4double time);137 108 138 109 inline G4double GetGroundStateMass() const; 139 110 140 111 inline G4double GetBindingEnergy() const; 112 113 inline const G4LorentzVector& GetMomentum() const; 114 inline void SetMomentum(const G4LorentzVector& value); 115 116 inline const G4ThreeVector& GetAngularMomentum() const; 117 inline void SetAngularMomentum(const G4ThreeVector& value); 141 118 142 119 // computation of mass for any Z and A 143 inline G4double ComputeGroundStateMass(const G4int Z, const G4int A) const; 144 145 #ifdef PRECOMPOUND_TEST 146 G4String GetCreatorModel() const; 147 void SetCreatorModel(const G4String & aModel); 148 #endif 120 inline G4double ComputeGroundStateMass(G4int Z, G4int A) const; 121 122 // obsolete methods 123 inline G4double GetZ() const; 124 inline G4double GetA() const; 125 inline void SetZ(G4double value); 126 inline void SetA(G4double value); 127 128 // ============= METHODS FOR PRE-COMPOUND MODEL =============== 129 130 inline G4int GetNumberOfExcitons() const; 131 132 inline G4int GetNumberOfParticles() const; 133 inline G4int GetNumberOfCharged() const; 134 inline void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP); 135 136 inline G4int GetNumberOfHoles() const; 137 inline G4int GetNumberOfChargedHoles() const; 138 inline void SetNumberOfHoles(G4int valueTot, G4int valueP=0); 139 140 // these methods will be removed in future 141 inline void SetNumberOfParticles(G4int value); 142 inline void SetNumberOfCharged(G4int value); 143 144 // ============= METHODS FOR PHOTON EVAPORATION =============== 145 146 inline G4int GetNumberOfElectrons() const; 147 inline void SetNumberOfElectrons(G4int value); 148 149 inline G4ParticleDefinition * GetParticleDefinition() const; 150 inline void SetParticleDefinition(G4ParticleDefinition * p); 151 152 inline G4double GetCreationTime() const; 153 inline void SetCreationTime(G4double time); 154 155 // ============= PRIVATE METHODS ============================== 149 156 150 157 private: 151 158 152 void ExcitationEnegryWarning(); 159 void ExcitationEnergyWarning(); 160 161 void NumberOfExitationWarning(const G4String&); 162 163 inline void CalculateExcitationEnergy(); 153 164 154 165 inline void CalculateGroundStateMass(); 155 166 156 inline void CalculateExcitationEnergy();157 158 G4ThreeVector IsotropicRandom3Vector(const G4double Magnitude = 1.0) const;159 160 167 // ============= DATA MEMBERS ================== 161 168 … … 173 180 174 181 G4ThreeVector theAngularMomentum; 182 183 // Exciton model data members 175 184 176 185 G4int numberOfParticles; 177 186 187 G4int numberOfCharged; 188 178 189 G4int numberOfHoles; 179 190 180 G4int numberOfCharged; 181 182 // Gamma evaporation requeriments 191 G4int numberOfChargedHoles; 192 193 // Gamma evaporation data members 194 195 G4int numberOfShellElectrons; 183 196 184 197 G4ParticleDefinition * theParticleDefinition; … … 186 199 G4double theCreationTime; 187 200 188 #ifdef PRECOMPOUND_TEST189 G4String theCreatorModel;190 #endif191 201 }; 192 202 193 // Class G4Fragment 203 // ============= INLINE METHOD IMPLEMENTATIONS =================== 204 205 inline void G4Fragment::CalculateExcitationEnergy() 206 { 207 theExcitationEnergy = theMomentum.mag() - theGroundStateMass; 208 if(theExcitationEnergy < 0.0) { ExcitationEnergyWarning(); } 209 } 210 194 211 inline void G4Fragment::CalculateGroundStateMass() 195 212 { 196 213 theGroundStateMass = G4NucleiProperties::GetNuclearMass(theA, theZ); 197 }198 199 inline G4double G4Fragment::GetA() const200 {201 return G4double(theA);202 }203 204 inline void G4Fragment::SetA(const G4double value)205 {206 theA = G4lrint(value);207 CalculateGroundStateMass();208 }209 210 inline G4double G4Fragment::GetZ() const211 {212 return G4double(theZ);213 }214 215 inline void G4Fragment::SetZ(const G4double value)216 {217 theZ = G4lrint(value);218 CalculateGroundStateMass();219 214 } 220 215 … … 238 233 inline G4double G4Fragment::GetExcitationEnergy() const 239 234 { 240 // temporary fix for what seems to be241 // a problem with rounding errors for on-shell lorentz-vectors in CLHEP.242 // HPW Apr 1999 @@@@@@@243 244 //VI if(std::abs(theExcitationEnergy)<10*eV) return 0;245 235 return theExcitationEnergy; 246 236 } 247 237 248 inline const G4LorentzVector& G4Fragment::GetMomentum() const249 {250 return theMomentum;251 }252 253 inline const G4ThreeVector& G4Fragment::GetAngularMomentum() const254 {255 return theAngularMomentum;256 }257 258 inline void G4Fragment::SetAngularMomentum(const G4ThreeVector& value)259 {260 theAngularMomentum = value;261 }262 263 inline G4int G4Fragment::GetNumberOfExcitons() const264 {265 return numberOfParticles + numberOfHoles;266 }267 268 inline void G4Fragment::SetNumberOfParticles(const G4int value)269 {270 numberOfParticles = value;271 }272 273 inline G4int G4Fragment::GetNumberOfHoles() const274 {275 return numberOfHoles;276 }277 278 inline void G4Fragment::SetNumberOfHoles(const G4int value)279 {280 numberOfHoles = value;281 }282 283 inline G4int G4Fragment::GetNumberOfCharged() const284 {285 return numberOfCharged;286 }287 288 inline void G4Fragment::SetNumberOfCharged(const G4int value)289 {290 if (value <= numberOfParticles) { numberOfCharged = value; }291 else292 {293 G4String text = "G4Fragment::SetNumberOfCharged: Number of charged particles can't be greater than number of particles";294 throw G4HadronicException(__FILE__, __LINE__, text);295 }296 }297 298 inline G4int G4Fragment::GetNumberOfParticles() const299 {300 return numberOfParticles;301 }302 303 inline G4ParticleDefinition * G4Fragment::GetParticleDefinition(void) const304 {305 return theParticleDefinition;306 }307 308 inline void G4Fragment::SetParticleDefinition(G4ParticleDefinition * aParticleDefinition)309 {310 theParticleDefinition = aParticleDefinition;311 }312 313 inline G4double G4Fragment::GetCreationTime() const314 {315 return theCreationTime;316 }317 318 inline void G4Fragment::SetCreationTime(const G4double time)319 {320 theCreationTime = time;321 }322 323 238 inline G4double G4Fragment::GetGroundStateMass() const 324 239 { … … 326 241 } 327 242 328 inline G4double329 G4Fragment::ComputeGroundStateMass(const G4int Z, const G4int A) const330 {331 return G4NucleiProperties::GetNuclearMass(A, Z);332 }333 334 inline void G4Fragment::CalculateExcitationEnergy()335 {336 theExcitationEnergy = theMomentum.mag() - theGroundStateMass;337 if(theExcitationEnergy < 0.0) { ExcitationEnegryWarning(); }338 }339 340 243 inline G4double G4Fragment::GetBindingEnergy() const 341 244 { … … 344 247 } 345 248 249 inline const G4LorentzVector& G4Fragment::GetMomentum() const 250 { 251 return theMomentum; 252 } 253 346 254 inline void G4Fragment::SetMomentum(const G4LorentzVector& value) 347 255 { … … 350 258 } 351 259 260 inline const G4ThreeVector& G4Fragment::GetAngularMomentum() const 261 { 262 return theAngularMomentum; 263 } 264 265 inline void G4Fragment::SetAngularMomentum(const G4ThreeVector& value) 266 { 267 theAngularMomentum = value; 268 } 269 270 inline G4double 271 G4Fragment::ComputeGroundStateMass(G4int Z, G4int A) const 272 { 273 return G4NucleiProperties::GetNuclearMass(A, Z); 274 } 275 276 inline G4double G4Fragment::GetZ() const 277 { 278 return G4double(theZ); 279 } 280 281 inline G4double G4Fragment::GetA() const 282 { 283 return G4double(theA); 284 } 285 286 inline void G4Fragment::SetZ(const G4double value) 287 { 288 theZ = G4lrint(value); 289 CalculateGroundStateMass(); 290 } 291 292 inline void G4Fragment::SetA(const G4double value) 293 { 294 theA = G4lrint(value); 295 CalculateGroundStateMass(); 296 } 297 298 inline G4int G4Fragment::GetNumberOfExcitons() const 299 { 300 return numberOfParticles + numberOfHoles; 301 } 302 303 inline G4int G4Fragment::GetNumberOfParticles() const 304 { 305 return numberOfParticles; 306 } 307 308 inline G4int G4Fragment::GetNumberOfCharged() const 309 { 310 return numberOfCharged; 311 } 312 313 inline 314 void G4Fragment::SetNumberOfExcitedParticle(G4int valueTot, G4int valueP) 315 { 316 numberOfParticles = valueTot; 317 numberOfCharged = valueP; 318 if(valueTot < valueP) { 319 NumberOfExitationWarning("SetNumberOfExcitedParticle"); 320 } 321 } 322 323 inline G4int G4Fragment::GetNumberOfHoles() const 324 { 325 return numberOfHoles; 326 } 327 328 inline G4int G4Fragment::GetNumberOfChargedHoles() const 329 { 330 return numberOfChargedHoles; 331 } 332 333 inline void G4Fragment::SetNumberOfHoles(G4int valueTot, G4int valueP) 334 { 335 numberOfHoles = valueTot; 336 numberOfChargedHoles = valueP; 337 if(valueTot < valueP) { 338 NumberOfExitationWarning("SetNumberOfHoles"); 339 } 340 } 341 342 inline void G4Fragment::SetNumberOfParticles(G4int value) 343 { 344 numberOfParticles = value; 345 } 346 347 inline void G4Fragment::SetNumberOfCharged(G4int value) 348 { 349 numberOfCharged = value; 350 if(value > numberOfParticles) { 351 NumberOfExitationWarning("SetNumberOfCharged"); 352 } 353 } 354 355 inline G4int G4Fragment::GetNumberOfElectrons() const 356 { 357 return numberOfShellElectrons; 358 } 359 360 inline void G4Fragment::SetNumberOfElectrons(G4int value) 361 { 362 numberOfShellElectrons = value; 363 } 364 365 inline 366 G4ParticleDefinition * G4Fragment::GetParticleDefinition(void) const 367 { 368 return theParticleDefinition; 369 } 370 371 inline void G4Fragment::SetParticleDefinition(G4ParticleDefinition * p) 372 { 373 theParticleDefinition = p; 374 } 375 376 inline G4double G4Fragment::GetCreationTime() const 377 { 378 return theCreationTime; 379 } 380 381 inline void G4Fragment::SetCreationTime(G4double time) 382 { 383 theCreationTime = time; 384 } 385 352 386 #endif 353 387
Note: See TracChangeset
for help on using the changeset viewer.