116{
118
119 const G4HadProjectile* aParticle = &aTrack;
121
123 {
127 }
128
129 G4int A = targetNucleus.GetA_asInt();
130 G4int Z = targetNucleus.GetZ_asInt();
131
134
135 const G4ParticleDefinition* theParticle = aParticle->
GetDefinition();
137
139
141 G4double targMass2 = targMass*targMass;
142
144
147
149
151
154
155 Mx *= CLHEP::GeV;
156
158
159
160
161 G4double B = sumE2 + targMass2 - Mx2 - plab2;
162
168
169 if( det2 >= 0.)
170 {
171 det = std::sqrt(det2);
172 qLong = (-b - det)/2./a;
173 eRetard = std::sqrt((plab-qLong)*(plab-qLong)+Mx2);
174 }
175 else
176 {
180 }
182
183 plab -= qLong;
184
186
188
190
193
194 lvTarg += lvRetard;
195
197
198 lvRetard.boost(-bst);
199
202 G4double tMax = 4.0*momentumCMS*momentumCMS;
203
205
207
208
211
212 if( cost > 1.0 || cost < -1.0 )
213 {
214 cost = 1.0;
215 sint = 0.0;
216 }
217 else
218 {
219 sint = std::sqrt( (1.0-cost)*(1.0+cost) );
220 }
221 G4ThreeVector v1( sint*std::cos(phi), sint*std::sin(phi), cost);
222
223 v1 *= momentumCMS;
224
225 G4LorentzVector lvRes( v1.x(),v1.y(),v1.z(), std::sqrt( momentumCMS*momentumCMS + Mx2));
226
227 lvRes.boost(bst);
228
229 lvTarg -= lvRes;
230
231 G4double eRecoil = lvTarg.e() - targMass;
232
233 if( eRecoil > 100.*CLHEP::MeV )
234 {
235 G4ParticleDefinition * recoilDef = 0;
236
240 else if ( Z == 2 &&
A == 3 ) { recoilDef =
G4He3::He3(); }
242 else
243 {
244 recoilDef =
246 }
247 G4DynamicParticle * aSec = new G4DynamicParticle( recoilDef, lvTarg);
249 }
250 else if( eRecoil > 0.0 )
251 {
253 }
254
256 FindParticle(fPDGencoding);
257
258
259
260
261
262
263
264
265
266
267 G4KineticTrack ddkt( ddPart, 0.,
G4ThreeVector(0.,0.,0.), lvRes);
268 G4KineticTrackVector* ddktv = ddkt.Decay();
269
270 G4DecayKineticTracks
decay( ddktv );
271
272 for( unsigned int i = 0; i < ddktv->size(); i++ )
273 {
274 G4DynamicParticle * aNew =
275 new G4DynamicParticle( ddktv->operator[](i)->GetDefinition(),
276 ddktv->operator[](i)->Get4Momentum());
277
278
279
281 delete ddktv->operator[](i);
282 }
283 delete ddktv;
284
286}
G4double B(G4double temperature)
CLHEP::HepLorentzVector G4LorentzVector
G4ThreeVector G4ParticleMomentum
CLHEP::Hep3Vector G4ThreeVector
static G4Deuteron * Deuteron()
G4double GetTotalMomentum() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4HadFinalState theParticleChange
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
G4double SampleMx(const G4HadProjectile *aParticle)
G4double SampleT(const G4HadProjectile *aParticle, G4double Mx)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetPDGMass() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4Proton * Proton()
static G4Triton * Triton()
ParticleList decay(Cluster *const c)
Carries out a cluster decay.