88         if ( p_proton ) 
return;
 
  104         if ( p_proton ) 
return;
 
  113 #ifdef G4MULTITHREADED 
  120     isIsomerCreated(false),
 
  228       G4cout << 
"G4IonTable::CreateIon() : can not create ion of  "  
  229              << 
" Z =" << Z << 
"  A = " << A 
 
  230              << 
"  because GenericIon is not ready !!" <<   
G4endl;
 
  235                  "Can not create ions because GenericIon is not ready");
 
  255     stable = (life <= 0.) || (decayTable ==0);
 
  262       ed << 
"G4IonTable::CreateIon() : G4IsotopeProperty object was not found for" 
  263          << 
" Z = " << Z << 
" A = " << A << 
" E = " << E/
keV << 
" (keV).\n" 
  264          << 
" Physics quantities such as life are not set for this ion.";
 
  299   ion = 
new G4Ions(   name,            mass,       0.0*
MeV,     charge, 
 
  302                  "nucleus",               0,             A,    encoding,
 
  303                     stable,            life,    decayTable,       
false,
 
  317     G4cout << 
"G4IonTable::CreateIon() : create ion of " << name
 
  318            << 
"  " << Z << 
", " << A
 
  321       G4cout << 
" IsomerLVL=" << lvl
 
  322              << 
" excited energy=" << Eex/
keV << 
"[keV]";
 
  331 #ifdef G4MULTITHREADED 
  335     if(!stable && decayTable)
 
  338       for(
G4int iCh=0;iCh<nCh;iCh++)
 
  364       G4cout << 
"G4IonTable::CreateIon() : can not create ion of  "  
  365              << 
" Z =" << Z << 
"  A = " << A 
 
  366              << 
"  because GenericIon is not ready !!" <<   
G4endl;
 
  370                  "Can not create ions because GenericIon is not ready");
 
  398   ion = 
new G4Ions(   name,            mass,       0.0*
MeV,     charge, 
 
  401                  "nucleus",               0,             A,    encoding,
 
  402                     stable,            life,    decayTable,       
false,
 
  417     G4cout << 
"G4IonTable::CreateIon() : create hyper ion of " << name
 
  418            << 
"  " << Z << 
", " << A << 
", " << L
 
  421       G4cout << 
" IsomerLVL=" << lvl
 
  422              << 
" excited energy=" << Eex/
keV << 
"[keV]";
 
  439       "Ion cannot be created by an isomer level. Use excitation energy.");
 
  451     ed << 
"Isomer level " << lvl << 
" is unknown for the isotope (Z=" 
  452        << Z << 
", A=" << A << 
", L=" << L << 
"). Null pointer is returned.";
 
  465   if ( (A<1) || (Z<=0) || (lvl<0) || (A>999) ) {
 
  468       G4cout << 
"G4IonTable::GetIon() : illegal atomic number/mass"  
  469              << 
" Z =" << Z << 
"  A = " << A <<  
"  Lvl = " << lvl << 
G4endl;
 
  479 #ifdef G4MULTITHREADED 
  486       if(ion == 0 && lvl == 0) ion = 
CreateIon(Z,A,lvl);
 
  491     { 
if(lvl == 0) ion = 
CreateIon(Z,A,lvl); }
 
  494   if(ion == 0 && lvl == 0) ion = 
CreateIon(Z, A, lvl);
 
  511   if (L==0) 
return GetIon(Z,A,lvl);
 
  513   if (A < 2 || Z < 0 || Z > A-L || L>A || A>999 ) {
 
  516       G4cout << 
"G4IonTable::GetIon() : illegal atomic number/mass"  
  517              << 
" Z =" << Z << 
"  A = " << A << 
" L = " << L 
 
  518              <<
"  IsomerLvl = " << lvl << 
G4endl;
 
  525       G4cout << 
"G4IonTable::GetIon() : No boud state for "  
  526              << 
" Z =" << Z << 
"  A = " << A << 
" L = " << L 
 
  527              <<
"  IsomerLvl = " << lvl << 
G4endl;
 
  539 #ifdef G4MULTITHREADED 
  544         if(ion == 0) ion = 
CreateIon(Z, A, L, lvl);
 
  569   if ( (A<1) || (Z<=0) || (E<0.0) || (A>999) || (J<0) ) {
 
  572       G4cout << 
"G4IonTable::GetIon() : illegal atomic number/mass"  
  573              << 
" Z =" << Z << 
"  A = " << A <<  
"  E = " << E/
keV << 
G4endl;
 
  583 #ifdef G4MULTITHREADED 
  607   if (L==0) 
return GetIon(Z,A,E,J);
 
  609   if (A < 2 || Z < 0 || Z > A-L || L>A || A>999 ) {
 
  612       G4cout << 
"G4IonTable::GetIon() : illegal atomic number/mass"  
  613              << 
" Z =" << Z << 
"  A = " << A << 
" L = " << L 
 
  621       G4cout << 
"G4IonTable::GetIon() : No boud state for "  
  622              << 
" Z =" << Z << 
"  A = " << A << 
" L = " << L 
 
  633 #ifdef G4MULTITHREADED 
  648   if(ion == 0) ion = 
CreateIon(Z, A, L, E);
 
  662       G4cout << 
"G4IonTable::GetIon() : illegal encoding"  
  663              << 
" CODE:" << encoding << 
G4endl;
 
  671   return GetIon( Z, A, L, IsoLvl);
 
  677   if ( (A<1) || (Z<=0) || (J<0) || (E<0.0) || (A>999) ) {
 
  680       G4cout << 
"G4IonTable::FindIon() : illegal atomic number/mass or excitation level "  
  681              << 
" Z =" << Z << 
"  A = " << A <<  
"  E = " << E/
keV << 
G4endl;
 
  695   if (ion!=0 && E==0.0) { 
 
  701     G4IonList::iterator i = 
fIonList->find(encoding);
 
  706       G4double anExcitaionEnergy = ((
const G4Ions*)(ion))->GetExcitationEnergy();
 
  707       if ( std::fabs( E - anExcitaionEnergy )< 
tolerance) {
 
  725   if (L==0) 
return FindIon(Z,A,E,J);
 
  727   if (A < 2 || Z < 0 || Z > A-L || L>A || A>999 ) {
 
  730       G4cout << 
"G4IonTable::FindIon() : illegal atomic number/mass or excitation level "  
  731              << 
" Z =" << Z << 
"  A = " << A << 
" L = " << L 
 
  746   G4IonList::iterator i = 
fIonList->find(encoding);
 
  752     G4double anExcitaionEnergy = ((
const G4Ions*)(ion))->GetExcitationEnergy();
 
  753     if ( std::fabs( E - anExcitaionEnergy )< 
tolerance) {
 
  770   if ( (A<1) || (Z<=0) || (lvl<0) || (A>999) ) {
 
  773       G4cout << 
"G4IonTable::FindIon() : illegal atomic number/mass or excitation level "  
  774              << 
" Z =" << Z << 
"  A = " << A <<  
"  IsoLvl = " << lvl << 
G4endl;
 
  788   if (ion!=0 && lvl==0) { 
 
  794     G4IonList::iterator i = 
fIonList->find(encoding);
 
  799       if ( ((
const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
 
  810         "Isomer level 9 may be ambiguous.");
 
  822   if (L==0) 
return FindIon(Z,A,lvl);
 
  824   if (A < 2 || Z < 0 || Z > A-L || L>A || A>999 ) {
 
  827       G4cout << 
"G4IonTable::FindIon() : illegal atomic number/mass or excitation level "  
  828              << 
" Z =" << Z << 
"  A = " << A << 
" L = " << L 
 
  829              <<
"  IsomerLvl = " << lvl << 
G4endl;
 
  842   G4IonList::iterator i = 
fIonList->find(encoding);
 
  848     if ( ((
const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
 
  858         "Isomer level 9 may be ambiguous.");
 
  877   if ( Z==1 && A==1 && E==0.0 ) 
return 2212; 
 
  880   encoding += Z * 10000;
 
  882   if (lvl>0&&lvl<10) encoding +=lvl;       
 
  883   else if (E>0.0) encoding += 9;  
 
  902   encoding += L*  10000000;
 
  903   if ( Z==1 && A==1 && E==0.0 ) encoding = 3122; 
 
  913   if (encoding <= 0) 
return false; 
 
  915   if (encoding == 2212) {  
 
  921   encoding -= 1000000000;
 
  935   if (encoding <= 0) 
return false; 
 
  937  if (encoding == 3122) {  
 
  943   if (encoding % 10 != 0) {
 
  947   if (encoding < 1000000000) {
 
  952   encoding -= 1000000000;
 
  953   L = encoding/10000000;
 
  954   encoding -= 10000000*
L;
 
  972     os = 
new std::ostringstream();
 
  974     os->setf(std::ios::fixed);
 
  983     std::ostringstream& oo = *os;
 
  985     oo<<
'['<<E/
keV << 
']';
 
 1000   for (
int i =0; i<
L; i++){
 
 1016     os = 
new std::ostringstream();
 
 1018     os->setf(std::ios::fixed);
 
 1026     name = 
"E" + os->str() + 
"-";
 
 1036     std::ostringstream& oo = *os;
 
 1038     oo<<
'['<<lvl << 
']';
 
 1052   for (
int i =0; i<
L; i++){
 
 1065   static const G4String nucleus(
"nucleus");
 
 1090   static const G4String anti_nucleus(
"anti_nucleus");
 
 1091   static const G4String anti_proton(
"anti_proton");
 
 1110 #include <algorithm> 
 1114   static const std::string names[] = { 
"proton", 
"alpha", 
"deuteron",
 
 1118   return std::find(names, names+5, particle->
GetParticleName())!=names+5;
 
 1123   static const std::string names[] = { 
"anti_proton", 
"anti_alpha", 
"anti_deuteron",
 
 1124                            "anti_triton", 
"anti_He3"};
 
 1127   return std::find(names, names+5, particle->
GetParticleName())!=names+5;
 
 1136 #ifndef G4MULTITHREADED 
 1140     if ( (Z==1)&&(A==1) ) {
 
 1142     } 
else if ( (Z==1)&&(A==2) ) {
 
 1144     } 
else if ( (Z==1)&&(A==3) ) {
 
 1146     } 
else if ( (Z==2)&&(A==4) ) {
 
 1148     } 
else if ( (Z==2)&&(A==3) ) {
 
 1161 #ifndef G4MULTITHREADED 
 1165     if ( (Z==1)&&(A==1) ) {
 
 1167     } 
else if ( (Z==1)&&(A==2) ) {
 
 1169     } 
else if ( (Z==1)&&(A==3) ) {
 
 1171     } 
else if ( (Z==2)&&(A==4) ) {
 
 1173     } 
else if ( (Z==2)&&(A==3) ) {
 
 1186   if ( (A<1)  || (Z<0) || (L<0) || (lvl<0) || (lvl>9) ){
 
 1189       G4cout << 
"G4IonTable::GetNucleusMass() : illegal atomic number/mass "  
 1190              << 
" Z =" << Z << 
"  A = " << A  
 
 1191              << 
" L = " << L << 
" lvl = " << lvl << 
G4endl;
 
 1194     G4Exception( 
"G4IonTable::GetNucleusMass()",
"PART107",
 
 1215       G4IonList::iterator i = 
fIonList->find(encoding);
 
 1217       for( ;i != 
fIonList->end() ; i++) {
 
 1221         if ( ((
const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
 
 1232         if (fProperty !=0 ) mass += fProperty->
GetEnergy();
 
 1264                 "No effects because readyToUse is true.");    
 
 1270       G4cout << 
"G4IonTable::Clear() : number of Ion regsitered =  "; 
 
 1279   if (!
IsIon(particle)) 
return;
 
 1288   fIonListShadow->insert( std::pair<const G4int, const G4ParticleDefinition*>(encoding, particle) );
 
 1294   if(!particle) 
return;
 
 1301   if (encoding !=0 ) {
 
 1302     G4IonList::iterator i = 
fIonList->find(encoding);
 
 1303     for( ;i != 
fIonList->end() ; i++) {
 
 1304       if (particle == i->second ) {
 
 1313   fIonList->insert( std::pair<const G4int, const G4ParticleDefinition*>(encoding, particle) );
 
 1320   if(!particle) 
return;
 
 1321 #ifdef G4MULTITHREADED 
 1325        << 
" is ignored as it is invoked from a worker thread.";
 
 1334       G4String msg = 
"Request of removing ";
 
 1336       msg += 
" has No effects other than Pre_Init";
 
 1344                << 
" will be removed from the IonTable " << 
G4endl;
 
 1350   if (
IsIon(particle)) {
 
 1355     if (encoding !=0 ) {
 
 1358         if (particle == i->second) {
 
 1368              << 
" is not ions" << 
G4endl; 
 
 1383   G4IonList::iterator idx;
 
 1386     if (( particle_name == 
"ALL" ) || (particle_name == 
"all")){
 
 1397   "Li", 
"Be",                                                             
"B",  
"C",  
"N",  
"O", 
"F", 
"Ne", 
 
 1398   "Na", 
"Mg",                                                             
"Al", 
"Si", 
"P", 
"S", 
"Cl", 
"Ar", 
 
 1399   "K", 
"Ca", 
"Sc", 
"Ti", 
"V", 
"Cr", 
"Mn", 
"Fe", 
"Co", 
"Ni", 
"Cu", 
"Zn", 
"Ga", 
"Ge", 
"As", 
"Se", 
"Br", 
"Kr", 
 
 1400   "Rb", 
"Sr", 
"Y", 
"Zr", 
"Nb", 
"Mo",
"Tc", 
"Ru", 
"Rh", 
"Pd", 
"Ag", 
"Cd", 
"In", 
"Sn", 
"Sb", 
"Te", 
"I",  
"Xe", 
 
 1402               "La", 
"Ce", 
"Pr", 
"Nd", 
"Pm", 
"Sm", 
"Eu", 
"Gd", 
"Tb", 
"Dy", 
"Ho", 
"Er", 
"Tm", 
"Yb", 
"Lu", 
 
 1403                    "Hf", 
"Ta", 
"W", 
"Re", 
"Os", 
"Ir", 
"Pt", 
"Au", 
"Hg", 
"Tl", 
"Pb", 
"Bi", 
"Po", 
"At", 
"Rn", 
 
 1405               "Ac", 
"Th", 
"Pa",  
"U", 
"Np", 
"Pu", 
"Am", 
"Cm", 
"Bk", 
"Cf", 
"Es", 
"Fm", 
"Md", 
"No", 
"Lr",
 
 1406               "Rf", 
"Db", 
"Sg", 
"Bh", 
"Hs", 
"Mt", 
"Ds", 
"Rg", 
 
 1407               "Cn", 
"Uut", 
"Fl",
"Uup",
"Lv",
"Uus",
"Uuo" 
 1442     G4cout << 
"G4IonTable::AddProcessManager() : can not create ion of  "  
 1444            << 
"  because GenericIon is not available!!" <<   
G4endl;
 
 1446                  "Can not create ions because GenericIon is not available");
 
 1463     if (name == fIsotopeTable->
GetName()) 
return;
 
 1474    if ( index < fIsotopeTableList->
size() ) {
 
 1475      fIsotopeTable = (*fIsotopeTableList)[index];
 
 1477    return fIsotopeTable;
 
 1510     property = fIsotopeTable->
GetIsotope(Z,A,lvl);
 
 1558   if ( (index >=0) && (index < 
Entries()) ) {
 
 1559     G4IonList::iterator idx = 
fIonList->begin();
 
 1562       if ( counter == index ) {
 
 1571     G4cout << 
" G4IonTable::GetParticle" 
 1572            << 
" invalid index (=" << index << 
")"  
 1582   if (!
IsIon(particle)) 
return false;
 
 1589   if (encoding !=0 ) {
 
 1592       if (particle == i->second ) {
 
 1629     G4double anExcitaionEnergy = ((
const G4Ions*)(ion))->GetExcitationEnergy();
 
 1630     if ( std::fabs( E - anExcitaionEnergy )< 
tolerance) {
 
 1647   if (L==0) 
return FindIon(Z,A,E,J);
 
 1662     G4double anExcitaionEnergy = ((
const G4Ions*)(ion))->GetExcitationEnergy();
 
 1663     if ( std::fabs( E - anExcitaionEnergy )< 
tolerance) {
 
 1692     if ( ((
const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
 
 1709   if (L==0) 
return FindIon(Z,A,lvl);
 
 1723     if ( ((
const G4Ions*)(ion))->GetIsomerLevel() == lvl) {
 
 1750                "Method is invoked before G4IonTable is initialized.");
 
 1754     if(!isoP) 
return -1001.0;
 
G4int GetParticleDefinitionID() const 
 
void InitializeLightIons()
 
G4double GetMagneticMoment() const 
 
static const G4ParticleDefinition * p_triton
 
void RegisterIsotopeTable(G4VIsotopeTable *table)
 
static std::vector< G4VIsotopeTable * > * fIsotopeTableListShadow
 
static G4double GetNuclearMass(const G4double A, const G4double Z)
 
G4DecayTable * GetDecayTable() const 
 
void SetParticleDefinitionID(G4int id=-1)
 
G4double GetExcitationEnergy() const 
 
std::ostringstream G4ExceptionDescription
 
void SetAntiPDGEncoding(G4int aEncoding)
 
const G4String & GetName() const 
 
G4int GetAtomicNumber() const 
 
void PrepareNuclideTable()
 
void DumpTable(const G4String &particle_name="ALL") const 
 
static const G4ParticleDefinition * p_alpha
 
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
 
G4ParticleDefinition * GetDaughter(G4int anIndex)
 
void Remove(const G4ParticleDefinition *particle)
 
G4double GetIsomerMass(G4int Z, G4int A, G4int lvl=0) const 
 
static G4bool IsIon(const G4ParticleDefinition *)
 
G4bool IsLightAntiIon(const G4ParticleDefinition *) const 
 
G4VIsotopeTable * GetIsotopeTable(size_t idx=0) const 
 
void InsertWorker(const G4ParticleDefinition *particle)
 
static G4bool IsAntiIon(const G4ParticleDefinition *)
 
static G4int GetNucleusEncoding(G4int Z, G4int A, G4double E=0.0, G4int lvl=0)
 
G4int GetVerboseLevel() const 
 
G4int GetIsomerLevel() const 
 
G4VDecayChannel * GetDecayChannel(G4int index) const 
 
static G4ThreadLocal std::vector< G4VIsotopeTable * > * fIsotopeTableList
 
static const G4ParticleDefinition * p_proton
 
G4IsotopeProperty * GetIsotopeByIndex(size_t idx) const 
 
G4ParticleDefinition * GetGenericIon() const 
 
G4ProcessManager * GetProcessManager() const 
 
G4IsotopeProperty * FindIsotope(G4int Z, G4int A, G4double E) const 
 
#define G4MUTEX_INITIALIZER
 
static G4bool GetNucleusByEncoding(G4int encoding, G4int &Z, G4int &A, G4double &E, G4int &lvl)
 
const G4String & GetParticleName() const 
 
const G4String & GetIonName(G4int Z, G4int A, G4int lvl=0) const 
 
G4int GetAtomicNumber() const 
 
G4bool IsGeneralIon() const 
 
void Insert(const G4ParticleDefinition *particle)
 
static G4IonList * fIonListShadow
 
static G4StateManager * GetStateManager()
 
G4ParticleDefinition * CreateIon(G4int Z, G4int A, G4double E)
 
G4GLOB_DLL std::ostream G4cout
 
virtual G4IsotopeProperty * GetIsotope(G4int Z, G4int A, G4double E)=0
 
std::multimap< G4int, const G4ParticleDefinition * > G4IonList
 
G4double GetEnergy() const 
 
static const G4ParticleDefinition * p_He3
 
G4double GetIonMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const 
 
G4int GetQuarkContent(G4int flavor) const 
 
const G4String & GetParticleType() const 
 
G4ApplicationState GetCurrentState() const 
 
G4bool IsMultithreadedApplication()
 
virtual G4IsotopeProperty * GetIsotope(G4int Z, G4int A, G4double E)
 
static const G4double A[nN]
 
void AddProcessManager(G4ParticleDefinition *)
 
static const G4ParticleDefinition * p_triton
 
G4int GetAtomicMass() const 
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
G4bool Contains(const G4ParticleDefinition *particle) const 
 
static G4NuclideTable * GetNuclideTable()
 
G4ParticleDefinition * FindIon(G4int Z, G4int A, G4int lvl=0)
 
G4NuclideTable * pNuclideTable
 
G4double GetPDGMass() const 
 
static G4ParticleTable * GetParticleTable()
 
static const G4ParticleDefinition * p_deuteron
 
static const G4ParticleDefinition * p_alpha
 
static const G4ParticleDefinition * p_He3
 
static const G4double tolerance
 
static G4ThreadLocal G4IonList * fIonList
 
G4double GetPDGLifeTime() const 
 
G4double GetLifeTime(const G4ParticleDefinition *) const 
 
G4double GetNucleusMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const 
 
G4ParticleDefinition * GetLightAntiIon(G4int Z, G4int A) const 
 
static const G4ParticleDefinition * p_proton
 
static const double eplus
 
G4ParticleDefinition * GetLightIon(G4int Z, G4int A) const 
 
G4ParticleDefinition * FindIonInMaster(G4int Z, G4int A, G4int lvl=0)
 
G4bool IsLightIon(const G4ParticleDefinition *) const 
 
static G4double Round(G4double eex)
 
G4int GetVerboseLevel() const 
 
std::multimap< G4int, const G4ParticleDefinition * >::iterator G4IonListIterator
 
G4int GetAtomicMass() const 
 
G4double GetLifeTime() const 
 
void SetPDGMagneticMoment(G4double mageticMoment)
 
G4int GetBaryonNumber() const 
 
static const G4String elementName[numberOfElements]
 
static G4double GetNuclearMass(G4int A, G4int Z, G4int L)
 
static const G4ParticleDefinition * p_deuteron
 
G4ParticleDefinition * GetParticle(G4int index) const