Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ParticleHPNBodyPhaseSpace Class Reference

#include <G4ParticleHPNBodyPhaseSpace.hh>

Inheritance diagram for G4ParticleHPNBodyPhaseSpace:
Collaboration diagram for G4ParticleHPNBodyPhaseSpace:

Public Member Functions

 G4ParticleHPNBodyPhaseSpace ()
 
 ~G4ParticleHPNBodyPhaseSpace ()
 
void Init (G4double aMass, G4int aCount)
 
void Init (std::istream &aDataFile)
 
G4ReactionProductSample (G4double anEnergy, G4double massCode, G4double mass)
 
- Public Member Functions inherited from G4VParticleHPEnergyAngular
 G4VParticleHPEnergyAngular ()
 
virtual ~G4VParticleHPEnergyAngular ()
 
void SetProjectileRP (G4ReactionProduct *aIncidentParticleRP)
 
void SetTarget (G4ReactionProduct *aTarget)
 
G4ReactionProductGetTarget ()
 
G4ReactionProductGetProjectileRP ()
 
G4ReactionProductGetCMS ()
 
void SetQValue (G4double aValue)
 
virtual void ClearHistories ()
 

Additional Inherited Members

- Protected Member Functions inherited from G4VParticleHPEnergyAngular
G4double GetQValue ()
 

Detailed Description

Definition at line 42 of file G4ParticleHPNBodyPhaseSpace.hh.

Constructor & Destructor Documentation

G4ParticleHPNBodyPhaseSpace::G4ParticleHPNBodyPhaseSpace ( )
inline

Definition at line 46 of file G4ParticleHPNBodyPhaseSpace.hh.

46  {
47  theTotalMass = 0.0;
48  theTotalCount = 0;
49  }
G4ParticleHPNBodyPhaseSpace::~G4ParticleHPNBodyPhaseSpace ( )
inline

Definition at line 50 of file G4ParticleHPNBodyPhaseSpace.hh.

50 {}

Member Function Documentation

void G4ParticleHPNBodyPhaseSpace::Init ( G4double  aMass,
G4int  aCount 
)
inline

Definition at line 54 of file G4ParticleHPNBodyPhaseSpace.hh.

55  {
56  theTotalMass=aMass;
57  theTotalCount=aCount;
58  }

Here is the caller graph for this function:

void G4ParticleHPNBodyPhaseSpace::Init ( std::istream &  aDataFile)
inlinevirtual

Implements G4VParticleHPEnergyAngular.

Definition at line 60 of file G4ParticleHPNBodyPhaseSpace.hh.

61  {
62  aDataFile >> theTotalMass >> theTotalCount;
63  theTotalMass *= G4Neutron::Neutron()->GetPDGMass();
64  }
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4double GetPDGMass() const

Here is the call graph for this function:

G4ReactionProduct * G4ParticleHPNBodyPhaseSpace::Sample ( G4double  anEnergy,
G4double  massCode,
G4double  mass 
)
virtual

Implements G4VParticleHPEnergyAngular.

Definition at line 44 of file G4ParticleHPNBodyPhaseSpace.cc.

45 {
47  G4int Z = static_cast<G4int>(massCode/1000);
48  G4int A = static_cast<G4int>(massCode-1000*Z);
49 
50  if(massCode==0)
51  {
52  result->SetDefinition(G4Gamma::Gamma());
53  }
54  else if(A==0)
55  {
57  if(Z==1) result->SetDefinition(G4Positron::Positron());
58  }
59  else if(A==1)
60  {
62  if(Z==1) result->SetDefinition(G4Proton::Proton());
63  }
64  else if(A==2)
65  {
67  }
68  else if(A==3)
69  {
70  result->SetDefinition(G4Triton::Triton());
71  if(Z==2) result->SetDefinition(G4He3::He3());
72  }
73  else if(A==4)
74  {
75  result->SetDefinition(G4Alpha::Alpha());
76  if(Z!=2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1");
77  }
78  else
79  {
80  throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPNBodyPhaseSpace: Unknown ion case 2");
81  }
82 
83 // Get the energy from phase-space distribution
84  // in CMS
85  // P = Cn*std::sqrt(E')*(Emax-E')**(3*n/2-4)
86  G4double maxE = GetEmax(anEnergy, result->GetMass());
88  G4double max(0);
89  if(theTotalCount<=3)
90  {
91  max = maxE/2.;
92  }
93  else if(theTotalCount==4)
94  {
95  max = maxE/5.;
96  }
97  else if(theTotalCount==5)
98  {
99  max = maxE/8.;
100  }
101  else
102  {
103  throw G4HadronicException(__FILE__, __LINE__, "NeutronHP Phase-space distribution cannot cope with this number of particles");
104  }
105  G4double testit;
106  G4double rand0 = Prob(max, maxE, theTotalCount);
107  G4double rand;
108 
109  G4int icounter=0;
110  G4int icounter_max=1024;
111  do
112  {
113  icounter++;
114  if ( icounter > icounter_max ) {
115  G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
116  break;
117  }
118  rand = rand0*G4UniformRand();
119  energy = maxE*G4UniformRand();
120  testit = Prob(energy, maxE, theTotalCount);
121  }
122  while(rand > testit); // Loop checking, 11.05.2015, T. Koi
123  result->SetKineticEnergy(energy);
124 
125 // now do random direction
126  G4double cosTh = 2.*G4UniformRand()-1.;
127  G4double phi = twopi*G4UniformRand();
128  G4double theta = std::acos(cosTh);
129  G4double sinth = std::sin(theta);
130  G4double mtot = result->GetTotalMomentum();
131  G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*std::cos(theta) );
132  result->SetMomentum(tempVector);
134  result->Lorentz(*result, -1.*aCMS);
135  return result;
136 }
G4double G4ParticleHPJENDLHEData::G4double result
G4double GetTotalMomentum() const
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
void SetKineticEnergy(const G4double en)
void SetMomentum(const G4double x, const G4double y, const G4double z)
int G4int
Definition: G4Types.hh:78
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
static constexpr double twopi
Definition: G4SIunits.hh:76
#define G4UniformRand()
Definition: Randomize.hh:97
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
static G4Triton * Triton()
Definition: G4Triton.cc:95
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
static G4Positron * Positron()
Definition: G4Positron.cc:94
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double energy(const ThreeVector &p, const G4double m)
static G4Electron * Electron()
Definition: G4Electron.cc:94
#define G4endl
Definition: G4ios.hh:61
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
double G4double
Definition: G4Types.hh:76
static G4He3 * He3()
Definition: G4He3.cc:94
G4double GetMass() const

Here is the call graph for this function:

Here is the caller graph for this function:


The documentation for this class was generated from the following files: