Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ParticleHPEnAngCorrelation.hh
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 //
27 // P. Arce, June-2014 Conversion neutron_hp to particle_hp
28 //
29 #ifndef G4ParticleHPEnAngCorrelation_h
30 #define G4ParticleHPEnAngCorrelation_h 1
31 
32 #include "globals.hh"
33 #include "G4ParticleHPVector.hh"
34 #include "Randomize.hh"
35 #include "G4ios.hh"
36 #include <fstream>
37 #include "globals.hh"
38 #include "G4ParticleHPProduct.hh"
39 #include "G4ReactionProduct.hh"
40 #include "G4Cache.hh"
42 
44 {
45 
46  struct toBeCached {
47  G4ReactionProduct* theProjectileRP;
48  G4ReactionProduct* theTarget;
49  G4double theTotalMeanEnergy;
50  toBeCached() : theProjectileRP(NULL),theTarget(NULL),theTotalMeanEnergy(-1.0) {};
51  };
52 
53  public:
54  G4ParticleHPEnAngCorrelation() // for G4ParticleHPCaptureFS::theMF6FinalState
55  {
56  theProjectile = G4Neutron::Neutron();
57  theProducts = 0;
58  inCharge = false;
59  toBeCached val;
60  fCache.Put( val );
61  //theTotalMeanEnergy = -1.;
62  fCache.Get().theTotalMeanEnergy = -1.;
63  targetMass = 0.0;
64  frameFlag = 0;
65  nProducts = 0;
66  bAdjustFinalState = true;
67  }
69  : theProjectile(proj)
70  {
71  theProducts = 0;
72  inCharge = false;
73  toBeCached val;
74  fCache.Put( val );
75  //theTotalMeanEnergy = -1.;
76  fCache.Get().theTotalMeanEnergy = -1.;
77  targetMass = 0.0;
78  frameFlag = 0;
79  nProducts = 0;
80  bAdjustFinalState = true;
81  }
82 
84  {
85  if(theProducts!=0) delete [] theProducts;
86  }
87 
88  inline void Init(std::istream & aDataFile)
89  {
90  bAdjustFinalState = true;
91  const char* ctmp = getenv("G4PHP_DO_NOT_ADJUST_FINAL_STATE");
92  if( ctmp && G4String(ctmp) == "1" ) {
93  bAdjustFinalState = false;
94  }
95 //T.K. Comment out following line to keep the condition at the validation efforts compairng NeutronHP and PartileHP for neutrons (2015 Sep.)
96 //#ifdef PHP_AS_HP
97 // bAdjustFinalState = false;
98 //#endif
99 
100  inCharge = true;
101  aDataFile>>targetMass>>frameFlag>>nProducts;
102  theProducts = new G4ParticleHPProduct[nProducts];
103  for(G4int i=0; i<nProducts; i++)
104  {
105  theProducts[i].Init(aDataFile,theProjectile);
106  }
107 
108  }
109 
111 
113 
114  inline void SetTarget(G4ReactionProduct & aTarget)
115  {
116  fCache.Get().theTarget = &aTarget;
117  for(G4int i=0;i<nProducts;i++)theProducts[i].SetTarget(fCache.Get().theTarget);
118  }
119 
120  inline void SetProjectileRP(G4ReactionProduct & aIncidentPart)
121  {
122  fCache.Get().theProjectileRP = &aIncidentPart;
123  for(G4int i=0;i<nProducts;i++)theProducts[i].SetProjectileRP(fCache.Get().theProjectileRP);
124  }
125 
126  inline G4bool InCharge()
127  {
128  return inCharge;
129  }
130 
131  inline G4double GetTargetMass() { return targetMass; }
132 
134  {
135  // cashed in 'sample' call
136  return fCache.Get().theTotalMeanEnergy;
137  }
138 private:
139 
140  // data members
141 
142  G4double targetMass;
143  G4int frameFlag; // =1: Target rest frame; =2: CMS system; incident always in lab
144  G4int nProducts;
145  G4ParticleHPProduct * theProducts;
146  G4bool inCharge;
147 
148  // Utility quantities
149 
150  //G4ReactionProduct theTarget;
151  //G4ReactionProduct theProjectileRP;
152 
153  // cashed values
154 
155  //G4double theTotalMeanEnergy;
156  G4Cache<toBeCached> fCache;
157 
158  G4ParticleDefinition* theProjectile;
159 
160  G4bool bAdjustFinalState;
161 
162 };
163 
164 #endif
void Init(std::istream &aDataFile, G4ParticleDefinition *projectile)
void SetProjectileRP(G4ReactionProduct &aIncidentPart)
value_type & Get() const
Definition: G4Cache.hh:282
int G4int
Definition: G4Types.hh:78
G4ReactionProductVector * Sample(G4double anEnergy)
G4ParticleHPEnAngCorrelation(G4ParticleDefinition *proj)
std::vector< G4ReactionProduct * > G4ReactionProductVector
bool G4bool
Definition: G4Types.hh:79
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4ReactionProduct * SampleOne(G4double anEnergy)
void SetTarget(G4ReactionProduct &aTarget)
double G4double
Definition: G4Types.hh:76
void Put(const value_type &val) const
Definition: G4Cache.hh:286
void Init(std::istream &aDataFile)