179 if ( threshold_of_half_life < minimum_threshold_of_half_life ) {
183 char* path = getenv(
"G4ENSDFSTATEDATA");
187 FatalException,
"G4ENSDFSTATEDATA environment variable must be set");
193 filename +=
"/ENSDFSTATE.dat";
195 ifs.open( filename.c_str() );
216 ifs >> ionZ >> ionA >> ionE >> ionFL >> ionLife >> ionJ >> ionMu;
218 while ( ifs.good() ) {
220 if ( ionCode != 1000*ionZ + ionA ) {
222 ionCode = 1000*ionZ + ionA;
236 || ( threshold_of_half_life <= ionLife*std::log(2.0) && ionLife*std::log(2.0) < minimum_threshold_of_half_life ) ) {
238 if ( ionE > 0 ) iLevel++;
239 if ( iLevel > 9 ) iLevel=9;
254 fIsotopeList->push_back(fProperty);
256 std::map< G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator itf = map_full_list.find( ionCode );
257 if ( itf == map_full_list.end() ) {
258 std::multimap<G4double, G4IsotopeProperty*> aMultiMap;
260 itf = ( map_full_list.insert( std::pair<
G4int , std::multimap< G4double , G4IsotopeProperty* > > ( ionCode , aMultiMap ) ) ).
first;
262 itf ->
second.insert( std::pair< G4double, G4IsotopeProperty* >( ionE , fProperty ) );
265 ifs >> ionZ >> ionA >> ionE >> ionFL >> ionLife >> ionJ >> ionMu;
268 minimum_threshold_of_half_life = threshold_of_half_life;
274 for ( std::map<
G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator
275 it = map_pre_load_list.begin(); it != map_pre_load_list.end(); it++ ) {
278 map_pre_load_list.clear();
281 for ( std::map<
G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator
282 it = map_full_list.begin(); it != map_full_list.end(); it++ ) {
284 G4int ionCode = it->first;
285 std::map< G4int , std::multimap< G4double , G4IsotopeProperty* > >::iterator itf = map_pre_load_list.find( ionCode );
286 if ( itf == map_pre_load_list.end() ) {
287 std::multimap<G4double, G4IsotopeProperty*> aMultiMap;
288 itf = ( map_pre_load_list.insert( std::pair<
G4int , std::multimap< G4double , G4IsotopeProperty* > > ( ionCode , aMultiMap ) ) ).
first;
291 for ( std::multimap< G4double , G4IsotopeProperty* >::iterator
292 itt = it->second.begin(); itt != it->second.end(); itt++ ) {
295 G4double meanLife = itt->second->GetLifeTime();
298 || meanLife*std::log(2.0) > threshold_of_half_life ) {
300 if ( itt->first != 0.0 ) iLevel++;
301 if ( iLevel > 9 ) iLevel=9;
302 itt->second->SetIsomerLevel( iLevel );
304 itf ->
second.insert( std::pair< G4double, G4IsotopeProperty* >( exEnergy , itt->second ) );
static constexpr double tesla
void SetAtomicMass(G4int A)
static constexpr double second
void SetMagneticMoment(G4double M)
void SetLifeTime(G4double T)
void SetFloatLevelBase(G4Ions::G4FloatLevelBase flb)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
void SetEnergy(G4double E)
void SetDecayTable(G4DecayTable *table)
static constexpr double joule
static constexpr double keV
void SetAtomicNumber(G4int Z)
void SetIsomerLevel(G4int level)