48 aDataFile >> nEnergies;
49 theManager.
Init(aDataFile);
50 theEnergies =
new G4double[nEnergies];
51 nCosTh =
new G4int[nEnergies];
54 for(
G4int i=0; i<nEnergies; i++)
56 aDataFile >> theEnergies[i];
58 aDataFile >> nCosTh[i];
59 theSecondManager[i].
Init(aDataFile);
62 for(
G4int ii=0; ii<nCosTh[i]; ii++)
66 theData[i][ii].
Init(aDataFile, eV);
107 throw G4HadronicException(__FILE__, __LINE__,
"G4NeutronHPLabAngularEnergy: Unknown ion case 2");
114 for(i=0; i<nEnergies; i++)
117 if ( anEnergy < theEnergies[i] )
break;
123if(it==0)
G4cout <<
"080808 Something unexpected is happen in G4NeutronHPLabAngularEnergy " <<
G4endl;
127 for(i=0;i<nCosTh[it]; i++)
129 if(i!=0) running[i] = running[i-1];
134 for(i=0;i<nCosTh[it]; i++)
137 if(random<running[i])
break;
143 cosTh = theData[it][ith].
GetLabel();
144 secEnergy = theData[it][ith].
Sample();
145 currentMeanEnergy = theData[it][ith].
GetMeanX();
157 cosTh = theInt.
Interpolate(theSecondManager[it].GetInverseScheme(ith),
168 mu = theData[it][ith-1].
GetX(i);
169 y1 = theData[it][ith-1].
GetY(i);
170 y2 = theData[it][ith].
GetY(mu);
172 y = theInt.
Interpolate(theSecondManager[it].GetScheme(ith),
178 mu = theData[it][ith].
GetX(i);
179 y1 = theData[it][ith-1].
GetY(mu);
180 y2 = theData[it][ith].
GetY(i);
181 y = theInt.
Interpolate(theSecondManager[it].GetScheme(ith),
186 theStore.
Merge(&theBuff1, &theBuff2);
187 secEnergy = theStore.
Sample();
188 currentMeanEnergy = theStore.
GetMeanX();
194 G4double x, x1, x2, y1, y2, y, tmp, E;
198 for(i=0;i<nCosTh[it-1]; i++)
200 if(i!=0) run1.
SetY(i, run1.
GetY(i-1));
201 run1.
SetX(i, theData[it-1][i].GetLabel());
206 for(i=0;i<nCosTh[it]; i++)
208 if(i!=0) run2.
SetY(i, run2.
GetY(i-1));
209 run2.
SetX(i, theData[it][i].GetLabel());
214 x1 = theEnergies[it-1];
215 x2 = theEnergies[it];
233 y = theInt.
Lin(x, x1,x2,y1,y2);
237 theThVec.
Merge(&thBuff1 ,&thBuff2);
244 if(random<theThVec.
GetY(i)-theThVec.
GetY(0))
break;
250 xx1 = theThVec.
GetY(ith-1)-theThVec.
GetY(0);
251 xx2 = theThVec.
GetY(ith)-theThVec.
GetY(0);
252 yy1 = theThVec.
GetX(ith-1);
253 yy2 = theThVec.
GetX(ith);
254 cosTh = theInt.
Interpolate(theSecondManager[it].GetScheme(ith),
255 xx, xx1,xx2,yy1,yy2);
260 for(i=0; i<nCosTh[it-1]; i++)
263 if(cosTh<theData[it-1][i].GetLabel())
break;
267 x1 = theData[it-1][i1-1].
GetLabel();
273 E = theData[it-1][i1-1].
GetX(i);
274 y1 = theData[it-1][i1-1].
GetY(i);
275 y2 = theData[it-1][i1].
GetY(E);
276 y = theInt.
Lin(x, x1,x2,y1,y2);
283 E = theData[it-1][i1].
GetX(i);
284 y1 = theData[it-1][i1-1].
GetY(E);
285 y2 = theData[it-1][i1].
GetY(i);
286 y = theInt.
Lin(x, x1,x2,y1,y2);
290 theStore1.
Merge(&theBuff1a, &theBuff2a);
294 for(i=0; i<nCosTh[it]; i++)
297 if(cosTh<theData[it][i2].GetLabel())
break;
305 E = theData[it][i2-1].
GetX(i);
306 y1 = theData[it][i2-1].
GetY(i);
307 y2 = theData[it][i2].
GetY(E);
308 y = theInt.
Lin(x, x1,x2,y1,y2);
320 E = theData[it][i2].
GetX(i);
321 y1 = theData[it][i2-1].
GetY(E);
322 y2 = theData[it][i2].
GetY(i);
323 y = theInt.
Lin(x, x1,x2,y1,y2);
327 theStore2.
Merge(&theBuff1b, &theBuff2b);
331 x1 = theEnergies[it-1];
332 x2 = theEnergies[it];
337 E = theStore1.
GetX(i);
338 y1 = theStore1.
GetY(i);
339 y2 = theStore2.
GetY(E);
347 E = theStore2.
GetX(i);
348 y1 = theStore1.
GetY(E);
349 y2 = theStore2.
GetY(i);
354 theOne.
Merge(&theOne1, &theOne2);
356 secEnergy = theOne.
Sample();
357 currentMeanEnergy = theOne.
GetMeanX();
368 G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*std::cos(theta) );
G4DLLIMPORT std::ostream G4cout
static G4Deuteron * Deuteron()
static G4Electron * Electron()
void Init(G4int aScheme, G4int aRange)
G4InterpolationScheme GetScheme(G4int index) const
G4double Lin(G4double x, G4double x1, G4double x2, G4double y1, G4double y2)
G4double Interpolate(G4InterpolationScheme aScheme, G4double x, G4double x1, G4double x2, G4double y1, G4double y2) const
void Init(std::ifstream &aDataFile)
G4ReactionProduct * Sample(G4double anEnergy, G4double massCode, G4double mass)
void Init(std::ifstream &aDataFile, G4int total, G4double ux=1., G4double uy=1.)
void SetLabel(G4double aLabel)
void Merge(G4NeutronHPVector *active, G4NeutronHPVector *passive)
void SetX(G4int i, G4double e)
G4int GetVectorLength() const
G4double GetX(G4int i) const
const G4InterpolationManager & GetInterpolationManager() const
G4double GetY(G4double x)
void SetData(G4int i, G4double x, G4double y)
void SetInterpolationManager(const G4InterpolationManager &aManager)
void SetY(G4int i, G4double x)
static G4Neutron * Neutron()
static G4Positron * Positron()
static G4Proton * Proton()
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4double GetTotalMomentum() const
void SetKineticEnergy(const G4double en)
void SetDefinition(G4ParticleDefinition *aParticleDefinition)
static G4Triton * Triton()