Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4ParticleTable 27 // 28 // Class description: 29 // 30 // G4ParticleTable is the table of pointers to 31 // It is a "singleton" (only one static object 32 // Each G4ParticleDefinition pointer is stored 33 // to itself. So, each G4ParticleDefinition ob 34 // name. 35 36 // Authors: G.Cosmo, 2 December 1995 - Design, 37 // H.Kurashige, 27 June 1996 - First 38 // History: 39 // - 14 Nov 1997, H.Kurashige - Added messenge 40 // - 24 Sep 1998, H.Kurashige - Added dictiona 41 // - 28 Oct 1999, H.Kurashige - Migration to S 42 // - 15 Sep 2017, K.L.Genser - Added support f 43 // ------------------------------------------- 44 #ifndef G4ParticleTable_hh 45 #define G4ParticleTable_hh 1 46 47 #include "G4ParticleDefinition.hh" 48 #include "G4ParticleTableIterator.hh" 49 #include "G4Threading.hh" 50 #include "G4ios.hh" 51 #include "globals.hh" 52 53 #include <map> 54 55 class G4UImessenger; 56 class G4ParticleMessenger; 57 class G4IonTable; 58 59 class G4ParticleTable 60 { 61 public: 62 using G4PTblDictionary = G4ParticleTableIt 63 using G4PTblDicIterator = G4ParticleTableI 64 using G4PTblEncodingDictionary = G4Particl 65 using G4PTblEncodingDicIterator = G4Partic 66 67 virtual ~G4ParticleTable(); 68 69 // Copy constructor and assignment operato 70 G4ParticleTable(const G4ParticleTable&) = 71 G4ParticleTable& operator=(const G4Particl 72 73 // This method is similar to the construct 74 // thread to achieve the partial effect as 75 void WorkerG4ParticleTable(); 76 77 // This method is similar to the destructo 78 // thread to achieve the partial effect as 79 void DestroyWorkerG4ParticleTable(); 80 81 // Return the pointer to the G4ParticleTab 82 // G4ParticleTable is a "singleton" and ca 83 // function. At the first time of calling 84 // G4ParticleTable object is instantiated 85 static G4ParticleTable* GetParticleTable() 86 87 // Returns TRUE if the ParticleTable conta 88 inline G4bool contains(const G4ParticleDef 89 G4bool contains(const G4String& particle_n 90 91 // Returns the number of particles in the 92 G4int entries() const; 93 G4int size() const; 94 95 // Returns a pointer to the i-th particle 96 // 0 <= index < entries() 97 G4ParticleDefinition* GetParticle(G4int in 98 99 // Returns the name of i-th particle in th 100 const G4String& GetParticleName(G4int inde 101 102 // Returns a pointer to the particle (0 if 103 G4ParticleDefinition* FindParticle(G4int P 104 G4ParticleDefinition* FindParticle(const G 105 G4ParticleDefinition* FindParticle(const G 106 107 // Returns a pointer to its anti-particle 108 inline G4ParticleDefinition* FindAntiParti 109 inline G4ParticleDefinition* FindAntiParti 110 inline G4ParticleDefinition* FindAntiParti 111 112 // Returns the pointer to the Iterator 113 G4PTblDicIterator* GetIterator() const; 114 115 // Dumps information of particles specifie 116 void DumpTable(const G4String& particle_na 117 118 // Returns the pointer to the G4IonTable o 119 G4IonTable* GetIonTable() const; 120 121 // Inserts the particle into ParticleTable 122 // Returned value is the same as particle 123 // or the pointer to another G4ParticleD 124 // which has same particle name 125 // or nullptr if failing to insert by ot 126 G4ParticleDefinition* Insert(G4ParticleDef 127 128 // Removes the particle from the table (no 129 G4ParticleDefinition* Remove(G4ParticleDef 130 131 // Removes all particles from G4ParticleTa 132 void RemoveAllParticles(); 133 134 // Removes and deletes all particles from 135 void DeleteAllParticles(); 136 137 // Creates messenger 138 G4UImessenger* CreateMessenger(); 139 140 void SelectParticle(const G4String& name); 141 142 inline const G4ParticleDefinition* GetSele 143 144 inline void SetVerboseLevel(G4int value); 145 inline G4int GetVerboseLevel() const; 146 147 inline void SetReadiness(G4bool val = true 148 inline G4bool GetReadiness() const; 149 150 inline G4ParticleDefinition* GetGenericIon 151 inline void SetGenericIon(G4ParticleDefini 152 153 inline G4ParticleDefinition* GetGenericMuo 154 inline void SetGenericMuonicAtom(G4Particl 155 156 // Public data --------------------------- 157 158 // These fields should be thread local or 159 // class, we can change any member field a 160 // because there is only one instance. The 161 // "G4ThreadLocal" 162 G4ParticleMessenger* fParticleMessenger = 163 static G4ThreadLocal G4PTblDictionary* fDi 164 static G4ThreadLocal G4PTblDicIterator* fI 165 static G4ThreadLocal G4PTblEncodingDiction 166 167 // Particle table is being shared 168 static G4ParticleTable* fgParticleTable; 169 170 // This field should be thread private. Ho 171 // of the ion table pointer. So we change 172 // G4IonTable to be thread local 173 G4IonTable* fIonTable = nullptr; 174 175 // These shadow pointers are used by each 176 // from the master thread 177 // 178 static G4PTblDictionary* fDictionaryShadow 179 static G4PTblDicIterator* fIteratorShadow; 180 static G4PTblEncodingDictionary* fEncoding 181 182 #ifdef G4MULTITHREADED 183 // Shared instance of a mutex 184 static G4GLOB_DLL G4Mutex& particleTableMu 185 static G4GLOB_DLL G4int& lockCount(); 186 #endif 187 188 protected: 189 const G4PTblDictionary* GetDictionary() co 190 191 // Returns key value of the particle (i.e. 192 inline const G4String& GetKey(const G4Part 193 194 // Returns the pointer to EncodingDictiona 195 const G4PTblEncodingDictionary* GetEncodin 196 197 private: 198 // Provate default constructor 199 G4ParticleTable(); 200 201 void CheckReadiness() const; 202 203 // Private data -------------------------- 204 205 G4ParticleDefinition* genericIon = nullptr 206 G4ParticleDefinition* genericMuonicAtom = 207 const G4ParticleDefinition* selectedPartic 208 209 const G4String noName = " "; 210 G4String selectedName = "undefined"; 211 212 // Control flag for output message 213 // 0: Silent 214 // 1: Warning message 215 // 2: More 216 G4int verboseLevel = 1; 217 218 G4bool readyToUse = false; 219 }; 220 221 #include "G4ParticleTable.icc" 222 223 #endif 224