Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ParticleDefinition.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4ParticleDefinition
27//
28// Class description:
29//
30// This class contains all the static data of a particle.
31// It uses the process manager in order to collect all the processes
32// this kind of particle can undertake.
33
34// Authors: G.Cosmo, 2 December 1995 - Design, based on object model
35// M.Asai, 29 January 1996 - First implementation
36// History:
37// - 1996-2003, H.Kurashige - Revisions
38// - 11.03.2003, H.Kurashige - Restructuring for Cuts per Region
39// - 25.01.2013, G.Cosmo, A.Dotti - Introduced thread-safety for MT
40// - 15.06.2017, K.L.Genser - Added support for MuonicAtom
41// --------------------------------------------------------------------
42#ifndef G4ParticleDefinition_hh
43#define G4ParticleDefinition_hh 1
44
45#include "G4PDefManager.hh"
46#include "G4ios.hh"
47#include "globals.hh"
48
50
51#include <vector>
52
54class G4DecayTable;
55class G4ParticleTable;
58
60
62{
64
65 public:
66 // Only one type of constructor can be used for G4ParticleDefinition.
67 // If you want to create new particle, you must set name of the particle
68 // at construction. Most of members seen as arguments of the constructor
69 // (except last 3 arguments concerning with decay ) are "constant"
70 // and can not be changed later. (No "SET" methods are available)
71 // Each type of particle must be constructed as a unique object
72 // of special class derived from G4ParticleDefinition.
73 // See G4ParticleTypes for detail
74 // clang-format off
75 G4ParticleDefinition(const G4String& aName, G4double mass, G4double width, G4double charge,
76 G4int iSpin, G4int iParity, G4int iConjugation, G4int iIsospin,
77 G4int iIsospinZ, G4int gParity, const G4String& pType, G4int lepton,
78 G4int baryon, G4int encoding, G4bool stable, G4double lifetime,
79 G4DecayTable* decaytable, G4bool shortlived = false,
80 const G4String& subType = "", G4int anti_encoding = 0,
81 G4double magneticMoment = 0.0);
82 // clang-format on
83
84 virtual ~G4ParticleDefinition();
85
86 // Can not use "copy constructor", equality nor "default constructor"!
89
90 G4bool operator==(const G4ParticleDefinition& right) const;
91 G4bool operator!=(const G4ParticleDefinition& right) const;
92
93 // With the following Getxxxx methods, one can get values
94 // for members which can not be changed
95
96 const G4String& GetParticleName() const { return theParticleName; }
97
98 G4double GetPDGMass() const { return thePDGMass; }
99 G4double GetPDGWidth() const { return thePDGWidth; }
100 G4double GetPDGCharge() const { return thePDGCharge; }
101
102 G4double GetPDGSpin() const { return thePDGSpin; }
103 G4int GetPDGiSpin() const { return thePDGiSpin; }
104 G4int GetPDGiParity() const { return thePDGiParity; }
105 G4int GetPDGiConjugation() const { return thePDGiConjugation; }
106 G4double GetPDGIsospin() const { return thePDGIsospin; }
107 G4double GetPDGIsospin3() const { return thePDGIsospin3; }
108 G4int GetPDGiIsospin() const { return thePDGiIsospin; }
109 G4int GetPDGiIsospin3() const { return thePDGiIsospin3; }
110 G4int GetPDGiGParity() const { return thePDGiGParity; }
111
112 G4double GetPDGMagneticMoment() const { return thePDGMagneticMoment; }
113 inline void SetPDGMagneticMoment(G4double mageticMoment);
114
115 // Gives the anomaly of magnetic moment for spin 1/2 particles
117
118 const G4String& GetParticleType() const { return theParticleType; }
119 const G4String& GetParticleSubType() const { return theParticleSubType; }
120 G4int GetLeptonNumber() const { return theLeptonNumber; }
121 G4int GetBaryonNumber() const { return theBaryonNumber; }
122
123 G4int GetPDGEncoding() const { return thePDGEncoding; }
124 G4int GetAntiPDGEncoding() const { return theAntiPDGEncoding; }
125 inline void SetAntiPDGEncoding(G4int aEncoding);
126
127 // Returns the number of quark with flavor contained in this particle.
128 // The value of flavor is assigned as follows
129 // 1:d, 2:u, 3:s, 4:c, 5:b, 6:t
130 inline G4int GetQuarkContent(G4int flavor) const;
131 inline G4int GetAntiQuarkContent(G4int flavor) const;
132
133 G4bool IsShortLived() const { return fShortLivedFlag; }
134
135 inline G4bool GetPDGStable() const;
136 void SetPDGStable(const G4bool aFlag) { thePDGStable = aFlag; }
137
138 inline G4double GetPDGLifeTime() const;
139 void SetPDGLifeTime(G4double aLifeTime) { thePDGLifeTime = aLifeTime; }
140
141 // Get life time of a generic ion through G4NuclideTable.
142 inline G4double GetIonLifeTime() const;
143
144 // Set/Get Decay Table
145 // !! Decay Table can be modified !!
147 inline void SetDecayTable(G4DecayTable* aDecayTable);
148
149 // Set/Get Process Manager
150 // !! Process Manager can be modified !!
152 void SetProcessManager(G4ProcessManager* aProcessManager);
153
154 // Set/Get Tracking Manager; nullptr means the default
155 // !! Tracking Manager can be modified !!
157 void SetTrackingManager(G4VTrackingManager* aTrackingManager);
158
159 // Get pointer to the particle table
161
162 // Get AtomicNumber and AtomicMass
163 // These properties are defined for nucleus
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
178 inline G4bool GetApplyCutsFlag() const;
179
180 // True only if the particle is G4Ions
181 // (it means that theProcessManager is same as one for G4GenricIon)
182 inline G4bool IsGeneralIon() const;
183
184 // True only if the particle is a G4MuonicAtom
185 // (it means that theProcessManager is same as the one for G4MuonicAtom)
186 inline G4bool IsMuonicAtom() const;
187
188 // Returns the process manager master pointer.
190
191 // Sets the shadow master pointer (not to be used by user)
193
194 // Returns the instance ID
195 inline G4int GetInstanceID() const;
196
197 // Returns the private data instance manager
198 static const G4PDefManager& GetSubInstanceManager();
199
200 // Clear memory allocated by sub-instance manager
201 static void Clean();
202
203 void SetParticleDefinitionID(G4int id = -1);
205
206 // The first two methods return "false" and 0, respectively,
207 // if the particle is not an hypernucleus; else, they return
208 // "true" and the number of Lambdas bound in the nucleus.
209 // Similarly, the last two methods return "false" and 0,
210 // respectively, if the particle is not an anti-hypernucleus;
211 // else, they return "true" and the number of anti-Lambdas
212 // bound in the anti-nucleus.
213 // Notice that, for the time being, we are assuming that
214 // (anti-)Lambda is the only type of (anti-)hyperon present
215 // in all (anti-)hypernuclei.
216 inline G4bool IsHypernucleus() const;
220
221 protected:
222 // Cannot be used
224
225 // Calculates quark and anti-quark contents
226 // return value is the PDG encoding for this particle.
227 // It means error if the return value is different from
228 // this->thePDGEncoding.
230
231 inline void SetParticleSubType(const G4String& subtype);
232
233 inline void SetAtomicNumber(G4int);
234 inline void SetAtomicMass(G4int);
235
236 enum
237 {
239 };
240
241 // the number of quark (minus Sign means anti-quark) contents
242 // The value of flavor is assigned as follows
243 // 0:d, 1:u, 2:s, 3:c, 4:b, 5:t
246
249
250 private:
251 // --- Shadow of master pointers
252
253 // Each worker thread can access this field from the master thread
254 // through this pointer.
255 G4ProcessManager* theProcessManagerShadow = nullptr;
256
257 // This field is used as instance ID.
258 G4int g4particleDefinitionInstanceID = 0;
259
260 // This field helps to use the class G4PDefManager introduced above.
261 G4PART_DLL static G4PDefManager subInstanceManager;
262
263 // --- Following values can not be changed
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 defined with Units
271
272 // The mass of the particle, in units of equivalent energy.
273 G4double thePDGMass = 0.0;
274
275 // The decay width of the particle, usually the width of a
276 // Breit-Wigner function, assuming that you are near the
277 // mass center anyway. (in units of equivalent energy)
278 G4double thePDGWidth = 0.0;
279
280 // The charge of the particle.(in units of Coulomb)
281 G4double thePDGCharge = 0.0;
282
283 // --- Following members are quantum number
284 // i.e. discrete numbers can be allowed
285 // So, you can define them only by using integer in constructor
286
287 // The total spin of the particle, also often denoted as
288 // capital J, in units of 1/2.
289 G4int thePDGiSpin = 0;
290
291 // The total spin of the particle, in units of 1.
292 G4double thePDGSpin = 0.0;
293
294 // The parity quantum number, in units of 1. If the parity
295 // is not defined for this particle, we will set this to 0.
296 G4int thePDGiParity = 0;
297
298 // This charge conjugation quantum number in units of 1.
299 G4int thePDGiConjugation = 0;
300
301 // The value of the G-parity quantum number.
302 G4int thePDGiGParity = 0;
303
304 // The isospin and its 3rd-component in units of 1/2.
305 G4int thePDGiIsospin = 0;
306 G4int thePDGiIsospin3 = 0;
307
308 // The isospin quantum number in units of 1.
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 of the particle.
322 G4String theParticleType = "";
323
324 // Textual type description of the particle
325 // eg. pion, lamda etc.
326 G4String theParticleSubType = "";
327
328 // The Particle Data Group integer identifier of this particle
329 G4int thePDGEncoding = 0;
330
331 // The Particle Data Group integer identifier of the anti-particle
332 G4int theAntiPDGEncoding = 0;
333
334 // --- Following members can be changed after construction
335
336 // Particles which have true value of this flag
337 // will not be tracked by TrackingManager
338 G4bool fShortLivedFlag = false;
339
340 // Is an indicator that this particle is stable. It must
341 // not decay. If the user tries to assign a kind of decay
342 // object to it, it will refuse to take it.
343 G4bool thePDGStable = false;
344
345 // Is related to the decay width of the particle. The mean
346 // life time is given in seconds.
347 G4double thePDGLifeTime = 0.0;
348
349 // Points DecayTable
350 G4DecayTable* theDecayTable = nullptr;
351
352 G4ParticleTable* theParticleTable = nullptr;
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
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
G4int GetInstanceID() const
G4double GetPDGMagneticMoment() const
G4ProcessManager * GetProcessManager() const
G4bool GetPDGStable() const
G4VTrackingManager * GetTrackingManager() const
void SetMasterProcessManager(G4ProcessManager *aNewPM)
G4int GetAtomicNumber() const
static const G4PDefManager & GetSubInstanceManager()
G4bool IsGeneralIon() const
G4ParticleDefinition(const G4ParticleDefinition &)=delete
const G4String & GetParticleType() const
G4int theAntiQuarkContent[NumberOfQuarkFlavor]
G4int GetVerboseLevel() const
void SetPDGMagneticMoment(G4double mageticMoment)
void SetParticleDefinitionID(G4int id=-1)
void SetTrackingManager(G4VTrackingManager *aTrackingManager)
G4ProcessManager * GetMasterProcessManager() const
G4int GetAtomicMass() const
G4bool IsMuonicAtom() const
void SetPDGStable(const G4bool aFlag)
G4int GetQuarkContent(G4int flavor) const
void SetVerboseLevel(G4int value)
void SetParticleSubType(const G4String &subtype)
void SetPDGLifeTime(G4double aLifeTime)
G4bool operator==(const G4ParticleDefinition &right) const
G4int GetNumberOfLambdasInHypernucleus() const
G4bool IsHypernucleus() const
G4DecayTable * GetDecayTable() const
G4bool IsAntiHypernucleus() const
G4int theQuarkContent[NumberOfQuarkFlavor]
void SetAtomicMass(G4int)
G4double GetIonLifeTime() const
G4bool operator!=(const G4ParticleDefinition &right) const
G4ParticleTable * GetParticleTable() const
void SetAntiPDGEncoding(G4int aEncoding)
void SetDecayTable(G4DecayTable *aDecayTable)
G4double CalculateAnomaly() const
G4double GetPDGLifeTime() const
G4int GetNumberOfAntiLambdasInAntiHypernucleus() const
G4bool GetApplyCutsFlag() const
G4int GetParticleDefinitionID() const
G4ParticleDefinition & operator=(const G4ParticleDefinition &)=delete
const G4String & GetParticleName() const
G4double GetPDGIsospin3() const
void SetProcessManager(G4ProcessManager *aProcessManager)
void SetAtomicNumber(G4int)
const G4String & GetParticleSubType() const
G4int GetAntiQuarkContent(G4int flavor) const
#define G4PART_DLL
Definition pwdefs.hh:45