101{
103 G4double Mproj = particle->GetPDGMass();
106
108
110
112
113 if(Z == 1 && A == 1) theDef = theProton;
114 else if (Z == 1 && A == 2) theDef = theDeuteron;
116 else if (Z == 2 && A == 3) theDef =
G4He3::He3();
117 else if (Z == 2 && A == 4) theDef = theAlpha;
118
119
121
122
123
125 lv += Pproj;
127
129 Pproj.boost(-bst);
130
133
134 fbst = bst;
135 fptot= ptot;
136 fTmax = 4.0*ptot*ptot;
137
138 if(Plab/std::abs(particle->GetBaryonNumber()) < 100.*MeV)
140
141 G4double Z1 = particle->GetPDGCharge();
143
147 fWaveVector = ptot;
148
150 G4double XsCoulomb =
sqr(n/fWaveVector)*
pi*(1+ctet1)/(1.+Am)/(1.+2.*Am-ctet1);
151 XsCoulomb=XsCoulomb*0.38938e+6;
152
153
156
157
158 XsElastHad/=millibarn; XstotalHad/=millibarn;
159
160
161 G4double CoulombProb = XsCoulomb/(XsCoulomb+XsElastHad);
162
163
164
165
166
168 {
169
172
173 G4double par1 = 2.*(1.+Am)/(1.+ctet1);
174
175
176
177 G4double cosThetaCMS = (par1*ctet1- Ksi*(1.+2.*Am))/(par1-Ksi);
178
180 Fproj.setPz(PtZ);
181 G4double PtProjCMS = ptot*std::sqrt(1.0 - cosThetaCMS*cosThetaCMS);
182 G4double PtX= PtProjCMS * std::cos(phi);
183 G4double PtY= PtProjCMS * std::sin(phi);
184 Fproj.setPx(PtX);
185 Fproj.setPy(PtY);
186 Fproj.setE(std::sqrt(PtX*PtX+PtY*PtY+PtZ*PtZ+Mproj*Mproj));
187 T = -(Pproj-Fproj).mag2();
188 } else
189
190 {
191
192
193
197
199
202 if(A == 3) fRa=1.81;
203 if(A == 4) fRa=1.37;
204
205 if((A>=12.) && (A<27) ) fRa=fRa*0.85;
206 if((A>=27.) && (A<48) ) fRa=fRa*0.90;
207 if((A>=48.) && (A<65) ) fRa=fRa*0.95;
208
212 if ((theParticle == theAProton) || (theParticle == theANeutron))
213 {
214 if(theDef == theProton)
215 {
216
217
218
219
220 if(Plab < 610.)
221 { rho = 1.3347-10.342*Plab/1000.+22.277*Plab/1000.*Plab/1000.-
222 13.634*Plab/1000.*Plab/1000.*Plab/1000. ;}
223 if((Plab < 5500.)&&(Plab >= 610.) )
224 { rho = 0.22; }
225 if((Plab >= 5500.)&&(Plab < 12300.) )
226 { rho = -0.32; }
227 if( Plab >= 12300.)
228 { rho = 0.135-2.26/(std::sqrt(S)) ;}
229
230 Ref2 = 0.35 + 0.9/std::sqrt(std::sqrt(S-4.*0.88))+0.04*std::log(S) ;
231 ceff2 = 0.375 - 2./S + 0.44/(
sqr(S-4.)+1.5) ;
232
233
234
235
236
237
238
239
240 Ref2=Ref2*Ref2;
241 ceff2 = ceff2*ceff2;
242
243 SlopeMag = 0.5;
244 Amag= 1.;
245 }
246
247 if(Z>2)
248 { Ref2 = fRa*fRa +2.48*0.01*sig_pbarp*fRa - 2.23e-6*sig_pbarp*sig_pbarp*fRa*fRa;
249 ceff2 = 0.16+3.3e-4*sig_pbarp+0.35*std::exp(-0.03*sig_pbarp);
250 }
251 if( (Z==2)&&(A==4) )
252 { Ref2 = fRa*fRa -0.46 +0.03*sig_pbarp - 2.98e-6*sig_pbarp*sig_pbarp;
253 ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*std::exp(-0.03*sig_pbarp);
254 }
255 if( (Z==1)&&(A==3) )
256 { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
257 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*std::exp(-0.03*sig_pbarp);
258 }
259 if( (Z==2)&&(A==3) )
260 { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
261 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*std::exp(-0.03*sig_pbarp);
262 }
263 if( (Z==1)&&(A==2) )
264 {
265 Ref2 = fRa*fRa - 0.28 + 0.019 * sig_pbarp + 2.06e-6 * sig_pbarp*sig_pbarp;
266 ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*std::exp(-0.03*sig_pbarp);
267 }
268 }
269
270 if (theParticle == theADeuteron)
271 {
273 Ref2 = XstotalHad/10./2./
pi ;
274 if(Z>2)
275 {
276 ceff2 = 0.38 + 2.0e-4 *sig_pbarp + 0.5 * std::exp(-0.03*sig_pbarp);
277 }
278 if(theDef == theProton)
279 {
280 ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*std::exp(-0.03*sig_pbarp);
281 }
282 if(theDef == theDeuteron)
283 {
284 ceff2 = 0.65 + 3.0e-4*sig_pbarp + 0.55 * std::exp(-0.03*sig_pbarp);
285 }
287 {
288 ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 * std::exp(-0.02*sig_pbarp);
289 }
290 if(theDef == theAlpha)
291 {
292 ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 * std::exp(-0.02*sig_pbarp);
293 }
294 }
295
296 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
297 {
299 Ref2 = XstotalHad/10./2./
pi ;
300 if(Z>2)
301 {
302 ceff2 = 0.26 + 2.2e-4*sig_pbarp + 0.33*std::exp(-0.03*sig_pbarp);
303 }
304 if(theDef == theProton)
305 {
306 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*std::exp(-0.03*sig_pbarp);
307 }
308 if(theDef == theDeuteron)
309 {
310 ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 * std::exp(-0.02*sig_pbarp);
311 }
313 {
314 ceff2 = 0.39 + 2.7e-4*sig_pbarp + 0.7 * std::exp(-0.02*sig_pbarp);
315 }
316 if(theDef == theAlpha)
317 {
318 ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 * std::exp(-0.03*sig_pbarp);
319 }
320 }
321
322
323 if (theParticle == theAAlpha)
324 {
326 Ref2 = XstotalHad/10./2./
pi ;
327 if(Z>2)
328 {
329 ceff2 = 0.22 + 2.0e-4*sig_pbarp + 0.2 * std::exp(-0.03*sig_pbarp);
330 }
331 if(theDef == theProton)
332 {
333 ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*std::exp(-0.03*sig_pbarp);
334 }
335 if(theDef == theDeuteron)
336 {
337 ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 * std::exp(-0.02*sig_pbarp);
338 }
340 {
341 ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 * std::exp(-0.03*sig_pbarp);
342 }
343 if(theDef == theAlpha)
344 {
345 ceff2 = 0.17 + 3.5e-4*sig_pbarp + 0.45 * std::exp(-0.03*sig_pbarp);
346 }
347 }
348
349 fRef=std::sqrt(Ref2);
350 fceff = std::sqrt(ceff2);
351
352
353
356 do
357 {
358 Q = -std::log(1.-(1.- std::exp(-SlopeMag * Qmax))*
G4UniformRand() )/SlopeMag;
362
363 BracFunct = BracFunct * Q *
sqr(
sqr(fRef));
364 }
366
368 T*=3.893913e+4;
369 }
370
371 G4double cosTet=1.0-T/(2.*ptot*ptot);
372 if(cosTet > 1.0 ) cosTet= 1.;
373 if(cosTet < -1.0 ) cosTet=-1.;
374 fTetaCMS=std::acos(cosTet);
375
376 return T;
377}
G4double BesselOneByArg(G4double z)
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
G4double DampFactor(G4double z)
G4double GetcosTeta1(G4double plab, G4int A)
G4double BesselJzero(G4double z)
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
static G4double GetNuclearMass(const G4double A, const G4double Z)
static G4Triton * Triton()