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.2)


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