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
G4ParticleHPFissionBaseFS.cc
Go to the documentation of this file.
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//
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"
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
87 theAngularDistribution.Init(theData);
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 }
std::vector< G4DynamicParticle * > G4DynamicParticleVector
#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]
value_type & Get() const
Definition: G4Cache.hh:315
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetMomentum(const G4ThreeVector &momentum)
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
void Init(std::istream &aDataFile)
void SampleAndUpdate(G4ReactionProduct &anIncidentParticle)
G4double Sample(G4double anEnergy, G4int &it)
void SetAZMs(G4double anA, G4double aZ, G4int aM, G4ParticleHPDataUsed used)
void Init(G4double A, G4double Z, G4int M, G4String &dirName, G4String &bit, G4ParticleDefinition *)
G4DynamicParticleVector * ApplyYourself(G4int Prompt)
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.)
G4double GetKineticEnergy() const
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetKineticEnergy(const G4double en)