Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/lend/src/G4LENDCrossSection.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/models/lend/src/G4LENDCrossSection.cc (Version 11.3.0) and /processes/hadronic/models/lend/src/G4LENDCrossSection.cc (Version 10.0.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // Class Description                               26 // Class Description
 27 // Cross Section for LEND (Low Energy Nuclear      27 // Cross Section for LEND (Low Energy Nuclear Data)
 28 // LEND is Geant4 interface for GIDI (General      28 // LEND is Geant4 interface for GIDI (General Interaction Data Interface) 
 29 // which gives a discription of nuclear and at     29 // which gives a discription of nuclear and atomic reactions, such as
 30 //    Binary collision cross sections              30 //    Binary collision cross sections
 31 //    Particle number multiplicity distributio     31 //    Particle number multiplicity distributions of reaction products
 32 //    Energy and angular distributions of reac     32 //    Energy and angular distributions of reaction products
 33 //    Derived calculational constants              33 //    Derived calculational constants
 34 // GIDI is developped at Lawrence Livermore Na     34 // GIDI is developped at Lawrence Livermore National Laboratory
 35 // Class Description - End                         35 // Class Description - End
 36                                                    36 
 37 // 071025 First implementation done by T. Koi      37 // 071025 First implementation done by T. Koi (SLAC/SCCS)
 38 // 101118 Name modifications for release T. Ko     38 // 101118 Name modifications for release T. Koi (SLAC/PPA)
 39                                                    39 
 40 #include "G4LENDCrossSection.hh"                   40 #include "G4LENDCrossSection.hh"
 41 #include "G4Pow.hh"                            << 
 42 #include "G4SystemOfUnits.hh"                      41 #include "G4SystemOfUnits.hh"
 43 #include "G4ElementTable.hh"                       42 #include "G4ElementTable.hh"
 44 #include "G4HadronicException.hh"                  43 #include "G4HadronicException.hh"
 45                                                    44 
 46 G4bool G4LENDCrossSection::IsIsoApplicable( co <<  45 //TK110811
 47                                             co <<  46 G4bool G4LENDCrossSection::IsIsoApplicable( const G4DynamicParticle* dp, G4int /*iZ*/ , G4int /*aA*/ , 
                                                   >>  47                                             const G4Element* /*element*/ , const G4Material* /*material*/ )
 48 {                                                  48 {
 49    G4double eKin = dp->GetKineticEnergy();         49    G4double eKin = dp->GetKineticEnergy();
 50    if ( dp->GetDefinition() != proj ) return f     50    if ( dp->GetDefinition() != proj ) return false;
 51    if ( eKin > GetMaxKinEnergy() || eKin < Get     51    if ( eKin > GetMaxKinEnergy() || eKin < GetMinKinEnergy() ) return false;
 52                                                    52 
 53    //G4cout << "G4LENDCrossSection::GetIsoIsIs <<  53    return true;
 54    //Check existence of target data            << 
 55    if ( element != NULL ) {                    << 
 56       if ( element->GetNumberOfIsotopes() != 0 << 
 57          std::vector< const G4Isotope*> vIsoto << 
 58          for ( G4int i = 0 ; i != (G4int)eleme << 
 59             if ( element->GetIsotope( i )->Get << 
 60          }                                     << 
 61          for ( std::size_t i = 0 ; i != vIsoto << 
 62             G4int iM = vIsotope[i]->Getm();    << 
 63             if ( get_target_from_map( lend_man << 
 64          }                                     << 
 65          //No isomer has data                  << 
 66          //Check natural aboundance data for t << 
 67          if ( get_target_from_map( lend_manage << 
 68       } else {                                 << 
 69          //Check for iZ and iA under assuming  << 
 70          if ( get_target_from_map( lend_manage << 
 71          //Check natural aboundance data for t << 
 72          if ( get_target_from_map( lend_manage << 
 73       }                                        << 
 74    } else {                                    << 
 75       //Check for iZ and iA under assuming iM  << 
 76       if ( get_target_from_map( lend_manager-> << 
 77       //Check natural aboundance data for iZ   << 
 78       if ( get_target_from_map( lend_manager-> << 
 79    }                                           << 
 80    return false;                               << 
 81 }                                                  54 }
 82                                                    55 
 83 G4double G4LENDCrossSection::GetIsoCrossSectio     56 G4double G4LENDCrossSection::GetIsoCrossSection( const G4DynamicParticle* dp , G4int iZ , G4int iA ,
 84                                                    57                                                  const G4Isotope* isotope , const G4Element* /*elment*/ , const G4Material* material )
 85 {                                                  58 {
 86                                                    59 
 87    G4double xs = 0.0;                              60    G4double xs = 0.0;
 88    G4double ke = dp->GetKineticEnergy();           61    G4double ke = dp->GetKineticEnergy();
 89    G4double temp = material->GetTemperature();     62    G4double temp = material->GetTemperature();
 90    G4int iM = 0;                               <<  63    G4int iM = isotope->Getm();
 91    if ( isotope != NULL ) iM = isotope->Getm() <<  64 
 92                                                <<  65    G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA , iM ) )->second->GetTarget();
 93    G4GIDI_target* aTarget = get_target_from_ma <<  66 
 94    if ( aTarget == NULL ) {                    << 
 95       G4String message;                        << 
 96       message = this->GetName();               << 
 97       message += " is unexpectedly called.";   << 
 98       //G4Exception( "G4LEND::GetIsoCrossSecti << 
 99       G4Exception( "G4LEND::GetIsoCrossSection << 
100                   message );                   << 
101    }                                           << 
102    xs = getLENDCrossSection ( aTarget , ke , t     67    xs = getLENDCrossSection ( aTarget , ke , temp );
103                                                    68 
104    return xs;                                      69    return xs;
105 }                                                  70 }
106                                                    71 
107                                                    72 
108 /*                                                 73 /*
109 G4bool G4LENDCrossSection::IsApplicable(const      74 G4bool G4LENDCrossSection::IsApplicable(const G4DynamicParticle*aP, const G4Element*)
110 {                                                  75 {
111    G4bool result = true;                           76    G4bool result = true;
112    G4double eKin = aP->GetKineticEnergy();         77    G4double eKin = aP->GetKineticEnergy();
113    if( eKin > GetMaxKinEnergy() || aP->GetDefi     78    if( eKin > GetMaxKinEnergy() || aP->GetDefinition() != proj ) result = false;
114    return result;                                  79    return result;
115 }                                                  80 }
116 */                                                 81 */
117                                                    82 
118 G4LENDCrossSection::G4LENDCrossSection( const      83 G4LENDCrossSection::G4LENDCrossSection( const G4String nam )
119 :G4VCrossSectionDataSet( nam )                     84 :G4VCrossSectionDataSet( nam )
120 {                                                  85 {
121                                                    86 
122    proj = NULL; //will be set in an inherited      87    proj = NULL; //will be set in an inherited class
123    //default_evaluation = "endl99";                88    //default_evaluation = "endl99";
124    //default_evaluation = "ENDF.B-VII.0";      <<  89    default_evaluation = "ENDF.B-VII.0";
125    default_evaluation = "ENDF/BVII.1";         << 
126                                                    90 
127    allow_nat = false;                              91    allow_nat = false;
128    allow_any = false;                              92    allow_any = false;
129                                                    93 
130    SetMinKinEnergy(  0*MeV );                      94    SetMinKinEnergy(  0*MeV );
131    SetMaxKinEnergy( 20*MeV );                      95    SetMaxKinEnergy( 20*MeV );
132                                                    96 
133    lend_manager = G4LENDManager::GetInstance()     97    lend_manager = G4LENDManager::GetInstance(); 
134                                                    98 
135 }                                                  99 }
136                                                   100    
137 G4LENDCrossSection::~G4LENDCrossSection()         101 G4LENDCrossSection::~G4LENDCrossSection()
138 {                                                 102 {
139                                                   103 
140    for ( std::map< G4int , G4LENDUsedTarget* >    104    for ( std::map< G4int , G4LENDUsedTarget* >::iterator 
141          it = usedTarget_map.begin() ; it != u    105          it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
142    {                                              106    { 
143       delete it->second;                          107       delete it->second;  
144    }                                              108    }
145                                                   109 
146 }                                                 110 }
147                                                   111    
148 void G4LENDCrossSection::BuildPhysicsTable( co    112 void G4LENDCrossSection::BuildPhysicsTable( const G4ParticleDefinition&  )
149 {                                                 113 {
150    create_used_target_map();                      114    create_used_target_map();
151 }                                                 115 }
152                                                   116 
153 void G4LENDCrossSection::DumpPhysicsTable(cons    117 void G4LENDCrossSection::DumpPhysicsTable(const G4ParticleDefinition& aP)
154 {                                                 118 {
155                                                   119 
156   if ( &aP != proj )                              120   if ( &aP != proj ) 
157      throw G4HadronicException(__FILE__, __LIN    121      throw G4HadronicException(__FILE__, __LINE__, "Attempt to use LEND data for particles other than neutrons!!!");  
158                                                   122 
159    G4cout << G4endl;                              123    G4cout << G4endl;
160    G4cout << "Dump Cross Sections of " << GetN    124    G4cout << "Dump Cross Sections of " << GetName() << G4endl;
161    G4cout << "(Pointwise cross-section at 300     125    G4cout << "(Pointwise cross-section at 300 Kelvin.)" << G4endl;
162    G4cout << G4endl;                              126    G4cout << G4endl;
163                                                   127 
164    G4cout << "Target informaiton " << G4endl;     128    G4cout << "Target informaiton " << G4endl;
165                                                   129 
166    for ( std::map< G4int , G4LENDUsedTarget* >    130    for ( std::map< G4int , G4LENDUsedTarget* >::iterator 
167          it = usedTarget_map.begin() ; it != u    131          it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
168    {                                              132    {
169       G4cout                                      133       G4cout 
170          << "Wanted " << it->second->GetWanted    134          << "Wanted " << it->second->GetWantedEvaluation() 
171          << ", Z= " << it->second->GetWantedZ(    135          << ", Z= " << it->second->GetWantedZ() 
172          << ", A= " << it->second->GetWantedA(    136          << ", A= " << it->second->GetWantedA() 
173          << "; Actual " << it->second->GetActu    137          << "; Actual " << it->second->GetActualEvaluation() 
174          << ", Z= " << it->second->GetActualZ(    138          << ", Z= " << it->second->GetActualZ() 
175          << ", A= " << it->second->GetActualA(    139          << ", A= " << it->second->GetActualA() 
176          << ", " << it->second->GetTarget()       140          << ", " << it->second->GetTarget() 
177          << G4endl;                               141          << G4endl; 
178                                                   142 
179       G4int ie = 0;                               143       G4int ie = 0;
180                                                   144 
181       G4GIDI_target* aTarget = it->second->Get    145       G4GIDI_target* aTarget = it->second->GetTarget();
182       G4double aT = 300;                          146       G4double aT = 300;
183       for ( ie = 0 ; ie < 130 ; ie++ )            147       for ( ie = 0 ; ie < 130 ; ie++ )
184       {                                           148       {
185          G4double ke = 1.0e-5 * G4Pow::GetInst << 149          G4double ke = 1.0e-5 * std::pow ( 10.0 , ie/10.0 ) *eV;
186                                                   150 
187          if ( ke < 20*MeV )                       151          if ( ke < 20*MeV )
188          {                                        152          {
189             G4cout << "  " << GetName() << ",     153             G4cout << "  " << GetName() << ", cross section at " << ke/eV << " [eV] = " << getLENDCrossSection ( aTarget , ke , aT )/barn << " [barn] " << G4endl;
190          }                                        154          }
191       }                                           155       }
192       G4cout << G4endl;                           156       G4cout << G4endl;
193                                                   157 
194    }                                              158    }
195                                                   159 
196 }                                                 160 }
197                                                   161 
198                                                   162 
199 /*                                                163 /*
200 //110810                                          164 //110810
201 //G4double G4LENDCrossSection::GetCrossSection    165 //G4double G4LENDCrossSection::GetCrossSection(const G4DynamicParticle* aP , const G4Element* anElement , G4double aT)
202 G4double G4LENDCrossSection::GetCrossSection(c    166 G4double G4LENDCrossSection::GetCrossSection(const G4DynamicParticle* aP , int iZ , const G4Material* aMat)
203 {                                                 167 {
204                                                   168 
205 //110810                                          169 //110810
206    G4double aT = aMat->GetTemperature();          170    G4double aT = aMat->GetTemperature();
207    G4Element* anElement = lend_manager->GetNis    171    G4Element* anElement = lend_manager->GetNistElementBuilder()->FindOrBuildElement( iZ );
208                                                   172 
209    G4double ke = aP->GetKineticEnergy();          173    G4double ke = aP->GetKineticEnergy();
210    G4double XS = 0.0;                             174    G4double XS = 0.0;
211                                                   175 
212    G4int numberOfIsotope = anElement->GetNumbe    176    G4int numberOfIsotope = anElement->GetNumberOfIsotopes(); 
213                                                   177 
214    if ( numberOfIsotope > 0 )                     178    if ( numberOfIsotope > 0 )
215    {                                              179    {
216       // User Defined Abundances                  180       // User Defined Abundances   
217       for ( G4int i_iso = 0 ; i_iso < numberOf    181       for ( G4int i_iso = 0 ; i_iso < numberOfIsotope ; i_iso++ )
218       {                                           182       {
219                                                   183 
220          G4int iZ = anElement->GetIsotope( i_i    184          G4int iZ = anElement->GetIsotope( i_iso )->GetZ();
221          G4int iA = anElement->GetIsotope( i_i    185          G4int iA = anElement->GetIsotope( i_iso )->GetN();
222          G4double ratio = anElement->GetRelati    186          G4double ratio = anElement->GetRelativeAbundanceVector()[i_iso];
223                                                   187 
224          G4GIDI_target* aTarget = usedTarget_m    188          G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
225          XS += ratio*getLENDCrossSection ( aTa    189          XS += ratio*getLENDCrossSection ( aTarget , ke , aT );
226                                                   190 
227       }                                           191       }
228    }                                              192    }
229    else                                           193    else
230    {                                              194    {
231       // Natural Abundances                       195       // Natural Abundances   
232       G4NistElementBuilder* nistElementBuild =    196       G4NistElementBuilder* nistElementBuild = lend_manager->GetNistElementBuilder();
233       G4int iZ = int ( anElement->GetZ() );       197       G4int iZ = int ( anElement->GetZ() );
234       G4int numberOfNistIso = nistElementBuild    198       G4int numberOfNistIso = nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) ); 
235                                                   199 
236        G4int Nfirst = nistElementBuild->GetNis    200        G4int Nfirst = nistElementBuild->GetNistFirstIsotopeN( iZ );
237       for ( G4int i = 0 ; i < numberOfNistIso     201       for ( G4int i = 0 ; i < numberOfNistIso ; i++ )
238       {                                           202       {
239          G4int iA = Nfirst + i;                   203          G4int iA = Nfirst + i;  
240          G4double ratio = nistElementBuild->Ge    204          G4double ratio = nistElementBuild->GetIsotopeAbundance( iZ , iA );
241          if ( ratio > 0.0 )                       205          if ( ratio > 0.0 )
242          {                                        206          {
243             G4GIDI_target* aTarget = usedTarge    207             G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
244             XS += ratio*getLENDCrossSection (     208             XS += ratio*getLENDCrossSection ( aTarget , ke , aT );
245             //G4cout << ke/eV << " "  << iZ <<    209             //G4cout << ke/eV << " "  << iZ << " " << iMass << " " << aTarget << " " << getLENDCrossSection ( aTarget , ke , aT ) << G4endl;
246          }                                        210          }
247       }                                           211       }
248    }                                              212    }
249                                                   213  
250    //G4cout << "XS= " << XS << G4endl;            214    //G4cout << "XS= " << XS << G4endl;
251    return XS;                                     215    return XS;
252 }                                                 216 }
253                                                   217 
254                                                   218 
255                                                   219 
256 //110810                                          220 //110810
257 //G4double G4LENDCrossSection::GetIsoCrossSect    221 //G4double G4LENDCrossSection::GetIsoCrossSection(const G4DynamicParticle* dp, const G4Isotope* isotope, G4double aT )
258 G4double G4LENDCrossSection::GetIsoCrossSectio    222 G4double G4LENDCrossSection::GetIsoCrossSection(const G4DynamicParticle* dp, const G4Isotope* isotope, const G4Material* aMat)
259 {                                                 223 {
260                                                   224 
261 //110810                                          225 //110810
262    G4double aT = aMat->GetTemperature();          226    G4double aT = aMat->GetTemperature();
263                                                   227 
264    G4double ke = dp->GetKineticEnergy();          228    G4double ke = dp->GetKineticEnergy();
265                                                   229 
266    G4int iZ = isotope->GetZ();                    230    G4int iZ = isotope->GetZ();
267    G4int iA = isotope->GetN();                    231    G4int iA = isotope->GetN();
268                                                   232 
269    G4GIDI_target* aTarget = usedTarget_map.fin    233    G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
270                                                   234 
271    return getLENDCrossSection ( aTarget , ke ,    235    return getLENDCrossSection ( aTarget , ke , aT );
272                                                   236 
273 }                                                 237 }
274                                                   238 
275                                                   239 
276                                                   240 
277 //110810                                          241 //110810
278 //G4double G4LENDCrossSection::GetZandACrossSe    242 //G4double G4LENDCrossSection::GetZandACrossSection(const G4DynamicParticle* dp, G4int iZ, G4int iA, G4double aT)
279 G4double G4LENDCrossSection::GetZandACrossSect    243 G4double G4LENDCrossSection::GetZandACrossSection(const G4DynamicParticle* dp, G4int iZ, G4int iA, const G4Material* aMat)
280 {                                                 244 {
281                                                   245 
282 //110810                                          246 //110810
283    G4double aT = aMat->GetTemperature();          247    G4double aT = aMat->GetTemperature();
284                                                   248 
285    G4double ke = dp->GetKineticEnergy();          249    G4double ke = dp->GetKineticEnergy();
286                                                   250 
287    G4GIDI_target* aTarget = usedTarget_map.fin    251    G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
288                                                   252 
289    return getLENDCrossSection ( aTarget , ke ,    253    return getLENDCrossSection ( aTarget , ke , aT );
290                                                   254 
291 }                                                 255 }
292 */                                                256 */
293                                                   257 
294                                                   258 
295                                                   259 
296 void G4LENDCrossSection::recreate_used_target_    260 void G4LENDCrossSection::recreate_used_target_map()
297 {                                                 261 {
298    for ( std::map< G4int , G4LENDUsedTarget* >    262    for ( std::map< G4int , G4LENDUsedTarget* >::iterator 
299          it = usedTarget_map.begin() ; it != u    263          it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
300    {                                              264    { 
301       delete it->second;                          265       delete it->second;  
302    }                                              266    }
303    usedTarget_map.clear();                        267    usedTarget_map.clear();
304                                                   268 
305    create_used_target_map();                      269    create_used_target_map();
306 }                                                 270 }
307                                                   271 
308                                                   272 
309                                                   273 
310 void G4LENDCrossSection::create_used_target_ma    274 void G4LENDCrossSection::create_used_target_map()
311 {                                                 275 {
312                                                   276 
313    lend_manager->RequestChangeOfVerboseLevel(     277    lend_manager->RequestChangeOfVerboseLevel( verboseLevel );
314                                                   278 
315    std::size_t numberOfElements = G4Element::G << 279    size_t numberOfElements = G4Element::GetNumberOfElements();
316    static const G4ElementTable* theElementTabl    280    static const G4ElementTable* theElementTable = G4Element::GetElementTable();
317                                                   281 
318    for ( std::size_t i = 0 ; i < numberOfEleme << 282    for ( size_t i = 0 ; i < numberOfElements ; ++i )
319    {                                              283    {
320                                                   284 
321       const G4Element* anElement = (*theElemen    285       const G4Element* anElement = (*theElementTable)[i];
322       G4int numberOfIsotope = (G4int)anElement << 286       G4int numberOfIsotope = anElement->GetNumberOfIsotopes(); 
323                                                   287 
324       if ( numberOfIsotope > 0 )                  288       if ( numberOfIsotope > 0 )
325       {                                           289       {
326       // User Defined Abundances                  290       // User Defined Abundances   
327          for ( G4int i_iso = 0 ; i_iso < numbe    291          for ( G4int i_iso = 0 ; i_iso < numberOfIsotope ; i_iso++ )
328          {                                        292          {
329             G4int iZ = anElement->GetIsotope(     293             G4int iZ = anElement->GetIsotope( i_iso )->GetZ();
330             G4int iA = anElement->GetIsotope(     294             G4int iA = anElement->GetIsotope( i_iso )->GetN();
331             G4int iIsomer = anElement->GetIsot    295             G4int iIsomer = anElement->GetIsotope( i_iso )->Getm();
332                                                   296 
333             //G4LENDUsedTarget* aTarget = new     297             //G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( G4Neutron::Neutron() , default_evaluation , iZ , iA );  
334             G4LENDUsedTarget* aTarget = new G4 << 298             G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( proj , default_evaluation , iZ , iA );  
335             if ( allow_nat == true ) aTarget->    299             if ( allow_nat == true ) aTarget->AllowNat();
336             if ( allow_any == true ) aTarget->    300             if ( allow_any == true ) aTarget->AllowAny();
337             usedTarget_map.insert( std::pair<     301             usedTarget_map.insert( std::pair< G4int , G4LENDUsedTarget* > ( lend_manager->GetNucleusEncoding( iZ , iA , iIsomer ) , aTarget ) );
338          }                                        302          }
339       }                                           303       }
340       else                                        304       else
341       {                                           305       {
342       // Natural Abundances                       306       // Natural Abundances   
343          G4NistElementBuilder* nistElementBuil    307          G4NistElementBuilder* nistElementBuild = lend_manager->GetNistElementBuilder();
344          G4int iZ = int ( anElement->GetZ() );    308          G4int iZ = int ( anElement->GetZ() );
345          //G4cout << nistElementBuild->GetNumb    309          //G4cout << nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) ) << G4endl;
346          G4int numberOfNistIso = nistElementBu    310          G4int numberOfNistIso = nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) ); 
347                                                   311 
348          for ( G4int ii = 0 ; ii < numberOfNis    312          for ( G4int ii = 0 ; ii < numberOfNistIso ; ii++ )
349          {                                        313          {
350             //G4cout << nistElementBuild->GetI    314             //G4cout << nistElementBuild->GetIsotopeAbundance( iZ , nistElementBuild->GetNistFirstIsotopeN( iZ ) + i ) << G4endl;
351             if ( nistElementBuild->GetIsotopeA    315             if ( nistElementBuild->GetIsotopeAbundance( iZ , nistElementBuild->GetNistFirstIsotopeN( iZ ) + ii ) > 0 )
352             {                                     316             {
353                G4int iMass = nistElementBuild-    317                G4int iMass = nistElementBuild->GetNistFirstIsotopeN( iZ ) + ii;  
354                //G4cout << iZ << " " << nistEl    318                //G4cout << iZ << " " << nistElementBuild->GetNistFirstIsotopeN( iZ ) + i << " " << nistElementBuild->GetIsotopeAbundance ( iZ , iMass ) << G4endl;  
355                G4int iIsomer = 0;                 319                G4int iIsomer = 0; 
356                                                   320 
357                G4LENDUsedTarget* aTarget = new    321                G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( proj , default_evaluation , iZ , iMass );  
358                if ( allow_nat == true ) aTarge    322                if ( allow_nat == true ) aTarget->AllowNat();
359                if ( allow_any == true ) aTarge    323                if ( allow_any == true ) aTarget->AllowAny();
360                usedTarget_map.insert( std::pai    324                usedTarget_map.insert( std::pair< G4int , G4LENDUsedTarget* > ( lend_manager->GetNucleusEncoding( iZ , iMass , iIsomer ) , aTarget ) );
361                                                   325 
362             }                                     326             }
363                                                   327 
364          }                                        328          }
365       }                                           329       }
366    }                                              330    }
367    DumpLENDTargetInfo();                       << 331 
                                                   >> 332    G4cout << "Dump UsedTarget for " << GetName() << G4endl;
                                                   >> 333    G4cout << "Requested Evaluation, Z , A -> Actual Evaluation, Z , A(0=Nat) , Pointer of Target" << G4endl;
                                                   >> 334    for ( std::map< G4int , G4LENDUsedTarget* >::iterator 
                                                   >> 335          it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
                                                   >> 336    {
                                                   >> 337       G4cout 
                                                   >> 338          << " " << it->second->GetWantedEvaluation() 
                                                   >> 339          << ", " << it->second->GetWantedZ() 
                                                   >> 340          << ", " << it->second->GetWantedA() 
                                                   >> 341          << " -> " << it->second->GetActualEvaluation() 
                                                   >> 342          << ", " << it->second->GetActualZ() 
                                                   >> 343          << ", " << it->second->GetActualA() 
                                                   >> 344          << ", " << it->second->GetTarget() 
                                                   >> 345          << G4endl; 
                                                   >> 346    } 
                                                   >> 347 
368 }                                                 348 }
369                                                   349 
370                                                   350                                                            // elow          ehigh       xs_elow      xs_ehigh      ke (ke < elow)
371 G4double G4LENDCrossSection::GetUltraLowEnergy    351 G4double G4LENDCrossSection::GetUltraLowEnergyExtrapolatedXS( G4double x1, G4double x2, G4double y1, G4double y2 , G4double ke )
372 {                                                 352 {
373    //XS propotinal to 1/v at low energy -> 1/r    353    //XS propotinal to 1/v at low energy -> 1/root(E) 
374    //XS = a * 1/root(E) + b                       354    //XS = a * 1/root(E) + b  
375    G4double a = ( y2 - y1 ) / ( 1/std::sqrt(x2    355    G4double a = ( y2 - y1 ) / ( 1/std::sqrt(x2) - 1/std::sqrt(x1) );
376    G4double b = y1 - a * 1/std::sqrt(x1);         356    G4double b = y1 - a * 1/std::sqrt(x1);
377    G4double result = a * 1/std::sqrt(ke) + b;     357    G4double result = a * 1/std::sqrt(ke) + b;
378    return result;                                 358    return result;
379 }                                                 359 }
380                                                << 
381 G4GIDI_target* G4LENDCrossSection::get_target_ << 
382    G4GIDI_target* target = NULL;               << 
383    if ( usedTarget_map.find( nuclear_code ) != << 
384       target = usedTarget_map.find( nuclear_co << 
385    }                                           << 
386    return target;                              << 
387 }                                              << 
388                                                << 
389 void G4LENDCrossSection::DumpLENDTargetInfo( G << 
390                                                << 
391    if ( lend_manager->GetVerboseLevel() >= 1 | << 
392       if ( usedTarget_map.size() == 0 ) create << 
393       G4cout << "Dumping UsedTarget of " << Ge << 
394       G4cout << "Requested Evaluation, Z , A - << 
395       for ( std::map< G4int , G4LENDUsedTarget << 
396          it = usedTarget_map.begin() ; it != u << 
397          G4cout                                << 
398          << " " << it->second->GetWantedEvalua << 
399          << ", " << it->second->GetWantedZ()   << 
400          << ", " << it->second->GetWantedA()   << 
401          << " -> " << it->second->GetActualEva << 
402          << ", " << it->second->GetActualZ()   << 
403          << ", " << it->second->GetActualA()   << 
404          << G4endl;                            << 
405       }                                        << 
406    }                                           << 
407 }                                              << 
408                                                << 
409                                                   360