59,incoherentFSs(nullptr)
83 std::map < G4double , std::vector < E_isoAng* >* >::iterator itt;
84 for ( itt = it->second->begin() ; itt != it->second->end() ; itt++ )
86 std::vector< E_isoAng* >::iterator ittt;
87 for ( ittt = itt->second->begin(); ittt != itt->second->end() ; ittt++ )
100 std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >::iterator itt;
101 for ( itt = it->second->begin() ; itt != it->second->end() ; itt++ )
103 std::vector < std::pair< G4double , G4double >* >::iterator ittt;
104 for ( ittt = itt->second->begin(); ittt != itt->second->end() ; ittt++ )
117 std::map < G4double , std::vector < E_P_E_isoAng* >* >::iterator itt;
118 for ( itt = it->second->begin() ; itt != it->second->end() ; itt++ )
120 std::vector < E_P_E_isoAng* >::iterator ittt;
121 for ( ittt = itt->second->begin(); ittt != itt->second->end() ; ittt++ )
123 std::vector < E_isoAng* >::iterator it4;
124 for ( it4 = (*ittt)->vE_isoAngle.begin() ; it4 != (*ittt)->vE_isoAngle.end() ; it4++ )
151 std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* aCoherentFSDATA =
new std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >;
154 std::istringstream theChannel(std::ios::in);
157 std::vector< G4double > vBraggE;
160 while ( theChannel >> dummy )
165 std::vector < std::pair< G4double , G4double >* >* anBragE_P =
new std::vector < std::pair< G4double , G4double >* >;
169 for (
G4int i = 0 ; i <
n ; i++ )
173 if ( aCoherentFSDATA->size() == 0 )
176 vBraggE.push_back( Ei );
183 anBragE_P->push_back (
new std::pair < G4double , G4double > ( Ei , Pi ) );
186 aCoherentFSDATA->insert ( std::pair <
G4double , std::vector < std::pair< G4double , G4double >* >* > ( temp , anBragE_P ) );
189 return aCoherentFSDATA;
195 std::map < G4double , std::vector < E_P_E_isoAng* >* >* anT_E_P_E_isoAng =
new std::map < G4double , std::vector < E_P_E_isoAng* >* >;
198 std::istringstream theChannel(std::ios::in);
202 while ( theChannel >> dummy )
207 std::vector < E_P_E_isoAng* >* vE_P_E_isoAng =
new std::vector < E_P_E_isoAng* >;
210 for (
G4int i = 0 ; i <
n ; i++ )
214 anT_E_P_E_isoAng->insert ( std::pair <
G4double , std::vector < E_P_E_isoAng* >* > ( temp , vE_P_E_isoAng ) );
218 return anT_E_P_E_isoAng;
237 for (
G4int i = 0 ; i < aData->
n ; i++ )
244 anE_isoAng->
n = nl - 2;
245 anE_isoAng->
isoAngle.resize( anE_isoAng->
n );
247 aData->
prob.push_back( prob );
249 for (
G4int j = 0 ; j < anE_isoAng->
n ; j++ )
261 for (
G4int i = 0 ; i < aData->
n - 1 ; i++ )
288 std::map < G4double , std::vector < E_isoAng* >* >* T_E =
new std::map < G4double , std::vector < E_isoAng* >* >;
291 std::istringstream theChannel(std::ios::in);
295 while ( theChannel >> dummy )
300 std::vector < E_isoAng* >* vE_isoAng =
new std::vector < E_isoAng* >;
303 for (
G4int i = 0 ; i <
n ; i++ )
305 T_E->insert ( std::pair <
G4double , std::vector < E_isoAng* >* > ( temp , vE_isoAng ) );
332 for (
G4int i = 0 ; i < aData->
n ; i++ )
348 G4bool findThermalElement =
false;
351 for (
G4int i = 0; i <
n ; i++ )
358 if (
getTS_ID(
nullptr , theElement ) != -1 )
360 ielement =
getTS_ID(
nullptr , theElement );
361 findThermalElement =
true;
364 else if (
getTS_ID( theMaterial , theElement ) != -1 )
366 ielement =
getTS_ID( theMaterial , theElement );
367 findThermalElement =
true;
373 if ( findThermalElement ==
true )
384 if ( random <= inelastic/
total )
389 std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator it;
390 std::vector<G4double> v_temp;
392 for ( it =
inelasticFSs->find( ielement )->second->begin() ; it !=
inelasticFSs->find( ielement )->second->end() ; it++ )
394 v_temp.push_back( it->first );
398 std::pair < G4double , G4double > tempLH =
find_LH ( aTemp , &v_temp );
402 std::vector< E_P_E_isoAng* >* vNEP_EPM_TL = 0;
403 std::vector< E_P_E_isoAng* >* vNEP_EPM_TH = 0;
405 if ( tempLH.first != 0.0 && tempLH.second != 0.0 )
407 vNEP_EPM_TL =
inelasticFSs->find( ielement )->second->find ( tempLH.first/
kelvin )->second;
408 vNEP_EPM_TH =
inelasticFSs->find( ielement )->second->find ( tempLH.second/
kelvin )->second;
410 else if ( tempLH.first == 0.0 )
412 std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator itm;
414 vNEP_EPM_TL = itm->second;
416 vNEP_EPM_TH = itm->second;
417 tempLH.first = tempLH.second;
418 tempLH.second = itm->first;
420 else if ( tempLH.second == 0.0 )
422 std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator itm;
425 vNEP_EPM_TH = itm->second;
427 vNEP_EPM_TL = itm->second;
428 tempLH.second = tempLH.first;
429 tempLH.first = itm->first;
436 std::pair< G4double , G4double > secondaryParam;
438 if ( rand_temp < (aTemp-tempLH.first)/(tempLH.second - tempLH.first) )
443 sE = secondaryParam.first;
444 mu = secondaryParam.second;
449 G4double sint= std::sqrt ( 1 - mu*mu );
460 std::map < G4double , std::vector< std::pair< G4double , G4double >* >* >::iterator it;
461 std::vector<G4double> v_temp;
463 for ( it =
coherentFSs->find( ielement )->second->begin() ; it !=
coherentFSs->find( ielement )->second->end() ; it++ )
465 v_temp.push_back( it->first );
469 std::pair < G4double , G4double > tempLH =
find_LH ( aTemp , &v_temp );
474 std::vector< std::pair< G4double , G4double >* >* pvE_p_TL =
nullptr;
475 std::vector< std::pair< G4double , G4double >* >* pvE_p_TH =
nullptr;
477 if ( tempLH.first != 0.0 && tempLH.second != 0.0 )
479 pvE_p_TL =
coherentFSs->find( ielement )->second->find ( tempLH.first/
kelvin )->second;
480 pvE_p_TH =
coherentFSs->find( ielement )->second->find ( tempLH.first/
kelvin )->second;
482 else if ( tempLH.first == 0.0 )
484 pvE_p_TL =
coherentFSs->find( ielement )->second->find ( v_temp[ 0 ] )->second;
485 pvE_p_TH =
coherentFSs->find( ielement )->second->find ( v_temp[ 1 ] )->second;
486 tempLH.first = tempLH.second;
487 tempLH.second = v_temp[ 1 ];
489 else if ( tempLH.second == 0.0 )
491 pvE_p_TH =
coherentFSs->find( ielement )->second->find ( v_temp.back() )->second;
492 std::vector< G4double >::iterator itv;
496 pvE_p_TL =
coherentFSs->find( ielement )->second->find ( *itv )->second;
497 tempLH.second = tempLH.first;
503 throw G4HadronicException(__FILE__, __LINE__,
"A problem is found in Thermal Scattering Data! Unexpected temperature values in data");
506 std::vector< G4double > vE_T;
507 std::vector< G4double > vp_T;
509 G4int n1 = pvE_p_TL->size();
512 std::vector< std::pair< G4double , G4double >* >* pvE_p_T_sampled;
514 if ( rand_temp < (aTemp-tempLH.first)/(tempLH.second - tempLH.first) )
515 pvE_p_T_sampled = pvE_p_TH;
517 pvE_p_T_sampled = pvE_p_TL;
520 for (
G4int i=0 ; i < n1 ; i++ )
522 vE_T.push_back ( (*pvE_p_T_sampled)[i]->first );
523 vp_T.push_back ( (*pvE_p_T_sampled)[i]->
second );
527 for (
G4int i = 1 ; i < n1 ; i++ )
529 if ( E/
eV < vE_T[ i ] )
539 for (
G4int i = 0 ; i <= j ; i++ )
541 G4double Pi = vp_T[ i ] / vp_T[ j ];
542 if ( rand_for_mu < Pi )
553 if ( mu < -1.0 ) mu = -1.0;
558 G4double sint= std::sqrt ( 1 - mu*mu );
567 std::map < G4double , std::vector < E_isoAng* >* >::iterator it;
568 std::vector<G4double> v_temp;
572 v_temp.push_back( it->first );
576 std::pair < G4double , G4double > tempLH =
find_LH ( aTemp , &v_temp );
585 if ( tempLH.first != 0.0 && tempLH.second != 0.0 ) {
589 }
else if ( tempLH.first == 0.0 ) {
593 tempLH.first = tempLH.second;
594 tempLH.second = v_temp[ 1 ];
595 }
else if ( tempLH.second == 0.0 ) {
598 std::vector< G4double >::iterator itv;
603 tempLH.second = tempLH.first;
613 if ( rand_temp < (aTemp-tempLH.first)/(tempLH.second - tempLH.first) )
614 anEPM_T_E_sampled = anEPM_TH_E;
616 anEPM_T_E_sampled = anEPM_TL_E;
618 mu =
getMu ( &anEPM_T_E_sampled );
623 G4double sint= std::sqrt ( 1 - mu*mu );
658 rndm1 < anE_P_E_isoAng->secondary_energy_cdf[i+1] )
666 G4double alpha = (sE_pdf_i1 - sE_pdf_i) / (sE_pdf_i1 + sE_pdf_i);
669 if ( std::fabs(
alpha) < 1E-8 )
680 if ( delta < 0 && std::fabs(delta) < 1.E-8 ) delta = 0;
689 sE_value = sE_value_i +
lambda * (sE_value_i1 - sE_value_i);
695 return std::pair< G4double , G4int >( sE_value , i );
706 std::map< G4double , G4int > map_energy;
708 std::vector< G4double > v_energy;
710 std::vector< E_P_E_isoAng* >::iterator itv;
712 for ( itv = vNEP_EPM->begin(); itv != vNEP_EPM->end(); ++itv )
714 v_energy.push_back( (*itv)->energy );
715 map_energy.insert( std::pair< G4double , G4int >( (*itv)->energy , i ) );
719 std::pair< G4double , G4double > energyLH =
find_LH( pE , &v_energy );
721 std::vector< E_P_E_isoAng* > pE_P_E_isoAng_limit(2,
nullptr);
723 if ( energyLH.first != 0.0 && energyLH.second != 0.0 )
725 pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[ map_energy.find ( energyLH.first )->second ];
726 pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[ map_energy.find ( energyLH.second )->second ];
728 else if ( energyLH.first == 0.0 )
730 pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[ 0 ];
731 pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[ 1 ];
733 if ( energyLH.second == 0.0 )
735 pE_P_E_isoAng_limit[1] = (*vNEP_EPM).back();
736 itv = vNEP_EPM->end();
739 pE_P_E_isoAng_limit[0] = *itv;
743 G4double factor = (energyLH.second - pE) / (energyLH.second - energyLH.first);
745 if ( (energyLH.second - pE) <= 0. && std::fabs(pE/energyLH.second - 1) < 1E-11 ) factor = 0.;
746 if ( (energyLH.first - pE) >= 0. && std::fabs(energyLH.first / pE - 1) < 1E-11 ) factor = 1.;
752 std::pair< G4double , G4int > sE_lower =
sample_inelastic_E( rndm1, rndm2, pE_P_E_isoAng_limit[0] );
753 std::pair< G4double , G4int > sE_upper =
sample_inelastic_E( rndm1, rndm2, pE_P_E_isoAng_limit[1] );
754 G4double sE = factor * sE_lower.first + (1 - factor) * sE_upper.first;
760 G4double mu_lower =
getMu( rndm1, rndm2, pE_P_E_isoAng_limit[0]->vE_isoAngle[sE_lower.second] );
761 G4double mu_upper =
getMu( rndm1, rndm2, pE_P_E_isoAng_limit[1]->vE_isoAngle[sE_upper.second] );
762 G4double mu = factor * mu_lower + (1 - factor) * mu_upper;
764 return std::pair< G4double , G4double >( sE , mu );
775 G4int in = int ( rndm1 * ( (*anEPM).n ) );
779 G4double mu_l = (*anEPM).isoAngle[ in-1 ];
780 G4double mu_h = (*anEPM).isoAngle[ in ];
781 result = ( mu_h - mu_l ) * ( rndm1*((*anEPM).n) - in ) + mu_l;
790 G4double mu_h = (*anEPM).isoAngle[ 0 ];
791 result = ( mu_h - mu_l ) * rndm2 + mu_l;
795 G4double mu_l = (*anEPM).isoAngle[ (*anEPM).n - 1 ];
797 result = ( mu_h - mu_l ) * rndm2 + mu_l;
815 G4int in = int ( random * ( (*anEPM).n ) );
819 G4double mu_l = (*anEPM).isoAngle[ in-1 ];
820 G4double mu_h = (*anEPM).isoAngle[ in ];
821 result = ( mu_h - mu_l ) * ( random * ( (*anEPM).n ) - in ) + mu_l;
832 G4double mu_h = (*anEPM).isoAngle[ 0 ];
833 result = ( mu_h - mu_l ) * xx + mu_l;
837 G4double mu_l = (*anEPM).isoAngle[ (*anEPM).n - 1 ];
839 result = ( mu_h - mu_l ) * xx + mu_l;
852 if ( aVector->size() == 1 ) {
853 LL = aVector->front();
854 H = aVector->front();
859 for ( std::vector< G4double >::iterator
860 it = aVector->begin() ; it != aVector->end() ; it++ ) {
863 if ( it != aVector->begin() ) {
875 if ( H == 0.0 )
LL = aVector->back();
878 return std::pair < G4double , G4double > (
LL , H );
885 if ( High.first - Low.first != 0 ) {
886 y = ( High.second - Low.second ) / ( High.first - Low.first ) * ( x - Low.first ) + Low.second;
888 if ( High.second == Low.second ) {
891 G4cout <<
"G4ParticleHPThermalScattering liner interpolation err!!" <<
G4endl;
901 std::vector<E_isoAng*>* vEPM)
904 std::vector<E_isoAng*>::iterator iv;
906 std::vector<G4double> v_e;
908 for (iv = vEPM->begin(); iv != vEPM->end(); iv++)
909 v_e.push_back( (*iv)->energy );
911 std::pair<G4double, G4double> energyLH =
find_LH(
energy, &v_e);
917 if (energyLH.first != 0.0 && energyLH.second != 0.0) {
918 for (iv = vEPM->begin(); iv != vEPM->end(); iv++) {
919 if (energyLH.first == (*iv)->energy) {
927 }
else if (energyLH.first == 0.0) {
928 panEPM_T_EL = (*vEPM)[0];
929 panEPM_T_EH = (*vEPM)[1];
931 }
else if (energyLH.second == 0.0) {
932 panEPM_T_EH = (*vEPM).back();
939 if (panEPM_T_EL != 0 && panEPM_T_EH != 0) {
945 if (panEPM_T_EL->
n == panEPM_T_EH->
n) {
947 anEPM_T_E.
n = panEPM_T_EL->
n;
949 for (
G4int i=0; i < panEPM_T_EL->
n; i++) {
952 std::pair<G4double,G4double>(energyLH.second, panEPM_T_EH->
isoAngle[i] ) );
957 G4Exception(
"G4ParticleHPThermalScattering::create_E_isoAng_from_energy",
959 "G4ParticleHPThermalScattering does not support yet EL->n != EH->n.");
963 G4Exception(
"G4ParticleHPThermalScattering::create_E_isoAng_from_energy",
965 "Pointer panEPM_T_EL or panEPM_T_EH is zero");
996 for (
G4int i = 0 ; i <
n-1 ; i++ )
1001 sum_p += ( ( anE_P_E_isoAng->
prob[i] ) *
dE );
1003 if ( random <= sum_p/
total )
1005 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 ) );
1006 secondary_energy = secondary_energy*
eV;
1012 return secondary_energy;
1018 std::map< G4double , G4int > map_energy;
1020 std::vector< G4double > v_energy;
1022 std::vector< E_P_E_isoAng* >::iterator itv;
1024 for ( itv = vNEP_EPM->begin(); itv != vNEP_EPM->end(); itv++ )
1026 v_energy.push_back( (*itv)->energy );
1027 map_energy.insert( std::pair < G4double , G4int > ( (*itv)->energy , i ) );
1031 std::pair < G4double , G4double > energyLH =
find_LH ( pE , &v_energy );
1036 if ( energyLH.first != 0.0 && energyLH.second != 0.0 )
1038 pE_P_E_isoAng_EL = (*vNEP_EPM)[ map_energy.find ( energyLH.first )->second ];
1039 pE_P_E_isoAng_EH = (*vNEP_EPM)[ map_energy.find ( energyLH.second )->second ];
1041 else if ( energyLH.first == 0.0 )
1043 pE_P_E_isoAng_EL = (*vNEP_EPM)[ 0 ];
1044 pE_P_E_isoAng_EH = (*vNEP_EPM)[ 1 ];
1046 if ( energyLH.second == 0.0 )
1048 pE_P_E_isoAng_EH = (*vNEP_EPM).back();
1049 itv = vNEP_EPM->end();
1052 pE_P_E_isoAng_EL = *itv;
1062 sE =
get_linear_interpolated ( pE , std::pair < G4double , G4double > ( energyLH.first , sE_L ) , std::pair < G4double , G4double > ( energyLH.second , sE_H ) );
1072 if ( E_isoAng_L.
n == E_isoAng_H.
n )
1074 anE_isoAng.
n = E_isoAng_L.
n;
1075 for (
G4int j=0 ; j < anE_isoAng.
n ; j++ )
1088 return std::pair< G4double , E_isoAng >( sE , anE_isoAng);
1103 std::map < G4String , G4int > co_dic;
1108 for (
size_t i = 0 ; i < numberOfMaterials ; i++ )
1111 size_t numberOfElements =
material->GetNumberOfElements();
1112 for (
size_t j = 0 ; j < numberOfElements ; j++ )
1117 G4int ts_ID_of_this_geometry;
1119 if ( co_dic.find ( ts_ndl_name ) != co_dic.end() )
1121 ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) ->
second;
1125 ts_ID_of_this_geometry = co_dic.size();
1126 co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) );
1133 dic.insert( std::pair < std::pair < G4Material* , const G4Element* > ,
G4int > ( std::pair < G4Material* , const G4Element* > (
material , element ) , ts_ID_of_this_geometry ) );
1142 for (
size_t i = 0 ; i < numberOfElements ; i++ )
1144 const G4Element* element = (*theElementTable)[i];
1149 G4int ts_ID_of_this_geometry;
1151 if ( co_dic.find ( ts_ndl_name ) != co_dic.end() )
1153 ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) ->
second;
1157 ts_ID_of_this_geometry = co_dic.size();
1158 co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) );
1165 dic.insert( std::pair < std::pair < const G4Material* , const G4Element* > ,
G4int > ( std::pair < const G4Material* , const G4Element* > ( (
G4Material*)
nullptr , element ) , ts_ID_of_this_geometry ) );
1171 G4cout <<
"Neutron HP Thermal Scattering: Following material-element pairs or elements are registered." <<
G4endl;
1172 for (
std::map < std::pair < const G4Material* , const G4Element* > ,
G4int >::iterator it =
dic.begin() ; it !=
dic.end() ; it++ )
1174 if ( it->first.first !=
nullptr )
1176 G4cout <<
"Material " << it->first.first->GetName() <<
" - Element " << it->first.second->GetName() <<
", internal thermal scattering id " << it->second <<
G4endl;
1180 G4cout <<
"Element " << it->first.second->GetName() <<
", internal thermal scattering id " << it->second <<
G4endl;
1196 if (
coherentFSs ==
nullptr )
coherentFSs =
new std::map < G4int , std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* >;
1197 if (
incoherentFSs ==
nullptr )
incoherentFSs =
new std::map < G4int , std::map < G4double , std::vector < E_isoAng* >* >* >;
1198 if (
inelasticFSs ==
nullptr )
inelasticFSs =
new std::map < G4int , std::map < G4double , std::vector < E_P_E_isoAng* >* >* >;
1201 if ( !std::getenv(
"G4NEUTRONHPDATA" ) )
1202 throw G4HadronicException(__FILE__, __LINE__,
"Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files.");
1203 dirName = std::getenv(
"G4NEUTRONHPDATA" );
1207 for ( std::map < G4String , G4int >::iterator it = co_dic.begin() ; it != co_dic.end() ; it++ )
1210 G4int ts_ID = it->second;
1213 G4String fsName =
"/ThermalScattering/Coherent/FS/";
1214 G4String fileName = dirName + fsName + tsndlName;
1218 fsName =
"/ThermalScattering/Incoherent/FS/";
1219 fileName = dirName + fsName + tsndlName;
1223 fsName =
"/ThermalScattering/Inelastic/FS/";
1224 fileName = dirName + fsName + tsndlName;
1240 if (
dic.find( std::pair < const G4Material* , const G4Element* > (
material , element ) ) !=
dic.end() )
1241 result =
dic.find( std::pair < const G4Material* , const G4Element* > (
material , element ) )->second;
1267 for (
G4int i = 0 ; i <
n ; i++ ) {
1270 if ( sum != 0.0 ) result =
true;
1278 outFile <<
"High Precision model based on thermal scattering data in\n"
1279 <<
"evaluated nuclear data libraries for neutrons below 5eV\n"
1280 <<
"on specific materials\n";
static const G4int LL[nN]
std::vector< G4Element * > G4ElementTable
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
static const G4double alpha
std::vector< G4Material * > G4MaterialTable
static constexpr double kelvin
static constexpr double perCent
static constexpr double second
static constexpr double eV
static const G4double angle[DIMMOTT]
G4GLOB_DLL std::ostream G4cout
static G4ElementTable * GetElementTable()
static size_t GetNumberOfElements()
const G4String & GetName() const
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 size_t GetNumberOfMaterials()
G4double GetTemperature() const
const G4Element * GetElement(G4int iel) const
size_t GetNumberOfElements() const
static G4MaterialTable * GetMaterialTable()
static G4Neutron * Neutron()
void BuildPhysicsTable(const G4ParticleDefinition &)
void RegisterThermalScatteringCoherentFinalStates(std::map< G4int, std::map< G4double, std::vector< std::pair< G4double, G4double > * > * > * > *val)
void RegisterThermalScatteringIncoherentFinalStates(std::map< G4int, std::map< G4double, std::vector< E_isoAng * > * > * > *val)
void RegisterThermalScatteringInelasticFinalStates(std::map< G4int, std::map< G4double, std::vector< E_P_E_isoAng * > * > * > *val)
std::map< G4int, std::map< G4double, std::vector< std::pair< G4double, G4double > * > * > * > * GetThermalScatteringCoherentFinalStates()
static G4ParticleHPManager * GetInstance()
std::map< G4int, std::map< G4double, std::vector< E_isoAng * > * > * > * GetThermalScatteringIncoherentFinalStates()
void GetDataStream(G4String, std::istringstream &iss)
std::map< G4int, std::map< G4double, std::vector< E_P_E_isoAng * > * > * > * GetThermalScatteringInelasticFinalStates()
G4double GetCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
void BuildPhysicsTable(const G4ParticleDefinition &)
void AddUserThermalScatteringFile(G4String, G4String)
G4double GetCoherentCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
G4double GetInelasticCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
void AddThermalElement(G4String, G4String)
G4bool IsThisThermalElement(G4String)
G4String GetTS_NDL_Name(G4String nameG4Element)
std::map< G4double, std::vector< std::pair< G4double, G4double > * > * > * readACoherentFSDATA(G4String)
std::pair< G4double, G4double > find_LH(G4double, std::vector< G4double > *)
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
E_isoAng * readAnE_isoAng(std::istream *)
G4int getTS_ID(const G4Material *, const G4Element *)
G4ParticleHPElastic * theHPElastic
E_isoAng create_E_isoAng_from_energy(G4double, std::vector< E_isoAng * > *)
void AddUserThermalScatteringFile(G4String, G4String)
std::map< G4double, std::vector< E_isoAng * > * > * readAnIncoherentFSDATA(G4String)
std::pair< G4double, E_isoAng > create_sE_and_EPM_from_pE_and_vE_P_E_isoAng(G4double, G4double, std::vector< E_P_E_isoAng * > *)
E_P_E_isoAng * readAnE_P_E_isoAng(std::istream *)
G4ParticleHPThermalScatteringNames names
G4ParticleHPThermalScattering()
std::map< G4int, std::map< G4double, std::vector< std::pair< G4double, G4double > * > * > * > * coherentFSs
void clearCurrentFSData()
virtual void ModelDescription(std::ostream &outFile) const
G4bool check_E_isoAng(E_isoAng *)
G4double get_linear_interpolated(G4double, std::pair< G4double, G4double >, std::pair< G4double, G4double >)
std::pair< G4double, G4double > sample_inelastic_E_mu(G4double pE, std::vector< E_P_E_isoAng * > *vNEP_EPM)
G4double getMu(E_isoAng *)
std::pair< G4double, G4int > sample_inelastic_E(G4double rndm1, G4double rndm2, E_P_E_isoAng *anE_P_E_isoAng)
std::map< G4int, std::map< G4double, std::vector< E_P_E_isoAng * > * > * > * inelasticFSs
virtual const std::pair< G4double, G4double > GetFatalEnergyCheckLevels() const
~G4ParticleHPThermalScattering()
std::map< G4int, std::map< G4double, std::vector< E_isoAng * > * > * > * incoherentFSs
std::map< G4double, std::vector< E_P_E_isoAng * > * > * readAnInelasticFSDATA(G4String)
G4double get_secondary_energy_from_E_P_E_isoAng(G4double random, E_P_E_isoAng *anE_P_E_isoAng)
void BuildPhysicsTable(const G4ParticleDefinition &)
std::map< std::pair< const G4Material *, const G4Element * >, G4int > dic
G4ParticleHPThermalScatteringData * theXSection
static constexpr double twopi
G4double total(Particle const *const p1, Particle const *const p2)
G4double energy(const ThreeVector &p, const G4double m)
const char * name(G4int ptype)
std::vector< G4double > prob
std::vector< E_isoAng * > vE_isoAngle
std::vector< G4double > secondary_energy_pdf
G4int secondary_energy_cdf_size
std::vector< G4double > secondary_energy_cdf
std::vector< G4double > secondary_energy_value
std::vector< G4double > isoAngle