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 10.0)


  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                        << 
 27 //                                                 26 //
 28 // Class description:                          <<  27 // $Id: G4ParticleDefinition.hh 73598 2013-09-02 09:18:28Z gcosmo $
 29 //                                                 28 //
 30 // This class contains all the static data of  <<  29 // 
 31 // It uses the process manager in order to col <<  30 // ------------------------------------------------------------
 32 // this kind of particle can undertake.        <<  31 //  GEANT 4 class header file 
 33                                                <<  32 //
 34 // Authors: G.Cosmo, 2 December 1995 - Design, <<  33 //  History: first implementation, based on object model of
 35 //          M.Asai, 29 January 1996 - First im <<  34 //  2nd December 1995, G.Cosmo
 36 // History:                                    <<  35 // ---------------- G4ParticleDefinition ----------------
 37 // - 1996-2003, H.Kurashige - Revisions        <<  36 // first implementation by Makoto Asai - 29 January 1996
 38 // - 11.03.2003, H.Kurashige - Restructuring f <<  37 // revised - G.Cosmo - 29 February 1996
 39 // - 25.01.2013, G.Cosmo, A.Dotti - Introduced <<  38 // revised - H.Kurashige - 19 April 1996
 40 // - 15.06.2017, K.L.Genser - Added support fo <<  39 // revised -  H.Kurashige - 4 July 1996
 41 // ------------------------------------------- <<  40 // added GetEnergyCuts() and GetLengthCuts() - G.Cosmo - 11 July 1996
 42 #ifndef G4ParticleDefinition_hh                <<  41 // added Set/GetVerboseLevel() - H.Kurashige - 11 November 1997
 43 #define G4ParticleDefinition_hh 1              <<  42 // added SetCuts() and ResetCuts - H.Kurashige - 15 November 1996
                                                   >>  43 // change SetProcessManager as public - H.Kurashige - 06 June 1998
                                                   >>  44 // added  GetEnergyThreshold - H.Kurashige - 08 June 1998
                                                   >>  45 // added  ShortLived flag and ApplyCuts flag - H.Kurashige - 27 June 1998
                                                   >>  46 // fixed  some improper codings - H.Kurashige - 08 April 1999
                                                   >>  47 // added  sub-type - H.Kurashige - 15 February 2000
                                                   >>  48 // added  RestoreCuts - H.Kurashige - 09 March 2001
                                                   >>  49 // restructuring for Cuts per Region - H.Kurashige - 11 March 2003 
                                                   >>  50 // added  MagneticMoment - H.Kurashige - March 2007
                                                   >>  51 // modified for thread-safety for MT - G.Cosmo, A.Dotti - January 2013
                                                   >>  52 // ------------------------------------------------------------
 44                                                    53 
 45 #include "G4PDefManager.hh"                    <<  54 #ifndef G4ParticleDefinition_h
 46 #include "G4ios.hh"                            <<  55 #define G4ParticleDefinition_h 1
 47 #include "globals.hh"                          << 
 48                                                    56 
                                                   >>  57 #include <vector>
 49 #include <CLHEP/Units/PhysicalConstants.h>         58 #include <CLHEP/Units/PhysicalConstants.h>
 50                                                    59 
 51 #include <vector>                              <<  60 #include "globals.hh"
                                                   >>  61 #include "G4ios.hh"
                                                   >>  62 #include "G4PDefSplitter.hh"
 52                                                    63 
 53 class G4ProcessManager;                            64 class G4ProcessManager;
 54 class G4DecayTable;                                65 class G4DecayTable;
 55 class G4ParticleTable;                             66 class G4ParticleTable;
 56 class G4ParticlePropertyTable;                     67 class G4ParticlePropertyTable;
 57 class G4VTrackingManager;                      << 
 58                                                << 
 59 using G4ParticleDefinitionSubInstanceManager = << 
 60                                                    68 
 61 class G4ParticleDefinition                     <<  69 class G4PDefData
 62 {                                                  70 {
 63     friend class G4ParticlePropertyTable;      <<  71   // Encapsulates the fields of the class G4ParticleDefinition
                                                   >>  72   // that may not be read-only.
 64                                                    73 
 65   public:                                          74   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                                                    75 
221   protected:                                   <<  76     void initialize()
222     // Cannot be used                          <<  77     {
223     G4ParticleDefinition();                    <<  78       theProcessManager = 0;    
                                                   >>  79     }
224                                                    80 
225     // Calculates quark and anti-quark content <<  81     G4ProcessManager *theProcessManager;
226     // return value is the PDG encoding for th <<  82 };
227     // It means error if the return value is d << 
228     // this->thePDGEncoding.                   << 
229     G4int FillQuarkContents();                 << 
230                                                    83 
231     inline void SetParticleSubType(const G4Str <<  84 // The type G4PDefManager is introduced to encapsulate the methods used by
                                                   >>  85 // both the master thread and worker threads to allocate memory space for
                                                   >>  86 // the fields encapsulated by the class G4PDefData. When each thread
                                                   >>  87 // changes the value for these fields, it refers to them using a macro
                                                   >>  88 // definition defined below. For every G4ParticleDefinition instance,
                                                   >>  89 // there is a corresponding G4PDefData instance. All G4PDefData instances
                                                   >>  90 // are organized by the class G4PDefManager as an array.
                                                   >>  91 // The field "int g4particleDefinitionInstanceID" is added to the class G4ParticleDefinition.
                                                   >>  92 // The value of this field in each G4ParticleDefinition instance is the
                                                   >>  93 // subscript of the corresponding G4PDefData instance.
                                                   >>  94 // In order to use the class G4PDefManager, we add a static member in the class
                                                   >>  95 // G4ParticleDefinition as follows: "static G4PDefManager subInstanceManager".
                                                   >>  96 // Both the master thread and worker threads change the length of the array
                                                   >>  97 // for G4PDefData instances mutually along with G4ParticleDefinition
                                                   >>  98 // instances are created. For each worker thread, it dynamically creates ions.
                                                   >>  99 // Consider any thread A, if there is any other thread which creates an ion.
                                                   >> 100 // This ion is shared by the thread A. So the thread A leaves an empty space
                                                   >> 101 // in the array of G4PDefData instances for the ion.
                                                   >> 102 //
                                                   >> 103 typedef G4PDefSplitter<G4PDefData>  G4PDefManager;
                                                   >> 104 typedef G4PDefManager G4ParticleDefinitionSubInstanceManager;
232                                                   105 
233     inline void SetAtomicNumber(G4int);        << 106 // This macro changes the references to fields that are now encapsulated
234     inline void SetAtomicMass(G4int);          << 107 // in the class G4PDefData.
                                                   >> 108 //
                                                   >> 109 #define G4MT_pmanager ((subInstanceManager.offset[g4particleDefinitionInstanceID]).theProcessManager)
235                                                   110 
236     enum                                       << 111 class G4ParticleDefinition 
237     {                                          << 112 {
238       NumberOfQuarkFlavor = 6                  << 113   // Class Description:
239     };                                         << 114   //
                                                   >> 115   // This class containes all the static data of a particle.
                                                   >> 116   // It also has uses a process manager in order to collect
                                                   >> 117   // all the processes this kind of particle can undertake.
                                                   >> 118 
                                                   >> 119   friend class  G4ParticlePropertyTable;
                                                   >> 120 
                                                   >> 121  public: // With Description
                                                   >> 122 
                                                   >> 123   // Only one type of constructor can be used for G4ParticleDefinition.
                                                   >> 124   // If you want to create new particle, you must set name of the particle 
                                                   >> 125   // at construction. Most of members seen as arguments of the constructor 
                                                   >> 126   // (except last 3 arguments concerning with decay ) are  "constant" 
                                                   >> 127   // and can not be changed later. (No "SET" methods are available)
                                                   >> 128   // Each type of particle must be constructed as a unique object
                                                   >> 129   // of special class derived from G4ParticleDefinition.
                                                   >> 130   // see G4ParticleTypes for detail 
                                                   >> 131  
                                                   >> 132       G4ParticleDefinition(const G4String&  aName,  
                                                   >> 133                            G4double         mass,     
                                                   >> 134          G4double         width,
                                                   >> 135                            G4double         charge,   
                                                   >> 136          G4int            iSpin,
                                                   >> 137                            G4int            iParity,
                                                   >> 138          G4int            iConjugation,
                                                   >> 139                            G4int            iIsospin,   
                                                   >> 140          G4int            iIsospinZ, 
                                                   >> 141          G4int            gParity,
                                                   >> 142          const G4String&  pType,
                                                   >> 143                            G4int            lepton,
                                                   >> 144          G4int            baryon,
                                                   >> 145          G4int            encoding,
                                                   >> 146          G4bool           stable,
                                                   >> 147          G4double         lifetime,
                                                   >> 148          G4DecayTable     *decaytable,
                                                   >> 149          G4bool           shortlived = false,
                                                   >> 150                            const G4String&  subType ="",
                                                   >> 151                            G4int            anti_encoding =0,
                                                   >> 152          G4double         magneticMoment = 0.0);
                                                   >> 153 
                                                   >> 154       virtual ~G4ParticleDefinition();
                                                   >> 155       
                                                   >> 156       // With the following Getxxxx methods, one can get values 
                                                   >> 157       // for members which can not be changed
                                                   >> 158  
                                                   >> 159       const G4String& GetParticleName() const { return theParticleName; }
                                                   >> 160 
                                                   >> 161       G4double GetPDGMass() const { return thePDGMass; }
                                                   >> 162       G4double GetPDGWidth() const { return thePDGWidth; } 
                                                   >> 163       G4double GetPDGCharge() const { return thePDGCharge; }
                                                   >> 164 
                                                   >> 165       G4double GetPDGSpin() const { return thePDGSpin; }
                                                   >> 166       G4int    GetPDGiSpin() const { return thePDGiSpin; }
                                                   >> 167       G4int    GetPDGiParity() const { return thePDGiParity; }
                                                   >> 168       G4int    GetPDGiConjugation() const { return thePDGiConjugation; }
                                                   >> 169       G4double GetPDGIsospin() const { return thePDGIsospin; }
                                                   >> 170       G4double GetPDGIsospin3() const { return thePDGIsospin3; }
                                                   >> 171       G4int    GetPDGiIsospin() const { return thePDGiIsospin; }
                                                   >> 172       G4int    GetPDGiIsospin3() const { return thePDGiIsospin3; }
                                                   >> 173       G4int    GetPDGiGParity() const { return thePDGiGParity; }
                                                   >> 174  
                                                   >> 175       G4double GetPDGMagneticMoment() const { return thePDGMagneticMoment; }
                                                   >> 176       void     SetPDGMagneticMoment(G4double mageticMoment); 
                                                   >> 177       G4double CalculateAnomaly()  const;
                                                   >> 178         // Gives the anomaly of magnetic moment for spin 1/2 particles 
                                                   >> 179 
                                                   >> 180       const G4String& GetParticleType() const { return theParticleType; }
                                                   >> 181       const G4String& GetParticleSubType() const { return theParticleSubType; }
                                                   >> 182       G4int    GetLeptonNumber() const { return theLeptonNumber; }
                                                   >> 183       G4int    GetBaryonNumber() const { return theBaryonNumber; }
                                                   >> 184 
                                                   >> 185       G4int    GetPDGEncoding() const { return thePDGEncoding; }
                                                   >> 186       G4int    GetAntiPDGEncoding() const { return theAntiPDGEncoding; }
                                                   >> 187       void     SetAntiPDGEncoding(G4int aEncoding);
                                                   >> 188 
                                                   >> 189  
                                                   >> 190       G4int    GetQuarkContent(G4int flavor) const;
                                                   >> 191       G4int    GetAntiQuarkContent(G4int flavor) const;
                                                   >> 192         // Returns the number of quark with flavor contained in this particle. 
                                                   >> 193         // The value of flavor is assigned as follows 
                                                   >> 194         // 1:d, 2:u, 3:s, 4:c, 5:b, 6:t
                                                   >> 195  
                                                   >> 196       G4bool   IsShortLived() const { return fShortLivedFlag; }
                                                   >> 197 
                                                   >> 198       G4bool   GetPDGStable() const { return thePDGStable; }
                                                   >> 199       void     SetPDGStable(const G4bool aFlag) { thePDGStable=aFlag; }
                                                   >> 200 
                                                   >> 201       G4double GetPDGLifeTime() const { return thePDGLifeTime; }
                                                   >> 202       void     SetPDGLifeTime(G4double aLifeTime) { thePDGLifeTime=aLifeTime; }
                                                   >> 203 
                                                   >> 204       G4DecayTable* GetDecayTable() const;
                                                   >> 205       void          SetDecayTable(G4DecayTable* aDecayTable); 
                                                   >> 206         // Set/Get Decay Table
                                                   >> 207         //   !! Decay Table can be modified !!  
                                                   >> 208 
                                                   >> 209       G4ProcessManager* GetProcessManager() const; 
                                                   >> 210       void SetProcessManager(G4ProcessManager* aProcessManager); 
                                                   >> 211         // Set/Get Process Manager
                                                   >> 212         //   !! Process Manager can be modified !!  
                                                   >> 213 
                                                   >> 214       G4ParticleTable* GetParticleTable() const;
                                                   >> 215         // Get pointer to the particle table
                                                   >> 216 
                                                   >> 217       G4int GetAtomicNumber() const;
                                                   >> 218       G4int GetAtomicMass() const;
                                                   >> 219         // Get AtomicNumber and AtomicMass
                                                   >> 220         // These properties are defined for nucleus
                                                   >> 221 
                                                   >> 222       void DumpTable() const;
                                                   >> 223         //  Prints information of data members.
                                                   >> 224 
                                                   >> 225       void  SetVerboseLevel(G4int value);
                                                   >> 226       G4int GetVerboseLevel() const;
                                                   >> 227         // controle flag for output message
                                                   >> 228         //  0: Silent
                                                   >> 229         //  1: Warning message
                                                   >> 230         //  2: More
                                                   >> 231 
                                                   >> 232       void   SetApplyCutsFlag(G4bool);
                                                   >> 233       G4bool GetApplyCutsFlag() const;
                                                   >> 234 
                                                   >> 235       G4bool IsGeneralIon() const;
                                                   >> 236       // true only if the particle is G4Ions
                                                   >> 237       // (it means that theProcessManager is same as one for G4GenricIon)
                                                   >> 238 
                                                   >> 239       G4int operator==(const G4ParticleDefinition &right) const;
                                                   >> 240       G4int operator!=(const G4ParticleDefinition &right) const;
                                                   >> 241 
                                                   >> 242   public :  // without description
                                                   >> 243 
                                                   >> 244       inline G4ProcessManager* GetMasterProcessManager() const;
                                                   >> 245       // Returns the process manager master pointer.
                                                   >> 246       inline void SetMasterProcessManager(G4ProcessManager* aNewPM);
                                                   >> 247       //Sets the shadow master pointer (not to be used by user)
                                                   >> 248 
                                                   >> 249       inline G4int GetInstanceID() const;
                                                   >> 250       // Returns the instance ID.
                                                   >> 251 
                                                   >> 252       static const G4PDefManager& GetSubInstanceManager();
                                                   >> 253       // Returns the private data instance manager.
                                                   >> 254  private:
                                                   >> 255       // --- Shadow of master pointers.
                                                   >> 256 
                                                   >> 257       G4ProcessManager *theProcessManagerShadow;
                                                   >> 258       //  Each worker thread can access this field from the master thread
                                                   >> 259       //  through this pointer.
240                                                   260 
241     //  the number of quark (minus Sign means  << 261       G4int g4particleDefinitionInstanceID;
242     //  The value of flavor is assigned as fol << 262       // This field is used as instance ID.
243     //    0:d, 1:u, 2:s, 3:c, 4:b, 5:t         << 
244     G4int theQuarkContent[NumberOfQuarkFlavor] << 
245     G4int theAntiQuarkContent[NumberOfQuarkFla << 
246                                                   263 
247     G4bool isGeneralIon = false;               << 264       G4PART_DLL static G4PDefManager subInstanceManager;
248     G4bool isMuonicAtom = false;               << 265       // This field helps to use the class G4PDefManager introduced above.
249                                                   266 
250   private:                                     << 267   protected:
251     // --- Shadow of master pointers           << 
252                                                   268 
253     // Each worker thread can access this fiel << 269       G4int FillQuarkContents();
254     // through this pointer.                   << 270         // Calculates quark and anti-quark contents
255     G4ProcessManager* theProcessManagerShadow  << 271         // return value is PDG encoding for this particle.
                                                   >> 272         // It means error if the return value is deffernt from
                                                   >> 273         // this->thePDGEncoding.
                                                   >> 274 
                                                   >> 275       void SetParticleSubType(const G4String& subtype);
                                                   >> 276 
                                                   >> 277       void SetAtomicNumber(G4int );
                                                   >> 278       void SetAtomicMass(G4int );
                                                   >> 279 
                                                   >> 280       //  !!!  can not use "copy constructor" nor "default constructor" !!!!
                                                   >> 281       //
                                                   >> 282       G4ParticleDefinition(const G4ParticleDefinition &right);
                                                   >> 283       G4ParticleDefinition();
256                                                   284 
257     // This field is used as instance ID.      << 285   private:
258     G4int g4particleDefinitionInstanceID = 0;  << 
259                                                   286 
260     // This field helps to use the class G4PDe << 287       //  !!!  Assignment operation is forbidden !!!
261     G4PART_DLL static G4PDefManager subInstanc << 288       //
                                                   >> 289       const G4ParticleDefinition & operator=(const G4ParticleDefinition &r);
262                                                   290 
263     //  --- Following values can not be change << 291   protected:
264     //  --- i.e. No Setxxxx Methods for them   << 
265                                                   292 
266     // The name of the particle.               << 293       enum {NumberOfQuarkFlavor = 6};
267     // Each object must have its specific name << 294       G4int  theQuarkContent[NumberOfQuarkFlavor];
268     G4String theParticleName = "";             << 295       G4int  theAntiQuarkContent[NumberOfQuarkFlavor];
                                                   >> 296       //  the number of quark (minus Sign means anti-quark) contents
                                                   >> 297       //  The value of flavor is assigned as follows 
                                                   >> 298       //    0:d, 1:u, 2:s, 3:c, 4:b, 5:t
                                                   >> 299 
                                                   >> 300   private:
269                                                   301 
270     //  --- Following member values must be de << 302       //  --- Following values can not be changed
                                                   >> 303       //  --- i.e. No Setxxxx Methods for them 
271                                                   304 
272     // The mass of the particle, in units of e << 305       G4String theParticleName;
273     G4double thePDGMass = 0.0;                 << 306       //  The name of the particle.
                                                   >> 307       //  Each object must have its specific name!!
274                                                   308 
275     // The decay width of the particle, usuall << 309       //  --- Following member values must be defined with Units
276     // Breit-Wigner function, assuming that yo << 
277     // mass center anyway. (in units of equiva << 
278     G4double thePDGWidth = 0.0;                << 
279                                                   310 
280     // The charge of the particle.(in units of << 311       G4double thePDGMass;
281     G4double thePDGCharge = 0.0;               << 312       //  The mass of the particle, in units of equivalent energy.
282                                                   313 
283     //   --- Following members are quantum num << 314       G4double thePDGWidth;
284     //       i.e. discrete numbers can be allo << 315       //  The decay width of the particle, usually the width of a
285     //       So, you can define them only by u << 316       //  Breit-Wigner function, assuming that you are near the
                                                   >> 317       //  mass center anyway. (in units of equivalent energy)
286                                                   318 
287     // The total spin of the particle, also of << 319       G4double thePDGCharge;
288     // capital J, in units of 1/2.             << 320       //  The charge of the particle.(in units of Coulomb)
289     G4int thePDGiSpin = 0;                     << 
290                                                   321 
291     // The total spin of the particle, in unit << 322       //   --- Following members are quantum number
292     G4double thePDGSpin = 0.0;                 << 323       //       i.e. discrete numbers can be allowded
                                                   >> 324       //       So, you can defined only by using integer in constructor 
293                                                   325 
294     // The parity quantum number, in units of  << 326       G4int thePDGiSpin;
295     // is not defined for this particle, we wi << 327       //  The total spin of the particle, also often denoted as
296     G4int thePDGiParity = 0;                   << 328       //  capital J, in units of 1/2.
                                                   >> 329       G4double thePDGSpin;
                                                   >> 330       //  The total spin of the particle, in units of 1.
297                                                   331 
298     // This charge conjugation quantum number  << 332       G4int thePDGiParity;
299     G4int thePDGiConjugation = 0;              << 333       //  The parity quantum number, in units of 1. If the parity
                                                   >> 334       //  is not defined for this particle, we will set this to 0.
300                                                   335 
301     // The value of the G-parity quantum numbe << 336       G4int thePDGiConjugation;
302     G4int thePDGiGParity = 0;                  << 337       //  This charge conjugation quantum number in units of 1.
303                                                   338 
304     // The isospin and its 3rd-component in un << 339       G4int thePDGiGParity;
305     G4int thePDGiIsospin = 0;                  << 340       //  The value of the G-parity quantum number.
306     G4int thePDGiIsospin3 = 0;                 << 
307                                                   341 
308     // The isospin quantum number in units of  << 342       G4int thePDGiIsospin;
309     G4double thePDGIsospin = 0.0;              << 343       G4int thePDGiIsospin3;
310     G4double thePDGIsospin3 = 0.0;             << 344       //  The isospin and its 3rd-component in units of 1/2.
                                                   >> 345       G4double thePDGIsospin;
                                                   >> 346       G4double thePDGIsospin3;
                                                   >> 347       //  The isospin quantum number in units of 1.
                                                   >> 348  
                                                   >> 349       G4double thePDGMagneticMoment;
                                                   >> 350       //  The magnetic moment.
311                                                   351 
312     // The magnetic moment.                    << 352       G4int theLeptonNumber;
313     G4double thePDGMagneticMoment = 0.0;       << 353       //  The lepton quantum number.
314                                                   354 
315     // The lepton quantum number.              << 355       G4int theBaryonNumber;
316     G4int theLeptonNumber = 0;                 << 356       //  The baryon quantum number.
317                                                   357 
318     // The baryon quantum number.              << 358       G4String theParticleType;
319     G4int theBaryonNumber = 0;                 << 359       //  More general textual type description of the particle.
320                                                   360 
321     // More general textual type description o << 361       G4String theParticleSubType;
322     G4String theParticleType = "";             << 362       // Textual type description of the particle
                                                   >> 363       // eg. pion, lamda etc.
323                                                   364 
324     // Textual type description of the particl << 365       G4int thePDGEncoding;
325     // eg. pion, lamda etc.                    << 366       //  The Particle Data Group integer identifier of this particle
326     G4String theParticleSubType = "";          << 367  
                                                   >> 368       G4int theAntiPDGEncoding;
                                                   >> 369       //  The Particle Data Group integer identifier of the anti-particle
327                                                   370 
328     // The Particle Data Group integer identif << 371       // --- Following members can be changed after construction
329     G4int thePDGEncoding = 0;                  << 
330                                                   372 
331     // The Particle Data Group integer identif << 373       G4bool fShortLivedFlag;
332     G4int theAntiPDGEncoding = 0;              << 374       //  Particles which have true value of this flag 
                                                   >> 375       //  will not be tracked by TrackingManager 
333                                                   376 
334     // --- Following members can be changed af << 377       G4bool thePDGStable;
                                                   >> 378       //  Is an indicator that this particle is stable. It must
                                                   >> 379       //  not decay. If the user tries to assign a kind of decay
                                                   >> 380       //  object to it, it will refuse to take it.
335                                                   381 
336     // Particles which have true value of this << 382       G4double thePDGLifeTime;
337     // will not be tracked by TrackingManager  << 383       //  Is related to the decay width of the particle. The mean
338     G4bool fShortLivedFlag = false;            << 384       //  life time is given in seconds.
339                                                   385 
340     // Is an indicator that this particle is s << 386       G4DecayTable *theDecayTable;
341     // not decay. If the user tries to assign  << 387       //  Points DecayTable 
342     // object to it, it will refuse to take it << 
343     G4bool thePDGStable = false;               << 
344                                                   388 
345     // Is related to the decay width of the pa << 389    private:
346     // life time is given in seconds.          << 
347     G4double thePDGLifeTime = 0.0;             << 
348                                                   390 
349     // Points DecayTable                       << 391       G4ParticleTable* theParticleTable;
350     G4DecayTable* theDecayTable = nullptr;     << 
351                                                   392 
352     G4ParticleTable* theParticleTable = nullpt << 393       G4int theAtomicNumber;
                                                   >> 394       G4int theAtomicMass;
                                                   >> 395  
                                                   >> 396       G4int verboseLevel;
                                                   >> 397       G4bool fApplyCutsFlag;
353                                                   398 
354     G4int theAtomicNumber = 0;                 << 399    protected:
355     G4int theAtomicMass = 0;                   << 400       G4bool isGeneralIon;
356                                                   401 
357     G4int verboseLevel = 1;                    << 402    public:
358     G4bool fApplyCutsFlag = false;             << 403       void SetParticleDefinitionID(G4int id=-1);
                                                   >> 404       G4int GetParticleDefinitionID() const;
359 };                                                405 };
360                                                   406 
361 #include "G4ParticleDefinition.icc"               407 #include "G4ParticleDefinition.icc"
362                                                   408 
363 #endif                                            409 #endif
364                                                   410