94{
97 fTime = projectile.GetGlobalTime();
99
100 G4double muBindingEnergy = projectile.GetBoundEnergy();
101
105
106
107
108
109
110
111 G4double muEnergy = fMuMass + muBindingEnergy;
112 G4double muMom =std::sqrt(muBindingEnergy*(muBindingEnergy + 2.0*fMuMass));
113 G4double availableEnergy = massA + fMuMass - muBindingEnergy;
115
118
120
121
122
123 if((1 ==
Z && 1 ==
A) || (2 ==
Z && 3 ==
A)) {
124
126 if(1 ==
Z) { pd = fNeutron; }
128
129
130
131
133 residualMass*residualMass/availableEnergy);
134
137 nudir *= -1.0;
138 AddNewParticle(pd, nudir, availableEnergy - e - residualMass);
139
140
141
142
143 }
else if((1 ==
Z && 2 ==
A) || (2 ==
Z && 4 ==
A)) {
144
146 if(1 ==
Z) { pd = fNeutron; }
148
149 availableEnergy -= neutron_mass_c2 - nenergy;
151
152
153
154
156 residualMass*residualMass/availableEnergy);
157
160 nudir *= -1.0;
161 AddNewParticle(pd, nudir, availableEnergy - e - residualMass);
162
163
165 AddNewParticle(fNeutron, nudir, nenergy);
166
167 } else {
168
169
170
173
174
177 const std::vector<G4Nucleon>& nucleons= fNucleus.
GetNucleons();
179
180 G4int reentryCount = 0;
181
182 do {
183 ++reentryCount;
185 do {
187 pDef = nucleons[index].GetDefinition();
188 } while(pDef != fProton);
190
191
194
196 G4double Enu = 0.5*(Ecms - neutron_mass_c2*neutron_mass_c2/Ecms);
197 eEx = 0.0;
198
199 if(Enu > 0.0) {
200
202
203
205 momResidual = momInitial - momNu;
206 eEx = momResidual.
mag() - residualMass;
207 if(eEx < 0.0 && eEx + nenergy >= 0.0) {
208 momResidual.
set(0.0, 0.0, 0.0, residualMass);
209 eEx = 0.0;
210 }
211 }
212
213
214 if(reentryCount > 100 && eEx < 0.0) {
217 ed <<
"Target Z= " <<
Z
218 <<
" A= " <<
A <<
" Eex(MeV)= " << eEx/MeV <<
G4endl;
219 ed << " ApplyYourself does not completed after 100 attempts -"
220 << " excitation energy is set to zero";
221 G4Exception(
"G4MuMinusCapturePrecompound::ApplyYourself",
"had006",
223 momResidual.
set(0.0, 0.0, 0.0, residualMass);
224 eEx = 0.0;
225 }
226
227 } while(eEx <= 0.0);
228
231
233 initialState.SetNumberOfExcitedParticle(2,0);
234 initialState.SetNumberOfHoles(1,1);
235
236
238 size_t n = rpv->size();
239 for(
size_t i=0; i<
n; ++i) {
241
242
243 fTime = time0 + rp->
GetTOF();
246 delete rp;
247 }
248 delete rpv;
249 }
251 G4cout <<
"G4MuMinusCapturePrecompound::ApplyYourself: Nsec= "
253 <<" E0(MeV)= " <<availableEnergy/MeV
254 <<" Mres(GeV)= " <<residualMass/GeV
256
257 return &result;
258}
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4ThreeVector G4RandomDirection()
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4GLOB_DLL std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
void set(double x, double y, double z, double t)
const std::vector< G4Nucleon > & GetNucleons()
void Init(G4int theA, G4int theZ, G4int numberOfLambdas=0)
void SetStatusChange(G4HadFinalStateStatus aS)
std::size_t GetNumberOfSecondaries() const
const G4String & GetModelName() const
static G4NeutrinoMu * NeutrinoMu()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetKineticEnergy() const
const G4ParticleDefinition * GetDefinition() const
G4ThreeVector GetMomentum() const
static G4Triton * Triton()
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment)=0