Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/particles/management/include/G4ParticleDefinition.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /particles/management/include/G4ParticleDefinition.hh (Version 11.3.0) and /particles/management/include/G4ParticleDefinition.hh (Version 11.0.p3,)


** Warning: Cannot open xref database.

  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