Geant4  10.01.p03
G4NeutronHPInelasticBaseFS.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 // 080801 Give a warning message for irregular mass value in data file by T. Koi
31 // Introduce theNDLDataA,Z which has A and Z of NDL data by T. Koi
32 // 081024 G4NucleiPropertiesTable:: to G4NucleiProperties::
33 // 101111 Add Special treatment for Be9(n,2n)Be8(2a) case by T. Koi
34 //
36 #include "G4NeutronHPManager.hh"
37 #include "G4SystemOfUnits.hh"
38 #include "G4Nucleus.hh"
39 #include "G4NucleiProperties.hh"
40 #include "G4He3.hh"
41 #include "G4Alpha.hh"
42 #include "G4Electron.hh"
43 #include "G4NeutronHPDataUsed.hh"
44 
45 #include "G4IonTable.hh"
46 
48 {
49  // char the[100] = {""};
50  // std::ostrstream ost(the, 100, std::ios::out);
51  // ost <<gammaPath<<"z"<<ZR<<".a"<<AR;
52  // G4String * aName = new G4String(the);
53  // std::ifstream from(*aName, std::ios::in);
54 
55  std::ostringstream ost;
56  ost <<gammaPath<<"z"<<ZR<<".a"<<AR;
57  G4String aName = ost.str();
58  std::ifstream from(aName, std::ios::in);
59 
60  if(!from) return; // no data found for this isotope
61  // std::ifstream theGammaData(*aName, std::ios::in);
62  std::ifstream theGammaData(aName, std::ios::in);
63 
64  G4double eps = 0.001;
66  G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(AR+eps),static_cast<G4int>(ZR+eps)) -
67  G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(theBaseA+eps), static_cast<G4int>(theBaseZ+eps));
68  theGammas.Init(theGammaData);
69  // delete aName;
70 }
71 
73 {
74  gammaPath = "/Inelastic/Gammas/";
75  if(!getenv("G4NEUTRONHPDATA"))
76  throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files.");
77  G4String tBase = getenv("G4NEUTRONHPDATA");
78  gammaPath = tBase+gammaPath;
79  G4String tString = dirName;
80  G4bool dbool;
81  G4NeutronHPDataUsed aFile = theNames.GetName(static_cast<G4int>(A), static_cast<G4int>(Z), M,tString, bit, dbool);
82  G4String filename = aFile.GetName();
83  SetAZMs( A, Z, M, aFile);
84  //theBaseA = aFile.GetA();
85  //theBaseZ = aFile.GetZ();
86  // theNDLDataA = (int)aFile.GetA();
87  // theNDLDataZ = aFile.GetZ();
88  //if(!dbool || ( Z<2.5 && ( std::abs(theBaseZ - Z)>0.0001 || std::abs(theBaseA - A)>0.0001)))
89  if ( !dbool || ( Z<2.5 && ( std::abs(theNDLDataZ - Z)>0.0001 || std::abs(theNDLDataA - A)>0.0001)) )
90  {
91  if(getenv("NeutronHPNamesLogging")) G4cout << "Skipped = "<< filename <<" "<<A<<" "<<Z<<G4endl;
92  hasAnyData = false;
93  hasFSData = false;
94  hasXsec = false;
95  return;
96  }
97  //theBaseA = A;
98  //theBaseZ = G4int(Z+.5);
99  //std::ifstream theData(filename, std::ios::in);
100  //130205 For compressed data files
101  std::istringstream theData(std::ios::in);
102  G4NeutronHPManager::GetInstance()->GetDataStream(filename,theData);
103  //130205 END
104  if(!theData) //"!" is a operator of ios
105  {
106  hasAnyData = false;
107  hasFSData = false;
108  hasXsec = false;
109  //theData.close();
110  return; // no data for exactly this isotope and FS
111  }
112  // here we go
113  G4int infoType, dataType, dummy=INT_MAX;
114  hasFSData = false;
115  while (theData >> infoType)
116  {
117  theData >> dataType;
118  if(dummy==INT_MAX) theData >> dummy >> dummy;
119  if(dataType==3)
120  {
121  G4int total;
122  theData >> total;
123  theXsection->Init(theData, total, eV);
124  }
125  else if(dataType==4)
126  {
128  theAngularDistribution->Init(theData);
129  hasFSData = true;
130  }
131  else if(dataType==5)
132  {
134  theEnergyDistribution->Init(theData);
135  hasFSData = true;
136  }
137  else if(dataType==6)
138  {
140  theEnergyAngData->Init(theData);
141  hasFSData = true;
142  }
143  else if(dataType==12)
144  {
146  theFinalStatePhotons->InitMean(theData);
147  hasFSData = true;
148  }
149  else if(dataType==13)
150  {
153  hasFSData = true;
154  }
155  else if(dataType==14)
156  {
158  hasFSData = true;
159  }
160  else if(dataType==15)
161  {
163  hasFSData = true;
164  }
165  else
166  {
167  throw G4HadronicException(__FILE__, __LINE__, "Data-type unknown to G4NeutronHPInelasticBaseFS");
168  }
169  }
170  //theData.close();
171 }
172 
174  G4ParticleDefinition ** theDefs,
175  G4int nDef)
176 {
177 
178 // prepare neutron
179  if ( theResult.Get() == NULL ) theResult.Put( new G4HadFinalState );
180  theResult.Get()->Clear();
181  G4double eKinetic = theTrack.GetKineticEnergy();
182  const G4HadProjectile *incidentParticle = &theTrack;
183  G4ReactionProduct theNeutron( incidentParticle->GetDefinition() );
184  theNeutron.SetMomentum( incidentParticle->Get4Momentum().vect() );
185  theNeutron.SetKineticEnergy( eKinetic );
186 
187 // prepare target
188  G4double targetMass;
189  G4double eps = 0.0001;
190  targetMass = ( G4NucleiProperties::GetNuclearMass(static_cast<G4int>(theBaseA+eps), static_cast<G4int>(theBaseZ+eps))) /
192 
193  if(theEnergyAngData!=0)
194  { targetMass = theEnergyAngData->GetTargetMass(); }
196  { targetMass = theAngularDistribution->GetTargetMass(); }
197 
198 //080731a
199 //110512 TKDB ENDF-VII.0 21Sc45 has trouble in MF4MT22 (n,np) targetMass is not properly recorded.
200 //if ( targetMass == 0 ) G4cout << "080731a It looks like something wrong value in G4NDL, please update the latest version. If you use the latest, then please report this problem to Geant4 Hyper news." << G4endl;
201  if ( targetMass == 0 )
202  {
203  //G4cout << "TKDB targetMass = 0; ENDF-VII.0 21Sc45 has trouble in MF4MT22 (n,np) targetMass is not properly recorded. This could be a similar situation." << G4endl;
204  targetMass = ( G4NucleiProperties::GetNuclearMass(static_cast<G4int>(theBaseA+eps), static_cast<G4int>(theBaseZ+eps))) / G4Neutron::Neutron()->GetPDGMass();
205  }
206 
207  G4Nucleus aNucleus;
209  G4ThreeVector neuVelo = (1./incidentParticle->GetDefinition()->GetPDGMass())*theNeutron.GetMomentum();
210  theTarget = aNucleus.GetBiasedThermalNucleus( targetMass, neuVelo, theTrack.GetMaterial()->GetTemperature());
211 
212 // prepare energy in target rest frame
213  G4ReactionProduct boosted;
214  boosted.Lorentz(theNeutron, theTarget);
215  eKinetic = boosted.GetKineticEnergy();
216  G4double orgMomentum = boosted.GetMomentum().mag();
217 
218 // Take N-body phase-space distribution, if no other data present.
219  if(!HasFSData()) // adding the residual is trivial here @@@
220  {
221  G4NeutronHPNBodyPhaseSpace thePhaseSpaceDistribution;
222  G4double aPhaseMass=0;
223  G4int ii;
224  for(ii=0; ii<nDef; ii++)
225  {
226  aPhaseMass+=theDefs[ii]->GetPDGMass();
227  }
228  thePhaseSpaceDistribution.Init(aPhaseMass, nDef);
229  thePhaseSpaceDistribution.SetNeutron(&theNeutron);
230  thePhaseSpaceDistribution.SetTarget(&theTarget);
231  for(ii=0; ii<nDef; ii++)
232  {
233  G4double massCode = 1000.*std::abs(theDefs[ii]->GetPDGCharge());
234  massCode += theDefs[ii]->GetBaryonNumber();
235  G4double dummy = 0;
236  G4ReactionProduct * aSec = thePhaseSpaceDistribution.Sample(eKinetic, massCode, dummy);
237  aSec->Lorentz(*aSec, -1.*theTarget);
238  G4DynamicParticle * aPart = new G4DynamicParticle();
239  aPart->SetDefinition(aSec->GetDefinition());
240  aPart->SetMomentum(aSec->GetMomentum());
241  delete aSec;
242  theResult.Get()->AddSecondary(aPart);
243  }
245 
246  //TK120607
247  //Final momentum check should be done before return
249  G4LorentzVector targ_4p_lab ( theTarget.GetMomentum() , std::sqrt( targ_pd->GetPDGMass()*targ_pd->GetPDGMass() + theTarget.GetMomentum().mag2() ) );
250  G4LorentzVector proj_4p_lab = theTrack.Get4Momentum();
251  G4LorentzVector init_4p_lab = proj_4p_lab + targ_4p_lab;
252  adjust_final_state ( init_4p_lab );
253 
254  return;
255  }
256 
257 // set target and neutron in the relevant exit channel
258  if(theAngularDistribution!=0)
259  {
260  theAngularDistribution->SetTarget(theTarget);
261  theAngularDistribution->SetNeutron(theNeutron);
262  }
263  else if(theEnergyAngData!=0)
264  {
265  theEnergyAngData->SetTarget(theTarget);
266  theEnergyAngData->SetNeutron(theNeutron);
267  }
268 
269  G4ReactionProductVector * tmpHadrons = 0;
270  G4int ii, dummy;
271  unsigned int i;
272  if(theEnergyAngData != 0)
273  {
274  tmpHadrons = theEnergyAngData->Sample(eKinetic);
275 
276  //141017 Fix BEGIN
277  //Adjust A and Z in the case of miss much between selected data and target nucleus
278  if ( tmpHadrons != NULL ) {
279  G4int sumA = 0;
280  G4int sumZ = 0;
281  G4int maxA = 0;
282  G4int jAtMaxA = 0;
283  for ( G4int j = 0 ; j != (G4int)tmpHadrons->size() ; j++ ) {
284  if ( tmpHadrons->at(j)->GetDefinition()->GetBaryonNumber() > maxA ) {
285  maxA = tmpHadrons->at(j)->GetDefinition()->GetBaryonNumber();
286  jAtMaxA = j;
287  }
288  sumA += tmpHadrons->at(j)->GetDefinition()->GetBaryonNumber();
289  sumZ += G4int( tmpHadrons->at(j)->GetDefinition()->GetPDGCharge() + eps );
290  }
291  G4int dA = (G4int)theBaseA + incidentParticle->GetDefinition()->GetBaryonNumber() - sumA;
292  G4int dZ = (G4int)theBaseZ + G4int( incidentParticle->GetDefinition()->GetPDGCharge() + eps ) - sumZ;
293  if ( dA < 0 || dZ < 0 ) {
294  G4int newA = tmpHadrons->at(jAtMaxA)->GetDefinition()->GetBaryonNumber() + dA ;
295  G4int newZ = G4int( tmpHadrons->at(jAtMaxA)->GetDefinition()->GetPDGCharge() + eps ) + dZ;
296  G4ParticleDefinition* pd = G4IonTable::GetIonTable()->GetIon ( newZ , newA );
297  tmpHadrons->at( jAtMaxA )->SetDefinition( pd );
298  }
299  }
300  //141017 Fix END
301 
302  }
303  else if(theAngularDistribution!= 0)
304  {
305  G4bool * Done = new G4bool[nDef];
306  G4int i0;
307  for(i0=0; i0<nDef; i0++) Done[i0] = false;
308  if(tmpHadrons == 0)
309  {
310  tmpHadrons = new G4ReactionProductVector;
311  }
312  else
313  {
314  for(i=0; i<tmpHadrons->size(); i++)
315  {
316  for(ii=0; ii<nDef; ii++)
317  if(!Done[ii] && tmpHadrons->operator[](i)->GetDefinition() == theDefs[ii])
318  Done[ii] = true;
319  }
320  }
321  G4ReactionProduct * aHadron;
322  G4double localMass = ( G4NucleiProperties::GetNuclearMass(static_cast<G4int>(theBaseA+eps), static_cast<G4int>(theBaseZ+eps)));
323  G4ThreeVector bufferedDirection(0,0,0);
324  for(i0=0; i0<nDef; i0++)
325  {
326  if(!Done[i0])
327  {
328  aHadron = new G4ReactionProduct;
329  if(theEnergyDistribution!=0)
330  {
331  aHadron->SetDefinition(theDefs[i0]);
332  aHadron->SetKineticEnergy(theEnergyDistribution->Sample(eKinetic, dummy));
333  }
334  else if(nDef == 1)
335  {
336  aHadron->SetDefinition(theDefs[i0]);
337  aHadron->SetKineticEnergy(eKinetic);
338  }
339  else if(nDef == 2)
340  {
341  aHadron->SetDefinition(theDefs[i0]);
342  aHadron->SetKineticEnergy(50*MeV);
343  }
344  else
345  {
346  throw G4HadronicException(__FILE__, __LINE__, "No energy distribution to sample from in InelasticBaseFS::BaseApply");
347  }
349  if(theEnergyDistribution==0 && nDef == 2)
350  {
351  if(i0==0)
352  {
353  G4double mass1 = theDefs[0]->GetPDGMass();
354  G4double mass2 = theDefs[1]->GetPDGMass();
356  G4int z1 = static_cast<G4int>(theBaseZ+eps-theDefs[0]->GetPDGCharge()-theDefs[1]->GetPDGCharge());
357  G4int a1 = static_cast<G4int>(theBaseA+eps)-theDefs[0]->GetBaryonNumber()-theDefs[1]->GetBaryonNumber();
358  G4double concreteMass = G4NucleiProperties::GetNuclearMass(a1, z1);
359  G4double availableEnergy = eKinetic+massn+localMass-mass1-mass2-concreteMass;
360  // available kinetic energy in CMS (non relativistic)
361  G4double emin = availableEnergy+mass1+mass2 - std::sqrt((mass1+mass2)*(mass1+mass2)+orgMomentum*orgMomentum);
362  G4double p1=std::sqrt(2.*mass2*emin);
363  bufferedDirection = p1*aHadron->GetMomentum().unit();
364  if(getenv("HTOKEN")) // @@@@@ verify the nucleon counting...
365  {
366  G4cout << "HTOKEN "<<z1<<" "<<theBaseZ<<" "<<a1<<" "<<theBaseA<<" "<<availableEnergy<<" "
367  << emin<<G4endl;
368  }
369  }
370  else
371  {
372  bufferedDirection = -bufferedDirection;
373  }
374  // boost from cms to lab
375  if(getenv("HTOKEN"))
376  {
377  G4cout << " HTOKEN "<<bufferedDirection.mag2()<<G4endl;
378  }
379  aHadron->SetTotalEnergy( std::sqrt(aHadron->GetMass()*aHadron->GetMass()
380  +bufferedDirection.mag2()) );
381  aHadron->SetMomentum(bufferedDirection);
382  aHadron->Lorentz(*aHadron, -1.*(theTarget+theNeutron));
383  if(getenv("HTOKEN"))
384  {
385  G4cout << " HTOKEN "<<aHadron->GetTotalEnergy()<<" "<<aHadron->GetMomentum()<<G4endl;
386  }
387  }
388  tmpHadrons->push_back(aHadron);
389  }
390  }
391  delete [] Done;
392  }
393  else
394  {
395  throw G4HadronicException(__FILE__, __LINE__, "No data to create the neutrons in NInelasticFS");
396  }
397 
398  G4ReactionProductVector * thePhotons = 0;
399  if(theFinalStatePhotons!=0)
400  {
401  // the photon distributions are in the Nucleus rest frame.
402  G4ReactionProduct boosted_tmp;
403  boosted_tmp.Lorentz(theNeutron, theTarget);
404  G4double anEnergy = boosted_tmp.GetKineticEnergy();
405  thePhotons = theFinalStatePhotons->GetPhotons(anEnergy);
406  if(thePhotons!=0)
407  {
408  for(i=0; i<thePhotons->size(); i++)
409  {
410  // back to lab
411  thePhotons->operator[](i)->Lorentz(*(thePhotons->operator[](i)), -1.*theTarget);
412  }
413  }
414  }
415  else if(theEnergyAngData!=0)
416  {
417 
418  G4double theGammaEnergy = theEnergyAngData->GetTotalMeanEnergy();
419  G4double anEnergy = boosted.GetKineticEnergy();
420  theGammaEnergy = anEnergy-theGammaEnergy;
421  theGammaEnergy += theNuclearMassDifference;
422  G4double eBindProducts = 0;
423  G4double eBindN = 0;
424  G4double eBindP = 0;
429  G4int ia=0;
430  for(i=0; i<tmpHadrons->size(); i++)
431  {
432  if(tmpHadrons->operator[](i)->GetDefinition() == G4Neutron::Neutron())
433  {
434  eBindProducts+=eBindN;
435  }
436  else if(tmpHadrons->operator[](i)->GetDefinition() == G4Proton::Proton())
437  {
438  eBindProducts+=eBindP;
439  }
440  else if(tmpHadrons->operator[](i)->GetDefinition() == G4Deuteron::Deuteron())
441  {
442  eBindProducts+=eBindD;
443  }
444  else if(tmpHadrons->operator[](i)->GetDefinition() == G4Triton::Triton())
445  {
446  eBindProducts+=eBindT;
447  }
448  else if(tmpHadrons->operator[](i)->GetDefinition() == G4He3::He3())
449  {
450  eBindProducts+=eBindHe3;
451  }
452  else if(tmpHadrons->operator[](i)->GetDefinition() == G4Alpha::Alpha())
453  {
454  eBindProducts+=eBindA;
455  ia++;
456  }
457  }
458 
459  theGammaEnergy += eBindProducts;
460 
461 //101111
462 //Special treatment for Be9 + n -> 2n + Be8 -> 2n + a + a
463 if ( (G4int)(theBaseZ+eps) == 4 && (G4int)(theBaseA+eps) == 9 )
464 {
465  // This only valid for G4NDL3.13,,,
466  if ( std::abs( theNuclearMassDifference -
468  G4NucleiProperties::GetBindingEnergy( 9 , 4 ) ) ) < 1*keV
469  && ia == 2 )
470  {
471  theGammaEnergy -= (2*eBindA);
472  }
473 }
474 
475  G4ReactionProductVector * theOtherPhotons = 0;
476  G4int iLevel;
477  while(theGammaEnergy>=theGammas.GetLevelEnergy(0))
478  {
479  for(iLevel=theGammas.GetNumberOfLevels()-1; iLevel>=0; iLevel--)
480  {
481  if(theGammas.GetLevelEnergy(iLevel)<theGammaEnergy) break;
482  }
483  if(iLevel==0||iLevel==theGammas.GetNumberOfLevels()-1)
484  {
485  theOtherPhotons = theGammas.GetDecayGammas(iLevel);
486  }
487  else
488  {
489  G4double random = G4UniformRand();
490  G4double eLow = theGammas.GetLevelEnergy(iLevel);
491  G4double eHigh = theGammas.GetLevelEnergy(iLevel+1);
492  if(random > (eHigh-eLow)/(theGammaEnergy-eLow)) iLevel++;
493  theOtherPhotons = theGammas.GetDecayGammas(iLevel);
494  }
495  if(thePhotons==0) thePhotons = new G4ReactionProductVector;
496  if(theOtherPhotons != 0)
497  {
498  for(unsigned int iii=0; iii<theOtherPhotons->size(); iii++)
499  {
500  thePhotons->push_back(theOtherPhotons->operator[](iii));
501  }
502  delete theOtherPhotons;
503  }
504  theGammaEnergy -= theGammas.GetLevelEnergy(iLevel);
505  if(iLevel == -1) break;
506  }
507  }
508 
509 // fill the result
510  unsigned int nSecondaries = tmpHadrons->size();
511  unsigned int nPhotons = 0;
512  if(thePhotons!=0) { nPhotons = thePhotons->size(); }
513  nSecondaries += nPhotons;
514  G4DynamicParticle * theSec;
515 
516  for(i=0; i<nSecondaries-nPhotons; i++)
517  {
518  theSec = new G4DynamicParticle;
519  theSec->SetDefinition(tmpHadrons->operator[](i)->GetDefinition());
520  theSec->SetMomentum(tmpHadrons->operator[](i)->GetMomentum());
521  theResult.Get()->AddSecondary(theSec);
522  delete tmpHadrons->operator[](i);
523  }
524  if(thePhotons != 0)
525  {
526  for(i=0; i<nPhotons; i++)
527  {
528  theSec = new G4DynamicParticle;
529  theSec->SetDefinition(thePhotons->operator[](i)->GetDefinition());
530  theSec->SetMomentum(thePhotons->operator[](i)->GetMomentum());
531  theResult.Get()->AddSecondary(theSec);
532  delete thePhotons->operator[](i);
533  }
534  }
535 
536 // some garbage collection
537  delete thePhotons;
538  delete tmpHadrons;
539 
540 //080721
542  G4LorentzVector targ_4p_lab ( theTarget.GetMomentum() , std::sqrt( targ_pd->GetPDGMass()*targ_pd->GetPDGMass() + theTarget.GetMomentum().mag2() ) );
543  G4LorentzVector proj_4p_lab = theTrack.Get4Momentum();
544  G4LorentzVector init_4p_lab = proj_4p_lab + targ_4p_lab;
545  adjust_final_state ( init_4p_lab );
546 
547 // clean up the primary neutron
549 }
G4ReactionProductVector * GetPhotons(G4double anEnergy)
void SetNeutron(const G4ReactionProduct &aNeutron)
void SetTarget(G4ReactionProduct &aTarget)
static const double MeV
Definition: G4SIunits.hh:193
G4NeutronHPPhotonDist * theFinalStatePhotons
static G4double GetNuclearMass(const G4double A, const G4double Z)
void SetMomentum(const G4ThreeVector &momentum)
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
G4Cache< G4HadFinalState * > theResult
CLHEP::Hep3Vector G4ThreeVector
void Init(G4double aMass, G4int aCount)
void SetNeutron(G4ReactionProduct *aNeutron)
void InitGammas(G4double AR, G4double ZR)
void SetKineticEnergy(const G4double en)
static G4NeutronHPManager * GetInstance()
static const G4double a1
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:463
void Init(std::istream &aDataFile)
value_type & Get() const
Definition: G4Cache.hh:282
void SetTarget(const G4ReactionProduct &aTarget)
G4double Sample(G4double anEnergy, G4int &it)
void SetTarget(G4ReactionProduct *aTarget)
void Init(std::istream &aDataFile, G4int total, G4double ux=1., G4double uy=1.)
static const G4double eps
void GetDataStream(G4String, std::istringstream &iss)
G4NeutronHPDataUsed GetName(G4int A, G4int Z, G4String base, G4String rest, G4bool &active)
G4NeutronHPEnergyDistribution * theEnergyDistribution
int G4int
Definition: G4Types.hh:78
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetStatusChange(G4HadFinalStateStatus aS)
std::vector< G4ReactionProduct * > G4ReactionProductVector
void InitAngular(std::istream &aDataFile)
const G4ParticleDefinition * GetDefinition() const
G4ReactionProduct GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4double temp=-1) const
Definition: G4Nucleus.cc:108
#define G4UniformRand()
Definition: Randomize.hh:93
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * GetDefinition() const
bool G4bool
Definition: G4Types.hh:79
void SetNeutron(G4ReactionProduct &aNeutron)
G4double GetKineticEnergy() const
void Init(G4double A, G4double Z, G4int M, G4String &dirName, G4String &bit)
void SetTotalEnergy(const G4double en)
const G4double p1
G4ErrorTarget * theTarget
Definition: errprop.cc:59
void InitEnergies(std::istream &aDataFile)
static G4Triton * Triton()
Definition: G4Triton.cc:95
void BaseApply(const G4HadProjectile &theTrack, G4ParticleDefinition **theDefs, G4int nDef)
static G4Proton * Proton()
Definition: G4Proton.cc:93
void Init(std::istream &aDataFile)
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4NeutronHPEnAngCorrelation * theEnergyAngData
static const G4double A[nN]
const G4LorentzVector & Get4Momentum() const
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
static G4IonTable * GetIonTable()
Definition: G4IonTable.hh:78
#define INT_MAX
Definition: templates.hh:111
G4double GetKineticEnergy() const
void SampleAndUpdate(G4ReactionProduct &aNeutron)
static const double eV
Definition: G4SIunits.hh:194
G4double GetTotalEnergy() const
G4bool InitMean(std::istream &aDataFile)
G4double total(Particle const *const p1, Particle const *const p2)
G4double GetPDGMass() const
static G4double GetBindingEnergy(const G4int A, const G4int Z)
G4double GetLevelEnergy(G4int aLevel)
G4ReactionProduct * Sample(G4double anEnergy, G4double massCode, G4double mass)
G4ThreeVector GetMomentum() const
G4NeutronHPAngular * theAngularDistribution
G4double GetTemperature() const
Definition: G4Material.hh:182
#define G4endl
Definition: G4ios.hh:61
const G4Material * GetMaterial() const
G4ReactionProductVector * Sample(G4double anEnergy)
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
static const double keV
Definition: G4SIunits.hh:195
G4ReactionProductVector * GetDecayGammas(G4int aLevel)
void SetAZMs(G4double anA, G4double aZ, G4int aM, G4NeutronHPDataUsed used)
double G4double
Definition: G4Types.hh:76
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void adjust_final_state(G4LorentzVector)
G4double GetPDGCharge() const
static G4He3 * He3()
Definition: G4He3.cc:94
void Put(const value_type &val) const
Definition: G4Cache.hh:286
G4double GetMass() const
void InitPartials(std::istream &aDataFile)
void Init(std::istream &aDataFile)
CLHEP::HepLorentzVector G4LorentzVector