Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ParticleHPIsoData.cc
Go to the documentation of this file.
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//
36#include "G4Neutron.hh"
37
38 //G4bool G4ParticleHPIsoData::Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType)
40 {
41 theChannelData = 0;
42 G4double abundance = abun/100.;
43 G4String filename;
44 G4bool result = true;
45 //G4ParticleHPDataUsed aFile = theNames.GetName(A, Z, dirName, aFSType, result);
46 G4ParticleHPDataUsed aFile = theNames.GetName(A, Z, M, dirName, aFSType, result);
47 filename = aFile.GetName();
48// if(filename=="") return false;
49 //std::ifstream theChannel(filename);
50 std::istringstream theChannel(filename,std::ios::in);
51 G4ParticleHPManager::GetInstance()->GetDataStream(filename,theChannel);
52
53#ifdef G4PHPDEBUG
54 if(std::getenv("G4ParticleHPDebug")) G4cout << "G4ParticleHPIsoData::Init = "<< filename <<" "<< A << " " << Z <<G4endl;
55#endif
56
57 if(Z==1 && (aFile.GetZ()!=Z || std::abs(aFile.GetA()-A)>0.0001) )
58 {
59 if(std::getenv("G4ParticleHPDebug")) G4cout << "Skipped = "<< filename <<" "<<A<<" "<<Z<<G4endl;
60 //080901 TKDB No more necessary below protection, cross sections set to 0 in G4ParticleHPNames
61 //And below two lines causes trouble with G4PhysicsVector
62 //theChannel.close();
63 //return false;
64 }
65 if(!theChannel) {/*theChannel.close()*/; return false;}
66 // accommodating deficiencie of some compilers
67 if(theChannel.eof()) {/*theChannel.close()*/; return false;}
68 if(!theChannel) {/*theChannel.close()*/; return false;}
69 G4int dummy;
70 theChannel >> dummy >> dummy;
71 theChannelData = new G4ParticleHPVector;
72 G4int nData;
73 theChannel >> nData;
74 theChannelData->Init(theChannel, nData, CLHEP::eV, abundance*CLHEP::barn);
75// G4cout << "Channel Data Statistics: "<<theChannelData->GetVectorLength()<<G4endl;
76// G4cout << "Channel data"<<G4endl;
77// G4int hpw;
78// G4cin >> hpw;
79// theChannelData->Dump();
80// theChannel.close();
81 return result;
82 }
83
84 //void G4ParticleHPIsoData::Init(G4int A, G4int Z, G4double abun) //fill PhysicsVector for this Isotope
85#include "G4Proton.hh"
86#include "G4Deuteron.hh"
87#include "G4Triton.hh"
88#include "G4He3.hh"
89#include "G4Alpha.hh"
90void G4ParticleHPIsoData::Init(G4int A, G4int Z, G4int M,G4double abun, G4ParticleDefinition* projectile, const char* dataDirVariable ) //fill PhysicsVector for this Isotope
91 {
92
93 G4String particleName;
94 if ( projectile == G4Neutron::Neutron() ) {
95 ;
96 } else if ( projectile == G4Proton::Proton() ) {
97 particleName = "Proton";
98 } else if ( projectile == G4Deuteron::Deuteron() ) {
99 particleName = "Deuteron";
100 } else if ( projectile == G4Triton::Triton() ) {
101 particleName = "Triton";
102 } else if ( projectile == G4He3::He3() ) {
103 particleName = "He3";
104 } else if ( projectile == G4Alpha::Alpha() ) {
105 particleName = "Alpha";
106 } else {
107 G4String message("G4ParticleHPInelastic may only be called for neutron, proton, deuteron, triton, He3 or alpha, while it is called for " + projectile->GetParticleName());
108 throw G4HadronicException(__FILE__, __LINE__,message.c_str());
109 }
110
111 G4String baseName;
112 if ( G4FindDataDir( dataDirVariable ) ) {
113 baseName = G4FindDataDir( dataDirVariable );
114 } else {
115 baseName = G4FindDataDir( "G4PARTICLEHPDATA" );
116 baseName += "/" + particleName;
117 }
118
119 // G4String baseName = getenv(dataDirVariable);
120 G4String dirName;
121 if( projectile == G4Neutron::Neutron() ){
122 dirName = baseName+"/Fission";
123 //if(Z>89)
124 if(Z>87) //TK Modifed for ENDF VII.0
125 {
126 //Init(A, Z, abun, dirName, "/CrossSection/");
127 Init(A, Z, M, abun, dirName, "/CrossSection");
128 }
129 else
130 {
131 theChannelData = new G4ParticleHPVector;
132 }
133 theFissionData = theChannelData;
134 theChannelData = 0; // fast fix for double delete; revisit later. @@@@@@@
135
136 dirName = baseName+"/Capture";
137 //Init(A, Z, abun, dirName, "/CrossSection/");
138 Init(A, Z, M, abun, dirName, "/CrossSection");
139 theCaptureData = theChannelData;
140 theChannelData = 0;
141
142 dirName = baseName+"/Elastic";
143 //Init(A, Z, abun, dirName, "/CrossSection/");
144 Init(A, Z, M, abun, dirName, "/CrossSection");
145 theElasticData = theChannelData;
146 theChannelData = 0;
147 }
148
149 dirName = baseName+"/Inelastic";
150 //Init(A, Z, abun, dirName, "/CrossSection/");
151 Init(A, Z, M, abun, dirName, "/CrossSection");
152 theInelasticData = theChannelData;
153 theChannelData = 0;
154
155// if(theInelasticData!=0) G4cout << "Inelastic Data Statistics: "<<theInelasticData->GetVectorLength()<<G4endl;
156// if(theElasticData!=0) G4cout << "Elastic Data Statistics: "<<theElasticData->GetVectorLength()<<G4endl;
157// if(theCaptureData!=0) G4cout << "Capture Data Statistics: "<<theCaptureData->GetVectorLength()<<G4endl;
158// if(theFissionData!=0) G4cout << "Fission Data Statistics: "<<theFissionData->GetVectorLength()<<G4endl;
159// G4cout << "Inelastic data"<<G4endl;
160// if(theInelasticData!=0) theInelasticData->Dump();
161// G4cout << "Elastic data"<<G4endl;
162// if(theElasticData!=0) theElasticData->Dump();
163// G4cout << "Capture data"<<G4endl;
164// if(theCaptureData!=0) theCaptureData->Dump();
165// G4cout << "Fission data"<<G4endl;
166// if(theFissionData!=0) theFissionData->Dump();
167
168 }
169
171 {
172 G4bool dbool;
173 return (theNames.GetName(A, Z, base, rest, dbool)).GetName();
174 }
175
const char * G4FindDataDir(const char *)
#define M(row, col)
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4Alpha * Alpha()
Definition: G4Alpha.cc:88
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:93
static G4He3 * He3()
Definition: G4He3.cc:93
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
const G4String & GetParticleName() const
G4String GetName(G4int A, G4int Z, G4String base, G4String rest)
G4bool Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType)
static G4ParticleHPManager * GetInstance()
void GetDataStream(G4String, std::istringstream &iss)
G4ParticleHPDataUsed GetName(G4int A, G4int Z, G4String base, G4String rest, G4bool &active)
void Init(std::istream &aDataFile, G4int total, G4double ux=1., G4double uy=1.)
static G4Proton * Proton()
Definition: G4Proton.cc:92
static G4Triton * Triton()
Definition: G4Triton.cc:93