Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/particles/management/include/G4ParticleTable.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/G4ParticleTable.hh (Version 11.3.0) and /particles/management/include/G4ParticleTable.hh (Version 11.2.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 // G4ParticleTable                                 26 // G4ParticleTable
 27 //                                                 27 //
 28 // Class description:                              28 // Class description:
 29 //                                                 29 //
 30 // G4ParticleTable is the table of pointers to     30 // G4ParticleTable is the table of pointers to G4ParticleDefinition.
 31 // It is a "singleton" (only one static object     31 // It is a "singleton" (only one static object).
 32 // Each G4ParticleDefinition pointer is stored     32 // Each G4ParticleDefinition pointer is stored with its name as a key
 33 // to itself. So, each G4ParticleDefinition ob     33 // to itself. So, each G4ParticleDefinition object must have unique
 34 // name.                                           34 // name.
 35                                                    35 
 36 // Authors: G.Cosmo, 2 December 1995 - Design,     36 // Authors: G.Cosmo, 2 December 1995 - Design, based on object model
 37 //          H.Kurashige, 27 June 1996 - First      37 //          H.Kurashige, 27 June 1996 - First implementation
 38 // History:                                        38 // History:
 39 // - 14 Nov 1997, H.Kurashige - Added messenge     39 // - 14 Nov 1997, H.Kurashige - Added messenger
 40 // - 24 Sep 1998, H.Kurashige - Added dictiona     40 // - 24 Sep 1998, H.Kurashige - Added dictionary for encoding
 41 // - 28 Oct 1999, H.Kurashige - Migration to S     41 // - 28 Oct 1999, H.Kurashige - Migration to STL maps
 42 // - 15 Sep 2017, K.L.Genser - Added support f     42 // - 15 Sep 2017, K.L.Genser - Added support for MuonicAtom
 43 // -------------------------------------------     43 // --------------------------------------------------------------------
 44 #ifndef G4ParticleTable_hh                         44 #ifndef G4ParticleTable_hh
 45 #define G4ParticleTable_hh 1                       45 #define G4ParticleTable_hh 1
 46                                                    46 
 47 #include "G4ParticleDefinition.hh"                 47 #include "G4ParticleDefinition.hh"
 48 #include "G4ParticleTableIterator.hh"              48 #include "G4ParticleTableIterator.hh"
 49 #include "G4Threading.hh"                          49 #include "G4Threading.hh"
 50 #include "G4ios.hh"                                50 #include "G4ios.hh"
 51 #include "globals.hh"                              51 #include "globals.hh"
 52                                                    52 
 53 #include <map>                                     53 #include <map>
 54                                                    54 
 55 class G4UImessenger;                               55 class G4UImessenger;
 56 class G4ParticleMessenger;                         56 class G4ParticleMessenger;
 57 class G4IonTable;                                  57 class G4IonTable;
 58                                                    58 
 59 class G4ParticleTable                              59 class G4ParticleTable
 60 {                                                  60 {
 61   public:                                          61   public:
 62     using G4PTblDictionary = G4ParticleTableIt     62     using G4PTblDictionary = G4ParticleTableIterator<G4String, G4ParticleDefinition*>::Map;
 63     using G4PTblDicIterator = G4ParticleTableI     63     using G4PTblDicIterator = G4ParticleTableIterator<G4String, G4ParticleDefinition*>;
 64     using G4PTblEncodingDictionary = G4Particl     64     using G4PTblEncodingDictionary = G4ParticleTableIterator<G4int, G4ParticleDefinition*>::Map;
 65     using G4PTblEncodingDicIterator = G4Partic     65     using G4PTblEncodingDicIterator = G4ParticleTableIterator<G4int, G4ParticleDefinition*>;
 66                                                    66 
 67     virtual ~G4ParticleTable();                    67     virtual ~G4ParticleTable();
 68                                                    68 
 69     // Copy constructor and assignment operato     69     // Copy constructor and assignment operator not allowed
 70     G4ParticleTable(const G4ParticleTable&) =      70     G4ParticleTable(const G4ParticleTable&) = delete;
 71     G4ParticleTable& operator=(const G4Particl     71     G4ParticleTable& operator=(const G4ParticleTable&) = delete;
 72                                                    72 
 73     // This method is similar to the construct     73     // This method is similar to the constructor. It is used by each worker
 74     // thread to achieve the partial effect as     74     // thread to achieve the partial effect as that of the master thread
 75     void WorkerG4ParticleTable();                  75     void WorkerG4ParticleTable();
 76                                                    76 
 77     // This method is similar to the destructo     77     // This method is similar to the destructor. It is used by each worker
 78     // thread to achieve the partial effect as     78     // thread to achieve the partial effect as that of the master thread
 79     void DestroyWorkerG4ParticleTable();           79     void DestroyWorkerG4ParticleTable();
 80                                                    80 
 81     // Return the pointer to the G4ParticleTab     81     // Return the pointer to the G4ParticleTable object
 82     // G4ParticleTable is a "singleton" and ca     82     // G4ParticleTable is a "singleton" and can get its pointer by this
 83     // function. At the first time of calling      83     // function. At the first time of calling this function, the
 84     // G4ParticleTable object is instantiated      84     // G4ParticleTable object is instantiated
 85     static G4ParticleTable* GetParticleTable()     85     static G4ParticleTable* GetParticleTable();
 86                                                    86 
 87     // Returns TRUE if the ParticleTable conta     87     // Returns TRUE if the ParticleTable contains the particle's pointer
 88     inline G4bool contains(const G4ParticleDef     88     inline G4bool contains(const G4ParticleDefinition* particle) const;
 89     G4bool contains(const G4String& particle_n     89     G4bool contains(const G4String& particle_name) const;
 90                                                    90 
 91     // Returns the number of particles in the      91     // Returns the number of particles in the ParticleTable
 92     G4int entries() const;                         92     G4int entries() const;
 93     G4int size() const;                            93     G4int size() const;
 94                                                    94 
 95     // Returns a pointer to the i-th particle      95     // Returns a pointer to the i-th particle in the ParticleTable
 96     // 0 <= index < entries()                      96     // 0 <= index < entries()
 97     G4ParticleDefinition* GetParticle(G4int in     97     G4ParticleDefinition* GetParticle(G4int index) const;
 98                                                    98 
 99     // Returns the name of i-th particle in th     99     // Returns the name of i-th particle in the ParticleTable
100     const G4String& GetParticleName(G4int inde    100     const G4String& GetParticleName(G4int index) const;
101                                                   101 
102     // Returns a pointer to the particle (0 if    102     // Returns a pointer to the particle (0 if not contained)
103     G4ParticleDefinition* FindParticle(G4int P    103     G4ParticleDefinition* FindParticle(G4int PDGEncoding);
104     G4ParticleDefinition* FindParticle(const G    104     G4ParticleDefinition* FindParticle(const G4String& particle_name);
105     G4ParticleDefinition* FindParticle(const G    105     G4ParticleDefinition* FindParticle(const G4ParticleDefinition* particle);
106                                                   106 
107     // Returns a pointer to its anti-particle     107     // Returns a pointer to its anti-particle (0 if not contained)
108     inline G4ParticleDefinition* FindAntiParti    108     inline G4ParticleDefinition* FindAntiParticle(G4int PDGEncoding);
109     inline G4ParticleDefinition* FindAntiParti    109     inline G4ParticleDefinition* FindAntiParticle(const G4String& p_name);
110     inline G4ParticleDefinition* FindAntiParti    110     inline G4ParticleDefinition* FindAntiParticle(const G4ParticleDefinition* p);
111                                                   111 
112     // Returns the pointer to the Iterator        112     // Returns the pointer to the Iterator
113     G4PTblDicIterator* GetIterator() const;       113     G4PTblDicIterator* GetIterator() const;
114                                                   114 
115     // Dumps information of particles specifie    115     // Dumps information of particles specified by name
116     void DumpTable(const G4String& particle_na    116     void DumpTable(const G4String& particle_name = "ALL");
117                                                   117 
118     // Returns the pointer to the G4IonTable o    118     // Returns the pointer to the G4IonTable object
119     G4IonTable* GetIonTable() const;              119     G4IonTable* GetIonTable() const;
120                                                   120 
121     // Inserts the particle into ParticleTable    121     // Inserts the particle into ParticleTable.
122     // Returned value is the same as particle     122     // Returned value is the same as particle if successfully inserted
123     //   or the pointer to another G4ParticleD    123     //   or the pointer to another G4ParticleDefinition object
124     //      which has same particle name          124     //      which has same particle name
125     //   or nullptr if failing to insert by ot    125     //   or nullptr if failing to insert by other reason
126     G4ParticleDefinition* Insert(G4ParticleDef    126     G4ParticleDefinition* Insert(G4ParticleDefinition* particle);
127                                                   127 
128     // Removes the particle from the table (no    128     // Removes the particle from the table (not delete)
129     G4ParticleDefinition* Remove(G4ParticleDef    129     G4ParticleDefinition* Remove(G4ParticleDefinition* particle);
130                                                   130 
131     // Removes all particles from G4ParticleTa    131     // Removes all particles from G4ParticleTable
132     void RemoveAllParticles();                    132     void RemoveAllParticles();
133                                                   133 
134     // Removes and deletes all particles from     134     // Removes and deletes all particles from G4ParticleTable
135     void DeleteAllParticles();                    135     void DeleteAllParticles();
136                                                   136 
137     // Creates messenger                          137     // Creates messenger
138     G4UImessenger* CreateMessenger();             138     G4UImessenger* CreateMessenger();
139                                                   139 
140     void SelectParticle(const G4String& name);    140     void SelectParticle(const G4String& name);
141                                                   141 
142     inline const G4ParticleDefinition* GetSele    142     inline const G4ParticleDefinition* GetSelectedParticle() const;
143                                                   143 
144     inline void SetVerboseLevel(G4int value);     144     inline void SetVerboseLevel(G4int value);
145     inline G4int GetVerboseLevel() const;         145     inline G4int GetVerboseLevel() const;
146                                                   146 
147     inline void SetReadiness(G4bool val = true    147     inline void SetReadiness(G4bool val = true);
148     inline G4bool GetReadiness() const;           148     inline G4bool GetReadiness() const;
149                                                   149 
150     inline G4ParticleDefinition* GetGenericIon    150     inline G4ParticleDefinition* GetGenericIon() const;
151     inline void SetGenericIon(G4ParticleDefini    151     inline void SetGenericIon(G4ParticleDefinition*);
152                                                   152 
153     inline G4ParticleDefinition* GetGenericMuo    153     inline G4ParticleDefinition* GetGenericMuonicAtom() const;
154     inline void SetGenericMuonicAtom(G4Particl    154     inline void SetGenericMuonicAtom(G4ParticleDefinition*);
155                                                   155 
156     // Public data ---------------------------    156     // Public data ----------------------------------------------------
157                                                   157 
158     // These fields should be thread local or     158     // These fields should be thread local or thread private. For a singleton
159     // class, we can change any member field a    159     // class, we can change any member field as static without any problem
160     // because there is only one instance. The    160     // because there is only one instance. Then we are allowed to add
161     // "G4ThreadLocal"                            161     // "G4ThreadLocal"
162     G4ParticleMessenger* fParticleMessenger =     162     G4ParticleMessenger* fParticleMessenger = nullptr;
163     static G4ThreadLocal G4PTblDictionary* fDi    163     static G4ThreadLocal G4PTblDictionary* fDictionary;
164     static G4ThreadLocal G4PTblDicIterator* fI    164     static G4ThreadLocal G4PTblDicIterator* fIterator;
165     static G4ThreadLocal G4PTblEncodingDiction    165     static G4ThreadLocal G4PTblEncodingDictionary* fEncodingDictionary;
166                                                   166 
167     // Particle table is being shared             167     // Particle table is being shared
168     static G4ParticleTable* fgParticleTable;      168     static G4ParticleTable* fgParticleTable;
169                                                   169 
170     // This field should be thread private. Ho    170     // This field should be thread private. However, we have to keep one copy
171     // of the ion table pointer. So we change     171     // of the ion table pointer. So we change all important fields of
172     // G4IonTable to be thread local              172     // G4IonTable to be thread local
173     G4IonTable* fIonTable = nullptr;              173     G4IonTable* fIonTable = nullptr;
174                                                   174 
175     // These shadow pointers are used by each     175     // These shadow pointers are used by each worker thread to copy the content
176     // from the master thread                     176     // from the master thread
177     //                                            177     //
178     static G4PTblDictionary* fDictionaryShadow    178     static G4PTblDictionary* fDictionaryShadow;
179     static G4PTblDicIterator* fIteratorShadow;    179     static G4PTblDicIterator* fIteratorShadow;
180     static G4PTblEncodingDictionary* fEncoding    180     static G4PTblEncodingDictionary* fEncodingDictionaryShadow;
181                                                   181 
182 #ifdef G4MULTITHREADED                            182 #ifdef G4MULTITHREADED
183     // Shared instance of a mutex                 183     // Shared instance of a mutex
184     static G4GLOB_DLL G4Mutex& particleTableMu    184     static G4GLOB_DLL G4Mutex& particleTableMutex();
185     static G4GLOB_DLL G4int& lockCount();         185     static G4GLOB_DLL G4int& lockCount();
186 #endif                                            186 #endif
187                                                   187 
188   protected:                                      188   protected:
189     const G4PTblDictionary* GetDictionary() co    189     const G4PTblDictionary* GetDictionary() const;
190                                                   190 
191     // Returns key value of the particle (i.e.    191     // Returns key value of the particle (i.e. particle name)
192     inline const G4String& GetKey(const G4Part    192     inline const G4String& GetKey(const G4ParticleDefinition* particle) const;
193                                                   193 
194     // Returns the pointer to EncodingDictiona    194     // Returns the pointer to EncodingDictionary
195     const G4PTblEncodingDictionary* GetEncodin    195     const G4PTblEncodingDictionary* GetEncodingDictionary() const;
196                                                   196 
197   private:                                        197   private:
198     // Provate default constructor                198     // Provate default constructor
199     G4ParticleTable();                            199     G4ParticleTable();
200                                                   200 
201     void CheckReadiness() const;                  201     void CheckReadiness() const;
202                                                   202 
203     // Private data --------------------------    203     // Private data ---------------------------------------------------
204                                                   204 
205     G4ParticleDefinition* genericIon = nullptr    205     G4ParticleDefinition* genericIon = nullptr;
206     G4ParticleDefinition* genericMuonicAtom =     206     G4ParticleDefinition* genericMuonicAtom = nullptr;
207     const G4ParticleDefinition* selectedPartic    207     const G4ParticleDefinition* selectedParticle = nullptr;
208                                                   208 
209     const G4String noName = " ";                  209     const G4String noName = " ";
210     G4String selectedName = "undefined";          210     G4String selectedName = "undefined";
211                                                   211 
212     // Control flag for output message            212     // Control flag for output message
213     //  0: Silent                                 213     //  0: Silent
214     //  1: Warning message                        214     //  1: Warning message
215     //  2: More                                   215     //  2: More
216     G4int verboseLevel = 1;                       216     G4int verboseLevel = 1;
217                                                   217 
218     G4bool readyToUse = false;                    218     G4bool readyToUse = false;
219 };                                                219 };
220                                                   220 
221 #include "G4ParticleTable.icc"                    221 #include "G4ParticleTable.icc"
222                                                   222 
223 #endif                                            223 #endif
224                                                   224