Geant4 Cross Reference |
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