Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4IonTable.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29//
30// ------------------------------------------------------------
31// GEANT 4 class header file
32//
33// History: first implementation,
34// based on object model of June 27, 98 H.Kurashige
35// ------------------------------------------------------------
36// added clear() 20 Mar., 08 H.Kurashige
37// modified GetIon 02 Aug., 98 H.Kurashige
38// added Remove() 06 Nov.,98 H.Kurashige
39// add GetNucleusMass 15 Mar. 99 H.Kurashige
40// -----
41// Modified GetIon methods 17 Aug. 99 H.Kurashige
42// New design using G4VIsotopeTable 5 Oct. 99 H.Kurashige
43// Add GetNucleusEncoding according PDG 2006 9 Oct. 2006 H.Kurashige
44// Use STL map 30 Jul. 2009 H.Kurashige
45
46#ifndef G4IonTable_h
47#define G4IonTable_h 1
48
49#include "G4ios.hh"
50#include "globals.hh"
52#include "G4ParticleTable.hh"
53#include "G4Ions.hh"
54
55#include <cmath>
56#include <vector>
57#include <map>
58
59class G4ParticleTable;
60class G4VIsotopeTable;
62
64{
65 // Class Description
66 // G4IonTable is the table of pointer to G4ParticleDefinition
67 // In G4IonTable, each G4ParticleDefinition pointer is stored
68 //
69
70 public:
71 // Use STL map as list of ions
72 typedef std::multimap<G4int, const G4ParticleDefinition*> G4IonList;
73 typedef std::multimap<G4int, const G4ParticleDefinition*>::iterator G4IonListIterator;
74
75 public:
76 // constructor
77 G4IonTable();
78
79 protected:
80 // hide copy construictor as protected
81 G4IonTable(const G4IonTable &right);
82 G4IonTable & operator = (const G4IonTable &) {return *this;}
83
84 public:
85 // destructor
86 virtual ~G4IonTable();
87
88 public: // With Description
90 // Get number of elements defined in the IonTable
91
92 // Register Isotope table
94 G4VIsotopeTable* GetIsotopeTable(size_t idx=0) const;
95 // G4IonTable asks properties of isotopes to this G4VIsotopeTable
96 // by using FindIsotope(G4IsotopeProperty* property) method.
97
98 // ---------------------------
99 // FindIon/GetIon
100 // FindIon methods return pointer of ion if it exists
101 // GetIon methods also return pointer of ion. In GetIon
102 // methods the designated ion will be created if it does not exist.
103 //
104 // !! PDGCharge inG4ParticleDefinition of ions is !!
105 // !! electric charge of nucleus (i.e. fully ionized ions) !!
106 // -----------------------------
107
108 // Find/Get "ground state"
110 // The ion is assumed to be ground state (i.e Excited energy = 0)
111 // Z: Atomic Number
112 // A: Atomic Mass
113 // J: Total Angular momentum (in unit of 1/2)
115 // The ion can be get by using PDG encoding
116 // !! Only ground state can be obtained .i.e. Isomer = 0
117
118 void CreateAllIon();
119 // All ground state ions will be created
120
121 // Find/Get "excited state"
125 G4double E, G4int J=0);
127 G4double E, G4int J=0);
128 // Z: Atomic Number
129 // A: Atomic Mass (nn + np +nlambda)
130 // L: Number of Lmabda
131 // J: Total Angular momentum (in unit of 1/2)
132 // E: Excitaion energy
133
135 // This method is provided for compatibilties
136 // The third and last arguments gives no effect
137
138 static G4bool IsIon(const G4ParticleDefinition*);
139 // return true if the particle is ion
140
142 // return true if the particle is anti_ion
143
144
145 const G4String& GetIonName(G4int Z, G4int A, G4double E) const;
146 const G4String& GetIonName(G4int Z, G4int A, G4int L, G4double E) const;
147 // get ion name
148
149 static G4int GetNucleusEncoding(G4int Z, G4int A,
150 G4double E=0.0, G4int J=0);
151 // get PDG code for Ions
152 // Nuclear codes are given as 10-digit numbers +-100ZZZAAAI.
153 //For a nucleus consisting of np protons and nn neutrons
154 // A = np + nn and Z = np.
155 // I gives the isomer level, with I = 0 corresponding
156 // to the ground state and I >0 to excitations
157 //
158 //!!! I = 1 is assigned fo all excitation states in Geant4
159
160 static G4int GetNucleusEncoding(G4int Z, G4int A, G4int L,
161 G4double E=0.0, G4int J=0);
162 // get PDG code for Hyper-Nucleus Ions
163 // Nuclear codes are given as 10-digit numbers +-10LZZZAAAI.
164 //For a nucleus consisting of np protons and nn neutrons
165 // A = np + nn +nlambda and Z = np.
166 // L = nlambda
167 // I gives the isomer level, with I = 0 corresponding
168 // to the ground state and I >0 to excitations
169 //
170 //!!! I = 1 is assigned fo all excitation states in Geant4
171
173 G4int &Z, G4int &A,
174 G4double &E, G4int &J);
176 G4int &Z, G4int &A, G4int &L,
177 G4double &E, G4int &J);
178 //!!! Only ground states are supported now
179
180
181 G4double GetIonMass(G4int Z, G4int A, G4int L=0) const;
182 G4double GetNucleusMass(G4int Z, G4int A, G4int L=0) const;
183 // These two methods returns Nucleus (i.e. full ionized atom) mass
184 // ,where Z is Atomic Number (number of protons) and
185 // A is Atomic Number (number of nucleons and hyperons)
186 // L is number of lambda (A= nn + np + nlambda)
187
188
189
190 G4int Entries() const;
191 // Return number of ions in the table
192
194 // Return the pointer of index-th ion in the table
195
196 G4bool Contains(const G4ParticleDefinition *particle) const;
197 // Return 'true' if the ion exists
198
199 void Insert(const G4ParticleDefinition* particle);
200 void Remove(const G4ParticleDefinition* particle);
201 // Insert/Remove an ion in the table
202
203 void clear();
204 // erase all contents in the list (not delete just remove)
205
206 G4int size() const;
207 // Return number of ions in the table
208
209 void DumpTable(const G4String &particle_name = "ALL") const;
210 // dump information of particles specified by name
211
212
213 protected:
216 G4double E, G4int J);
217 // Create Ion
218
220 // Ask properties of isotopes to this G4VIsotopeTable
221
224
227 // return true if the particle is pre-defined ion
228
229 void AddProcessManager(const G4String& ionName);
230 // Add process manager to ions with name of 'ionName'
231
232 G4int GetVerboseLevel() const;
233 // get Verbose Level defined in G4ParticleTable
234
235 private:
236 G4IonList* fIonList;
237
238 std::vector<G4VIsotopeTable*> *fIsotopeTableList;
239
240
241 enum { numberOfElements = 118};
242 static const G4String elementName[numberOfElements];
243
244};
245
247{
248 return numberOfElements;
249}
250
252{
253 if (!IsIon(particle)) return false;
254
255 G4int Z = particle->GetAtomicNumber();
256 G4int A = particle->GetAtomicMass();
257 G4int L = particle->GetQuarkContent(3); //strangeness
259 G4bool found = false;
260 if (encoding !=0 ) {
261 G4IonList::iterator i = fIonList->find(encoding);
262 for( ;i != fIonList->end() ; i++) {
263 if (particle == i->second ) {
264 found = true;
265 break;
266 }
267 }
268 }
269 return found;
270}
271
273{
274 return fIonList->size();
275}
276
278{
279 return fIonList->size();
280}
281
282
283#endif
284
285
286
287
288
289
290
291
292
293
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4bool Contains(const G4ParticleDefinition *particle) const
Definition: G4IonTable.hh:251
void Remove(const G4ParticleDefinition *particle)
Definition: G4IonTable.cc:817
G4double GetNucleusMass(G4int Z, G4int A, G4int L=0) const
Definition: G4IonTable.cc:741
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int J=0)
Definition: G4IonTable.cc:446
static G4bool GetNucleusByEncoding(G4int encoding, G4int &Z, G4int &A, G4double &E, G4int &J)
!! I = 1 is assigned fo all excitation states in Geant4
Definition: G4IonTable.cc:494
G4bool IsLightAntiIon(const G4ParticleDefinition *) const
Definition: G4IonTable.cc:654
G4IonTable(const G4IonTable &right)
void clear()
Definition: G4IonTable.cc:784
G4ParticleDefinition * GetParticle(G4int index) const
Definition: G4IonTable.cc:1013
G4bool IsLightIon(const G4ParticleDefinition *) const
Definition: G4IonTable.cc:645
const G4String & GetIonName(G4int Z, G4int A, G4double E) const
Definition: G4IonTable.cc:558
void DumpTable(const G4String &particle_name="ALL") const
Definition: G4IonTable.cc:869
G4ParticleDefinition * GetLightIon(G4int Z, G4int A) const
Definition: G4IonTable.cc:664
std::multimap< G4int, constG4ParticleDefinition * >::iterator G4IonListIterator
Definition: G4IonTable.hh:73
void RegisterIsotopeTable(G4VIsotopeTable *table)
Definition: G4IonTable.cc:928
static G4bool IsIon(const G4ParticleDefinition *)
Definition: G4IonTable.cc:594
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4double E, G4int J=0)
Definition: G4IonTable.cc:353
G4int Entries() const
Definition: G4IonTable.hh:272
G4double GetIonMass(G4int Z, G4int A, G4int L=0) const
!! Only ground states are supported now
Definition: G4IonTable.cc:774
G4IonTable & operator=(const G4IonTable &)
Definition: G4IonTable.hh:82
void AddProcessManager(const G4String &ionName)
Definition: G4IonTable.cc:907
G4int GetNumberOfElements() const
Definition: G4IonTable.hh:246
void Insert(const G4ParticleDefinition *particle)
Definition: G4IonTable.cc:802
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:901
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int J=0)
Definition: G4IonTable.cc:267
static G4bool IsAntiIon(const G4ParticleDefinition *)
Definition: G4IonTable.cc:619
void CreateAllIon()
Definition: G4IonTable.cc:996
G4int size() const
Definition: G4IonTable.hh:277
G4ParticleDefinition * GetLightAntiIon(G4int Z, G4int A) const
Definition: G4IonTable.cc:701
G4IsotopeProperty * FindIsotope(G4int Z, G4int A, G4double E, G4int J)
Definition: G4IonTable.cc:945
G4VIsotopeTable * GetIsotopeTable(size_t idx=0) const
Definition: G4IonTable.cc:934
virtual ~G4IonTable()
Definition: G4IonTable.cc:75
std::multimap< G4int, const G4ParticleDefinition * > G4IonList
Definition: G4IonTable.hh:72
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E, G4int J)
Definition: G4IonTable.cc:102
G4int GetAtomicNumber() const
G4int GetAtomicMass() const
G4int GetQuarkContent(G4int flavor) const