Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4GDecay3 Class Reference

#include <G4GDecay3.hh>

Public Member Functions

 G4GDecay3 ()
 
 G4GDecay3 (const G4double &pMass, const G4double &dMass0, const G4double &dMass1, const G4double &dMass2)
 
 ~G4GDecay3 ()
 
std::vector< G4ThreeVectorGetThreeBodyMomenta ()
 

Detailed Description

Definition at line 43 of file G4GDecay3.hh.

Constructor & Destructor Documentation

G4GDecay3::G4GDecay3 ( )
inline

Definition at line 46 of file G4GDecay3.hh.

46 {;}
G4GDecay3::G4GDecay3 ( const G4double pMass,
const G4double dMass0,
const G4double dMass1,
const G4double dMass2 
)

Definition at line 41 of file G4GDecay3.cc.

43  : loopMax(100), parentMass(pMass), mDaughter0(dMass0), mDaughter1(dMass1),
44  mDaughter2(dMass2), pDaughter0(0.), pDaughter1(0.), pDaughter2(0.) {;}
G4GDecay3::~G4GDecay3 ( )
inline

Definition at line 49 of file G4GDecay3.hh.

49 {;}

Member Function Documentation

std::vector< G4ThreeVector > G4GDecay3::GetThreeBodyMomenta ( )

Definition at line 98 of file G4GDecay3.cc.

References G4cerr, G4endl, G4UniformRand, CLHEP::Hep3Vector::setX(), CLHEP::Hep3Vector::setY(), CLHEP::Hep3Vector::setZ(), and python.hepunit::twopi.

99 {
100 
101  std::vector<G4ThreeVector> pVect;
102 
103  if (CalculateMomentumMagnitudes() ) {
104 
105  // Calculate directions
106  G4double costheta = 2.*G4UniformRand()-1.;
107  G4double sintheta = std::sqrt((1.0-costheta)*(1.0+costheta));
108  G4double phi = twopi*G4UniformRand();
109  G4double sinphi = std::sin(phi);
110  G4double cosphi = std::cos(phi);
111  G4ThreeVector direction0(sintheta*cosphi, sintheta*sinphi, costheta);
112 
113  G4double costhetan = (pDaughter1*pDaughter1 - pDaughter2*pDaughter2
114  - pDaughter0*pDaughter0)/(2.0*pDaughter2*pDaughter0);
115  G4double sinthetan = std::sqrt((1.0-costhetan)*(1.0+costhetan));
116  G4double phin = twopi*G4UniformRand();
117  G4double sinphin = std::sin(phin);
118  G4double cosphin = std::cos(phin);
119  G4ThreeVector direction2;
120  direction2.setX(sinthetan*cosphin*costheta*cosphi -
121  sinthetan*sinphin*sinphi + costhetan*sintheta*cosphi);
122  direction2.setY(sinthetan*cosphin*costheta*sinphi +
123  sinthetan*sinphin*cosphi + costhetan*sintheta*sinphi);
124  direction2.setZ(-sinthetan*cosphin*sintheta + costhetan*costheta);
125 
126  // Return momentum vectors
127  pVect.push_back(pDaughter0*direction0);
128  pVect.push_back(-direction0*pDaughter0 - direction2*pDaughter2);
129  pVect.push_back(pDaughter2*direction2);
130 
131  } else {
132  G4cerr << "G4GDecay::GetThreeBodyMomenta: " << loopMax
133  << " or more loops in momentum magnitude calculation " << G4endl;
134  }
135 
136  return pVect;
137 }
void setY(double)
void setZ(double)
void setX(double)
#define G4UniformRand()
Definition: Randomize.hh:87
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4GLOB_DLL std::ostream G4cerr

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