Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4PreCompoundEmission Class Reference

#include <G4PreCompoundEmission.hh>

Public Member Functions

 G4PreCompoundEmission ()
 
 ~G4PreCompoundEmission ()
 
void SetDefaultModel ()
 
void SetHETCModel ()
 
G4ReactionProductPerformEmission (G4Fragment &aFragment)
 
G4double GetTotalProbability (const G4Fragment &aFragment)
 
void SetOPTxs (G4int)
 
void UseSICB (G4bool)
 

Detailed Description

Definition at line 50 of file G4PreCompoundEmission.hh.

Constructor & Destructor Documentation

G4PreCompoundEmission::G4PreCompoundEmission ( )

Definition at line 58 of file G4PreCompoundEmission.cc.

59 {
60  theFragmentsFactory = new G4PreCompoundEmissionFactory();
61  theFragmentsVector =
62  new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector());
63  g4calc = G4Pow::GetInstance();
64  G4DeexPrecoParameters* param =
66  fLevelDensity = param->GetLevelDensity();
67  fFermiEnergy = param->GetFermiEnergy();
68 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
std::vector< G4VPreCompoundFragment * > * GetFragmentVector()
G4double GetLevelDensity() const
G4double GetFermiEnergy() const
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()

Here is the call graph for this function:

G4PreCompoundEmission::~G4PreCompoundEmission ( )

Definition at line 70 of file G4PreCompoundEmission.cc.

71 {
72  delete theFragmentsFactory;
73  delete theFragmentsVector;
74 }

Member Function Documentation

G4double G4PreCompoundEmission::GetTotalProbability ( const G4Fragment aFragment)
inline

Definition at line 101 of file G4PreCompoundEmission.hh.

102 {
103  return theFragmentsVector->CalculateProbabilities(aFragment);
104 }
G4double CalculateProbabilities(const G4Fragment &aFragment)

Here is the call graph for this function:

Here is the caller graph for this function:

G4ReactionProduct * G4PreCompoundEmission::PerformEmission ( G4Fragment aFragment)

Definition at line 101 of file G4PreCompoundEmission.cc.

102 {
103  // Choose a Fragment for emission
104  G4VPreCompoundFragment * thePreFragment =
105  theFragmentsVector->ChooseFragment();
106  if (thePreFragment == 0)
107  {
108  G4cout << "G4PreCompoundEmission::PerformEmission : "
109  << "I couldn't choose a fragment\n"
110  << "while trying to de-excite\n"
111  << aFragment << G4endl;
112  throw G4HadronicException(__FILE__, __LINE__, "");
113  }
114 
115  //G4cout << "Chosen fragment: " << G4endl;
116  //G4cout << *thePreFragment << G4endl;
117 
118  // Kinetic Energy of emitted fragment
119  G4double kinEnergy = thePreFragment->SampleKineticEnergy(aFragment);
120  // if(kinEnergy < MeV) {
121  // G4cout << "Chosen fragment: " << G4endl;
122  // G4cout << *thePreFragment << G4endl;
123  // G4cout << "Ekin= " << kinEnergy << G4endl;
124  // }
125  kinEnergy = std::max(kinEnergy, 0.0);
126 
127  // Calculate the fragment momentum (three vector)
128  AngularDistribution(thePreFragment,aFragment,kinEnergy);
129 
130  // Mass of emittef fragment
131  G4double EmittedMass = thePreFragment->GetNuclearMass();
132  // Now we can calculate the four momentum
133  // both options are valid and give the same result but 2nd one is faster
134  G4LorentzVector Emitted4Momentum(theFinalMomentum,EmittedMass + kinEnergy);
135 
136  // Perform Lorentz boost
137  G4LorentzVector Rest4Momentum = aFragment.GetMomentum();
138  Emitted4Momentum.boost(Rest4Momentum.boostVector());
139 
140  // Set emitted fragment momentum
141  thePreFragment->SetMomentum(Emitted4Momentum);
142 
143  // NOW THE RESIDUAL NUCLEUS
144  // ------------------------
145 
146  Rest4Momentum -= Emitted4Momentum;
147 
148  // Update nucleus parameters:
149  // --------------------------
150 
151  // Z and A
152  aFragment.SetZandA_asInt(thePreFragment->GetRestZ(),
153  thePreFragment->GetRestA());
154 
155  // Number of excitons
156  aFragment.SetNumberOfParticles(aFragment.GetNumberOfParticles()-
157  thePreFragment->GetA());
158  // Number of charges
159  aFragment.SetNumberOfCharged(aFragment.GetNumberOfCharged()-
160  thePreFragment->GetZ());
161 
162  // Update nucleus momentum
163  // A check on consistence of Z, A, and mass will be performed
164  aFragment.SetMomentum(Rest4Momentum);
165 
166  // Create a G4ReactionProduct
167  G4ReactionProduct * MyRP = thePreFragment->GetReactionProduct();
168 
169  // if(kinEnergy < MeV) {
170  // G4cout << "G4PreCompoundEmission::Fragment emitted" << G4endl;
171  // G4cout << *thePreFragment << G4endl;
172  // }
173  return MyRP;
174 }
Hep3Vector boostVector() const
G4ReactionProduct * GetReactionProduct() const
G4int GetA() const
G4int GetNumberOfParticles() const
Definition: G4Fragment.hh:345
void SetMomentum(const G4LorentzVector &value)
G4GLOB_DLL std::ostream G4cout
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:307
HepLorentzVector & boost(double, double, double)
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:312
G4int GetRestZ() const
void SetNumberOfParticles(G4int value)
Definition: G4Fragment.hh:384
G4VPreCompoundFragment * ChooseFragment()
G4double GetNuclearMass() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:276
virtual G4double SampleKineticEnergy(const G4Fragment &aFragment)=0
G4int GetRestA() const
#define G4endl
Definition: G4ios.hh:61
G4int GetZ() const
void SetNumberOfCharged(G4int value)
Definition: G4Fragment.hh:389
double G4double
Definition: G4Types.hh:76
G4int GetNumberOfCharged() const
Definition: G4Fragment.hh:350

Here is the call graph for this function:

Here is the caller graph for this function:

void G4PreCompoundEmission::SetDefaultModel ( )

Definition at line 76 of file G4PreCompoundEmission.cc.

77 {
78  if (theFragmentsFactory) { delete theFragmentsFactory; }
79  theFragmentsFactory = new G4PreCompoundEmissionFactory();
80  if (theFragmentsVector) {
81  theFragmentsVector->SetVector(theFragmentsFactory->GetFragmentVector());
82  } else {
83  theFragmentsVector =
84  new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector());
85  }
86 }
std::vector< G4VPreCompoundFragment * > * GetFragmentVector()

Here is the call graph for this function:

Here is the caller graph for this function:

void G4PreCompoundEmission::SetHETCModel ( )

Definition at line 88 of file G4PreCompoundEmission.cc.

89 {
90  if (theFragmentsFactory) delete theFragmentsFactory;
91  theFragmentsFactory = new G4HETCEmissionFactory();
92  if (theFragmentsVector) {
93  theFragmentsVector->SetVector(theFragmentsFactory->GetFragmentVector());
94  } else {
95  theFragmentsVector =
96  new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector());
97  }
98 }
std::vector< G4VPreCompoundFragment * > * GetFragmentVector()

Here is the call graph for this function:

Here is the caller graph for this function:

void G4PreCompoundEmission::SetOPTxs ( G4int  opt)
inline

Definition at line 106 of file G4PreCompoundEmission.hh.

107 {
108  theFragmentsVector->SetOPTxs(opt);
109 }

Here is the call graph for this function:

Here is the caller graph for this function:

void G4PreCompoundEmission::UseSICB ( G4bool  use)
inline

Definition at line 111 of file G4PreCompoundEmission.hh.

112 {
113  theFragmentsVector->UseSICB(use);
114 }

Here is the call graph for this function:


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