43 #include "G4String.hh"
64 threshold_of_half_life(1000.0*
ns),
65 minimum_threshold_of_half_life(
DBL_MAX),
66 fUserDefinedList(nullptr),
67 fIsotopeList(nullptr),
68 flevelTolerance(1.0*
eV)
81 for ( std::map<
G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator
88 for ( std::map<
G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator
96 delete (*fIsotopeList)[i];
117 if ( Z == (*it)->GetAtomicNumber() && A == (*it)->GetAtomicMass() ) {
120 if( flb == (*it)->GetFloatLevelBase() )
130 G4int ionCode = 1000*Z +
A;
131 std::map< G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator itf =
map_pre_load_list.find( ionCode );
134 std::multimap< G4double , G4IsotopeProperty* >::iterator lower_bound_itr = itf ->
second.lower_bound ( E -
flevelTolerance/2 );
145 while ( lower_bound_itr != itf ->
second.end() ) {
146 levelE = lower_bound_itr->first;
148 if ( flb == (lower_bound_itr->second)->GetFloatLevelBase() )
return lower_bound_itr->second;
177 char* path = std::getenv(
"G4ENSDFSTATEDATA");
181 FatalException,
"G4ENSDFSTATEDATA environment variable must be set");
187 filename +=
"/ENSDFSTATE.dat";
189 ifs.open( filename.c_str() );
206 ifs >> ionZ >> ionA >> ionE >> ionFL >> ionLife >> ionJ >> ionMu;
208 while ( ifs.good() ) {
209 if ( ionCode != 1000*ionZ + ionA ) {
211 ionCode = 1000*ionZ + ionA;
219 if ( ( ionE == 0 && flb == G4Ions::G4FloatLevelBase::no_Float )
221 if ( ionE > 0 ) iLevel++;
222 if ( iLevel > 9 ) iLevel=9;
238 std::map< G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator itf =
map_full_list.find( ionCode );
240 std::multimap<G4double, G4IsotopeProperty*> aMultiMap;
241 itf = (
map_full_list.insert( std::pair<
G4int , std::multimap< G4double , G4IsotopeProperty* > > ( ionCode , aMultiMap ) ) ).first;
243 itf ->
second.insert( std::pair< G4double, G4IsotopeProperty* >( ionE , fProperty ) );
246 ifs >> ionZ >> ionA >> ionE >> ionFL >> ionLife >> ionJ >> ionMu;
255 for ( std::map<
G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator
262 for ( std::map<
G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator
266 std::map< G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator itf =
map_pre_load_list.find( ionCode );
268 std::multimap<G4double, G4IsotopeProperty*> aMultiMap;
269 itf = (
map_pre_load_list.insert( std::pair<
G4int , std::multimap< G4double , G4IsotopeProperty* > > ( ionCode , aMultiMap ) ) ).first;
272 for ( std::multimap< G4double , G4IsotopeProperty* >::iterator
273 itt =
it->second.begin(); itt !=
it->second.end(); itt++ ) {
276 G4double meanLife = itt->second->GetLifeTime();
279 if ( itt->first != 0.0 ) iLevel++;
280 if ( iLevel > 9 ) iLevel=9;
281 itt->second->SetIsomerLevel( iLevel );
282 itf ->
second.insert( std::pair< G4double, G4IsotopeProperty* >( exEnergy , itt->second ) );
294 AddState(ionZ,ionA,ionE,flbIndex,ionLife,ionJ,ionMu);
366 if ( sFLB.size() < 1 || 2 < sFLB.size() ) {
369 text +=
" is not valid indicator of G4Ions::G4FloatLevelBase. You may use a wrong version of ENSDFSTATE data. Please use G4ENSDFSTATE2.0 or later.";
375 if ( !(sFLB ==
'-') ) {