105{
106 G4ReactionProduct* res = nullptr;
107
108 G4VPreCompoundFragment * thePreFragment =
109 theFragmentsVector->ChooseFragment();
110 if (thePreFragment == nullptr)
111 {
112 G4cout <<
"G4PreCompoundEmission::PerformEmission : "
113 << "I couldn't choose a fragment\n"
114 << "while trying to de-excite\n"
116 throw G4HadronicException(__FILE__, __LINE__, "");
117 return res;
118 }
119
120
122 kinEnergy = std::max(kinEnergy, 0.0);
123
124
125 if(fUseAngularGenerator) {
126 AngularDistribution(thePreFragment,aFragment,kinEnergy);
127 } else {
129 std::sqrt(kinEnergy*(kinEnergy + 2.0*thePreFragment->
GetNuclearMass()));
131 }
132
133
135
136
137 G4LorentzVector Emitted4Momentum(theFinalMomentum,EmittedMass + kinEnergy);
138
139 if (2 < fVerbose) {
141 << thePreFragment->
GetZ() <<
" A=" << thePreFragment->
GetA()
142 << " Ekin(MeV)=" << kinEnergy << " 4-mom C.M.S.: "
143 << Emitted4Momentum <<
G4endl;
144 }
145
146
149
150
152
153
154
155
156 Rest4Momentum -= Emitted4Momentum;
157
158
159
160
161
164
165
167 thePreFragment->
GetA());
168
170 thePreFragment->
GetZ());
171
172
173
175
176
178
179
182
183 return res;
184}
CLHEP::HepLorentzVector G4LorentzVector
G4ThreeVector G4RandomDirection()
G4GLOB_DLL std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
G4int GetNumberOfParticles() const
void SetZandA_asInt(G4int Znew, G4int Anew, G4int Lnew=0)
void SetNumberOfCharged(G4int value)
const G4LorentzVector & GetMomentum() const
void SetCreatorModelID(G4int value)
void SetMomentum(const G4LorentzVector &value)
void SetNumberOfParticles(G4int value)
G4int GetNumberOfCharged() const
void SetCreatorModelID(const G4int mod)
G4double GetNuclearMass() const
virtual G4double SampleKineticEnergy(const G4Fragment &)
void SetMomentum(const G4LorentzVector &lv)
G4ReactionProduct * GetReactionProduct() const