Geant4  10.02.p03
G4IonTable Class Reference

#include <G4IonTable.hh>

Collaboration diagram for G4IonTable:

Public Types

enum  { numberOfElements = 118 }
 
typedef std::multimap< G4int, const G4ParticleDefinition * > G4IonList
 
typedef std::multimap< G4int, const G4ParticleDefinition * >::iterator G4IonListIterator
 

Public Member Functions

 G4IonTable ()
 
void SlaveG4IonTable ()
 
void WorkerG4IonTable ()
 
virtual ~G4IonTable ()
 
void DestroyWorkerG4IonTable ()
 
G4int GetNumberOfElements () const
 
void RegisterIsotopeTable (G4VIsotopeTable *table)
 
G4VIsotopeTableGetIsotopeTable (size_t idx=0) const
 
void CreateAllIon ()
 
void CreateAllIsomer ()
 
void PrepareNuclideTable ()
 
void PreloadNuclide ()
 
G4ParticleDefinitionGetIon (G4int Z, G4int A, G4int lvl=0)
 
G4ParticleDefinitionGetIon (G4int Z, G4int A, G4int L, G4int lvl)
 
G4ParticleDefinitionGetIon (G4int Z, G4int A, G4double E, G4int J=0)
 
G4ParticleDefinitionGetIon (G4int Z, G4int A, G4int L, G4double E, G4int J=0)
 
G4ParticleDefinitionGetIon (G4int encoding)
 
G4ParticleDefinitionFindIon (G4int Z, G4int A, G4int lvl=0)
 
G4ParticleDefinitionFindIon (G4int Z, G4int A, G4int L, G4int lvl)
 
G4ParticleDefinitionFindIon (G4int Z, G4int A, G4double E, G4int J=0)
 
G4ParticleDefinitionFindIon (G4int Z, G4int A, G4int L, G4double E, G4int J=0)
 
const G4StringGetIonName (G4int Z, G4int A, G4int lvl=0) const
 
const G4StringGetIonName (G4int Z, G4int A, G4double E) const
 
const G4StringGetIonName (G4int Z, G4int A, G4int L, G4double E) const
 
const G4StringGetIonName (G4int Z, G4int A, G4int L, G4int lvl) const
 
G4double GetIonMass (G4int Z, G4int A, G4int L=0, G4int lvl=0) const
 
G4double GetNucleusMass (G4int Z, G4int A, G4int L=0, G4int lvl=0) const
 
G4double GetIsomerMass (G4int Z, G4int A, G4int lvl=0) const
 
G4double GetLifeTime (const G4ParticleDefinition *) const
 
G4double GetLifeTime (G4int Z, G4int A, G4double E) const
 
G4int Entries () const
 
G4ParticleDefinitionGetParticle (G4int index) const
 
G4bool Contains (const G4ParticleDefinition *particle) const
 
void Insert (const G4ParticleDefinition *particle)
 
void Remove (const G4ParticleDefinition *particle)
 
void clear ()
 
G4int size () const
 
void DumpTable (const G4String &particle_name="ALL") const
 
void InitializeLightIons ()
 

Static Public Member Functions

static G4IonTableGetIonTable ()
 
static G4bool IsIon (const G4ParticleDefinition *)
 
static G4bool IsAntiIon (const G4ParticleDefinition *)
 
static G4int GetNucleusEncoding (G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
 
static G4int GetNucleusEncoding (G4int Z, G4int A, G4int L, G4double E=0.0, G4int lvl=0)
 
static G4bool GetNucleusByEncoding (G4int encoding, G4int &Z, G4int &A, G4double &E, G4int &lvl)
 
static G4bool GetNucleusByEncoding (G4int encoding, G4int &Z, G4int &A, G4int &L, G4double &E, G4int &lvl)
 

Static Public Attributes

static G4ThreadLocal G4IonListfIonList = 0
 
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList = 0
 
static G4IonListfIonListShadow = 0
 
static std::vector< G4VIsotopeTable * > * fIsotopeTableListShadow = 0
 
static const G4String elementName [numberOfElements]
 

Protected Member Functions

 G4IonTable (const G4IonTable &right)
 
G4IonTableoperator= (const G4IonTable &)
 
G4ParticleDefinitionFindIonInMaster (G4int Z, G4int A, G4int lvl=0)
 
G4ParticleDefinitionFindIonInMaster (G4int Z, G4int A, G4int L, G4int lvl)
 
G4ParticleDefinitionFindIonInMaster (G4int Z, G4int A, G4double E, G4int J=0)
 
G4ParticleDefinitionFindIonInMaster (G4int Z, G4int A, G4int L, G4double E, G4int J=0)
 
G4ParticleDefinitionCreateIon (G4int Z, G4int A, G4double E)
 
G4ParticleDefinitionCreateIon (G4int Z, G4int A, G4int L, G4double E)
 
G4ParticleDefinitionCreateIon (G4int Z, G4int A, G4int lvl=0)
 
G4ParticleDefinitionCreateIon (G4int Z, G4int A, G4int L, G4int lvl)
 
void InsertWorker (const G4ParticleDefinition *particle)
 
G4IsotopePropertyFindIsotope (G4int Z, G4int A, G4double E) const
 
G4IsotopePropertyFindIsotope (G4int Z, G4int A, G4int lvl) const
 
G4ParticleDefinitionGetLightIon (G4int Z, G4int A) const
 
G4ParticleDefinitionGetLightAntiIon (G4int Z, G4int A) const
 
G4bool IsLightIon (const G4ParticleDefinition *) const
 
G4bool IsLightAntiIon (const G4ParticleDefinition *) const
 
void AddProcessManager (G4ParticleDefinition *)
 
G4int GetVerboseLevel () const
 

Private Attributes

G4NuclideTablepNuclideTable
 
G4bool isIsomerCreated
 
G4int n_error
 

Detailed Description

Definition at line 65 of file G4IonTable.hh.

Member Typedef Documentation

◆ G4IonList

typedef std::multimap<G4int, const G4ParticleDefinition*> G4IonTable::G4IonList

Definition at line 74 of file G4IonTable.hh.

◆ G4IonListIterator

typedef std::multimap<G4int, const G4ParticleDefinition*>::iterator G4IonTable::G4IonListIterator

Definition at line 75 of file G4IonTable.hh.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
numberOfElements 

Definition at line 300 of file G4IonTable.hh.

Constructor & Destructor Documentation

◆ G4IonTable() [1/2]

G4IonTable::G4IonTable ( )

Definition at line 117 of file G4IonTable.cc.

118  : pNuclideTable(0),
119  isIsomerCreated(false),
120  n_error(0)
121 {
122  fIonList = new G4IonList();
123 
124  // Set up the shadow pointer used by worker threads.
125  //
126  if (fIonListShadow == 0)
127  {
129  }
130 
131  fIsotopeTableList = new std::vector<G4VIsotopeTable*>;
132 
133  // Set up the shadow pointer used by worker threads.
134  //
135  if (fIsotopeTableListShadow == 0)
136  {
138  }
139 
142 }
void RegisterIsotopeTable(G4VIsotopeTable *table)
Definition: G4IonTable.cc:1487
static std::vector< G4VIsotopeTable * > * fIsotopeTableListShadow
Definition: G4IonTable.hh:292
void PrepareNuclideTable()
Definition: G4IonTable.cc:1561
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
Definition: G4IonTable.hh:290
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
G4bool isIsomerCreated
Definition: G4IonTable.hh:285
std::multimap< G4int, const G4ParticleDefinition * > G4IonList
Definition: G4IonTable.hh:74
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
G4int n_error
Definition: G4IonTable.hh:307
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4IonTable() [2/2]

G4IonTable::G4IonTable ( const G4IonTable right)
protected

◆ ~G4IonTable()

G4IonTable::~G4IonTable ( )
virtual

Definition at line 186 of file G4IonTable.cc.

187 {
188  // delete IsotopeTable if exists
189  if (fIsotopeTableList != 0)
190  {
191  for (size_t i = 0; i< fIsotopeTableList->size(); ++i)
192  {
193  G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[i];
194  //delete fIsotopeTable;
195  if( fIsotopeTable != G4NuclideTable::GetNuclideTable() ) delete fIsotopeTable;
196  }
197  fIsotopeTableList->clear();
198  delete fIsotopeTableList;
199  }
201 
202 
203  if (fIonList ==0) return;
204  // remove all contents in the Ion List
205  // No need to delete here because all particles are dynamic objects
206  fIonList->clear();
207 
208  delete fIonList;
209  fIonList =0;
210 }
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
Definition: G4IonTable.hh:290
static G4NuclideTable * GetNuclideTable()
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
Here is the call graph for this function:
Here is the caller graph for this function:

Member Function Documentation

◆ AddProcessManager()

void G4IonTable::AddProcessManager ( G4ParticleDefinition ion)
protected

Definition at line 1448 of file G4IonTable.cc.

1449 {
1450  // check State and do not attach process managaer in event loop
1451 // G4StateManager* pStateManager = G4StateManager::GetStateManager();
1452 // G4ApplicationState currentState = pStateManager->GetCurrentState();
1453 // if (currentState == G4State_EventProc) return;
1454 // {
1455 // if (n_error<10)
1456 // {
1457 // G4cout << "Defining process manager for " << ion->GetParticleName() << G4endl;
1458 // G4Exception("G4IonTable::AddProcessManager()", "PART130", JustWarning,
1459 // "Defining process manager during an event loop is thread unsafe and will be dropped from the next release.");
1460 // n_error +=1;
1461 // }
1462 // return;
1463 // }
1464 
1465  // check whether GenericIon has processes
1466  G4ParticleDefinition* genericIon =
1468 
1469  G4ProcessManager* pman=0;
1470  if (genericIon!=0) pman = genericIon->GetProcessManager();
1471  if ((genericIon ==0) || (genericIon->GetParticleDefinitionID() < 0) || (pman==0)){
1472  G4cout << "G4IonTable::AddProcessManager() : can not create ion of "
1473  << ion->GetParticleName()
1474  << " because GenericIon is not available!!" << G4endl;
1475  G4Exception( "G4IonTable::AddProcessManager()","PART105", FatalException,
1476  "Can not create ions because GenericIon is not available");
1477  return;
1478  }
1479 
1482 }
void SetParticleDefinitionID(G4int id=-1)
G4ProcessManager * GetProcessManager() const
G4ParticleDefinition * GetGenericIon() const
G4int GetParticleDefinitionID() const
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ParticleTable * GetParticleTable()
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clear()

void G4IonTable::clear ( void  )

Definition at line 1289 of file G4IonTable.cc.

1290 {
1291  if (G4ParticleTable::GetParticleTable()->GetReadiness()) {
1292  G4Exception("G4IonTable::clear()",
1293  "PART116", JustWarning,
1294  "No effects because readyToUse is true.");
1295  return;
1296  }
1297 
1298 #ifdef G4VERBOSE
1299  if (GetVerboseLevel()>2) {
1300  G4cout << "G4IonTable::Clear() : number of Ion regsitered = ";
1301  G4cout << fIonList->size() << G4endl;
1302  }
1303 #endif
1304  fIonList->clear();
1305 }
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ParticleTable * GetParticleTable()
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Contains()

G4bool G4IonTable::Contains ( const G4ParticleDefinition particle) const

Definition at line 1610 of file G4IonTable.cc.

1611 {
1612  if (!IsIon(particle)) return false;
1613 
1614  G4int Z = particle->GetAtomicNumber();
1615  G4int A = particle->GetAtomicMass();
1616  G4int LL = particle->GetQuarkContent(3); //strangeness
1617  G4int encoding=GetNucleusEncoding(Z, A, LL);
1618  G4bool found = false;
1619  if (encoding !=0 ) {
1620  G4IonList::iterator i = fIonListShadow->find(encoding);
1621  for( ;i != fIonListShadow->end() ; i++) {
1622  if (particle == i->second ) {
1623  found = true;
1624  break;
1625  }
1626  }
1627  }
1628  return found;
1629 }
G4int GetQuarkContent(G4int flavor) const
static G4bool IsIon(const G4ParticleDefinition *)
Definition: G4IonTable.cc:1091
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
double A(double temperature)
Float_t Z
bool G4bool
Definition: G4Types.hh:79
G4int GetAtomicNumber() const
static const G4int LL[nN]
G4int GetAtomicMass() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateAllIon()

void G4IonTable::CreateAllIon ( )

Definition at line 1549 of file G4IonTable.cc.

1550 {
1551  PreloadNuclide();
1552 }
void PreloadNuclide()
Definition: G4IonTable.cc:1567
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateAllIsomer()

void G4IonTable::CreateAllIsomer ( )

Definition at line 1555 of file G4IonTable.cc.

1556 {
1557  PreloadNuclide();
1558 }
void PreloadNuclide()
Definition: G4IonTable.cc:1567
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateIon() [1/4]

G4ParticleDefinition * G4IonTable::CreateIon ( G4int  Z,
G4int  A,
G4double  E 
)
protected

Definition at line 243 of file G4IonTable.cc.

244 {
246 
247  // check whether GenericIon has processes
248  G4ParticleDefinition* genericIon =
250  G4ProcessManager* pman=0;
251  if (genericIon!=0) pman = genericIon->GetProcessManager();
252  if ((genericIon ==0) || (genericIon->GetParticleDefinitionID() < 0) || (pman==0)){
253 #ifdef G4VERBOSE
254  if (GetVerboseLevel()>1) {
255  G4cout << "G4IonTable::CreateIon() : can not create ion of "
256  << " Z =" << Z << " A = " << A
257  << " because GenericIon is not ready !!" << G4endl;
258  }
259 #endif
260  G4Exception( "G4IonTable::CreateIon()","PART105",
261  JustWarning,
262  "Can not create ions because GenericIon is not ready");
263  return 0;
264  }
265 
266  G4double life = -1.0;
267  G4DecayTable* decayTable =0;
268  G4bool stable = true;
269  G4double mu = 0.0;
270  G4double Eex = 0.0;
271  G4int lvl =0;
272  G4int J=0;
273 
274  const G4IsotopeProperty* fProperty = FindIsotope(Z, A, E);
275  if (fProperty !=0 ){
276  Eex = fProperty->GetEnergy();
277  lvl = fProperty->GetIsomerLevel();
278  J = fProperty->GetiSpin();
279  life = fProperty->GetLifeTime();
280  mu = fProperty->GetMagneticMoment();
281  decayTable = fProperty->GetDecayTable();
282  stable = (life <= 0.) || (decayTable ==0);
283  lvl = fProperty->GetIsomerLevel();
284  if (lvl <0) lvl=9;
285  } else {
286 #ifdef G4VERBOSE
287  if (GetVerboseLevel()>1) {
289  ed << "G4IonTable::CreateIon() : G4IsotopeProperty object was not found for"
290  << " Z = " << Z << " A = " << A << " E = " << E/keV << " (keV).\n"
291  << " Physics quantities such as life are not set for this ion.";
292  G4Exception( "G4IonTable::CreateIon()","PART70105", JustWarning, ed);
293  }
294 #endif
295  // excitation energy
296  Eex = E;
297  // lvl is assigned to 9 temporally
298  if (Eex>0.0) lvl=9;
299  }
300 
301  //Eex = G4NuclideTable::Round(Eex);
302  if (Eex==0.0) lvl=0;
303  // ion name
304  G4String name ="";
306  if (lvl==0) name = GetIonName(Z, A, lvl);
307  else name = GetIonName(Z, A, Eex);
308 
309  // PDG encoding
311 
312 //G4cout<<"G4IonTable::CreateIon "<<"Z:"<<Z<<" A:"<<A<<" E:"<<E<<" Eex:"<<Eex<<" lvl:"<<lvl<<" name:"<<name<<" code:"<<encoding<<G4endl;
313  // PDG mass
314  G4double mass = GetNucleusMass(Z, A)+ Eex;
315 
316  // PDG charge is set to one of nucleus
317  G4double charge = G4double(Z)*eplus;
318 
319  // create an ion
320  // spin, parity, isospin values are fixed
321 
322  // Request lock for particle table accesses. Some changes are inside
323  // this critical region.
324  //
325 
326  ion = new G4Ions( name, mass, 0.0*MeV, charge,
327  J, +1, 0,
328  0, 0, 0,
329  "nucleus", 0, A, encoding,
330  stable, life, decayTable, false,
331  "generic", 0,
332  Eex, lvl );
333 
334  // Release lock for particle table accesses.
335  //
336 
337  ion->SetPDGMagneticMoment(mu);
338 
339  //No Anti particle registered
340  ion->SetAntiPDGEncoding(0);
341 
342 #ifdef G4VERBOSE
343  if (GetVerboseLevel()>1) {
344  G4cout << "G4IonTable::CreateIon() : create ion of " << name
345  << " " << Z << ", " << A
346  << " encoding=" << encoding;
347  if (E>0.0) {
348  G4cout << " IsomerLVL=" << lvl
349  << " excited energy=" << Eex/keV << "[keV]";
350  }
351  G4cout << G4endl;
352  }
353 #endif
354 
355  // Add process manager to the ion
356  AddProcessManager(ion);
357 
358 #ifdef G4MULTITHREADED
359  // Fill decay channels if this method is invoked from worker
361  {
362  if(!stable && decayTable)
363  {
364  G4int nCh = decayTable->entries();
365  for(G4int iCh=0;iCh<nCh;iCh++)
366  { decayTable->GetDecayChannel(iCh)->GetDaughter(0); }
367  }
368  }
369 #endif
370 
371  return ion;
372 }
G4int GetiSpin() const
static const double MeV
Definition: G4SIunits.hh:211
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4DecayTable * GetDecayTable() const
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
void SetAntiPDGEncoding(G4int aEncoding)
G4double GetNucleusMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
Definition: G4IonTable.cc:1214
G4String name
Definition: TRTMaterials.hh:40
G4ParticleDefinition * GetDaughter(G4int anIndex)
G4double GetLifeTime() const
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
G4IsotopeProperty * FindIsotope(G4int Z, G4int A, G4double E) const
Definition: G4IonTable.cc:1512
const G4String & GetIonName(G4int Z, G4int A, G4int lvl=0) const
Definition: G4IonTable.cc:1038
G4ProcessManager * GetProcessManager() const
G4ParticleDefinition * GetGenericIon() const
G4int GetParticleDefinitionID() const
int G4int
Definition: G4Types.hh:78
G4double GetMagneticMoment() const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
G4int entries() const
#define encoding
Definition: xmlparse.cc:605
void AddProcessManager(G4ParticleDefinition *)
Definition: G4IonTable.cc:1448
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
static G4ParticleTable * GetParticleTable()
G4VDecayChannel * GetDecayChannel(G4int index) const
#define G4endl
Definition: G4ios.hh:61
static const double keV
Definition: G4SIunits.hh:213
double G4double
Definition: G4Types.hh:76
static const double eplus
Definition: G4SIunits.hh:196
void SetPDGMagneticMoment(G4double mageticMoment)
G4double GetEnergy() const
G4int GetIsomerLevel() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateIon() [2/4]

G4ParticleDefinition * G4IonTable::CreateIon ( G4int  Z,
G4int  A,
G4int  L,
G4double  E 
)
protected

Definition at line 376 of file G4IonTable.cc.

377 {
378  if (LL==0) return CreateIon(Z,A,E);
379 
380  // create hyper nucleus
382 
383  // check whether GenericIon has processes
384  G4ParticleDefinition* genericIon =
386  G4ProcessManager* pman=0;
387  if (genericIon!=0) pman = genericIon->GetProcessManager();
388  if ((genericIon ==0) || (genericIon->GetParticleDefinitionID() < 0) || (pman==0)){
389 #ifdef G4VERBOSE
390  if (GetVerboseLevel()>1) {
391  G4cout << "G4IonTable::CreateIon() : can not create ion of "
392  << " Z =" << Z << " A = " << A
393  << " because GenericIon is not ready !!" << G4endl;
394  }
395 #endif
396  G4Exception( "G4IonTable::CreateIon()","PART105", JustWarning,
397  "Can not create ions because GenericIon is not ready");
398  return 0;
399  }
400 
401  G4int J=0;
402  G4double life = -1.0;
403  G4DecayTable* decayTable =0;
404  G4bool stable = true;
405 
406  // excitation energy
407  //G4double Eex = G4NuclideTable::Round(E);
408  G4double Eex = E;
409  G4double mass = GetNucleusMass(Z, A, LL)+ Eex;
410  G4int lvl = 0;
411  // lvl is assigned to 9 temporally
412  if (Eex>0.0) lvl=9;
413 
414  // PDG encoding
416 
417  // PDG charge is set to one of nucleus
418  G4double charge = G4double(Z)*eplus;
419 
420  // create an ion
421  // spin, parity, isospin values are fixed
422  //
423  // get ion name
424  G4String name = GetIonName(Z, A, LL, Eex);
425 
426  ion = new G4Ions( name, mass, 0.0*MeV, charge,
427  J, +1, 0,
428  0, 0, 0,
429  "nucleus", 0, A, encoding,
430  stable, life, decayTable, false,
431  "generic", 0,
432  Eex, lvl );
433 
434  // Release lock for particle table accesses.
435  //
436 
437  G4double mu = 0.0; // magnetic moment
438  ion->SetPDGMagneticMoment(mu);
439 
440  //No Anti particle registered
441  ion->SetAntiPDGEncoding(0);
442 
443 #ifdef G4VERBOSE
444  if (GetVerboseLevel()>1) {
445  G4cout << "G4IonTable::CreateIon() : create hyper ion of " << name
446  << " " << Z << ", " << A << ", " << LL
447  << " encoding=" << encoding;
448  if (E>0.0) {
449  G4cout << " IsomerLVL=" << lvl
450  << " excited energy=" << Eex/keV << "[keV]";
451  }
452  G4cout << G4endl;
453  }
454 #endif
455 
456  // Add process manager to the ion
457  AddProcessManager(ion);
458 
459  return ion;
460 }
static const double MeV
Definition: G4SIunits.hh:211
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
void SetAntiPDGEncoding(G4int aEncoding)
G4double GetNucleusMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
Definition: G4IonTable.cc:1214
G4String name
Definition: TRTMaterials.hh:40
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
const G4String & GetIonName(G4int Z, G4int A, G4int lvl=0) const
Definition: G4IonTable.cc:1038
G4ProcessManager * GetProcessManager() const
G4ParticleDefinition * GetGenericIon() const
G4int GetParticleDefinitionID() const
int G4int
Definition: G4Types.hh:78
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
Definition: G4IonTable.cc:243
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
#define encoding
Definition: xmlparse.cc:605
void AddProcessManager(G4ParticleDefinition *)
Definition: G4IonTable.cc:1448
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ParticleTable * GetParticleTable()
static const G4int LL[nN]
#define G4endl
Definition: G4ios.hh:61
static const double keV
Definition: G4SIunits.hh:213
double G4double
Definition: G4Types.hh:76
static const double eplus
Definition: G4SIunits.hh:196
void SetPDGMagneticMoment(G4double mageticMoment)
Here is the call graph for this function:

◆ CreateIon() [3/4]

G4ParticleDefinition * G4IonTable::CreateIon ( G4int  Z,
G4int  A,
G4int  lvl = 0 
)
protected

Definition at line 463 of file G4IonTable.cc.

464 {
465  if(lvl == 0) return CreateIon(Z,A,0.0);
466  G4Exception( "G4IonTable::CreateIon()","PART105", JustWarning,
467  "Ion cannot be created by an isomer level. Use excitation energy.");
468  return 0;
469 }
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
Definition: G4IonTable.cc:243
double A(double temperature)
Float_t Z
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:

◆ CreateIon() [4/4]

G4ParticleDefinition * G4IonTable::CreateIon ( G4int  Z,
G4int  A,
G4int  L,
G4int  lvl 
)
protected

Definition at line 473 of file G4IonTable.cc.

474 {
475  if (LL==0) return CreateIon(Z,A,lvl);
476 
477  if (lvl>0) {
479  ed << "Isomer level " << lvl << " is unknown for the isotope (Z="
480  << Z << ", A=" << A << ", L=" << LL << "). Null pointer is returned.";
481  G4Exception( "G4IonTable::GetIon()","PART106", JustWarning, ed);
482  return 0;
483  }
484 
485  return CreateIon(Z,A,LL,0.0);
486 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
Definition: G4IonTable.cc:243
double A(double temperature)
Float_t Z
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static const G4int LL[nN]
Here is the call graph for this function:

◆ DestroyWorkerG4IonTable()

void G4IonTable::DestroyWorkerG4IonTable ( )

Definition at line 213 of file G4IonTable.cc.

214 {
215  // delete IsotopeTable if exists
216  if (fIsotopeTableList != 0)
217  {
218  for (size_t i = 0; i< fIsotopeTableList->size(); ++i)
219  {
220  G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[i];
221  //delete fIsotopeTable;
222  if( fIsotopeTable != G4NuclideTable::GetNuclideTable() ) delete fIsotopeTable;
223  }
224  fIsotopeTableList->clear();
225  delete fIsotopeTableList;
226  }
228 
229 
230  if (fIonList ==0) return;
231  // remove all contents in the Ion List
232  // No need to delete here because all particles are dynamic objects
233  fIonList->clear();
234 
235  delete fIonList;
236  fIonList =0;
237 }
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
Definition: G4IonTable.hh:290
static G4NuclideTable * GetNuclideTable()
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DumpTable()

void G4IonTable::DumpTable ( const G4String particle_name = "ALL") const

Definition at line 1410 of file G4IonTable.cc.

1411 {
1412  const G4ParticleDefinition* ion;
1413  G4IonList::iterator idx;
1414  for (idx = fIonList->begin(); idx!= fIonList->end(); ++idx) {
1415  ion = idx->second;
1416  if (( particle_name == "ALL" ) || (particle_name == "all")){
1417  ion->DumpTable();
1418  } else if ( particle_name == ion->GetParticleName() ) {
1419  ion->DumpTable();
1420  }
1421  }
1422 }
const G4String & GetParticleName() const
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Entries()

G4int G4IonTable::Entries ( ) const

Definition at line 1632 of file G4IonTable.cc.

1633 {
1634  return fIonList->size();
1635 }
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
Here is the caller graph for this function:

◆ FindIon() [1/4]

G4ParticleDefinition * G4IonTable::FindIon ( G4int  Z,
G4int  A,
G4int  lvl = 0 
)

Definition at line 798 of file G4IonTable.cc.

799 {
800  if ( (A<1) || (Z<=0) || (lvl<0) || (A>999) ) {
801 #ifdef G4VERBOSE
802  if (GetVerboseLevel()>0) {
803  G4cout << "G4IonTable::FindIon() : illegal atomic number/mass or excitation level "
804  << " Z =" << Z << " A = " << A << " IsoLvl = " << lvl << G4endl;
805  }
806 #endif
807  G4Exception( "G4IonTable::FindIon()","PART107",
808  JustWarning, "illegal atomic number/mass");
809  return 0;
810  }
811  // Search ions with A, Z ,E
812  // !! J is omitted now !!
813  const G4ParticleDefinition* ion=0;
814  G4bool isFound = false;
815 
816  // check if light ion
817  ion = GetLightIon(Z,A);
818  if (ion!=0 && lvl==0) {
819  // light ion
820  isFound = true;
821  } else {
822  // -- loop over all particles in Ion table
824  G4IonList::iterator i = fIonList->find(encoding);
825  for( ;i != fIonList->end() ; i++) {
826  ion = i->second;
827  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
828  // excitation level
829  if ( ((const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
830  isFound = true;
831  break;
832  }
833  }
834  }
835 
836  if ( isFound ){
837  if(lvl==9)
838  {
839  G4Exception("G4IonTable::FindIon()","PART5107",JustWarning,
840  "Isomer level 9 may be ambiguous.");
841  }
842  return const_cast<G4ParticleDefinition*>(ion);
843  } else {
844  return 0;
845  }
846 }
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4int GetAtomicNumber() const
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
#define G4endl
Definition: G4ios.hh:61
G4int GetAtomicMass() const
G4ParticleDefinition * GetLightIon(G4int Z, G4int A) const
Definition: G4IonTable.cc:1161
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FindIon() [2/4]

G4ParticleDefinition * G4IonTable::FindIon ( G4int  Z,
G4int  A,
G4int  L,
G4int  lvl 
)

Definition at line 850 of file G4IonTable.cc.

851 {
852  if (LL==0) return FindIon(Z,A,lvl);
853 
854  if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) {
855 #ifdef G4VERBOSE
856  if (GetVerboseLevel()>0) {
857  G4cout << "G4IonTable::FindIon() : illegal atomic number/mass or excitation level "
858  << " Z =" << Z << " A = " << A << " L = " << LL
859  <<" IsomerLvl = " << lvl << G4endl;
860  }
861 #endif
862  G4Exception( "G4IonTable::FindIon()","PART107",
863  JustWarning, "illegal atomic number/mass");
864  return 0;
865  }
866  // Search ions with A, Z ,E, lvl
867  const G4ParticleDefinition* ion=0;
868  G4bool isFound = false;
869 
870  // -- loop over all particles in Ion table
872  G4IonList::iterator i = fIonList->find(encoding);
873  for( ;i != fIonList->end() ; i++) {
874  ion = i->second;
875  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
876  if ( ion->GetQuarkContent(3) != LL) break;
877  // excitation level
878  if ( ((const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
879  isFound = true;
880  break;
881  }
882  }
883 
884  if ( isFound ){
885  if(lvl==9)
886  {
887  G4Exception("G4IonTable::FindIon()","PART5107",JustWarning,
888  "Isomer level 9 may be ambiguous.");
889  }
890  return const_cast<G4ParticleDefinition*>(ion);
891  } else {
892  return 0;
893  }
894 }
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4int GetQuarkContent(G4int flavor) const
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
G4int GetAtomicNumber() const
static const G4int LL[nN]
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
#define G4endl
Definition: G4ios.hh:61
G4int GetAtomicMass() const
Here is the call graph for this function:

◆ FindIon() [3/4]

G4ParticleDefinition * G4IonTable::FindIon ( G4int  Z,
G4int  A,
G4double  E,
G4int  J = 0 
)

Definition at line 705 of file G4IonTable.cc.

706 {
707  if ( (A<1) || (Z<=0) || (J<0) || (E<0.0) || (A>999) ) {
708 #ifdef G4VERBOSE
709  if (GetVerboseLevel()>0) {
710  G4cout << "G4IonTable::FindIon() : illegal atomic number/mass or excitation level "
711  << " Z =" << Z << " A = " << A << " E = " << E/keV << G4endl;
712  }
713 #endif
714  G4Exception( "G4IonTable::FindIon()","PART107",
715  JustWarning, "illegal atomic number/mass");
716  return 0;
717  }
718  // Search ions with A, Z ,E
719  // !! J is omitted now !!
720  const G4ParticleDefinition* ion=0;
721  G4bool isFound = false;
722 
723  // check if light ion
724  ion = GetLightIon(Z,A);
725  if (ion!=0 && E==0.0) {
726  // light ion
727  isFound = true;
728  } else {
729  // -- loop over all particles in Ion table
731  G4IonList::iterator i = fIonList->find(encoding);
732  for( ;i != fIonList->end() ; i++) {
733  ion = i->second;
734  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
735  // excitation level
736  G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
737  if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
738  isFound = true;
739  break;
740  }
741  }
742  }
743 
744  if ( isFound ){
745  return const_cast<G4ParticleDefinition*>(ion);
746  } else {
747  return 0;
748  }
749 }
G4double GetLevelTolerance()
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4int GetAtomicNumber() const
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
#define G4endl
Definition: G4ios.hh:61
static const double keV
Definition: G4SIunits.hh:213
double G4double
Definition: G4Types.hh:76
G4int GetAtomicMass() const
G4ParticleDefinition * GetLightIon(G4int Z, G4int A) const
Definition: G4IonTable.cc:1161
Here is the call graph for this function:

◆ FindIon() [4/4]

G4ParticleDefinition * G4IonTable::FindIon ( G4int  Z,
G4int  A,
G4int  L,
G4double  E,
G4int  J = 0 
)

Definition at line 753 of file G4IonTable.cc.

754 {
755  if (LL==0) return FindIon(Z,A,E,J);
756 
757  if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) {
758 #ifdef G4VERBOSE
759  if (GetVerboseLevel()>0) {
760  G4cout << "G4IonTable::FindIon() : illegal atomic number/mass or excitation level "
761  << " Z =" << Z << " A = " << A << " L = " << LL
762  <<" E = " << E/keV << G4endl;
763  }
764 #endif
765  G4Exception( "G4IonTable::FindIon()","PART107",
766  JustWarning, "illegal atomic number/mass");
767  return 0;
768  }
769  // Search ions with A, Z ,E
770  // !! J is omitted now !!
771  const G4ParticleDefinition* ion=0;
772  G4bool isFound = false;
773 
774  // -- loop over all particles in Ion table
775  G4int encoding=GetNucleusEncoding(Z, A, LL, 0.0, 0);
776  G4IonList::iterator i = fIonList->find(encoding);
777  for( ;i != fIonList->end() ; i++) {
778  ion = i->second;
779  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
780  if( ion->GetQuarkContent(3) != LL) break;
781  // excitation level
782  G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
783  if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
784  isFound = true;
785  break;
786  }
787  }
788 
789  if ( isFound ){
790  return const_cast<G4ParticleDefinition*>(ion);
791  } else {
792  return 0;
793  }
794 }
G4double GetLevelTolerance()
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4int GetQuarkContent(G4int flavor) const
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
G4int GetAtomicNumber() const
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
static const G4int LL[nN]
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
#define G4endl
Definition: G4ios.hh:61
static const double keV
Definition: G4SIunits.hh:213
double G4double
Definition: G4Types.hh:76
G4int GetAtomicMass() const
Here is the call graph for this function:

◆ FindIonInMaster() [1/4]

G4ParticleDefinition * G4IonTable::FindIonInMaster ( G4int  Z,
G4int  A,
G4int  lvl = 0 
)
protected

Definition at line 1708 of file G4IonTable.cc.

1709 {
1710  // Search ions with A, Z ,E
1711  // !! J is omitted now !!
1712  const G4ParticleDefinition* ion=0;
1713  G4bool isFound = false;
1714 
1715  // -- loop over all particles in Ion table
1717  G4IonList::iterator i = fIonListShadow->find(encoding);
1718  for( ;i != fIonListShadow->end() ; i++) {
1719  ion = i->second;
1720  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
1721  // excitation level
1722  if ( ((const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
1723  isFound = true;
1724  break;
1725  }
1726  }
1727 
1728  if ( isFound ){
1729  return const_cast<G4ParticleDefinition*>(ion);
1730  } else {
1731  return 0;
1732  }
1733 }
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
G4int GetAtomicNumber() const
G4int GetAtomicMass() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FindIonInMaster() [2/4]

G4ParticleDefinition * G4IonTable::FindIonInMaster ( G4int  Z,
G4int  A,
G4int  L,
G4int  lvl 
)
protected

Definition at line 1737 of file G4IonTable.cc.

1738 {
1739  if (LL==0) return FindIon(Z,A,lvl);
1740 
1741  // Search ions with A, Z ,E, lvl
1742  const G4ParticleDefinition* ion=0;
1743  G4bool isFound = false;
1744 
1745  // -- loop over all particles in Ion table
1747  G4IonList::iterator i = fIonListShadow->find(encoding);
1748  for( ;i != fIonListShadow->end() ; i++) {
1749  ion = i->second;
1750  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
1751  if ( ion->GetQuarkContent(3) != LL) break;
1752  // excitation level
1753  if ( ((const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
1754  isFound = true;
1755  break;
1756  }
1757  }
1758 
1759  if ( isFound ){
1760  return const_cast<G4ParticleDefinition*>(ion);
1761  } else {
1762  return 0;
1763  }
1764 }
G4int GetQuarkContent(G4int flavor) const
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
G4int GetAtomicNumber() const
static const G4int LL[nN]
G4int GetAtomicMass() const
Here is the call graph for this function:

◆ FindIonInMaster() [3/4]

G4ParticleDefinition * G4IonTable::FindIonInMaster ( G4int  Z,
G4int  A,
G4double  E,
G4int  J = 0 
)
protected

Definition at line 1645 of file G4IonTable.cc.

1646 {
1647  // Search ions with A, Z ,E
1648  // !! J is omitted now !!
1649  const G4ParticleDefinition* ion=0;
1650  G4bool isFound = false;
1651 
1652  // -- loop over all particles in Ion table
1654  G4IonList::iterator i = fIonListShadow->find(encoding);
1655  for( ;i != fIonListShadow->end() ; i++) {
1656  ion = i->second;
1657  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
1658  // excitation level
1659  G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
1660  if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
1661  isFound = true;
1662  break;
1663  }
1664  }
1665 
1666  if ( isFound ){
1667  return const_cast<G4ParticleDefinition*>(ion);
1668  } else {
1669  return 0;
1670  }
1671 }
G4double GetLevelTolerance()
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
G4int GetAtomicNumber() const
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
double G4double
Definition: G4Types.hh:76
G4int GetAtomicMass() const
Here is the call graph for this function:

◆ FindIonInMaster() [4/4]

G4ParticleDefinition * G4IonTable::FindIonInMaster ( G4int  Z,
G4int  A,
G4int  L,
G4double  E,
G4int  J = 0 
)
protected

Definition at line 1675 of file G4IonTable.cc.

1676 {
1677  if (LL==0) return FindIon(Z,A,E,J);
1678 
1679  // Search ions with A, Z ,E
1680  // !! J is omitted now !!
1681  const G4ParticleDefinition* ion=0;
1682  G4bool isFound = false;
1683 
1684  // -- loop over all particles in Ion table
1685  G4int encoding=GetNucleusEncoding(Z, A, LL, 0.0, 0);
1686  G4IonList::iterator i = fIonListShadow->find(encoding);
1687  for( ;i != fIonListShadow->end() ; i++) {
1688  ion = i->second;
1689  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
1690  if( ion->GetQuarkContent(3) != LL) break;
1691  // excitation level
1692  G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
1693  if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
1694  isFound = true;
1695  break;
1696  }
1697  }
1698 
1699  if ( isFound ){
1700  return const_cast<G4ParticleDefinition*>(ion);
1701  } else {
1702  return 0;
1703  }
1704 }
G4double GetLevelTolerance()
G4int GetQuarkContent(G4int flavor) const
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
G4int GetAtomicNumber() const
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
static const G4int LL[nN]
double G4double
Definition: G4Types.hh:76
G4int GetAtomicMass() const
Here is the call graph for this function:

◆ FindIsotope() [1/2]

G4IsotopeProperty * G4IonTable::FindIsotope ( G4int  Z,
G4int  A,
G4double  E 
) const
protected

Definition at line 1512 of file G4IonTable.cc.

1513 {
1514  if (fIsotopeTableList ==0) return 0;
1515  if (fIsotopeTableList->size()==0) return 0;
1516 
1517  G4IsotopeProperty* property =0;
1518 
1519  // iterate
1520  for (size_t i = 0; i<fIsotopeTableList->size(); ++i) {
1521  G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[fIsotopeTableList->size()-i-1];
1522  property = fIsotopeTable->GetIsotope(Z,A,E);
1523  if(property) break;
1524  }
1525 
1526  return property;
1527 }
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
Definition: G4IonTable.hh:290
double A(double temperature)
virtual G4IsotopeProperty * GetIsotope(G4int Z, G4int A, G4double E)=0
Float_t Z
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FindIsotope() [2/2]

G4IsotopeProperty * G4IonTable::FindIsotope ( G4int  Z,
G4int  A,
G4int  lvl 
) const
protected

Definition at line 1530 of file G4IonTable.cc.

1531 {
1532  if (fIsotopeTableList ==0) return 0;
1533  if (fIsotopeTableList->size()==0) return 0;
1534 
1535  G4IsotopeProperty* property =0;
1536 
1537  // iterate
1538  for (size_t i = 0; i<fIsotopeTableList->size(); ++i) {
1539  G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[fIsotopeTableList->size()-i-1];
1540  property = fIsotopeTable->GetIsotope(Z,A,lvl);
1541  if(property) break;
1542  }
1543 
1544  return property;
1545 }
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
Definition: G4IonTable.hh:290
double A(double temperature)
virtual G4IsotopeProperty * GetIsotope(G4int Z, G4int A, G4double E)=0
Float_t Z
Here is the call graph for this function:

◆ GetIon() [1/5]

G4ParticleDefinition * G4IonTable::GetIon ( G4int  Z,
G4int  A,
G4int  lvl = 0 
)

Definition at line 491 of file G4IonTable.cc.

492 {
493  if ( (A<1) || (Z<=0) || (lvl<0) || (A>999) ) {
494 #ifdef G4VERBOSE
495  if (GetVerboseLevel()>0) {
496  G4cout << "G4IonTable::GetIon() : illegal atomic number/mass"
497  << " Z =" << Z << " A = " << A << " Lvl = " << lvl << G4endl;
498  }
499 #endif
500  return 0;
501  }
502 
503  // Search ions with A, Z, lvl
505 
506  if ( ion == 0 && lvl == 0 ) return GetIon(Z,A,0.0);
507 
508  // create ion
509 #ifdef G4MULTITHREADED
510  if(ion == 0)
511  {
513  {
514  G4MUTEXLOCK(&G4IonTable::ionTableMutex);
515  ion = FindIonInMaster(Z,A,lvl);
516  if(ion == 0 && lvl == 0) ion = CreateIon(Z,A,lvl);
517  if(ion != 0) InsertWorker(ion);
518  G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
519  }
520  else
521  { if(lvl == 0) ion = CreateIon(Z,A,lvl); }
522  }
523 #else
524  if(ion == 0 && lvl == 0) ion = CreateIon(Z, A, lvl);
525 #endif
526 
527 // if(ion == 0)
528 // {
529 // G4ExceptionDescription ed;
530 // ed << "Isomer level " << lvl << " is unknown for the isotope (Z="
531 // << Z << ", A=" << A << "). Null pointer is returned.";
532 // G4Exception( "G4IonTable::GetIon()","PART106", JustWarning, ed);
533 // }
534  return ion;
535 }
#define G4MUTEXUNLOCK
Definition: G4Threading.hh:180
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
void InsertWorker(const G4ParticleDefinition *particle)
Definition: G4IonTable.cc:1322
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
Definition: G4IonTable.cc:243
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
#define G4MUTEXLOCK
Definition: G4Threading.hh:179
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
#define G4endl
Definition: G4ios.hh:61
G4ParticleDefinition * FindIonInMaster(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:1708
Here is the call graph for this function:

◆ GetIon() [2/5]

G4ParticleDefinition * G4IonTable::GetIon ( G4int  Z,
G4int  A,
G4int  L,
G4int  lvl 
)

Definition at line 539 of file G4IonTable.cc.

540 {
541  if (LL==0) return GetIon(Z,A,lvl);
542 
543  if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) {
544 #ifdef G4VERBOSE
545  if (GetVerboseLevel()>0) {
546  G4cout << "G4IonTable::GetIon() : illegal atomic number/mass"
547  << " Z =" << Z << " A = " << A << " L = " << LL
548  <<" IsomerLvl = " << lvl << G4endl;
549  }
550 #endif
551  return 0;
552  } else if( A==2 ) {
553 #ifdef G4VERBOSE
554  if (GetVerboseLevel()>0) {
555  G4cout << "G4IonTable::GetIon() : No boud state for "
556  << " Z =" << Z << " A = " << A << " L = " << LL
557  <<" IsomerLvl = " << lvl << G4endl;
558  }
559 #endif
560  return 0;
561  }
562 
563  // Search ions with A, Z
565 
566  // create ion
567  if (ion == 0) {
568  if (lvl==0) {
569 #ifdef G4MULTITHREADED
571  {
572  G4MUTEXLOCK(&G4IonTable::ionTableMutex);
573  ion = FindIonInMaster(Z,A,LL,lvl);
574  if(ion == 0) ion = CreateIon(Z, A, LL, lvl);
575  InsertWorker(ion);
576  G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
577  }
578  else
579  { ion = CreateIon(Z, A, LL, lvl); }
580 #else
581  ion = CreateIon(Z, A, LL, lvl);
582 #endif
583  }
584  }
585 
586 // if(ion == 0)
587 // {
588 // G4ExceptionDescription ed;
589 // ed << "Isomer level " << lvl << " is unknown for the isotope (Z="
590 // << Z << ", A=" << A << ", L=" << LL << "). Null pointer is returned.";
591 // G4Exception( "G4IonTable::GetIon()","PART106", JustWarning, ed);
592 // }
593  return ion;
594 }
#define G4MUTEXUNLOCK
Definition: G4Threading.hh:180
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
void InsertWorker(const G4ParticleDefinition *particle)
Definition: G4IonTable.cc:1322
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
Definition: G4IonTable.cc:243
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
#define G4MUTEXLOCK
Definition: G4Threading.hh:179
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
static const G4int LL[nN]
#define G4endl
Definition: G4ios.hh:61
G4ParticleDefinition * FindIonInMaster(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:1708
Here is the call graph for this function:

◆ GetIon() [3/5]

G4ParticleDefinition * G4IonTable::GetIon ( G4int  Z,
G4int  A,
G4double  E,
G4int  J = 0 
)

Definition at line 597 of file G4IonTable.cc.

598 {
599  if ( (A<1) || (Z<=0) || (E<0.0) || (A>999) || (J<0) ) {
600 #ifdef G4VERBOSE
601  if (GetVerboseLevel()>0) {
602  G4cout << "G4IonTable::GetIon() : illegal atomic number/mass"
603  << " Z =" << Z << " A = " << A << " E = " << E/keV << G4endl;
604  }
605 #endif
606  return 0;
607  }
608 
609  // Search ions with A, Z
611 
612  // create ion
613 #ifdef G4MULTITHREADED
614  if(ion == 0)
615  {
617  {
618  G4MUTEXLOCK(&G4IonTable::ionTableMutex);
619  ion = FindIonInMaster(Z,A,E,J);
620  if(ion == 0) ion = CreateIon(Z,A,E);
621  InsertWorker(ion);
622  G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
623  }
624  else
625  { ion = CreateIon(Z,A,E); }
626  }
627 #else
628  if (ion == 0) ion = CreateIon(Z, A, E);
629 #endif
630 
631  return ion;
632 }
#define G4MUTEXUNLOCK
Definition: G4Threading.hh:180
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
void InsertWorker(const G4ParticleDefinition *particle)
Definition: G4IonTable.cc:1322
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
Definition: G4IonTable.cc:243
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
#define G4MUTEXLOCK
Definition: G4Threading.hh:179
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
#define G4endl
Definition: G4ios.hh:61
static const double keV
Definition: G4SIunits.hh:213
G4ParticleDefinition * FindIonInMaster(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:1708
Here is the call graph for this function:

◆ GetIon() [4/5]

G4ParticleDefinition * G4IonTable::GetIon ( G4int  Z,
G4int  A,
G4int  L,
G4double  E,
G4int  J = 0 
)

Definition at line 635 of file G4IonTable.cc.

636 {
637  if (LL==0) return GetIon(Z,A,E,J);
638 
639  if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) {
640 #ifdef G4VERBOSE
641  if (GetVerboseLevel()>0) {
642  G4cout << "G4IonTable::GetIon() : illegal atomic number/mass"
643  << " Z =" << Z << " A = " << A << " L = " << LL
644  <<" E = " << E/keV << G4endl;
645  }
646 #endif
647  return 0;
648  } else if( A==2 ) {
649 #ifdef G4VERBOSE
650  if (GetVerboseLevel()>0) {
651  G4cout << "G4IonTable::GetIon() : No boud state for "
652  << " Z =" << Z << " A = " << A << " L = " << LL
653  << " E = " << E/keV << G4endl;
654  }
655 #endif
656  return 0;
657  }
658 
659  // Search ions with A, Z
661 
662  // create ion
663 #ifdef G4MULTITHREADED
664  if(ion == 0)
665  {
667  {
668  G4MUTEXLOCK(&G4IonTable::ionTableMutex);
669  ion = FindIonInMaster(Z,A,LL,E,J);
670  if(ion == 0) ion = CreateIon(Z,A,LL,E);
671  InsertWorker(ion);
672  G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
673  }
674  else
675  { ion = CreateIon(Z,A,LL,E); }
676  }
677 #else
678  if(ion == 0) ion = CreateIon(Z, A, LL, E);
679 #endif
680 
681  return ion;
682 }
#define G4MUTEXUNLOCK
Definition: G4Threading.hh:180
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
void InsertWorker(const G4ParticleDefinition *particle)
Definition: G4IonTable.cc:1322
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
Definition: G4IonTable.cc:243
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
#define G4MUTEXLOCK
Definition: G4Threading.hh:179
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:798
static const G4int LL[nN]
#define G4endl
Definition: G4ios.hh:61
static const double keV
Definition: G4SIunits.hh:213
G4ParticleDefinition * FindIonInMaster(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:1708
Here is the call graph for this function:

◆ GetIon() [5/5]

G4ParticleDefinition * G4IonTable::GetIon ( G4int  encoding)

Definition at line 685 of file G4IonTable.cc.

686 {
687  G4int Z, A, LL, IsoLvl;
688  G4double E;
689  if (!GetNucleusByEncoding(encoding,Z,A,LL,E,IsoLvl) ){
690 #ifdef G4VERBOSE
691  if (GetVerboseLevel()>0) {
692  G4cout << "G4IonTable::GetIon() : illegal encoding"
693  << " CODE:" << encoding << G4endl;
694  }
695 #endif
696  G4Exception( "G4IonTable::GetIon()","PART106",
697  JustWarning, "illegal encoding for an ion");
698  return 0;
699  }
700  //
701  return GetIon( Z, A, LL, IsoLvl);
702 }
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
int G4int
Definition: G4Types.hh:78
static G4bool GetNucleusByEncoding(G4int encoding, G4int &Z, G4int &A, G4double &E, G4int &lvl)
Definition: G4IonTable.cc:939
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static const G4int LL[nN]
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ GetIonMass()

G4double G4IonTable::GetIonMass ( G4int  Z,
G4int  A,
G4int  L = 0,
G4int  lvl = 0 
) const

Definition at line 1279 of file G4IonTable.cc.

1280 {
1281  return GetNucleusMass(Z,A,LL,lvl);
1282 }
G4double GetNucleusMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
Definition: G4IonTable.cc:1214
double A(double temperature)
Float_t Z
static const G4int LL[nN]
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIonName() [1/4]

const G4String & G4IonTable::GetIonName ( G4int  Z,
G4int  A,
G4int  lvl = 0 
) const

Definition at line 1038 of file G4IonTable.cc.

1039 {
1040  static G4ThreadLocal G4String *pname = 0;
1041  if (!pname) { pname = new G4String(""); G4AutoDelete::Register(pname); }
1042  G4String &name = *pname;
1043 
1044  static G4ThreadLocal std::ostringstream* os = 0;
1045  if ( ! os ) {
1046  os = new std::ostringstream();
1048  os->setf(std::ios::fixed);
1049  }
1050 
1051  if ( (0< Z) && (Z <=numberOfElements) ) {
1052  name = elementName[Z-1];
1053  } else if (Z > numberOfElements) {
1054  os->str("");
1055  os->operator<<(Z);
1056  name = "E" + os->str() + "-";
1057  } else {
1058  name = "?";
1059  return name;
1060  }
1061  // Atomic Mass
1062  os->str("");
1063  os->operator<<(A);
1064 
1065  if ( lvl>0 ){
1066  std::ostringstream& oo = *os;
1067  // isomer level for Excited nucelus
1068  oo<<'['<<lvl << ']';
1069  }
1070  name += os->str();
1071 
1072  return name;
1073 }
G4String name
Definition: TRTMaterials.hh:40
#define G4ThreadLocal
Definition: tls.hh:89
void Register(T *inst)
Definition: G4AutoDelete.hh:65
double A(double temperature)
Float_t Z
string pname
Definition: eplot.py:33
static const G4String elementName[numberOfElements]
Definition: G4IonTable.hh:301
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIonName() [2/4]

const G4String & G4IonTable::GetIonName ( G4int  Z,
G4int  A,
G4double  E 
) const

Definition at line 994 of file G4IonTable.cc.

995 {
996  static G4ThreadLocal G4String *pname = 0;
997  if (!pname) { pname = new G4String(""); G4AutoDelete::Register(pname); }
998  G4String &name = *pname;
999 
1000  static G4ThreadLocal std::ostringstream* os = 0;
1001  if ( ! os ) {
1002  os = new std::ostringstream();
1004  os->setf(std::ios::fixed);
1005  os->precision(3);
1006  }
1007 
1008  name = GetIonName(Z, A);
1009 
1010  //excited energy
1011  if ( E>0 ){
1012  os->str("");
1013  std::ostringstream& oo = *os;
1014  // Excited nucleus
1015  oo<<'['<<E/keV << ']';
1016  name += os->str();
1017  }
1018 
1019  return name;
1020 }
G4String name
Definition: TRTMaterials.hh:40
const G4String & GetIonName(G4int Z, G4int A, G4int lvl=0) const
Definition: G4IonTable.cc:1038
#define G4ThreadLocal
Definition: tls.hh:89
void Register(T *inst)
Definition: G4AutoDelete.hh:65
double A(double temperature)
Float_t Z
string pname
Definition: eplot.py:33
static const double keV
Definition: G4SIunits.hh:213
Here is the call graph for this function:

◆ GetIonName() [3/4]

const G4String & G4IonTable::GetIonName ( G4int  Z,
G4int  A,
G4int  L,
G4double  E 
) const

Definition at line 1023 of file G4IonTable.cc.

1024 {
1025  if (LL==0) return GetIonName(Z, A, E);
1026  static G4ThreadLocal G4String *pname = 0;
1027  if (!pname) { pname = new G4String(""); G4AutoDelete::Register(pname); }
1028  G4String &name = *pname;
1029  name = "";
1030  for (int i =0; i<LL; i++){
1031  name +="L";
1032  }
1033  name += GetIonName(Z, A, E);
1034  return name;
1035 }
G4String name
Definition: TRTMaterials.hh:40
const G4String & GetIonName(G4int Z, G4int A, G4int lvl=0) const
Definition: G4IonTable.cc:1038
#define G4ThreadLocal
Definition: tls.hh:89
void Register(T *inst)
Definition: G4AutoDelete.hh:65
double A(double temperature)
Float_t Z
string pname
Definition: eplot.py:33
static const G4int LL[nN]
Here is the call graph for this function:

◆ GetIonName() [4/4]

const G4String & G4IonTable::GetIonName ( G4int  Z,
G4int  A,
G4int  L,
G4int  lvl 
) const

Definition at line 1076 of file G4IonTable.cc.

1077 {
1078  if (LL==0) return GetIonName(Z, A, lvl);
1079  static G4ThreadLocal G4String *pname = 0;
1080  if (!pname) { pname = new G4String(""); G4AutoDelete::Register(pname); }
1081  G4String &name = *pname;
1082  for (int i =0; i<LL; i++){
1083  name +="L";
1084  }
1085  name += GetIonName(Z, A, lvl);
1086  return name;
1087 }
G4String name
Definition: TRTMaterials.hh:40
const G4String & GetIonName(G4int Z, G4int A, G4int lvl=0) const
Definition: G4IonTable.cc:1038
#define G4ThreadLocal
Definition: tls.hh:89
void Register(T *inst)
Definition: G4AutoDelete.hh:65
double A(double temperature)
Float_t Z
string pname
Definition: eplot.py:33
static const G4int LL[nN]
Here is the call graph for this function:

◆ GetIonTable()

static G4IonTable* G4IonTable::GetIonTable ( )
inlinestatic

Definition at line 78 of file G4IonTable.hh.

G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIsomerMass()

G4double G4IonTable::GetIsomerMass ( G4int  Z,
G4int  A,
G4int  lvl = 0 
) const

Definition at line 1273 of file G4IonTable.cc.

1274 {
1275  return GetNucleusMass(Z,A,0,lvl);
1276 }
G4double GetNucleusMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
Definition: G4IonTable.cc:1214
double A(double temperature)
Float_t Z
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIsotopeTable()

G4VIsotopeTable * G4IonTable::GetIsotopeTable ( size_t  idx = 0) const

Definition at line 1501 of file G4IonTable.cc.

1502 {
1503  G4VIsotopeTable* fIsotopeTable=0;
1504  if ( index < fIsotopeTableList->size() ) {
1505  fIsotopeTable = (*fIsotopeTableList)[index];
1506  }
1507  return fIsotopeTable;
1508 }
Int_t index
G4int size() const
Definition: G4IonTable.cc:1638
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLifeTime() [1/2]

G4double G4IonTable::GetLifeTime ( const G4ParticleDefinition particle) const

Definition at line 1768 of file G4IonTable.cc.

1769 {
1770  //if(!(particle->IsGeneralIon())) return particle->GetPDGLifeTime();
1771 
1772  //const G4Ions* ion = static_cast<const G4Ions*>(particle);
1773  //G4int Z = ion->GetAtomicNumber();
1774  //G4int A = ion->GetAtomicMass();
1775  //G4double E = ion->GetExcitationEnergy();
1776 
1777  if((particle->IsGeneralIon()) && !pNuclideTable)
1778  {
1779  G4Exception("G4IonTable::GetLifeTime()","ParticleIon1001",FatalException,
1780  "Method is invoked before G4IonTable is initialized.");
1781  //return 0.;
1782  } //else {
1783  //G4IsotopeProperty* isoP = pNuclideTable->GetIsotope(Z,A,E);
1784  //if(!isoP) return -1001.0;
1785  //return isoP->GetLifeTime();
1786  //}
1787  return particle->GetPDGLifeTime();
1788 }
G4double GetPDGLifeTime() const
G4bool IsGeneralIon() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLifeTime() [2/2]

G4double G4IonTable::GetLifeTime ( G4int  Z,
G4int  A,
G4double  E 
) const

Definition at line 1790 of file G4IonTable.cc.

1791 {
1792  G4double life = -1001.0;
1793  const G4IsotopeProperty* fProperty = FindIsotope(Z, A, E);
1794  if( fProperty !=0 ) life = fProperty->GetLifeTime();
1795  return life;
1796 }
G4double GetLifeTime() const
G4IsotopeProperty * FindIsotope(G4int Z, G4int A, G4double E) const
Definition: G4IonTable.cc:1512
double A(double temperature)
Float_t Z
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ GetLightAntiIon()

G4ParticleDefinition * G4IonTable::GetLightAntiIon ( G4int  Z,
G4int  A 
) const
protected

Definition at line 1186 of file G4IonTable.cc.

1187 {
1188  // returns pointer to pre-defined ions
1189  const G4ParticleDefinition* ion=0;
1190  if ( (Z<=2) ) {
1191 #ifndef G4MULTITHREADED
1192  //In sequential use lazy-initialization
1194 #endif
1195  if ( (Z==1)&&(A==1) ) {
1197  } else if ( (Z==1)&&(A==2) ) {
1199  } else if ( (Z==1)&&(A==3) ) {
1201  } else if ( (Z==2)&&(A==4) ) {
1202  ion = antilightions::p_alpha;
1203  } else if ( (Z==2)&&(A==3) ) {
1204  ion = antilightions::p_He3;
1205  }
1206  }
1207  return const_cast<G4ParticleDefinition*>(ion);
1208 }
static const G4ParticleDefinition * p_proton
Definition: G4IonTable.cc:97
double A(double temperature)
Float_t Z
static const G4ParticleDefinition * p_triton
Definition: G4IonTable.cc:99
static const G4ParticleDefinition * p_alpha
Definition: G4IonTable.cc:100
static const G4ParticleDefinition * p_He3
Definition: G4IonTable.cc:101
static const G4ParticleDefinition * p_deuteron
Definition: G4IonTable.cc:98
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLightIon()

G4ParticleDefinition * G4IonTable::GetLightIon ( G4int  Z,
G4int  A 
) const
protected

Definition at line 1161 of file G4IonTable.cc.

1162 {
1163  // returns pointer to pre-defined ions
1164  const G4ParticleDefinition* ion=0;
1165  if ( (Z<=2) ) {
1166 #ifndef G4MULTITHREADED
1167  //In sequential use lazy-initialization
1168  lightions::Init();
1169 #endif
1170  if ( (Z==1)&&(A==1) ) {
1171  ion = lightions::p_proton;
1172  } else if ( (Z==1)&&(A==2) ) {
1173  ion = lightions::p_deuteron;
1174  } else if ( (Z==1)&&(A==3) ) {
1175  ion = lightions::p_triton;
1176  } else if ( (Z==2)&&(A==4) ) {
1177  ion = lightions::p_alpha;
1178  } else if ( (Z==2)&&(A==3) ) {
1179  ion = lightions::p_He3;
1180  }
1181  }
1182  return const_cast<G4ParticleDefinition*>(ion);
1183 }
static const G4ParticleDefinition * p_triton
Definition: G4IonTable.cc:83
void Init()
Definition: G4IonTable.cc:86
static const G4ParticleDefinition * p_alpha
Definition: G4IonTable.cc:84
double A(double temperature)
Float_t Z
static const G4ParticleDefinition * p_He3
Definition: G4IonTable.cc:85
static const G4ParticleDefinition * p_deuteron
Definition: G4IonTable.cc:82
static const G4ParticleDefinition * p_proton
Definition: G4IonTable.cc:81
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNucleusByEncoding() [1/2]

G4bool G4IonTable::GetNucleusByEncoding ( G4int  encoding,
G4int Z,
G4int A,
G4double E,
G4int lvl 
)
static

Definition at line 939 of file G4IonTable.cc.

942 {
943  if (encoding <= 0) return false; // anti particle
944 
945  if (encoding == 2212) { // proton
946  Z = 1; A = 1;
947  E = 0.0; lvl =0;
948  return true;
949  }
950 
951  encoding -= 1000000000;
952  Z = encoding/10000;
953  encoding -= 10000*Z;
954  A = encoding/10;
955  lvl = encoding % 10;
956  return true;
957 }
double A(double temperature)
Float_t Z
Here is the caller graph for this function:

◆ GetNucleusByEncoding() [2/2]

G4bool G4IonTable::GetNucleusByEncoding ( G4int  encoding,
G4int Z,
G4int A,
G4int L,
G4double E,
G4int lvl 
)
static

!!not supported for excitation states !!!

Definition at line 960 of file G4IonTable.cc.

964 {
965  if (encoding <= 0) return false; // anti particle
966 
967  if (encoding == 3122) { // Lambda
968  Z = 1; A = 1; LL = 1;
969  E = 0.0; lvl =0;
970  return true;
971  }
972 
973  if (encoding % 10 != 0) {
975  return false;
976  }
977  if (encoding < 1000000000) {
978  // anti particle
979  return false;
980  }
981 
982  encoding -= 1000000000;
983  LL = encoding/10000000;
984  encoding -= 10000000*LL;
985  Z = encoding/10000;
986  encoding -= 10000*Z;
987  A = encoding/10;
988  lvl = encoding % 10;
989  return true;
990 }
double A(double temperature)
Float_t Z
static const G4int LL[nN]

◆ GetNucleusEncoding() [1/2]

G4int G4IonTable::GetNucleusEncoding ( G4int  Z,
G4int  A,
G4double  E = 0.0,
G4int  lvl = 0 
)
static

Definition at line 898 of file G4IonTable.cc.

899 {
900  // PDG code for Ions
901  // Nuclear codes are given as 10-digit numbers +-100ZZZAAAI.
902  //For a nucleus consisting of np protons and nn neutrons
903  // A = np + nn and Z = np.
904  // I gives the isomer level, with I = 0 corresponding
905  // to the ground state and I >0 to excitations
906 
907  if ( Z==1 && A==1 && E==0.0 ) return 2212; // proton
908 
909  G4int encoding = 1000000000;
910  encoding += Z * 10000;
911  encoding += A *10;
912  if (lvl>0&&lvl<10) encoding +=lvl; //isomer level
913  else if (E>0.0) encoding += 9; //isomer level
914 
915  return encoding;
916 }
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
#define encoding
Definition: xmlparse.cc:605
Here is the caller graph for this function:

◆ GetNucleusEncoding() [2/2]

G4int G4IonTable::GetNucleusEncoding ( G4int  Z,
G4int  A,
G4int  L,
G4double  E = 0.0,
G4int  lvl = 0 
)
static

Definition at line 919 of file G4IonTable.cc.

921 {
922  // get PDG code for Hyper-Nucleus Ions
923  // Nuclear codes are given as 10-digit numbers +-10LZZZAAAI.
924  //For a nucleus consisting of np protons and nn neutrons
925  // A = np + nn +nlambda and Z = np.
926  // LL = nlambda
927  // I gives the isomer level, with I = 0 corresponding
928  // to the ground state and I >0 to excitations
929 
930  G4int encoding = GetNucleusEncoding(Z, A, E, lvl);
931  if (LL==0) return encoding;
932  encoding += LL* 10000000;
933  if ( Z==1 && A==1 && E==0.0 ) encoding = 3122; // Lambda
934 
935  return encoding;
936 }
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
#define encoding
Definition: xmlparse.cc:605
static const G4int LL[nN]
Here is the call graph for this function:

◆ GetNucleusMass()

G4double G4IonTable::GetNucleusMass ( G4int  Z,
G4int  A,
G4int  L = 0,
G4int  lvl = 0 
) const

Definition at line 1214 of file G4IonTable.cc.

1215 {
1216  if ( (A<1) || (Z<0) || (LL<0) || (lvl<0) || (lvl>9) ){
1217 #ifdef G4VERBOSE
1218  if (GetVerboseLevel()>0) {
1219  G4cout << "G4IonTable::GetNucleusMass() : illegal atomic number/mass "
1220  << " Z =" << Z << " A = " << A
1221  << " L = " << LL << " lvl = " << lvl << G4endl;
1222  }
1223 #endif
1224  G4Exception( "G4IonTable::GetNucleusMass()","PART107",
1225  EventMustBeAborted, "illegal atomic number/mass");
1226  return -1.0;
1227  }
1228 
1229  G4double mass;
1230  if (LL == 0) {
1231  // calculate nucleus mass
1233 
1234  if (ion!=0) {
1235  mass = ion->GetPDGMass();
1236  } else {
1237  // use G4NucleiProperties::GetNuclearMass
1239  }
1240 
1241  // Isomer
1242  if ( lvl>0 ) {
1243  // -- loop over all particles in Ion table
1245  G4IonList::iterator i = fIonList->find(encoding);
1246  G4bool isFound =false;
1247  for( ;i != fIonList->end() ; i++) {
1248  ion = i->second;
1249  if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
1250  // excitation level
1251  if ( ((const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
1252  isFound = true;
1253  break;
1254  }
1255  }
1256  if (isFound) {
1257  // return existing isomer mass
1258  mass = ion->GetPDGMass();
1259  } else {
1260  // Find isomer from IsotopeTable
1261  const G4IsotopeProperty* fProperty = FindIsotope(Z, A, lvl);
1262  if (fProperty !=0 ) mass += fProperty->GetEnergy();
1263  }
1264  }
1265 
1266  } else {
1268  }
1269  return mass;
1270 }
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
static G4double GetNuclearMass(const G4double A, const G4double Z)
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
G4IsotopeProperty * FindIsotope(G4int Z, G4int A, G4double E) const
Definition: G4IonTable.cc:1512
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Definition: G4Ions.hh:51
Float_t Z
bool G4bool
Definition: G4Types.hh:79
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4int GetAtomicNumber() const
static const G4int LL[nN]
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4int GetAtomicMass() const
G4ParticleDefinition * GetLightIon(G4int Z, G4int A) const
Definition: G4IonTable.cc:1161
G4double GetEnergy() const
static G4double GetNuclearMass(G4int A, G4int Z, G4int L)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNumberOfElements()

G4int G4IonTable::GetNumberOfElements ( ) const
inline

Definition at line 315 of file G4IonTable.hh.

316 {
317  return numberOfElements;
318 }
Here is the caller graph for this function:

◆ GetParticle()

G4ParticleDefinition * G4IonTable::GetParticle ( G4int  index) const

Definition at line 1586 of file G4IonTable.cc.

1587 {
1588  if ( (index >=0) && (index < Entries()) ) {
1589  G4IonList::iterator idx = fIonList->begin();
1590  G4int counter = 0;
1591  while( idx != fIonList->end() ){// Loop checking, 09.08.2015, K.Kurashige
1592  if ( counter == index ) {
1593  return const_cast<G4ParticleDefinition*>(idx->second);
1594  }
1595  counter++;
1596  idx++;
1597  }
1598  }
1599 #ifdef G4VERBOSE
1600  if (GetVerboseLevel()>1){
1601  G4cout << " G4IonTable::GetParticle"
1602  << " invalid index (=" << index << ")"
1603  << " entries = " << Entries() << G4endl;
1604  }
1605 #endif
1606  return 0;
1607 }
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
Int_t index
int G4int
Definition: G4Types.hh:78
G4int Entries() const
Definition: G4IonTable.cc:1632
G4GLOB_DLL std::ostream G4cout
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetVerboseLevel()

G4int G4IonTable::GetVerboseLevel ( ) const
protected

Definition at line 1442 of file G4IonTable.cc.

1443 {
1445 }
G4int GetVerboseLevel() const
static G4ParticleTable * GetParticleTable()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitializeLightIons()

void G4IonTable::InitializeLightIons ( )

Definition at line 178 of file G4IonTable.cc.

179 {
180  lightions::Init();
182 }
void Init()
Definition: G4IonTable.cc:86
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Insert()

void G4IonTable::Insert ( const G4ParticleDefinition particle)

Definition at line 1307 of file G4IonTable.cc.

1308 {
1309  if (!IsIon(particle)) return;
1310  if (Contains(particle)) return;
1311 
1312  G4int Z = particle->GetAtomicNumber();
1313  G4int A = particle->GetAtomicMass();
1314  G4int LL = particle->GetQuarkContent(3); //strangeness
1315  G4int encoding=GetNucleusEncoding(Z, A, LL); // encoding of the groud state
1316 
1317  // regsiter the ion with its encoding of the groud state
1318  fIonListShadow->insert( std::pair<const G4int, const G4ParticleDefinition*>(encoding, particle) );
1319 
1320 }
G4bool Contains(const G4ParticleDefinition *particle) const
Definition: G4IonTable.cc:1610
G4int GetQuarkContent(G4int flavor) const
static G4bool IsIon(const G4ParticleDefinition *)
Definition: G4IonTable.cc:1091
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
double A(double temperature)
Float_t Z
G4int GetAtomicNumber() const
static const G4int LL[nN]
G4int GetAtomicMass() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InsertWorker()

void G4IonTable::InsertWorker ( const G4ParticleDefinition particle)
protected

Definition at line 1322 of file G4IonTable.cc.

1323 {
1324  if(!particle) return;
1325 
1326  G4int Z = particle->GetAtomicNumber();
1327  G4int A = particle->GetAtomicMass();
1328  G4int LL = particle->GetQuarkContent(3); //strangeness
1329  G4int encoding=GetNucleusEncoding(Z, A, LL);
1330  G4bool found = false;
1331  if (encoding !=0 ) {
1332  G4IonList::iterator i = fIonList->find(encoding);
1333  for( ;i != fIonList->end() ; i++) {
1334  if (particle == i->second ) {
1335  found = true;
1336  break;
1337  }
1338  }
1339  }
1340  if(found) return;
1341 
1342  // regsiter the ion with its encoding of the groud state
1343  fIonList->insert( std::pair<const G4int, const G4ParticleDefinition*>(encoding, particle) );
1344 
1345 }
G4int GetQuarkContent(G4int flavor) const
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
bool G4bool
Definition: G4Types.hh:79
G4int GetAtomicNumber() const
static const G4int LL[nN]
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
G4int GetAtomicMass() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsAntiIon()

G4bool G4IonTable::IsAntiIon ( const G4ParticleDefinition particle)
static

Definition at line 1116 of file G4IonTable.cc.

1117 {
1118  // return true if the particle is ion
1119 
1120  static const G4String anti_nucleus("anti_nucleus");
1121  static const G4String anti_proton("anti_proton");
1122 
1123  // anti_neutron is not ion
1124  if ((particle->GetAtomicMass()>0) &&
1125  (particle->GetAtomicNumber()>0) ){
1126  if (particle->GetBaryonNumber()<0) return true;
1127  else return false;
1128  }
1129 
1130  // particles derived from G4Ions
1131  if (particle->GetParticleType() == anti_nucleus) return true;
1132 
1133  // anti_proton (Anti_Hydrogen nucleus)
1134  if (particle->GetParticleName() == anti_proton) return true;
1135 
1136  return false;
1137 }
const G4String & GetParticleType() const
const G4String & GetParticleName() const
G4int GetAtomicNumber() const
G4int GetAtomicMass() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsIon()

G4bool G4IonTable::IsIon ( const G4ParticleDefinition particle)
static

Definition at line 1091 of file G4IonTable.cc.

1092 {
1093  // return true if the particle is ion
1094 
1095  static const G4String nucleus("nucleus");
1096  static const G4String proton("proton");
1097 
1098  // neutron is not ion
1099  if ((particle->GetAtomicMass()>0) &&
1100  (particle->GetAtomicNumber()>0) ){
1101  if (particle->GetBaryonNumber()>0) return true;
1102  else return false;
1103  }
1104 
1105 
1106  // particles derived from G4Ions
1107  if (particle->GetParticleType() == nucleus) return true;
1108 
1109  // proton (Hydrogen nucleus)
1110  if (particle->GetParticleName() == proton) return true;
1111 
1112  return false;
1113 }
const G4String & GetParticleType() const
const G4String & GetParticleName() const
G4int GetAtomicNumber() const
G4int GetAtomicMass() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsLightAntiIon()

G4bool G4IonTable::IsLightAntiIon ( const G4ParticleDefinition particle) const
protected

Definition at line 1151 of file G4IonTable.cc.

1152 {
1153  static const std::string names[] = { "anti_proton", "anti_alpha", "anti_deuteron",
1154  "anti_triton", "anti_He3"};
1155 
1156  // return true if the particle is pre-defined ion
1157  return std::find(names, names+5, particle->GetParticleName())!=names+5;
1158 }
const G4String & GetParticleName() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsLightIon()

G4bool G4IonTable::IsLightIon ( const G4ParticleDefinition particle) const
protected

Definition at line 1142 of file G4IonTable.cc.

1143 {
1144  static const std::string names[] = { "proton", "alpha", "deuteron",
1145  "triton", "He3"};
1146 
1147  // return true if the particle is pre-defined ion
1148  return std::find(names, names+5, particle->GetParticleName())!=names+5;
1149 }
const G4String & GetParticleName() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

G4IonTable& G4IonTable::operator= ( const G4IonTable )
inlineprotected

Definition at line 93 of file G4IonTable.hh.

93 {return *this;}
Here is the call graph for this function:

◆ PreloadNuclide()

void G4IonTable::PreloadNuclide ( )

Definition at line 1567 of file G4IonTable.cc.

1568 {
1570 
1572 
1573  for ( size_t i = 0 ; i != pNuclideTable->entries() ; i++ ) {
1574  const G4IsotopeProperty* fProperty = pNuclideTable->GetIsotopeByIndex( i );
1575  G4int Z = fProperty->GetAtomicNumber();
1576  G4int A = fProperty->GetAtomicMass();
1577  G4double Eex = fProperty->GetEnergy();
1578  GetIon(Z,A,Eex);
1579  }
1580 
1581  isIsomerCreated = true;
1582 }
G4int GetAtomicMass() const
G4int GetAtomicNumber() const
G4IsotopeProperty * GetIsotopeByIndex(size_t idx) const
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
int G4int
Definition: G4Types.hh:78
G4bool isIsomerCreated
Definition: G4IonTable.hh:285
double A(double temperature)
Float_t Z
G4bool IsMultithreadedApplication()
Definition: G4Threading.cc:142
size_t entries() const
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
double G4double
Definition: G4Types.hh:76
G4double GetEnergy() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PrepareNuclideTable()

void G4IonTable::PrepareNuclideTable ( )

Definition at line 1561 of file G4IonTable.cc.

1562 {
1564 }
static G4NuclideTable * GetNuclideTable()
G4NuclideTable * pNuclideTable
Definition: G4IonTable.hh:284
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RegisterIsotopeTable()

void G4IonTable::RegisterIsotopeTable ( G4VIsotopeTable table)

Definition at line 1487 of file G4IonTable.cc.

1488 {
1489  //check duplication
1490  G4String name = table->GetName();
1491  for (size_t i = 0; i< fIsotopeTableList->size(); ++i) {
1492  G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[i];
1493  if (name == fIsotopeTable->GetName()) return;
1494  }
1495 
1496  // register
1497  fIsotopeTableList->push_back(table);
1498 }
G4String name
Definition: TRTMaterials.hh:40
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
Definition: G4IonTable.hh:290
const G4String & GetName() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Remove()

void G4IonTable::Remove ( const G4ParticleDefinition particle)

Definition at line 1348 of file G4IonTable.cc.

1349 {
1350  if(!particle) return;
1351 #ifdef G4MULTITHREADED
1354  ed << "Request of removing " << particle->GetParticleName()
1355  << " is ignored as it is invoked from a worker thread.";
1356  G4Exception("G4IonTable::Remove()","PART10117",JustWarning,ed);
1357  return;
1358  }
1359 #endif
1360  if (G4ParticleTable::GetParticleTable()->GetReadiness()) {
1362  G4ApplicationState currentState = pStateManager->GetCurrentState();
1363  if (currentState != G4State_PreInit) {
1364  G4String msg = "Request of removing ";
1365  msg += particle->GetParticleName();
1366  msg += " has No effects other than Pre_Init";
1367  G4Exception("G4IonTable::Remove()",
1368  "PART117", JustWarning, msg);
1369  return;
1370  } else {
1371 #ifdef G4VERBOSE
1372  if (GetVerboseLevel()>0){
1373  G4cout << particle->GetParticleName()
1374  << " will be removed from the IonTable " << G4endl;
1375  }
1376 #endif
1377  }
1378  }
1379 
1380  if (IsIon(particle)) {
1381  G4int Z = particle->GetAtomicNumber();
1382  G4int A = particle->GetAtomicMass();
1383  G4int LL = particle->GetQuarkContent(3); //strangeness
1384  G4int encoding=GetNucleusEncoding(Z, A, LL);
1385  if (encoding !=0 ) {
1386  G4IonList::iterator i = fIonListShadow->find(encoding);
1387  for( ;i != fIonListShadow->end() ; i++) {
1388  if (particle == i->second) {
1389  fIonListShadow->erase(i);
1390  break;
1391  }
1392  }
1393  }
1394  } else {
1395 #ifdef G4VERBOSE
1396  if (GetVerboseLevel()>1) {
1397  G4cout << "G4IonTable::Remove :" << particle->GetParticleName()
1398  << " is not ions" << G4endl;
1399  }
1400 #endif
1401  }
1402 
1403 }
G4int GetVerboseLevel() const
Definition: G4IonTable.cc:1442
G4int GetQuarkContent(G4int flavor) const
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
static G4bool IsIon(const G4ParticleDefinition *)
Definition: G4IonTable.cc:1091
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
Definition: G4IonTable.cc:898
int G4int
Definition: G4Types.hh:78
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
static G4StateManager * GetStateManager()
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
G4int GetAtomicNumber() const
static G4ParticleTable * GetParticleTable()
static const G4int LL[nN]
#define G4endl
Definition: G4ios.hh:61
G4ApplicationState GetCurrentState() const
G4int GetAtomicMass() const
G4ApplicationState
Here is the call graph for this function:
Here is the caller graph for this function:

◆ size()

G4int G4IonTable::size ( ) const

Definition at line 1638 of file G4IonTable.cc.

1639 {
1640  return fIonList->size();
1641 }
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
Here is the caller graph for this function:

◆ SlaveG4IonTable()

void G4IonTable::SlaveG4IonTable ( )

Definition at line 147 of file G4IonTable.cc.

148 {
149 G4Exception("G4IonTable::SlaveG4ParticleTable()","G4MT0000",FatalException,"Obsolete");
150 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:
Here is the caller graph for this function:

◆ WorkerG4IonTable()

void G4IonTable::WorkerG4IonTable ( )

Definition at line 152 of file G4IonTable.cc.

153 {
154  if( fIonList == 0 )
155  { fIonList = new G4IonList(); }
156  else
157  { fIonList->clear(); }
158 
160  for (it = fIonListShadow->begin() ; it != fIonListShadow->end(); it++ ) {
163  fIonList->insert(*it);
164  }
165 
166  // Do not copy Isotoper Table to Worker thread
167  if( fIsotopeTableList == 0 ) {
168  fIsotopeTableList = new std::vector<G4VIsotopeTable*>;
169  for (size_t i = 0; i < fIsotopeTableListShadow->size(); i++){
170  fIsotopeTableList->push_back((*fIsotopeTableListShadow)[i]);
171  }
172  }
173 
176 }
static std::vector< G4VIsotopeTable * > * fIsotopeTableListShadow
Definition: G4IonTable.hh:292
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
Definition: G4IonTable.hh:290
static G4IonList * fIonListShadow
Definition: G4IonTable.hh:291
std::multimap< G4int, const G4ParticleDefinition * > G4IonList
Definition: G4IonTable.hh:74
static G4ThreadLocal G4IonList * fIonList
Definition: G4IonTable.hh:289
std::multimap< G4int, const G4ParticleDefinition * >::iterator G4IonListIterator
Definition: G4IonTable.hh:75
Here is the caller graph for this function:

Member Data Documentation

◆ elementName

const G4String G4IonTable::elementName
static
Initial value:
= {
"H", "He",
"Li", "Be", "B", "C", "N", "O", "F", "Ne",
"Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar",
"K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr",
"Rb", "Sr", "Y", "Zr", "Nb", "Mo","Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn", "Sb", "Te", "I", "Xe",
"Cs", "Ba",
"La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu",
"Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn",
"Fr", "Ra",
"Ac", "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr",
"Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg",
"Cp", "Uut", "Fl","Uup","Lv","Uus","Uuo"
}

Definition at line 301 of file G4IonTable.hh.

◆ fIonList

G4ThreadLocal G4IonTable::G4IonList * G4IonTable::fIonList = 0
static

Definition at line 289 of file G4IonTable.hh.

◆ fIonListShadow

G4IonTable::G4IonList * G4IonTable::fIonListShadow = 0
static

Definition at line 291 of file G4IonTable.hh.

◆ fIsotopeTableList

G4ThreadLocal std::vector< G4VIsotopeTable * > * G4IonTable::fIsotopeTableList = 0
static

Definition at line 290 of file G4IonTable.hh.

◆ fIsotopeTableListShadow

std::vector< G4VIsotopeTable * > * G4IonTable::fIsotopeTableListShadow = 0
static

Definition at line 292 of file G4IonTable.hh.

◆ isIsomerCreated

G4bool G4IonTable::isIsomerCreated
private

Definition at line 285 of file G4IonTable.hh.

◆ n_error

G4int G4IonTable::n_error
private

Definition at line 307 of file G4IonTable.hh.

◆ pNuclideTable

G4NuclideTable* G4IonTable::pNuclideTable
private

Definition at line 284 of file G4IonTable.hh.


The documentation for this class was generated from the following files: