69 for ( std::map <
G4int , std::map <
G4double , std::vector < E_isoAng* >* >* >::iterator it = incoherentFSs.begin() ; it != incoherentFSs.end() ; it++ )
71 std::map < G4double , std::vector < E_isoAng* >* >::iterator itt;
72 for ( itt = it->second->begin() ; itt != it->second->end() ; itt++ )
74 std::vector< E_isoAng* >::iterator ittt;
75 for ( ittt = itt->second->begin(); ittt != itt->second->end() ; ittt++ )
84 for ( std::map <
G4int , std::map <
G4double , std::vector < std::pair< G4double , G4double >* >* >* >::iterator it = coherentFSs.begin() ; it != coherentFSs.end() ; it++ )
86 std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >::iterator itt;
87 for ( itt = it->second->begin() ; itt != it->second->end() ; itt++ )
89 std::vector < std::pair< G4double , G4double >* >::iterator ittt;
90 for ( ittt = itt->second->begin(); ittt != itt->second->end() ; ittt++ )
99 for ( std::map <
G4int , std::map <
G4double , std::vector < E_P_E_isoAng* >* >* >::iterator it = inelasticFSs.begin() ; it != inelasticFSs.end() ; it++ )
101 std::map < G4double , std::vector < E_P_E_isoAng* >* >::iterator itt;
102 for ( itt = it->second->begin() ; itt != it->second->end() ; itt++ )
104 std::vector < E_P_E_isoAng* >::iterator ittt;
105 for ( ittt = itt->second->begin(); ittt != itt->second->end() ; ittt++ )
107 std::vector < E_isoAng* >::iterator it4;
108 for ( it4 = (*ittt)->vE_isoAngle.begin() ; it4 != (*ittt)->vE_isoAngle.end() ; it4++ )
125std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* G4NeutronHPThermalScattering::readACoherentFSDATA(
G4String name )
128 std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* aCoherentFSDATA =
new std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >;
130 std::ifstream theChannel( name.c_str() );
132 std::vector< G4double > vBraggE;
135 while ( theChannel >> dummy )
140 std::vector < std::pair< G4double , G4double >* >* anBragE_P =
new std::vector < std::pair< G4double , G4double >* >;
144 for (
G4int i = 0 ; i < n ; i++ )
148 if ( aCoherentFSDATA->size() == 0 )
151 vBraggE.push_back( Ei );
158 anBragE_P->push_back (
new std::pair < G4double , G4double > ( Ei , Pi ) );
161 aCoherentFSDATA->insert ( std::pair <
G4double , std::vector < std::pair< G4double , G4double >* >* > ( temp , anBragE_P ) );
164 return aCoherentFSDATA;
169std::map < G4double , std::vector < E_P_E_isoAng* >* >* G4NeutronHPThermalScattering::readAnInelasticFSDATA (
G4String name )
171 std::map < G4double , std::vector < E_P_E_isoAng* >* >* anT_E_P_E_isoAng =
new std::map < G4double , std::vector < E_P_E_isoAng* >* >;
173 std::ifstream theChannel( name.c_str() );
176 while ( theChannel >> dummy )
181 std::vector < E_P_E_isoAng* >* vE_P_E_isoAng =
new std::vector < E_P_E_isoAng* >;
184 for (
G4int i = 0 ; i <
n ; i++ )
186 vE_P_E_isoAng->push_back ( readAnE_P_E_isoAng ( &theChannel ) );
188 anT_E_P_E_isoAng->insert ( std::pair <
G4double , std::vector < E_P_E_isoAng* >* > ( temp , vE_P_E_isoAng ) );
192 return anT_E_P_E_isoAng;
197E_P_E_isoAng* G4NeutronHPThermalScattering::readAnE_P_E_isoAng( std::ifstream* file )
206 aData->
energy = energy*eV;
212 for (
G4int i = 0 ; i < aData->
n ; i++ )
218 anE_isoAng->
energy = energy*eV;
219 anE_isoAng->
n = nl - 2;
220 anE_isoAng->
isoAngle.resize( anE_isoAng->
n );
222 aData->
prob.push_back( prob );
224 for (
G4int j = 0 ; j < anE_isoAng->
n ; j++ )
235 for (
G4int i = 0 ; i < aData->
n - 1 ; i++ )
240 total += ( ( aData->
prob[i] ) * dE );
249std::map < G4double , std::vector < E_isoAng* >* >* G4NeutronHPThermalScattering::readAnIncoherentFSDATA (
G4String name )
251 std::map < G4double , std::vector < E_isoAng* >* >* T_E =
new std::map < G4double , std::vector < E_isoAng* >* >;
253 std::ifstream theChannel( name.c_str() );
256 while ( theChannel >> dummy )
261 std::vector < E_isoAng* >* vE_isoAng =
new std::vector < E_isoAng* >;
264 for (
G4int i = 0 ; i <
n ; i++ )
265 vE_isoAng->push_back ( readAnE_isoAng( &theChannel ) );
266 T_E->insert ( std::pair <
G4double , std::vector < E_isoAng* >* > ( temp , vE_isoAng ) );
275E_isoAng* G4NeutronHPThermalScattering::readAnE_isoAng( std::ifstream* file )
288 aData->
energy = energy*eV;
294 for (
G4int i = 0 ; i < aData->
n ; i++ )
312 G4bool findThermalElement =
false;
315 for (
G4int i = 0; i < n ; i++ )
322 if ( getTS_ID( NULL , theElement ) != -1 )
324 ielement = getTS_ID( NULL , theElement );
325 findThermalElement =
true;
328 else if ( getTS_ID( theMaterial , theElement ) != -1 )
330 ielement = getTS_ID( theMaterial , theElement );
331 findThermalElement =
true;
337 if ( findThermalElement ==
true )
349 if ( random <= inelastic/total )
354 std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator it;
355 std::vector<G4double> v_temp;
357 for ( it = inelasticFSs.find( ielement )->second->begin() ; it != inelasticFSs.find( ielement )->second->end() ; it++ )
359 v_temp.push_back( it->first );
363 std::pair < G4double , G4double > tempLH = find_LH ( aTemp , &v_temp );
367 std::vector< E_P_E_isoAng* >* vNEP_EPM_TL = 0;
368 std::vector< E_P_E_isoAng* >* vNEP_EPM_TH = 0;
370 if ( tempLH.first != 0.0 && tempLH.second != 0.0 )
372 vNEP_EPM_TL = inelasticFSs.find( ielement )->second->find ( tempLH.first/kelvin )->second;
373 vNEP_EPM_TH = inelasticFSs.find( ielement )->second->find ( tempLH.second/kelvin )->second;
375 else if ( tempLH.first == 0.0 )
377 std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator itm;
378 itm = inelasticFSs.find( ielement )->second->begin();
379 vNEP_EPM_TL = itm->second;
381 vNEP_EPM_TH = itm->second;
383 else if ( tempLH.second == 0.0 )
385 std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator itm;
386 itm = inelasticFSs.find( ielement )->second->end();
388 vNEP_EPM_TH = itm->second;
390 vNEP_EPM_TL = itm->second;
397 std::pair< G4double , E_isoAng > TL = create_sE_and_EPM_from_pE_and_vE_P_E_isoAng ( rand_for_sE , aTrack.
GetKineticEnergy() , vNEP_EPM_TL );
398 std::pair< G4double , E_isoAng > TH = create_sE_and_EPM_from_pE_and_vE_P_E_isoAng ( rand_for_sE , aTrack.
GetKineticEnergy() , vNEP_EPM_TH );
401 sE = get_linear_interpolated ( aTemp , std::pair < G4double , G4double > ( tempLH.first , TL.first ) , std::pair < G4double , G4double > ( tempLH.second , TH.first ) );
403 if ( TL.second.n == TH.second.n )
406 anE_isoAng.
n = TL.second.n;
407 for (
G4int i=0 ; i < anE_isoAng.
n ; i++ )
410 angle = get_linear_interpolated ( aTemp , std::pair< G4double , G4double > ( tempLH.first , TL.second.isoAngle[ i ] ) , std::pair< G4double , G4double > ( tempLH.second , TH.second.isoAngle[ i ] ) );
411 anE_isoAng.
isoAngle.push_back( angle );
416 std::cout <<
"Do not Suuport yet." << std::endl;
426 else if ( random <= ( inelastic + theXSection->
GetCoherentCrossSection( dp , theElement , theMaterial ) ) / total )
433 std::map < G4double , std::vector< std::pair< G4double , G4double >* >* >::iterator it;
434 std::vector<G4double> v_temp;
436 for ( it = coherentFSs.find( ielement )->second->begin() ; it != coherentFSs.find( ielement )->second->end() ; it++ )
438 v_temp.push_back( it->first );
442 std::pair < G4double , G4double > tempLH = find_LH ( aTemp , &v_temp );
447 std::vector< std::pair< G4double , G4double >* >* pvE_p_TL = 0;
448 std::vector< std::pair< G4double , G4double >* >* pvE_p_TH = 0;
450 if ( tempLH.first != 0.0 && tempLH.second != 0.0 )
452 pvE_p_TL = coherentFSs.find( ielement )->second->find ( tempLH.first/kelvin )->second;
453 pvE_p_TH = coherentFSs.find( ielement )->second->find ( tempLH.first/kelvin )->second;
455 else if ( tempLH.first == 0.0 )
457 pvE_p_TL = coherentFSs.find( ielement )->second->find ( v_temp[ 0 ] )->second;
458 pvE_p_TH = coherentFSs.find( ielement )->second->find ( v_temp[ 1 ] )->second;
460 else if ( tempLH.second == 0.0 )
462 pvE_p_TL = coherentFSs.find( ielement )->second->find ( v_temp.back() )->second;
463 std::vector< G4double >::iterator itv;
467 pvE_p_TL = coherentFSs.find( ielement )->second->find ( *itv )->second;
471 std::vector< G4double > vE_T;
472 std::vector< G4double > vp_T;
474 G4int n1 = pvE_p_TL->size();
477 for (
G4int i=1 ; i < n1 ; i++ )
479 if ( (*pvE_p_TL)[i]->first != (*pvE_p_TH)[i]->first ) abort();
480 vE_T.push_back ( (*pvE_p_TL)[i]->first );
481 vp_T.push_back ( get_linear_interpolated ( aTemp , std::pair< G4double , G4double > ( tempLH.first , (*pvE_p_TL)[i]->second ) , std::pair< G4double , G4double > ( tempLH.second , (*pvE_p_TL)[i]->second ) ) );
485 for (
G4int i = 1 ; i < n ; i++ )
487 if ( E/eV < vE_T[ i ] )
497 for (
G4int i = 1 ; i < j ; i++ )
499 G4double Pi = vp_T[ i ] / vp_T[ j ];
500 if ( rand_for_mu < Pi )
512 if ( mu < -1.0 ) mu = -1.0;
524 std::map < G4double , std::vector < E_isoAng* >* >::iterator it;
525 std::vector<G4double> v_temp;
527 for ( it = incoherentFSs.find( ielement )->second->begin() ; it != incoherentFSs.find( ielement )->second->end() ; it++ )
529 v_temp.push_back( it->first );
533 std::pair < G4double , G4double > tempLH = find_LH ( aTemp , &v_temp );
542 if ( tempLH.first != 0.0 && tempLH.second != 0.0 )
544 anEPM_TL_E = create_E_isoAng_from_energy ( aTrack.
GetKineticEnergy() , incoherentFSs.find( ielement )->second->find ( tempLH.first/kelvin )->second );
545 anEPM_TH_E = create_E_isoAng_from_energy ( aTrack.
GetKineticEnergy() , incoherentFSs.find( ielement )->second->find ( tempLH.second/kelvin )->second );
547 else if ( tempLH.first == 0.0 )
549 anEPM_TL_E = create_E_isoAng_from_energy ( aTrack.
GetKineticEnergy() , incoherentFSs.find( ielement )->second->find ( v_temp[ 0 ] )->second );
550 anEPM_TH_E = create_E_isoAng_from_energy ( aTrack.
GetKineticEnergy() , incoherentFSs.find( ielement )->second->find ( v_temp[ 1 ] )->second );
552 else if ( tempLH.second == 0.0 )
554 anEPM_TH_E = create_E_isoAng_from_energy ( aTrack.
GetKineticEnergy() , incoherentFSs.find( ielement )->second->find ( v_temp.back() )->second );
555 std::vector< G4double >::iterator itv;
559 anEPM_TL_E = create_E_isoAng_from_energy ( aTrack.
GetKineticEnergy() , incoherentFSs.find( ielement )->second->find ( *itv )->second );
565 if ( anEPM_TL_E.
n == anEPM_TH_E.
n )
567 anEPM_T_E.
n = anEPM_TL_E.
n;
568 for (
G4int i=0 ; i < anEPM_TL_E.
n ; i++ )
571 angle = get_linear_interpolated ( aTemp , std::pair< G4double , G4double > ( tempLH.first , anEPM_TL_E.
isoAngle[ i ] ) , std::pair< G4double , G4double > ( tempLH.second , anEPM_TH_E.
isoAngle[ i ] ) );
572 anEPM_T_E.
isoAngle.push_back( angle );
577 std::cout <<
"Do not Suuport yet." << std::endl;
610 G4int in = int ( random * ( (*anEPM).n ) );
614 G4double mu_l = (*anEPM).isoAngle[ in-1 ];
615 G4double mu_h = (*anEPM).isoAngle[ in ];
616 result = ( mu_h - mu_l ) * ( random * ( (*anEPM).n ) - in ) + mu_l;
621 G4double D = ( (*anEPM).isoAngle[ 0 ] - ( -1 ) ) + ( 1 - (*anEPM).isoAngle[ (*anEPM).n - 1 ] );
622 G4double ratio = ( (*anEPM).isoAngle[ 0 ] - ( -1 ) ) / D;
626 G4double mu_h = (*anEPM).isoAngle[ 0 ];
627 result = ( mu_h - mu_l ) * x + mu_l;
631 G4double mu_l = (*anEPM).isoAngle[ (*anEPM).n - 1 ];
633 result = ( mu_h - mu_l ) * x + mu_l;
641std::pair < G4double , G4double > G4NeutronHPThermalScattering::find_LH (
G4double x , std::vector< G4double >* aVector )
645 std::vector< G4double >::iterator it;
646 for ( it = aVector->begin() ; it != aVector->end() ; it++ )
651 if ( it != aVector->begin() )
666 return std::pair < G4double , G4double > ( L , H );
671G4double G4NeutronHPThermalScattering::get_linear_interpolated (
G4double x , std::pair< G4double , G4double > Low , std::pair< G4double , G4double > High )
674 if ( High.first - Low.first != 0 )
675 y = ( High.second - Low.second ) / ( High.first - Low.first ) * ( x - Low.first ) + Low.second;
677 std::cout <<
"G4NeutronHPThermalScattering liner interpolation err!!" << std::endl;
684E_isoAng G4NeutronHPThermalScattering::create_E_isoAng_from_energy (
G4double energy , std::vector< E_isoAng* >* vEPM )
688 std::vector< E_isoAng* >::iterator iv;
690 std::vector< G4double > v_e;
692 for ( iv = vEPM->begin() ; iv != vEPM->end() ; iv++ )
693 v_e.push_back ( (*iv)->energy );
695 std::pair < G4double , G4double > energyLH = find_LH ( energy , &v_e );
701 if ( energyLH.first != 0.0 && energyLH.second != 0.0 )
703 for ( iv = vEPM->begin() ; iv != vEPM->end() ; iv++ )
705 if ( energyLH.first == (*iv)->energy )
712 else if ( energyLH.first == 0.0 )
714 panEPM_T_EL = (*vEPM)[0];
715 panEPM_T_EH = (*vEPM)[1];
717 else if ( energyLH.second == 0.0 )
719 panEPM_T_EH = (*vEPM).back();
726 if ( panEPM_T_EL->
n == panEPM_T_EH->
n )
728 anEPM_T_E.
energy = energy;
729 anEPM_T_E.
n = panEPM_T_EL->
n;
731 for (
G4int i=0 ; i < panEPM_T_EL->
n ; i++ )
734 angle = get_linear_interpolated ( energy , std::pair< G4double , G4double > ( energyLH.first , panEPM_T_EL->
isoAngle[ i ] ) , std::pair< G4double , G4double > ( energyLH.second , panEPM_T_EH->
isoAngle[ i ] ) );
735 anEPM_T_E.
isoAngle.push_back( angle );
740 G4cout <<
"G4NeutronHPThermalScattering Do not Suuport yet." <<
G4endl;
774 for (
G4int i = 0 ; i <
n-1 ; i++ )
779 sum_p += ( ( anE_P_E_isoAng->
prob[i] ) * dE );
781 if ( random <= sum_p/total )
783 secondary_energy = get_linear_interpolated ( random , std::pair < G4double , G4double > ( sum_p_L/total , E_L ) , std::pair < G4double , G4double > ( sum_p/total , E_H ) );
784 secondary_energy = secondary_energy*eV;
790 return secondary_energy;
795std::pair< G4double , E_isoAng > G4NeutronHPThermalScattering::create_sE_and_EPM_from_pE_and_vE_P_E_isoAng (
G4double rand_for_sE ,
G4double pE , std::vector < E_P_E_isoAng* >* vNEP_EPM )
798 std::map< G4double , G4int > map_energy;
800 std::vector< G4double > v_energy;
802 std::vector< E_P_E_isoAng* >::iterator itv;
804 for ( itv = vNEP_EPM->begin(); itv != vNEP_EPM->end(); itv++ )
806 v_energy.push_back( (*itv)->energy );
807 map_energy.insert( std::pair < G4double , G4int > ( (*itv)->energy , i ) );
811 std::pair < G4double , G4double > energyLH = find_LH ( pE , &v_energy );
816 if ( energyLH.first != 0.0 && energyLH.second != 0.0 )
818 pE_P_E_isoAng_EL = (*vNEP_EPM)[ map_energy.find ( energyLH.first )->second ];
819 pE_P_E_isoAng_EH = (*vNEP_EPM)[ map_energy.find ( energyLH.second )->second ];
821 else if ( energyLH.first == 0.0 )
823 pE_P_E_isoAng_EL = (*vNEP_EPM)[ 0 ];
824 pE_P_E_isoAng_EH = (*vNEP_EPM)[ 1 ];
826 if ( energyLH.second == 0.0 )
828 pE_P_E_isoAng_EH = (*vNEP_EPM).back();
829 itv = vNEP_EPM->end();
832 pE_P_E_isoAng_EL = *itv;
841 sE_L = get_secondary_energy_from_E_P_E_isoAng ( rand_for_sE , pE_P_E_isoAng_EL );
842 sE_H = get_secondary_energy_from_E_P_E_isoAng ( rand_for_sE , pE_P_E_isoAng_EH );
844 sE = get_linear_interpolated ( pE , std::pair < G4double , G4double > ( energyLH.first , sE_L ) , std::pair < G4double , G4double > ( energyLH.second , sE_H ) );
847 E_isoAng E_isoAng_L = create_E_isoAng_from_energy ( sE , &(pE_P_E_isoAng_EL->
vE_isoAngle) );
848 E_isoAng E_isoAng_H = create_E_isoAng_from_energy ( sE , &(pE_P_E_isoAng_EH->
vE_isoAngle) );
851 if ( E_isoAng_L.
n == E_isoAng_H.
n )
853 anE_isoAng.
n = E_isoAng_L.
n;
854 for (
G4int j=0 ; j < anE_isoAng.
n ; j++ )
857 angle = get_linear_interpolated ( sE , std::pair< G4double , G4double > ( sE_L , E_isoAng_L.
isoAngle[ j ] ) , std::pair< G4double , G4double > ( sE_H , E_isoAng_H.
isoAngle[ j ] ) );
858 anE_isoAng.
isoAngle.push_back( angle );
863 std::cout <<
"Do not Suuport yet." << std::endl;
868 return std::pair< G4double , E_isoAng >( sE , anE_isoAng);
871void G4NeutronHPThermalScattering::buildPhysicsTable()
875 std::map < G4String , G4int > co_dic;
880 for (
size_t i = 0 ; i < numberOfMaterials ; i++ )
882 G4Material* material = (*theMaterialTable)[i];
884 for (
size_t j = 0 ; j < numberOfElements ; j++ )
889 G4int ts_ID_of_this_geometry;
891 if ( co_dic.find ( ts_ndl_name ) != co_dic.end() )
893 ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) -> second;
897 ts_ID_of_this_geometry = co_dic.size();
898 co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) );
905 dic.insert( std::pair < std::pair < G4Material* , const G4Element* > ,
G4int > ( std::pair < G4Material* , const G4Element* > ( material , element ) , ts_ID_of_this_geometry ) );
914 for (
size_t i = 0 ; i < numberOfElements ; i++ )
916 const G4Element* element = (*theElementTable)[i];
921 G4int ts_ID_of_this_geometry;
923 if ( co_dic.find ( ts_ndl_name ) != co_dic.end() )
925 ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) -> second;
929 ts_ID_of_this_geometry = co_dic.size();
930 co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) );
937 dic.insert( std::pair < std::pair < const G4Material* , const G4Element* > ,
G4int > ( std::pair < const G4Material* , const G4Element* > ( (
G4Material*)NULL , element ) , ts_ID_of_this_geometry ) );
943 G4cout <<
"Neutron HP Thermal Scattering: Following material-element pairs or elements are registered." <<
G4endl;
944 for ( std::map < std::pair < const G4Material* , const G4Element* > ,
G4int >::iterator it = dic.begin() ; it != dic.end() ; it++ )
946 if ( it->first.first != NULL )
948 G4cout <<
"Material " << it->first.first->GetName() <<
" - Element " << it->first.second->GetName() <<
", internal thermal scattering id " << it->second <<
G4endl;
952 G4cout <<
"Element " << it->first.second->GetName() <<
", internal thermal scattering id " << it->second <<
G4endl;
960 if ( !getenv(
"G4NEUTRONHPDATA" ) )
961 throw G4HadronicException(__FILE__, __LINE__,
"Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files.");
962 dirName = getenv(
"G4NEUTRONHPDATA" );
968 for ( std::map < G4String , G4int >::iterator it = co_dic.begin() ; it != co_dic.end() ; it++ )
971 G4int ts_ID = it->second;
974 G4String fsName =
"/ThermalScattering/Coherent/FS/";
975 G4String fileName = dirName + fsName + tsndlName;
976 coherentFSs.insert ( std::pair <
G4int , std::map <
G4double , std::vector < std::pair< G4double , G4double >* >* >* > ( ts_ID , readACoherentFSDATA( fileName ) ) );
979 fsName =
"/ThermalScattering/Incoherent/FS/";
980 fileName = dirName + fsName + tsndlName;
981 incoherentFSs.insert ( std::pair <
G4int , std::map <
G4double , std::vector < E_isoAng* >* >* > ( ts_ID , readAnIncoherentFSDATA( fileName ) ) );
984 fsName =
"/ThermalScattering/Inelastic/FS/";
985 fileName = dirName + fsName + tsndlName;
986 inelasticFSs.insert ( std::pair <
G4int , std::map <
G4double , std::vector < E_P_E_isoAng* >* >* > ( ts_ID , readAnInelasticFSDATA( fileName ) ) );
994 if ( dic.find( std::pair < const G4Material* , const G4Element* > ( material , element ) ) != dic.end() )
995 result = dic.find( std::pair < const G4Material* , const G4Element* > ( material , element ) )->second;
1002 return std::pair<G4double, G4double>(10*perCent,
DBL_MAX);
std::vector< G4Element * > G4ElementTable
std::vector< G4Material * > G4MaterialTable
G4DLLIMPORT std::ostream G4cout
static size_t GetNumberOfElements()
const G4String & GetName() const
static const G4ElementTable * GetElementTable()
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
const G4Material * GetMaterial() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4HadFinalState theParticleChange
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
static const G4MaterialTable * GetMaterialTable()
static size_t GetNumberOfMaterials()
G4double GetTemperature() const
const G4Element * GetElement(G4int iel) const
size_t GetNumberOfElements() const
const G4String & GetName() const
G4double GetInelasticCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
void BuildPhysicsTable(const G4ParticleDefinition &)
G4double GetCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
G4double GetCoherentCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
G4bool IsThisThermalElement(G4String)
G4String GetTS_NDL_Name(G4String nameG4Element)
G4NeutronHPThermalScattering()
virtual const std::pair< G4double, G4double > GetFatalEnergyCheckLevels() const
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
~G4NeutronHPThermalScattering()
static G4Neutron * Neutron()
std::vector< G4double > prob
std::vector< E_isoAng * > vE_isoAngle
std::vector< G4double > isoAngle