ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ParticleHPIsoData.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4ParticleHPIsoData.cc
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 #include "G4ParticleHPManager.hh"
35 #include "G4ParticleHPDataUsed.hh"
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.;
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;
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"
90 void 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 ( std::getenv( dataDirVariable ) ) {
113  baseName = std::getenv( dataDirVariable );
114  } else {
115  baseName = std::getenv( "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  {
132  }
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");
140  theChannelData = 0;
141 
142  dirName = baseName+"/Elastic";
143  //Init(A, Z, abun, dirName, "/CrossSection/");
144  Init(A, Z, M, abun, dirName, "/CrossSection");
146  theChannelData = 0;
147  }
148 
149  dirName = baseName+"/Inelastic";
150  //Init(A, Z, abun, dirName, "/CrossSection/");
151  Init(A, Z, M, abun, dirName, "/CrossSection");
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