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
119
120
121 if((1 == Z && 1 == A) || (2 == Z && 3 == A)) {
122
124 if(1 == Z) { pd = fNeutron; }
126
127
128
129
131 residualMass*residualMass/availableEnergy);
132
135 nudir *= -1.0;
136 AddNewParticle(pd, nudir, availableEnergy - e - residualMass);
137
138
139 } else {
140
141
142
143
144
145
146
147
148
149
150
151
152
153
156
157
160 const std::vector<G4Nucleon>& nucleons= fNucleus.
GetNucleons();
162
164 G4int reentryCount = 0;
165
166 do {
167 ++reentryCount;
169 do {
171 pDef = nucleons[index].GetDefinition();
172 } while(pDef != fProton);
174
175
178
180 G4double Enu = 0.5*(Ecms - neutron_mass_c2*neutron_mass_c2/Ecms);
181 eEx = 0.0;
182
183 if(Enu > 0.0) {
184
186
187
189 momResidual = momInitial - momNu;
190 eEx = momResidual.
mag() - residualMass;
191
192
193
194 if(eEx > 0.0) {
195 G4double eth = residualMass - massA + fThreshold + 2*neutron_mass_c2;
196 if(Ecms - Enu > eth) {
197 theCMS -= momNu;
200 AddNewParticle(fNeutron, dir, ekin);
201 momResidual -=
203 --Z;
204 --A;
206 nneutrons = 0;
207 }
208 }
209 }
210 if(Enu <= 0.0 && eEx <= 0.0 && reentryCount > 100) {
213 ed << "Target Z= " << Z
215 ed <<
" ApplyYourself does not completed after 100 attempts" <<
G4endl;
216 G4Exception(
"G4MuMinusCapturePrecompound::AtRestDoIt",
"had006",
218 }
219 } while(eEx <= 0.0);
220
223
225 initialState.SetNumberOfExcitedParticle(nneutrons,0);
226 initialState.SetNumberOfHoles(1,1);
227
228
230 size_t n = rpv->size();
231 for(
size_t i=0; i<
n; ++i) {
233
234
235 fTime = time0 + rp->
GetTOF();
238 delete rp;
239 }
240 delete rpv;
241 }
243 G4cout <<
"G4MuMinusCapturePrecompound::ApplyYourself: Nsec= "
245 <<" E0(MeV)= " <<availableEnergy/MeV
246 <<" Mres(GeV)= " <<residualMass/GeV
248
249 return &result;
250}
G4ThreeVector G4RandomDirection()
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4DLLIMPORT std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
void set(double x, double y, double z, double t)
G4LorentzVector Get4Momentum() const
const std::vector< G4Nucleon > & GetNucleons()
void Init(G4int theA, G4int theZ)
void SetStatusChange(G4HadFinalStateStatus aS)
G4int GetNumberOfSecondaries() const
G4HadSecondary * GetSecondary(size_t i)
G4DynamicParticle * GetParticle()
const G4String & GetModelName() const
static G4NeutrinoMu * NeutrinoMu()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetKineticEnergy() const
G4ThreeVector GetMomentum() const
G4ParticleDefinition * GetDefinition() const
static G4Triton * Triton()
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment)=0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
std::ostringstream G4ExceptionDescription