#include <G4PreCompoundEmission.hh>
Public Member Functions | |
G4PreCompoundEmission () | |
~G4PreCompoundEmission () | |
void | SetDefaultModel () |
void | SetHETCModel () |
G4ReactionProduct * | PerformEmission (G4Fragment &aFragment) |
G4double | GetTotalProbability (const G4Fragment &aFragment) |
void | Initialize (const G4Fragment &aFragment) |
void | SetOPTxs (G4int) |
void | UseSICB (G4bool) |
Definition at line 52 of file G4PreCompoundEmission.hh.
G4PreCompoundEmission::G4PreCompoundEmission | ( | ) |
Definition at line 55 of file G4PreCompoundEmission.cc.
References G4PreCompoundParameters::GetAddress(), G4VPreCompoundEmissionFactory::GetFragmentVector(), and G4Pow::GetInstance().
00056 { 00057 theFragmentsFactory = new G4PreCompoundEmissionFactory(); 00058 theFragmentsVector = 00059 new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector()); 00060 g4pow = G4Pow::GetInstance(); 00061 theParameters = G4PreCompoundParameters::GetAddress(); 00062 }
G4PreCompoundEmission::~G4PreCompoundEmission | ( | ) |
Definition at line 64 of file G4PreCompoundEmission.cc.
00065 { 00066 if (theFragmentsFactory) { delete theFragmentsFactory; } 00067 if (theFragmentsVector) { delete theFragmentsVector; } 00068 }
G4double G4PreCompoundEmission::GetTotalProbability | ( | const G4Fragment & | aFragment | ) | [inline] |
Definition at line 104 of file G4PreCompoundEmission.hh.
References G4PreCompoundFragmentVector::CalculateProbabilities().
Referenced by G4PreCompoundModel::DeExcite().
00105 { 00106 return theFragmentsVector->CalculateProbabilities(aFragment); 00107 }
void G4PreCompoundEmission::Initialize | ( | const G4Fragment & | aFragment | ) | [inline] |
Definition at line 110 of file G4PreCompoundEmission.hh.
References G4PreCompoundFragmentVector::Initialize().
Referenced by G4PreCompoundModel::DeExcite().
00111 { 00112 theFragmentsVector->Initialize(aFragment); 00113 }
G4ReactionProduct * G4PreCompoundEmission::PerformEmission | ( | G4Fragment & | aFragment | ) |
Definition at line 102 of file G4PreCompoundEmission.cc.
References G4PreCompoundFragmentVector::ChooseFragment(), G4cout, G4endl, G4VPreCompoundFragment::GetA(), G4VPreCompoundFragment::GetKineticEnergy(), G4Fragment::GetMomentum(), G4VPreCompoundFragment::GetNuclearMass(), G4Fragment::GetNumberOfCharged(), G4Fragment::GetNumberOfParticles(), G4VPreCompoundFragment::GetReactionProduct(), G4VPreCompoundFragment::GetRestA(), G4VPreCompoundFragment::GetRestZ(), G4VPreCompoundFragment::GetZ(), G4Fragment::SetMomentum(), G4VPreCompoundFragment::SetMomentum(), G4Fragment::SetNumberOfCharged(), G4Fragment::SetNumberOfParticles(), and G4Fragment::SetZandA_asInt().
Referenced by G4PreCompoundModel::DeExcite().
00103 { 00104 // Choose a Fragment for emission 00105 G4VPreCompoundFragment * thePreFragment = theFragmentsVector->ChooseFragment(); 00106 if (thePreFragment == 0) 00107 { 00108 G4cout << "G4PreCompoundEmission::PerformEmission : I couldn't choose a fragment\n" 00109 << "while trying to de-excite\n" 00110 << aFragment << G4endl; 00111 throw G4HadronicException(__FILE__, __LINE__, ""); 00112 } 00113 00114 //G4cout << "Chosen fragment: " << G4endl; 00115 //G4cout << *thePreFragment << G4endl; 00116 00117 // Kinetic Energy of emitted fragment 00118 G4double kinEnergyOfEmittedFragment = thePreFragment->GetKineticEnergy(aFragment); 00119 // if(kinEnergyOfEmittedFragment < MeV) { 00120 // G4cout << "Chosen fragment: " << G4endl; 00121 // G4cout << *thePreFragment << G4endl; 00122 // G4cout << "Ekin= " << kinEnergyOfEmittedFragment << G4endl; 00123 // } 00124 if(kinEnergyOfEmittedFragment < 0.0) { kinEnergyOfEmittedFragment = 0.0; } 00125 00126 // Calculate the fragment momentum (three vector) 00127 AngularDistribution(thePreFragment,aFragment,kinEnergyOfEmittedFragment); 00128 00129 // Mass of emittef fragment 00130 G4double EmittedMass = thePreFragment->GetNuclearMass(); 00131 // Now we can calculate the four momentum 00132 // both options are valid and give the same result but 2nd one is faster 00133 G4LorentzVector Emitted4Momentum(theFinalMomentum, 00134 EmittedMass + kinEnergyOfEmittedFragment); 00135 00136 // Perform Lorentz boost 00137 G4LorentzVector Rest4Momentum = aFragment.GetMomentum(); 00138 Emitted4Momentum.boost(Rest4Momentum.boostVector()); 00139 00140 // Set emitted fragment momentum 00141 thePreFragment->SetMomentum(Emitted4Momentum); 00142 00143 // NOW THE RESIDUAL NUCLEUS 00144 // ------------------------ 00145 00146 Rest4Momentum -= Emitted4Momentum; 00147 00148 // Update nucleus parameters: 00149 // -------------------------- 00150 00151 // Z and A 00152 aFragment.SetZandA_asInt(thePreFragment->GetRestZ(), 00153 thePreFragment->GetRestA()); 00154 00155 // Number of excitons 00156 aFragment.SetNumberOfParticles(aFragment.GetNumberOfParticles()- 00157 thePreFragment->GetA()); 00158 // Number of charges 00159 aFragment.SetNumberOfCharged(aFragment.GetNumberOfCharged()- 00160 thePreFragment->GetZ()); 00161 00162 // Update nucleus momentum 00163 // A check on consistence of Z, A, and mass will be performed 00164 aFragment.SetMomentum(Rest4Momentum); 00165 00166 // Create a G4ReactionProduct 00167 G4ReactionProduct * MyRP = thePreFragment->GetReactionProduct(); 00168 00169 // if(kinEnergyOfEmittedFragment < MeV) { 00170 // G4cout << "G4PreCompoundEmission::Fragment emitted" << G4endl; 00171 // G4cout << thePreFragment << G4endl; 00172 // } 00173 return MyRP; 00174 }
void G4PreCompoundEmission::SetDefaultModel | ( | ) |
Definition at line 70 of file G4PreCompoundEmission.cc.
References G4VPreCompoundEmissionFactory::GetFragmentVector(), and G4PreCompoundFragmentVector::SetVector().
Referenced by G4PreCompoundModel::G4PreCompoundModel(), and G4PreCompoundModel::UseDefaultEmission().
00071 { 00072 if (theFragmentsFactory) { delete theFragmentsFactory; } 00073 theFragmentsFactory = new G4PreCompoundEmissionFactory(); 00074 if (theFragmentsVector) 00075 { 00076 theFragmentsVector->SetVector(theFragmentsFactory->GetFragmentVector()); 00077 } 00078 else 00079 { 00080 theFragmentsVector = 00081 new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector()); 00082 } 00083 return; 00084 }
void G4PreCompoundEmission::SetHETCModel | ( | ) |
Definition at line 86 of file G4PreCompoundEmission.cc.
References G4VPreCompoundEmissionFactory::GetFragmentVector(), and G4PreCompoundFragmentVector::SetVector().
Referenced by G4PreCompoundModel::G4PreCompoundModel(), and G4PreCompoundModel::UseHETCEmission().
00087 { 00088 if (theFragmentsFactory) delete theFragmentsFactory; 00089 theFragmentsFactory = new G4HETCEmissionFactory(); 00090 if (theFragmentsVector) 00091 { 00092 theFragmentsVector->SetVector(theFragmentsFactory->GetFragmentVector()); 00093 } 00094 else 00095 { 00096 theFragmentsVector = 00097 new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector()); 00098 } 00099 return; 00100 }
void G4PreCompoundEmission::SetOPTxs | ( | G4int | ) | [inline] |
Definition at line 115 of file G4PreCompoundEmission.hh.
References G4PreCompoundFragmentVector::SetOPTxs().
Referenced by G4PreCompoundModel::G4PreCompoundModel(), and G4PreCompoundModel::SetOPTxs().
00116 { 00117 theFragmentsVector->SetOPTxs(opt); 00118 }
void G4PreCompoundEmission::UseSICB | ( | G4bool | ) | [inline] |
Definition at line 120 of file G4PreCompoundEmission.hh.
References G4PreCompoundFragmentVector::UseSICB().
Referenced by G4PreCompoundModel::G4PreCompoundModel(), and G4PreCompoundModel::UseSICB().
00121 { 00122 theFragmentsVector->UseSICB(use); 00123 }