ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ParticleHPFissionBaseFS.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4ParticleHPFissionBaseFS.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // neutron_hp -- source file
27 // J.P. Wellisch, Nov-1996
28 // A prototype of the low energy neutron transport model.
29 //
30 // P. Arce, June-2014 Conversion neutron_hp to particle_hp
31 //
33 #include "G4ParticleHPManager.hh"
34 #include "G4SystemOfUnits.hh"
35 #include "G4ReactionProduct.hh"
36 #include "G4Nucleus.hh"
37 #include "G4Proton.hh"
38 #include "G4Deuteron.hh"
39 #include "G4Triton.hh"
40 #include "G4Alpha.hh"
41 #include "G4ThreeVector.hh"
42 #include "G4LorentzVector.hh"
43 #include "G4ParticleHPDataUsed.hh"
44 
46  {
47  G4String tString = dirName;
48  G4bool dbool;
49  G4ParticleHPDataUsed aFile = theNames.GetName(static_cast<G4int>(A), static_cast<G4int>(Z), M, tString, bit, dbool);
50  G4String filename = aFile.GetName();
51  SetAZMs( A, Z, M, aFile );
52  //theBaseA = aFile.GetA();
53  //theBaseZ = aFile.GetZ();
54  //if(!dbool || ( Z<2.5 && ( std::abs(theBaseZ - Z)>0.0001 || std::abs(theBaseA - A)>0.0001) ) )
55  if ( !dbool || ( Z<2.5 && ( std::abs(theNDLDataZ - Z)>0.0001 || std::abs(theNDLDataA - A)>0.0001)) )
56  {
57  hasAnyData = false;
58  hasFSData = false;
59  hasXsec = false;
60  return; // no data for exactly this isotope.
61  }
62 
63  //std::ifstream theData(filename, std::ios::in);
64  std::istringstream theData(std::ios::in);
66  G4int dummy;
67  if(!(theData))
68  {
69  //theData.close();
70  hasFSData = false;
71  hasXsec = false;
72  hasAnyData = false;
73  return; // no data for this FS for this isotope
74  }
75  theData >> dummy>>dummy;
76  G4int total;
77  theData >> total;
78  theXsection->Init(theData, total, eV);
79  if (!(theData >> dummy))
80  {
81  hasFSData = false;
82  //theData.close();
83  return;
84  }
85  theData >> dummy;
86 
88 
89  theData >> dummy >> dummy;
90 
91  theEnergyDistribution.Init(theData);
92  //theData.close();
93 
94  }
95 
97  {
98 // if therere were no data for this isotope, break out.
99  if(!HasFSData()) { return 0; }
100 
101  G4int i;
103  G4ReactionProduct boosted;
104  boosted.Lorentz( *(fCache.Get().theNeutronRP) , *(fCache.Get().theTarget) );
105  G4double eKinetic = boosted.GetKineticEnergy();
106 
107 // Build neutrons
108  G4ReactionProduct * theNeutrons = new G4ReactionProduct[nPrompt];
109  for(i=0; i<nPrompt; i++)
110  {
111  theNeutrons[i].SetDefinition(G4Neutron::Neutron());
112  }
113 
114 // sample energies
115  G4int dummy;
116  for(i=0; i<nPrompt; i++)
117  {
118  // always in the lab system (if file-5)
119  theNeutrons[i].SetKineticEnergy(theEnergyDistribution.Sample(eKinetic, dummy));
120  }
121 
122 // sample neutron angular distribution
123  for(i=0; i<nPrompt; i++)
124  {
125  theAngularDistribution.SampleAndUpdate(theNeutrons[i]);
126  }
127 
128 // already in lab. Add neutrons to dynamic particle vector
129  for(i=0; i<nPrompt; i++)
130  {
132  it->SetDefinition(theNeutrons[i].GetDefinition());
133  it->SetMomentum(theNeutrons[i].GetMomentum());
134  aResult->push_back(it);
135  }
136  delete [] theNeutrons;
137 
138 // return the result
139  return aResult;
140  }