410    G4bool findThermalElement = 
false;
   413    for ( 
G4int i = 0; i < 
n ; i++ )
   417       if ( aNucleus.GetZ_asInt() == (
G4int)(theElement->
GetZ() + 0.5 ) )
   420          if (  
getTS_ID( NULL , theElement ) != -1 )
   422             ielement = 
getTS_ID( NULL , theElement );
   423             findThermalElement = 
true;
   426          else if (  
getTS_ID( theMaterial , theElement ) != -1 )
   428             ielement = 
getTS_ID( theMaterial , theElement );
   429             findThermalElement = 
true;
   435    if ( findThermalElement == 
true )
   447       if ( random <= inelastic/total ) 
   452          std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator it; 
   453          std::vector<G4double> v_temp;
   455          for ( it = 
inelasticFSs->find( ielement )->second->begin() ; it != 
inelasticFSs->find( ielement )->second->end() ; it++ )
   457             v_temp.push_back( it->first );
   461          std::pair < G4double , G4double > tempLH = 
find_LH ( aTemp , &v_temp );
   465          std::vector< E_P_E_isoAng* >* vNEP_EPM_TL = 0;
   466          std::vector< E_P_E_isoAng* >* vNEP_EPM_TH = 0;
   468          if ( tempLH.first != 0.0 && tempLH.second != 0.0 ) 
   470             vNEP_EPM_TL = 
inelasticFSs->find( ielement )->second->find ( tempLH.first/
kelvin )->second;
   471             vNEP_EPM_TH = 
inelasticFSs->find( ielement )->second->find ( tempLH.second/
kelvin )->second;
   473          else if ( tempLH.first == 0.0 )
   475             std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator itm;  
   477             vNEP_EPM_TL = itm->second;
   479             vNEP_EPM_TH = itm->second;
   480             tempLH.first = tempLH.second;
   481             tempLH.second = itm->first;
   483          else if (  tempLH.second == 0.0 )
   485             std::map < G4double , std::vector< E_P_E_isoAng* >* >::iterator itm;  
   488             vNEP_EPM_TH = itm->second;
   490             vNEP_EPM_TL = itm->second;
   491             tempLH.second = tempLH.first;
   492             tempLH.first = itm->first;
   501          sE = 
get_linear_interpolated ( aTemp , std::pair < G4double , G4double > ( tempLH.first , TL.first ) , std::pair < G4double , G4double > ( tempLH.second , TH.first ) );  
   505          if ( TL.second.n == TH.second.n ) 
   508             anE_isoAng.
n =  TL.second.n; 
   509             for ( 
G4int i=0 ; i < anE_isoAng.
n ; i++ )
   512                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 ] ) );  
   513                anE_isoAng.
isoAngle.push_back( angle ); 
   515             mu = 
getMu( &anE_isoAng );
   519             G4HadronicException(__FILE__, __LINE__, 
"A problem is found in Thermal Scattering Data! Do not yet supported");
   535          std::map < G4double , std::vector< std::pair< G4double , G4double >* >* >::iterator it; 
   536          std::vector<G4double> v_temp;
   538          for ( it = 
coherentFSs->find( ielement )->second->begin() ; it != 
coherentFSs->find( ielement )->second->end() ; it++ )
   540             v_temp.push_back( it->first );
   544          std::pair < G4double , G4double > tempLH = 
find_LH ( aTemp , &v_temp );
   549          std::vector< std::pair< G4double , G4double >* >* pvE_p_TL = NULL; 
   550          std::vector< std::pair< G4double , G4double >* >* pvE_p_TH = NULL; 
   552          if ( tempLH.first != 0.0 && tempLH.second != 0.0 ) 
   554             pvE_p_TL = 
coherentFSs->find( ielement )->second->find ( tempLH.first/
kelvin )->second;
   555             pvE_p_TH = 
coherentFSs->find( ielement )->second->find ( tempLH.first/
kelvin )->second;
   557          else if ( tempLH.first == 0.0 )
   559             pvE_p_TL = 
coherentFSs->find( ielement )->second->find ( v_temp[ 0 ] )->second;
   560             pvE_p_TH = 
coherentFSs->find( ielement )->second->find ( v_temp[ 1 ] )->second;
   561             tempLH.first = tempLH.second;
   562             tempLH.second = v_temp[ 1 ];
   564          else if (  tempLH.second == 0.0 )
   566             pvE_p_TH = 
coherentFSs->find( ielement )->second->find ( v_temp.back() )->
second;
   567             std::vector< G4double >::iterator itv;
   571             pvE_p_TL = 
coherentFSs->find( ielement )->second->find ( *itv )->second;
   572             tempLH.second = tempLH.first;
   578             G4HadronicException(__FILE__, __LINE__, 
"A problem is found in Thermal Scattering Data! Unexpected temperature values in data");
   581          std::vector< G4double > vE_T;
   582          std::vector< G4double > vp_T;
   584          G4int n1 = pvE_p_TL->size();  
   587          for ( 
G4int i=1 ; i < n1 ; i++ ) 
   589             if ( (*pvE_p_TL)[i]->first != (*pvE_p_TH)[i]->first ) 
G4HadronicException(__FILE__, __LINE__, 
"A problem is found in Thermal Scattering Data!");
   590             vE_T.push_back ( (*pvE_p_TL)[i]->first );
   591             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 ) ) );  
   595          for ( 
G4int i = 1 ; i < 
n ; i++ ) 
   597             if ( E/
eV < vE_T[ i ] ) 
   607          for ( 
G4int i = 1 ; i < j ; i++ )
   609              G4double Pi = vp_T[ i ] / vp_T[ j ]; 
   610              if ( rand_for_mu < Pi )
   622          if ( mu < -1.0 ) mu = -1.0;
   634          std::map < G4double , std::vector < E_isoAng* >* >::iterator it; 
   635          std::vector<G4double> v_temp;
   639             v_temp.push_back( it->first );
   643          std::pair < G4double , G4double > tempLH = 
find_LH ( aTemp , &v_temp );
   652          if ( tempLH.first != 0.0 && tempLH.second != 0.0 ) {
   656          } 
else if ( tempLH.first == 0.0 ) {
   660             tempLH.first = tempLH.second;
   661             tempLH.second = v_temp[ 1 ];
   662          } 
else if (  tempLH.second == 0.0 ) {
   665             std::vector< G4double >::iterator itv;
   670             tempLH.second = tempLH.first;
   678          if ( anEPM_TL_E.
n == anEPM_TH_E.n ) 
   680             anEPM_T_E.
n = anEPM_TL_E.
n; 
   681             for ( 
G4int i=0 ; i < anEPM_TL_E.
n ; i++ )
   684                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 ] ) );  
   685                anEPM_T_E.
isoAngle.push_back( angle ); 
   687             mu = 
getMu ( &anEPM_T_E );
   691             G4HadronicException(__FILE__, __LINE__, 
"A problem is found in Thermal Scattering Data! Do not yet supported");
 std::map< G4int, std::map< G4double, std::vector< E_isoAng *> *> *> * incoherentFSs
 
std::map< G4int, std::map< G4double, std::vector< std::pair< G4double, G4double > *> *> *> * coherentFSs
 
std::vector< G4double > isoAngle
 
const G4Material * GetMaterial() const
 
const G4LorentzVector & Get4Momentum() const
 
static G4double angle[DIM]
 
E_isoAng create_E_isoAng_from_energy(G4double, std::vector< E_isoAng * > *)
 
std::pair< G4double, E_isoAng > create_sE_and_EPM_from_pE_and_vE_P_E_isoAng(G4double, G4double, std::vector< E_P_E_isoAng * > *)
 
G4double GetCoherentCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
 
G4ParticleHPThermalScatteringData * theXSection
 
std::map< G4int, std::map< G4double, std::vector< E_P_E_isoAng *> *> *> * inelasticFSs
 
G4int getTS_ID(const G4Material *, const G4Element *)
 
const G4Element * GetElement(G4int iel) const
 
static const double second
 
G4double GetTemperature() const
 
static const double kelvin
 
const G4ParticleDefinition * GetDefinition() const
 
G4double getMu(E_isoAng *)
 
void SetEnergyChange(G4double anEnergy)
 
G4double GetKineticEnergy() const
 
G4double total(Particle const *const p1, Particle const *const p2)
 
G4double get_linear_interpolated(G4double, std::pair< G4double, G4double >, std::pair< G4double, G4double >)
 
size_t GetNumberOfElements() const
 
G4ParticleHPElastic * theHPElastic
 
std::pair< G4double, G4double > find_LH(G4double, std::vector< G4double > *)
 
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
 
G4HadFinalState theParticleChange
 
G4double GetCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
 
G4double GetInelasticCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *)
 
void SetMomentumChange(const G4ThreeVector &aV)