Geant4 Cross Reference |
1 // ******************************************************************** 2 // * License and Disclaimer * 3 // * * 4 // * The Geant4 software is copyright of the Copyright Holders of * 5 // * the Geant4 Collaboration. It is provided under the terms and * 6 // * conditions of the Geant4 Software License, included in the file * 7 // * LICENSE and available at http://cern.ch/geant4/license . These * 8 // * include a list of copyright holders. * 9 // * * 10 // * Neither the authors of this software system, nor their employing * 11 // * institutes,nor the agencies providing financial support for this * 12 // * work make any representation or warranty, express or implied, * 13 // * regarding this software system or assume any liability for its * 14 // * use. Please see the license in the file LICENSE and URL above * 15 // * for the full disclaimer and the limitation of liability. * 16 // * * 17 // * This code implementation is the result of the scientific and * 18 // * technical work of the GEANT4 collaboration. * 19 // * By using, copying, modifying or distributing the software (or * 20 // * any work based on the software) you agree to acknowledge its * 21 // * use in resulting scientific publications, and indicate your * 22 // * acceptance of all terms of the Geant4 Software license. * 23 // ******************************************************************** 24 // 25 // particle_hp -- source file 26 // J.P. Wellisch, Nov-1996 27 // A prototype of the low energy neutron transport model. 28 // 29 // 080901 Avoiding troubles which caused by G4PhysicsVecotor of length 0 by T. Koi 30 // 31 // P. Arce, June-2014 Conversion neutron_hp to particle_hp 32 // 33 #include "G4ParticleHPIsoData.hh" 34 35 #include "G4Neutron.hh" 36 #include "G4ParticleHPDataUsed.hh" 37 #include "G4ParticleHPManager.hh" 38 #include "G4Alpha.hh" 39 #include "G4Deuteron.hh" 40 #include "G4He3.hh" 41 #include "G4Proton.hh" 42 #include "G4Triton.hh" 43 //#include <stdlib.h> 44 #include <fstream> 45 46 void G4ParticleHPIsoData::FillChannelData(G4ParticleHPVector* aBuffer) 47 { 48 if (theChannelData != nullptr) { 49 G4Exception("G4ParticleHPIsoData::FillChannelData","hadhp02", 50 FatalException, "Inconsistency: the data uploaded next time"); 51 } 52 theChannelData = new G4ParticleHPVector; 53 for (G4int i = 0; i < aBuffer->GetVectorLength(); ++i) { 54 theChannelData->SetPoint(i, aBuffer->GetPoint(i)); 55 } 56 theChannelData->Hash(); 57 } 58 59 G4bool G4ParticleHPIsoData::Init(G4int A, G4int Z, G4int M, G4double abun, const G4String& dirName, 60 const G4String& aFSType) 61 { 62 theChannelData = nullptr; 63 G4double abundance = abun / 100.; 64 G4String filename; 65 G4bool result = true; 66 G4ParticleHPDataUsed aFile = theNames.GetName(A, Z, M, dirName, aFSType, result); 67 filename = aFile.GetName(); 68 69 std::istringstream theChannel(filename, std::ios::in); 70 auto man = G4ParticleHPManager::GetInstance(); 71 man->GetDataStream(filename, theChannel); 72 73 #ifdef G4PHPDEBUG 74 if (man->GetDEBUG()) 75 G4cout << "G4ParticleHPIsoData::Init = " << filename << " " << A << " " << Z << G4endl; 76 #endif 77 78 if (Z == 1 && (aFile.GetZ() != Z || aFile.GetA() != A)) { 79 if (man->GetDEBUG()) 80 G4cout << "Skipped = " << filename << " " << A << " " << Z << G4endl; 81 // 080901 TKDB No more necessary below protection, cross sections set to 0 82 } 83 if (!theChannel) { /*theChannel.close()*/ 84 return false; 85 } 86 // accommodating deficiencie of some compilers 87 if (theChannel.eof()) { /*theChannel.close()*/ 88 return false; 89 } 90 G4int dummy; 91 theChannel >> dummy >> dummy; 92 theChannelData = new G4ParticleHPVector; 93 G4int nData; 94 theChannel >> nData; 95 theChannelData->Init(theChannel, nData, CLHEP::eV, abundance * CLHEP::barn); 96 return result; 97 } 98 99 void G4ParticleHPIsoData::Init(G4int A, G4int Z, G4int M, G4double abun, 100 G4ParticleDefinition* projectile, const char*) 101 // fill PhysicsVector for this Isotope 102 { 103 auto man = G4ParticleHPManager::GetInstance(); 104 105 G4String baseName = man->GetParticleHPPath(projectile); 106 107 G4String dirName; 108 if (projectile == G4Neutron::Neutron()) { 109 dirName = baseName + "/Fission"; 110 if (Z > 87) // TK Modifed for ENDF VII.0 111 { 112 Init(A, Z, M, abun, dirName, "/CrossSection"); 113 } 114 else { 115 theChannelData = new G4ParticleHPVector; 116 } 117 theFissionData = theChannelData; 118 theChannelData = nullptr; // fast fix for double delete; revisit later. @@@@@@@ 119 120 dirName = baseName + "/Capture"; 121 Init(A, Z, M, abun, dirName, "/CrossSection"); 122 theCaptureData = theChannelData; 123 theChannelData = nullptr; 124 125 dirName = baseName + "/Elastic"; 126 Init(A, Z, M, abun, dirName, "/CrossSection"); 127 theElasticData = theChannelData; 128 theChannelData = nullptr; 129 } 130 131 dirName = baseName + "/Inelastic"; 132 Init(A, Z, M, abun, dirName, "/CrossSection"); 133 theInelasticData = theChannelData; 134 theChannelData = nullptr; 135 } 136 137 G4String G4ParticleHPIsoData::GetName(G4int A, G4int Z, const G4String& base, const G4String& rest) 138 { 139 G4bool dbool; 140 return (theNames.GetName(A, Z, base, rest, dbool)).GetName(); 141 } 142