Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // neutron_hp -- source file 27 // J.P. Wellisch, Nov-1996 28 // A prototype of the low energy neutron trans 29 // 30 // P. Arce, June-2014 Conversion neutron_hp to 31 // 32 #include "G4ParticleHPFissionBaseFS.hh" 33 34 #include "G4Alpha.hh" 35 #include "G4Deuteron.hh" 36 #include "G4LorentzVector.hh" 37 #include "G4Nucleus.hh" 38 #include "G4ParticleHPDataUsed.hh" 39 #include "G4ParticleHPManager.hh" 40 #include "G4Proton.hh" 41 #include "G4ReactionProduct.hh" 42 #include "G4SystemOfUnits.hh" 43 #include "G4ThreeVector.hh" 44 #include "G4Triton.hh" 45 46 void G4ParticleHPFissionBaseFS::Init(G4double 47 const G4S 48 { 49 G4String tString = dirName; 50 G4bool dbool; 51 const G4ParticleHPDataUsed& aFile = 52 theNames.GetName(static_cast<G4int>(A), st 53 const G4String& filename = aFile.GetName(); 54 SetAZMs(A, Z, M, aFile); 55 // theBaseA = aFile.GetA(); 56 // theBaseZ = aFile.GetZ(); 57 // if(!dbool || ( Z<2.5 && ( std::abs(theBa 58 if (!dbool 59 || (Z < 2.5 && (std::abs(theNDLDataZ - Z 60 { 61 hasAnyData = false; 62 hasFSData = false; 63 hasXsec = false; 64 return; // no data for exactly this isoto 65 } 66 67 // std::ifstream theData(filename, std::ios: 68 std::istringstream theData(std::ios::in); 69 G4ParticleHPManager::GetInstance()->GetDataS 70 G4int dummy; 71 if (!(theData)) { 72 // theData.close(); 73 hasFSData = false; 74 hasXsec = false; 75 hasAnyData = false; 76 return; // no data for this FS for this i 77 } 78 theData >> dummy >> dummy; 79 G4int total; 80 theData >> total; 81 theXsection->Init(theData, total, eV); 82 if (!(theData >> dummy)) { 83 hasFSData = false; 84 // theData.close(); 85 return; 86 } 87 theData >> dummy; 88 89 theAngularDistribution.Init(theData); 90 91 theData >> dummy >> dummy; 92 93 theEnergyDistribution.Init(theData); 94 // theData.close(); 95 } 96 97 G4DynamicParticleVector* G4ParticleHPFissionBa 98 { 99 // if therere were no data for this isotope, 100 if (!HasFSData()) { 101 return nullptr; 102 } 103 104 G4int i; 105 auto aResult = new G4DynamicParticleVector; 106 G4ReactionProduct boosted; 107 boosted.Lorentz(*(fCache.Get().theNeutronRP) 108 G4double eKinetic = boosted.GetKineticEnergy 109 110 // Build neutrons 111 std::vector<G4ReactionProduct> theNeutrons; 112 for (i = 0; i < nPrompt; i++) { 113 theNeutrons.emplace_back(); 114 theNeutrons[i].SetDefinition(G4Neutron::Ne 115 } 116 117 // sample energies 118 G4int dummy; 119 for (i = 0; i < nPrompt; i++) { 120 // always in the lab system (if file-5) 121 theNeutrons[i].SetKineticEnergy(theEnergyD 122 } 123 124 // sample neutron angular distribution 125 for (i = 0; i < nPrompt; i++) { 126 theAngularDistribution.SampleAndUpdate(the 127 } 128 129 // already in lab. Add neutrons to dynamic p 130 for (i = 0; i < nPrompt; i++) { 131 auto it = new G4DynamicParticle; 132 it->SetDefinition(theNeutrons[i].GetDefini 133 it->SetMomentum(theNeutrons[i].GetMomentum 134 aResult->push_back(it); 135 } 136 137 // return the result 138 return aResult; 139 } 140