Geant4-11
Public Member Functions | Protected Member Functions | Private Attributes
G4VHadDecayAlgorithm Class Referenceabstract

#include <G4VHadDecayAlgorithm.hh>

Inheritance diagram for G4VHadDecayAlgorithm:
G4CascadeFinalStateAlgorithm G4VHadPhaseSpaceAlgorithm G4HadPhaseSpaceGenbod G4HadPhaseSpaceKopylov G4HadPhaseSpaceNBodyAsai

Public Member Functions

 G4VHadDecayAlgorithm (const G4String &algName, G4int verbose=0)
 
void Generate (G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)
 
const G4StringGetName () const
 
G4int GetVerboseLevel () const
 
virtual void SetVerboseLevel (G4int verbose)
 
virtual ~G4VHadDecayAlgorithm ()
 

Protected Member Functions

virtual void GenerateMultiBody (G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)=0
 
virtual void GenerateTwoBody (G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)=0
 
virtual G4bool IsDecayAllowed (G4double initialMass, const std::vector< G4double > &masses) const
 
void PrintVector (const std::vector< G4double > &v, const G4String &name, std::ostream &os) const
 
G4double TwoBodyMomentum (G4double M0, G4double M1, G4double M2) const
 
G4double UniformPhi () const
 
G4double UniformTheta () const
 

Private Attributes

G4String name
 
G4int verboseLevel
 

Detailed Description

Definition at line 42 of file G4VHadDecayAlgorithm.hh.

Constructor & Destructor Documentation

◆ G4VHadDecayAlgorithm()

G4VHadDecayAlgorithm::G4VHadDecayAlgorithm ( const G4String algName,
G4int  verbose = 0 
)
inline

Definition at line 44 of file G4VHadDecayAlgorithm.hh.

45 : name(algName), verboseLevel(verbose) {;}

◆ ~G4VHadDecayAlgorithm()

virtual G4VHadDecayAlgorithm::~G4VHadDecayAlgorithm ( )
inlinevirtual

Definition at line 46 of file G4VHadDecayAlgorithm.hh.

46{;}

Member Function Documentation

◆ Generate()

void G4VHadDecayAlgorithm::Generate ( G4double  initialMass,
const std::vector< G4double > &  masses,
std::vector< G4LorentzVector > &  finalState 
)

Definition at line 48 of file G4VHadDecayAlgorithm.cc.

50 {
51 if (verboseLevel) G4cout << GetName() << "::Generate" << G4endl;
52
53 // Initialization and sanity check
54 finalState.clear();
55 if (!IsDecayAllowed(initialMass, masses)) return;
56
57 // Allow different procedures for two-body or N-body distributions
58 if (masses.size() == 2U)
59 GenerateTwoBody(initialMass, masses, finalState);
60 else
61 GenerateMultiBody(initialMass, masses, finalState);
62}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
virtual void GenerateTwoBody(G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)=0
const G4String & GetName() const
virtual G4bool IsDecayAllowed(G4double initialMass, const std::vector< G4double > &masses) const
virtual void GenerateMultiBody(G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)=0

References G4cout, G4endl, GenerateMultiBody(), GenerateTwoBody(), GetName(), IsDecayAllowed(), and verboseLevel.

Referenced by G4HadDecayGenerator::Generate().

◆ GenerateMultiBody()

virtual void G4VHadDecayAlgorithm::GenerateMultiBody ( G4double  initialMass,
const std::vector< G4double > &  masses,
std::vector< G4LorentzVector > &  finalState 
)
protectedpure virtual

◆ GenerateTwoBody()

virtual void G4VHadDecayAlgorithm::GenerateTwoBody ( G4double  initialMass,
const std::vector< G4double > &  masses,
std::vector< G4LorentzVector > &  finalState 
)
protectedpure virtual

◆ GetName()

const G4String & G4VHadDecayAlgorithm::GetName ( ) const
inline

◆ GetVerboseLevel()

G4int G4VHadDecayAlgorithm::GetVerboseLevel ( ) const
inline

◆ IsDecayAllowed()

G4bool G4VHadDecayAlgorithm::IsDecayAllowed ( G4double  initialMass,
const std::vector< G4double > &  masses 
) const
protectedvirtual

Definition at line 67 of file G4VHadDecayAlgorithm.cc.

69 {
70 G4bool okay =
71 (initialMass > 0. && masses.size() >= 2 &&
72 initialMass >= std::accumulate(masses.begin(),masses.end(),0.));
73
74 if (verboseLevel) {
75 G4cout << GetName() << "::IsDecayAllowed? initialMass " << initialMass
76 << " " << masses.size() << " masses sum "
77 << std::accumulate(masses.begin(),masses.end(),0.) << G4endl;
78
79 if (verboseLevel>1) PrintVector(masses," ",G4cout);
80
81 G4cout << " Returning " << okay << G4endl;
82 }
83
84 return okay;
85}
bool G4bool
Definition: G4Types.hh:86
void PrintVector(const std::vector< G4double > &v, const G4String &name, std::ostream &os) const

References G4cout, G4endl, GetName(), PrintVector(), and verboseLevel.

Referenced by Generate().

◆ PrintVector()

void G4VHadDecayAlgorithm::PrintVector ( const std::vector< G4double > &  v,
const G4String name,
std::ostream &  os 
) const
protected

Definition at line 121 of file G4VHadDecayAlgorithm.cc.

123 {
124 os << " " << vname << "(" << v.size() << ") ";
125 std::copy(v.begin(), v.end(), std::ostream_iterator<G4double>(os, " "));
126 os << std::endl;
127}
void copy(G4double dst[], const G4double src[], size_t size=G4FieldTrack::ncompSVEC)
Definition: G4FieldUtils.cc:98

References field_utils::copy().

Referenced by G4HadPhaseSpaceGenbod::FillEnergySteps(), G4HadPhaseSpaceGenbod::FillRandomBuffer(), G4HadPhaseSpaceNBodyAsai::GenerateMultiBody(), G4HadPhaseSpaceGenbod::Initialize(), and IsDecayAllowed().

◆ SetVerboseLevel()

virtual void G4VHadDecayAlgorithm::SetVerboseLevel ( G4int  verbose)
inlinevirtual

◆ TwoBodyMomentum()

G4double G4VHadDecayAlgorithm::TwoBodyMomentum ( G4double  M0,
G4double  M1,
G4double  M2 
) const
protected

Definition at line 90 of file G4VHadDecayAlgorithm.cc.

91 {
92 G4double PSQ = (M0+M1+M2)*(M0+M1-M2)*(M0-M1+M2)*(M0-M1-M2);
93 if (PSQ < 0.) {
94 G4cout << GetName() << ": problem of decay of M(GeV) " << M0/GeV
95 << " to M1(GeV) " << M1/GeV << " and M2(GeV) " << M2/GeV
96 << " PSQ(MeV) " << PSQ/MeV << " < 0" << G4endl;
97 // exception only if the problem is numerically significant
98 if (PSQ < -CLHEP::eV) {
99 throw G4HadronicException(__FILE__, __LINE__,"Error in decay kinematics");
100 }
101
102 PSQ = 0.;
103 }
104
105 return std::sqrt(PSQ)/(2.*M0);
106}
static constexpr double GeV
Definition: G4SIunits.hh:203
static constexpr double MeV
Definition: G4SIunits.hh:200
double G4double
Definition: G4Types.hh:83
static constexpr double eV

References CLHEP::eV, G4cout, G4endl, GetName(), GeV, and MeV.

Referenced by G4HadPhaseSpaceGenbod::ComputeWeightScale(), G4HadPhaseSpaceGenbod::FillEnergySteps(), G4CascadeFinalStateAlgorithm::FillUsingKopylov(), G4HadPhaseSpaceKopylov::GenerateMultiBody(), G4HadPhaseSpaceNBodyAsai::GenerateMultiBody(), G4CascadeFinalStateAlgorithm::GenerateTwoBody(), and G4VHadPhaseSpaceAlgorithm::GenerateTwoBody().

◆ UniformPhi()

G4double G4VHadDecayAlgorithm::UniformPhi ( ) const
protected

Definition at line 114 of file G4VHadDecayAlgorithm.cc.

114 {
115 return twopi*G4UniformRand();
116}
static constexpr double twopi
Definition: G4SIunits.hh:56
#define G4UniformRand()
Definition: Randomize.hh:52

References G4UniformRand, and twopi.

Referenced by G4CascadeFinalStateAlgorithm::FillUsingKopylov(), G4CascadeFinalStateAlgorithm::GenerateTwoBody(), and G4VHadPhaseSpaceAlgorithm::UniformVector().

◆ UniformTheta()

G4double G4VHadDecayAlgorithm::UniformTheta ( ) const
protected

Definition at line 110 of file G4VHadDecayAlgorithm.cc.

110 {
111 return std::acos(2.0*G4UniformRand() - 1.0);
112}

References G4UniformRand.

Referenced by G4CascadeFinalStateAlgorithm::FillUsingKopylov(), and G4VHadPhaseSpaceAlgorithm::UniformVector().

Field Documentation

◆ name

G4String G4VHadDecayAlgorithm::name
private

◆ verboseLevel

G4int G4VHadDecayAlgorithm::verboseLevel
private

Definition at line 86 of file G4VHadDecayAlgorithm.hh.

Referenced by Generate(), GetVerboseLevel(), IsDecayAllowed(), and SetVerboseLevel().


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