Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4ParticleDefinition 27 // 28 // Class description: 29 // 30 // This class contains all the static data of 31 // It uses the process manager in order to col 32 // this kind of particle can undertake. 33 34 // Authors: G.Cosmo, 2 December 1995 - Design, 35 // M.Asai, 29 January 1996 - First im 36 // History: 37 // - 1996-2003, H.Kurashige - Revisions 38 // - 11.03.2003, H.Kurashige - Restructuring f 39 // - 25.01.2013, G.Cosmo, A.Dotti - Introduced 40 // - 15.06.2017, K.L.Genser - Added support fo 41 // ------------------------------------------- 42 #ifndef G4ParticleDefinition_hh 43 #define G4ParticleDefinition_hh 1 44 45 #include "G4PDefManager.hh" 46 #include "G4ios.hh" 47 #include "globals.hh" 48 49 #include <CLHEP/Units/PhysicalConstants.h> 50 51 #include <vector> 52 53 class G4ProcessManager; 54 class G4DecayTable; 55 class G4ParticleTable; 56 class G4ParticlePropertyTable; 57 class G4VTrackingManager; 58 59 using G4ParticleDefinitionSubInstanceManager = 60 61 class G4ParticleDefinition 62 { 63 friend class G4ParticlePropertyTable; 64 65 public: 66 // Only one type of constructor can be use 67 // If you want to create new particle, you 68 // at construction. Most of members seen a 69 // (except last 3 arguments concerning wit 70 // and can not be changed later. (No "SET" 71 // Each type of particle must be construct 72 // of special class derived from G4Particl 73 // See G4ParticleTypes for detail 74 // clang-format off 75 G4ParticleDefinition(const G4String& aName 76 G4int iSpin, G4int iP 77 G4int iIsospinZ, G4in 78 G4int baryon, G4int e 79 G4DecayTable* decayta 80 const G4String& subTy 81 G4double magneticMome 82 // clang-format on 83 84 virtual ~G4ParticleDefinition(); 85 86 // Can not use "copy constructor", equalit 87 G4ParticleDefinition(const G4ParticleDefin 88 G4ParticleDefinition& operator=(const G4Pa 89 90 G4bool operator==(const G4ParticleDefiniti 91 G4bool operator!=(const G4ParticleDefiniti 92 93 // With the following Getxxxx methods, one 94 // for members which can not be changed 95 96 const G4String& GetParticleName() const { 97 98 G4double GetPDGMass() const { return thePD 99 G4double GetPDGWidth() const { return theP 100 G4double GetPDGCharge() const { return the 101 102 G4double GetPDGSpin() const { return thePD 103 G4int GetPDGiSpin() const { return thePDGi 104 G4int GetPDGiParity() const { return thePD 105 G4int GetPDGiConjugation() const { return 106 G4double GetPDGIsospin() const { return th 107 G4double GetPDGIsospin3() const { return t 108 G4int GetPDGiIsospin() const { return theP 109 G4int GetPDGiIsospin3() const { return the 110 G4int GetPDGiGParity() const { return theP 111 112 G4double GetPDGMagneticMoment() const { re 113 inline void SetPDGMagneticMoment(G4double 114 115 // Gives the anomaly of magnetic moment fo 116 G4double CalculateAnomaly() const; 117 118 const G4String& GetParticleType() const { 119 const G4String& GetParticleSubType() const 120 G4int GetLeptonNumber() const { return the 121 G4int GetBaryonNumber() const { return the 122 123 G4int GetPDGEncoding() const { return theP 124 G4int GetAntiPDGEncoding() const { return 125 inline void SetAntiPDGEncoding(G4int aEnco 126 127 // Returns the number of quark with flavor 128 // The value of flavor is assigned as foll 129 // 1:d, 2:u, 3:s, 4:c, 5:b, 6:t 130 inline G4int GetQuarkContent(G4int flavor) 131 inline G4int GetAntiQuarkContent(G4int fla 132 133 G4bool IsShortLived() const { return fShor 134 135 inline G4bool GetPDGStable() const; 136 void SetPDGStable(const G4bool aFlag) { th 137 138 inline G4double GetPDGLifeTime() const; 139 void SetPDGLifeTime(G4double aLifeTime) { 140 141 // Get life time of a generic ion through 142 inline G4double GetIonLifeTime() const; 143 144 // Set/Get Decay Table 145 // !! Decay Table can be modified !! 146 inline G4DecayTable* GetDecayTable() const 147 inline void SetDecayTable(G4DecayTable* aD 148 149 // Set/Get Process Manager 150 // !! Process Manager can be modified !! 151 G4ProcessManager* GetProcessManager() cons 152 void SetProcessManager(G4ProcessManager* a 153 154 // Set/Get Tracking Manager; nullptr means 155 // !! Tracking Manager can be modified ! 156 G4VTrackingManager* GetTrackingManager() c 157 void SetTrackingManager(G4VTrackingManager 158 159 // Get pointer to the particle table 160 inline G4ParticleTable* GetParticleTable() 161 162 // Get AtomicNumber and AtomicMass 163 // These properties are defined for nucleu 164 inline G4int GetAtomicNumber() const; 165 inline G4int GetAtomicMass() const; 166 167 // Prints information of data members. 168 void DumpTable() const; 169 170 // Control flag for output message 171 // 0: Silent 172 // 1: Warning message 173 // 2: More 174 inline void SetVerboseLevel(G4int value); 175 inline G4int GetVerboseLevel() const; 176 177 void SetApplyCutsFlag(G4bool); 178 inline G4bool GetApplyCutsFlag() const; 179 180 // True only if the particle is G4Ions 181 // (it means that theProcessManager is sam 182 inline G4bool IsGeneralIon() const; 183 184 // True only if the particle is a G4Muonic 185 // (it means that theProcessManager is sam 186 inline G4bool IsMuonicAtom() const; 187 188 // Returns the process manager master poin 189 inline G4ProcessManager* GetMasterProcessM 190 191 // Sets the shadow master pointer (not to 192 inline void SetMasterProcessManager(G4Proc 193 194 // Returns the instance ID 195 inline G4int GetInstanceID() const; 196 197 // Returns the private data instance manag 198 static const G4PDefManager& GetSubInstance 199 200 // Clear memory allocated by sub-instance 201 static void Clean(); 202 203 void SetParticleDefinitionID(G4int id = -1 204 inline G4int GetParticleDefinitionID() con 205 206 // The first two methods return "false" an 207 // if the particle is not an hypernucleus; 208 // "true" and the number of Lambdas bound 209 // Similarly, the last two methods return 210 // respectively, if the particle is not an 211 // else, they return "true" and the number 212 // bound in the anti-nucleus. 213 // Notice that, for the time being, we are 214 // (anti-)Lambda is the only type of (anti 215 // in all (anti-)hypernuclei. 216 inline G4bool IsHypernucleus() const; 217 inline G4int GetNumberOfLambdasInHypernucl 218 inline G4bool IsAntiHypernucleus() const; 219 inline G4int GetNumberOfAntiLambdasInAntiH 220 221 protected: 222 // Cannot be used 223 G4ParticleDefinition(); 224 225 // Calculates quark and anti-quark content 226 // return value is the PDG encoding for th 227 // It means error if the return value is d 228 // this->thePDGEncoding. 229 G4int FillQuarkContents(); 230 231 inline void SetParticleSubType(const G4Str 232 233 inline void SetAtomicNumber(G4int); 234 inline void SetAtomicMass(G4int); 235 236 enum 237 { 238 NumberOfQuarkFlavor = 6 239 }; 240 241 // the number of quark (minus Sign means 242 // The value of flavor is assigned as fol 243 // 0:d, 1:u, 2:s, 3:c, 4:b, 5:t 244 G4int theQuarkContent[NumberOfQuarkFlavor] 245 G4int theAntiQuarkContent[NumberOfQuarkFla 246 247 G4bool isGeneralIon = false; 248 G4bool isMuonicAtom = false; 249 250 private: 251 // --- Shadow of master pointers 252 253 // Each worker thread can access this fiel 254 // through this pointer. 255 G4ProcessManager* theProcessManagerShadow 256 257 // This field is used as instance ID. 258 G4int g4particleDefinitionInstanceID = 0; 259 260 // This field helps to use the class G4PDe 261 G4PART_DLL static G4PDefManager subInstanc 262 263 // --- Following values can not be change 264 // --- i.e. No Setxxxx Methods for them 265 266 // The name of the particle. 267 // Each object must have its specific name 268 G4String theParticleName = ""; 269 270 // --- Following member values must be de 271 272 // The mass of the particle, in units of e 273 G4double thePDGMass = 0.0; 274 275 // The decay width of the particle, usuall 276 // Breit-Wigner function, assuming that yo 277 // mass center anyway. (in units of equiva 278 G4double thePDGWidth = 0.0; 279 280 // The charge of the particle.(in units of 281 G4double thePDGCharge = 0.0; 282 283 // --- Following members are quantum num 284 // i.e. discrete numbers can be allo 285 // So, you can define them only by u 286 287 // The total spin of the particle, also of 288 // capital J, in units of 1/2. 289 G4int thePDGiSpin = 0; 290 291 // The total spin of the particle, in unit 292 G4double thePDGSpin = 0.0; 293 294 // The parity quantum number, in units of 295 // is not defined for this particle, we wi 296 G4int thePDGiParity = 0; 297 298 // This charge conjugation quantum number 299 G4int thePDGiConjugation = 0; 300 301 // The value of the G-parity quantum numbe 302 G4int thePDGiGParity = 0; 303 304 // The isospin and its 3rd-component in un 305 G4int thePDGiIsospin = 0; 306 G4int thePDGiIsospin3 = 0; 307 308 // The isospin quantum number in units of 309 G4double thePDGIsospin = 0.0; 310 G4double thePDGIsospin3 = 0.0; 311 312 // The magnetic moment. 313 G4double thePDGMagneticMoment = 0.0; 314 315 // The lepton quantum number. 316 G4int theLeptonNumber = 0; 317 318 // The baryon quantum number. 319 G4int theBaryonNumber = 0; 320 321 // More general textual type description o 322 G4String theParticleType = ""; 323 324 // Textual type description of the particl 325 // eg. pion, lamda etc. 326 G4String theParticleSubType = ""; 327 328 // The Particle Data Group integer identif 329 G4int thePDGEncoding = 0; 330 331 // The Particle Data Group integer identif 332 G4int theAntiPDGEncoding = 0; 333 334 // --- Following members can be changed af 335 336 // Particles which have true value of this 337 // will not be tracked by TrackingManager 338 G4bool fShortLivedFlag = false; 339 340 // Is an indicator that this particle is s 341 // not decay. If the user tries to assign 342 // object to it, it will refuse to take it 343 G4bool thePDGStable = false; 344 345 // Is related to the decay width of the pa 346 // life time is given in seconds. 347 G4double thePDGLifeTime = 0.0; 348 349 // Points DecayTable 350 G4DecayTable* theDecayTable = nullptr; 351 352 G4ParticleTable* theParticleTable = nullpt 353 354 G4int theAtomicNumber = 0; 355 G4int theAtomicMass = 0; 356 357 G4int verboseLevel = 1; 358 G4bool fApplyCutsFlag = false; 359 }; 360 361 #include "G4ParticleDefinition.icc" 362 363 #endif 364