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
155
156 XsElastHad/=millibarn; XstotalHad/=millibarn;
157
158 G4double CoulombProb = XsCoulomb/(XsCoulomb+XsElastHad);
159
160
161
162
163
165 {
166
169
170 G4double par1 = 2.*(1.+Am)/(1.+ctet1);
171
172
173
174 G4double cosThetaCMS = (par1*ctet1- Ksi*(1.+2.*Am))/(par1-Ksi);
175
177 Fproj.setPz(PtZ);
178 G4double PtProjCMS = ptot*std::sqrt(1.0 - cosThetaCMS*cosThetaCMS);
179 G4double PtX= PtProjCMS * std::cos(phi);
180 G4double PtY= PtProjCMS * std::sin(phi);
181 Fproj.setPx(PtX);
182 Fproj.setPy(PtY);
183 Fproj.setE(std::sqrt(PtX*PtX+PtY*PtY+PtZ*PtZ+Mproj*Mproj));
184 T = -(Pproj-Fproj).mag2();
185 } else
186
187 {
188
189
190
194
196
199 if(A == 3) fRa=1.81;
200 if(A == 4) fRa=1.37;
201
202 if((A>=12.) && (A<27) ) fRa=fRa*0.85;
203 if((A>=27.) && (A<48) ) fRa=fRa*0.90;
204 if((A>=48.) && (A<65) ) fRa=fRa*0.95;
205
209 if ((theParticle == theAProton) || (theParticle == theANeutron))
210 {
211 if(theDef == theProton)
212 {
213
214
215
216
217 if(Plab < 610.)
218 { rho = 1.3347-10.342*Plab/1000.+22.277*Plab/1000.*Plab/1000.-
219 13.634*Plab/1000.*Plab/1000.*Plab/1000. ;}
220 if((Plab < 5500.)&&(Plab >= 610.) )
221 { rho = 0.22; }
222 if((Plab >= 5500.)&&(Plab < 12300.) )
223 { rho = -0.32; }
224 if( Plab >= 12300.)
225 { rho = 0.135-2.26/(std::sqrt(
S)) ;}
226
227 Ref2 = 0.35 + 0.9/std::sqrt(std::sqrt(
S-4.*0.88))+0.04*
G4Log(
S) ;
228 ceff2 = 0.375 - 2./
S + 0.44/(
sqr(
S-4.)+1.5) ;
229
230
231
232
233
234
235
236
237 Ref2=Ref2*Ref2;
238 ceff2 = ceff2*ceff2;
239
240 SlopeMag = 0.5;
241 Amag= 1.;
242 }
243
244 if(Z>2)
245 { Ref2 = fRa*fRa +2.48*0.01*sig_pbarp*fRa - 2.23e-6*sig_pbarp*sig_pbarp*fRa*fRa;
246 ceff2 = 0.16+3.3e-4*sig_pbarp+0.35*
G4Exp(-0.03*sig_pbarp);
247 }
248 if( (Z==2)&&(A==4) )
249 { Ref2 = fRa*fRa -0.46 +0.03*sig_pbarp - 2.98e-6*sig_pbarp*sig_pbarp;
250 ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*
G4Exp(-0.03*sig_pbarp);
251 }
252 if( (Z==1)&&(A==3) )
253 { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
254 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*
G4Exp(-0.03*sig_pbarp);
255 }
256 if( (Z==2)&&(A==3) )
257 { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
258 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*
G4Exp(-0.03*sig_pbarp);
259 }
260 if( (Z==1)&&(A==2) )
261 {
262 Ref2 = fRa*fRa - 0.28 + 0.019 * sig_pbarp + 2.06e-6 * sig_pbarp*sig_pbarp;
263 ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*
G4Exp(-0.03*sig_pbarp);
264 }
265 }
266
267 if (theParticle == theADeuteron)
268 {
270 Ref2 = XstotalHad/10./2./
pi ;
271 if(Z>2)
272 {
273 ceff2 = 0.38 + 2.0e-4 *sig_pbarp + 0.5 *
G4Exp(-0.03*sig_pbarp);
274 }
275 if(theDef == theProton)
276 {
277 ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*
G4Exp(-0.03*sig_pbarp);
278 }
279 if(theDef == theDeuteron)
280 {
281 ceff2 = 0.65 + 3.0e-4*sig_pbarp + 0.55 *
G4Exp(-0.03*sig_pbarp);
282 }
284 {
285 ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 *
G4Exp(-0.02*sig_pbarp);
286 }
287 if(theDef == theAlpha)
288 {
289 ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 *
G4Exp(-0.02*sig_pbarp);
290 }
291 }
292
293 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
294 {
296 Ref2 = XstotalHad/10./2./
pi ;
297 if(Z>2)
298 {
299 ceff2 = 0.26 + 2.2e-4*sig_pbarp + 0.33*
G4Exp(-0.03*sig_pbarp);
300 }
301 if(theDef == theProton)
302 {
303 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*
G4Exp(-0.03*sig_pbarp);
304 }
305 if(theDef == theDeuteron)
306 {
307 ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 *
G4Exp(-0.02*sig_pbarp);
308 }
310 {
311 ceff2 = 0.39 + 2.7e-4*sig_pbarp + 0.7 *
G4Exp(-0.02*sig_pbarp);
312 }
313 if(theDef == theAlpha)
314 {
315 ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 *
G4Exp(-0.03*sig_pbarp);
316 }
317 }
318
319
320 if (theParticle == theAAlpha)
321 {
323 Ref2 = XstotalHad/10./2./
pi ;
324 if(Z>2)
325 {
326 ceff2 = 0.22 + 2.0e-4*sig_pbarp + 0.2 *
G4Exp(-0.03*sig_pbarp);
327 }
328 if(theDef == theProton)
329 {
330 ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*
G4Exp(-0.03*sig_pbarp);
331 }
332 if(theDef == theDeuteron)
333 {
334 ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 *
G4Exp(-0.02*sig_pbarp);
335 }
337 {
338 ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 *
G4Exp(-0.03*sig_pbarp);
339 }
340 if(theDef == theAlpha)
341 {
342 ceff2 = 0.17 + 3.5e-4*sig_pbarp + 0.45 *
G4Exp(-0.03*sig_pbarp);
343 }
344 }
345
346 fRef=std::sqrt(Ref2);
347 fceff = std::sqrt(ceff2);
348
349
350
353 const G4int maxNumberOfLoops = 10000;
354 G4int loopCounter = 0;
355 do
356 {
361
362 BracFunct = BracFunct * Q *
sqr(
sqr(fRef));
363 }
365 ++loopCounter < maxNumberOfLoops );
366 if ( loopCounter >= maxNumberOfLoops ) {
367 fTetaCMS = 0.0;
368 return 0.0;
369 }
370
372 T*=3.893913e+4;
373 }
374
375
376
377
378
379
380
381
382 return T;
383}
double A(double temperature)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
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)
G4double Z13(G4int Z) const
static G4Triton * Triton()
G4double energy(const ThreeVector &p, const G4double m)