Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4AntiNuclElastic.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id: G4AntiNuclElastic.cc - A.Galoyan 02.05.2011
27// GEANT4 tag $Name: not supported by cvs2svn $
28//
29// Geant4 Header : G4AntiNuclElastic
30//
31//
32
33#include "G4AntiNuclElastic.hh"
34
36#include "G4SystemOfUnits.hh"
37#include "G4ParticleTable.hh"
39#include "G4IonTable.hh"
40#include "Randomize.hh"
41#include "G4AntiProton.hh"
42#include "G4AntiNeutron.hh"
43#include "G4AntiDeuteron.hh"
44#include "G4AntiAlpha.hh"
45#include "G4AntiTriton.hh"
46#include "G4AntiHe3.hh"
47#include "G4Proton.hh"
48#include "G4Neutron.hh"
49#include "G4Deuteron.hh"
50#include "G4Alpha.hh"
51#include "G4Pow.hh"
52
53#include "G4NucleiProperties.hh"
54
56 : G4HadronElastic("AntiAElastic")
57{
58 //V.Ivanchenko commented out
59 //SetMinEnergy( 0.1*GeV );
60 //SetMaxEnergy( 10.*TeV );
61
62
63 theAProton = G4AntiProton::AntiProton();
64 theANeutron = G4AntiNeutron::AntiNeutron();
65 theADeuteron = G4AntiDeuteron::AntiDeuteron();
66 theATriton = G4AntiTriton::AntiTriton();
67 theAAlpha = G4AntiAlpha::AntiAlpha();
68 theAHe3 = G4AntiHe3::AntiHe3();
69
70 theProton = G4Proton::Proton();
71 theNeutron = G4Neutron::Neutron();
72 theDeuteron = G4Deuteron::Deuteron();
73 theAlpha = G4Alpha::Alpha();
74
75
77 fParticle = 0;
78 fWaveVector = 0.;
79 fBeta = 0.;
80 fZommerfeld = 0.;
81 fAm = 0.;
82 fTetaCMS = 0.;
83 fRa = 0.;
84 fRef = 0.;
85 fceff = 0.;
86 fptot = 0.;
87 fTmax = 0.;
88 fThetaLab = 0.;
89}
90
91/////////////////////////////////////////////////////////////////////////
93{
94 delete cs;
95}
96
97////////////////////////////////////////////////////////////////////////
98// sample momentum transfer in the CMS system
100 G4double Plab, G4int Z, G4int A)
101{
102 G4double T;
103 G4double Mproj = particle->GetPDGMass();
104 G4LorentzVector Pproj(0.,0.,Plab,std::sqrt(Plab*Plab+Mproj*Mproj));
105 G4double ctet1 = GetcosTeta1(Plab, A);
106
107 G4double energy=Pproj.e()-Mproj;
108
109 const G4ParticleDefinition* theParticle = particle;
110
111 G4ParticleDefinition * theDef = 0;
112
113 if(Z == 1 && A == 1) theDef = theProton;
114 else if (Z == 1 && A == 2) theDef = theDeuteron;
115 else if (Z == 1 && A == 3) theDef = G4Triton::Triton();
116 else if (Z == 2 && A == 3) theDef = G4He3::He3();
117 else if (Z == 2 && A == 4) theDef = theAlpha;
118
119
121
122 //transform to CMS
123
124 G4LorentzVector lv(0.0,0.0,0.0,TargMass);
125 lv += Pproj;
126 G4double S = lv.mag2()/GeV/GeV;
127
128 G4ThreeVector bst = lv.boostVector();
129 Pproj.boost(-bst);
130
131 G4ThreeVector p1 = Pproj.vect();
132 G4double ptot = p1.mag();
133
134 fbst = bst;
135 fptot= ptot;
136 fTmax = 4.0*ptot*ptot;
137
138 if(Plab/std::abs(particle->GetBaryonNumber()) < 100.*MeV) // Uzhi 24 Nov. 2011
139 {return fTmax*G4UniformRand();} // Uzhi 24 Nov. 2011
140
141 G4double Z1 = particle->GetPDGCharge();
142 G4double Z2 = Z;
143
144 G4double beta = CalculateParticleBeta(particle, ptot);
145 G4double n = CalculateZommerfeld( beta, Z1, Z2 );
146 G4double Am = CalculateAm( ptot, n, Z2 );
147 fWaveVector = ptot; // /hbarc;
148
149 G4LorentzVector Fproj(0.,0.,0.,0.);
150 G4double XsCoulomb = sqr(n/fWaveVector)*pi*(1+ctet1)/(1.+Am)/(1.+2.*Am-ctet1);
151 XsCoulomb=XsCoulomb*0.38938e+6;
152
153
154 G4double XsElastHad =cs->GetElasticElementCrossSection(particle, energy, Z, (G4double)A);
155 G4double XstotalHad =cs->GetTotalElementCrossSection(particle, energy, Z, (G4double)A);
156
157
158 XsElastHad/=millibarn; XstotalHad/=millibarn;
159
160
161 G4double CoulombProb = XsCoulomb/(XsCoulomb+XsElastHad);
162
163// G4cout<<" XselastHadron " << XsElastHad << " XsCol "<< XsCoulomb <<G4endl;
164// G4cout <<" XsTotal" << XstotalHad <<G4endl;
165// G4cout<<"XsInel"<< XstotalHad-XsElastHad<<G4endl;
166
167 if(G4UniformRand() < CoulombProb)
168 { // Simulation of Coulomb scattering
169
170 G4double phi = twopi * G4UniformRand();
171 G4double Ksi = G4UniformRand();
172
173 G4double par1 = 2.*(1.+Am)/(1.+ctet1);
174
175// ////sample ThetaCMS in Coulomb part
176
177 G4double cosThetaCMS = (par1*ctet1- Ksi*(1.+2.*Am))/(par1-Ksi);
178
179 G4double PtZ=ptot*cosThetaCMS;
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///////Simulation of strong interaction scattering////////////////////////////
192
193// G4double Qmax = 2.*ptot*197.33; // in fm^-1
194 G4double Qmax = 2.*3.0*197.33; // in fm^-1
195 G4double Amag = 70*70; // A1 in Magora funct:A1*exp(-q*A2)
196 G4double SlopeMag = 2.*3.0; // A2 in Magora funct:A1*exp(-q*A2)
197
198 G4double sig_pbarp= cs->GetAntiHadronNucleonTotCrSc(particle,energy);
199
200 fRa = 1.113*G4Pow::GetInstance()->Z13(A) -
201 0.227/G4Pow::GetInstance()->Z13(A);
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
209 G4double Ref2 = 0;
210 G4double ceff2 =0;
211 G4double rho = 0;
212 if ((theParticle == theAProton) || (theParticle == theANeutron))
213 {
214 if(theDef == theProton)
215 {
216// G4double Mp2=sqr(theDef->GetPDGMass()/GeV );
217
218// change 30 October
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 Ref2=0.8/std::sqrt(std::sqrt(S-4.*Mp2)) + 0.55;
235 if(S>1000.) Ref2=0.62+0.02*std::log(S) ;
236 ceff2 = 0.035/(sqr(S-4.3)+0.4) + 0.085 * std::log(S) ;
237 if(S>1000.) ceff2 = 0.005 * std::log(S) + 0.29;
238*/
239
240 Ref2=Ref2*Ref2;
241 ceff2 = ceff2*ceff2;
242
243 SlopeMag = 0.5; // Uzhi
244 Amag= 1.; // Uzhi
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 {
272 sig_pbarp= cs->GetAntiHadronNucleonTotCrSc(particle,energy/2.);
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 }
286 if( (theDef == G4Triton::Triton()) || (theDef == G4He3::He3() ) )
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 {
298 sig_pbarp = cs->GetAntiHadronNucleonTotCrSc(particle,energy/3.);
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 }
312 if( (theDef == G4Triton::Triton()) || (theDef == G4He3::He3() ) )
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 {
325 sig_pbarp = cs->GetAntiHadronNucleonTotCrSc(particle,energy/3.);
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 }
339 if( (theDef == G4Triton::Triton()) || (theDef == G4He3::He3() ) )
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// G4cout<<" Ref "<<fRef<<" c_eff "<<fceff<< " rho "<< rho<<G4endl;
352
353
354 G4double Q = 0.0 ;
355 G4double BracFunct;
356 do
357 {
358 Q = -std::log(1.-(1.- std::exp(-SlopeMag * Qmax))* G4UniformRand() )/SlopeMag;
359 G4double x = fRef * Q;
360 BracFunct = ( ( sqr(BesselOneByArg(x))+sqr(rho/2. * BesselJzero(x)) )
361* sqr(DampFactor(pi*fceff*Q))) /(Amag*std::exp(-SlopeMag*Q));
362
363 BracFunct = BracFunct * Q * sqr(sqr(fRef));
364 }
365 while (G4UniformRand()>BracFunct);
366
367 T= sqr(Q);
368 T*=3.893913e+4; // fm -> MeV^2
369 }
370
371 G4double cosTet=1.0-T/(2.*ptot*ptot);
372 if(cosTet > 1.0 ) cosTet= 1.; // Uzhi 30 Nov.
373 if(cosTet < -1.0 ) cosTet=-1.; // Uzhi 30 Nov.
374 fTetaCMS=std::acos(cosTet);
375
376 return T;
377}
378
379/////////////////////////////////////////////////////////////////////
380// Sample of Theta in CMS
382 G4int Z, G4int A)
383{
384 G4double T;
385 T = SampleInvariantT( p, plab, Z, A);
386
387 // NaN finder
388 if(!(T < 0.0 || T >= 0.0))
389 {
390 if (verboseLevel > 0)
391 {
392 G4cout << "G4DiffuseElastic:WARNING: A = " << A
393 << " mom(GeV)= " << plab/GeV
394 << " S-wave will be sampled"
395 << G4endl;
396 }
397 T = G4UniformRand()*fTmax;
398
399 }
400
401 if(fptot > 0.) // Uzhi 24 Nov. 2011
402 {
403 G4double cosTet=1.0-T/(2.*fptot*fptot);
404 if(cosTet > 1.0 ) cosTet= 1.; // Uzhi 30 Nov.
405 if(cosTet < -1.0 ) cosTet=-1.; // Uzhi 30 Nov.
406 fTetaCMS=std::acos(cosTet);
407 return fTetaCMS;
408 } else // Uzhi 24 Nov. 2011
409 { // Uzhi 24 Nov. 2011
410 return 2.*G4UniformRand()-1.; // Uzhi 24 Nov. 2011
411 } // Uzhi 24 Nov. 2011
412}
413
414
415/////////////////////////////////////////////////////////////////////
416// Sample of Theta in Lab System
418 G4int Z, G4int A)
419{
420 G4double T;
421 T = SampleInvariantT( p, plab, Z, A);
422
423 // NaN finder
424 if(!(T < 0.0 || T >= 0.0))
425 {
426 if (verboseLevel > 0)
427 {
428 G4cout << "G4DiffuseElastic:WARNING: A = " << A
429 << " mom(GeV)= " << plab/GeV
430 << " S-wave will be sampled"
431 << G4endl;
432 }
433 T = G4UniformRand()*fTmax;
434 }
435
436 G4double phi = G4UniformRand()*twopi;
437
438 G4double cost(1.);
439 if(fTmax > 0.) {cost = 1. - 2.0*T/fTmax;} // Uzhi 24 Nov. 2011
440
441 G4double sint;
442 if( cost >= 1.0 )
443 {
444 cost = 1.0;
445 sint = 0.0;
446 }
447 else if( cost <= -1.0)
448 {
449 cost = -1.0;
450 sint = 0.0;
451 }
452 else
453 {
454 sint = std::sqrt((1.0-cost)*(1.0+cost));
455 }
456
457 G4double m1 = p->GetPDGMass();
458 G4ThreeVector v(sint*std::cos(phi),sint*std::sin(phi),cost);
459 v *= fptot;
460 G4LorentzVector nlv(v.x(),v.y(),v.z(),std::sqrt(fptot*fptot + m1*m1));
461
462 nlv.boost(fbst);
463
464 G4ThreeVector np = nlv.vect();
465 G4double theta = np.theta();
466 fThetaLab = theta;
467
468 return theta;
469}
470
471////////////////////////////////////////////////////////////////////
472// Calculation of Damp factor
474{
475 G4double df;
476 G4double f3 = 6.; // first factorials
477
478 if( std::fabs(x) < 0.01 )
479 {
480 df=1./(1.+x*x/f3);
481 }
482 else
483 {
484 df = x/std::sinh(x);
485 }
486 return df;
487}
488
489
490/////////////////////////////////////////////////////////////////////////////////
491// Calculation of particle velocity Beta
492
494 G4double momentum )
495{
496 G4double mass = particle->GetPDGMass();
497 G4double a = momentum/mass;
498 fBeta = a/std::sqrt(1+a*a);
499
500 return fBeta;
501}
502
503
504///////////////////////////////////////////////////////////////////////////////////
505// Calculation of parameter Zommerfeld
506
508{
509 fZommerfeld = fine_structure_const*Z1*Z2/beta;
510
511 return fZommerfeld;
512}
513
514////////////////////////////////////////////////////////////////////////////////////
515//
517{
518 G4double k = momentum/hbarc;
519 G4double ch = 1.13 + 3.76*n*n;
520 G4double zn = 1.77*k/G4Pow::GetInstance()->A13(Z)*Bohr_radius;
521 G4double zn2 = zn*zn;
522 fAm = ch/zn2;
523
524 return fAm;
525}
526
527/////////////////////////////////////////////////////////////
528//
529// Bessel J0 function based on rational approximation from
530// J.F. Hart, Computer Approximations, New York, Willey 1968, p. 141
531
533{
534 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
535
536 modvalue = std::fabs(value);
537
538 if ( value < 8.0 && value > -8.0 )
539 {
540 value2 = value*value;
541
542 fact1 = 57568490574.0 + value2*(-13362590354.0
543 + value2*( 651619640.7
544 + value2*(-11214424.18
545 + value2*( 77392.33017
546 + value2*(-184.9052456 ) ) ) ) );
547
548 fact2 = 57568490411.0 + value2*( 1029532985.0
549 + value2*( 9494680.718
550 + value2*(59272.64853
551 + value2*(267.8532712
552 + value2*1.0 ) ) ) );
553
554 bessel = fact1/fact2;
555 }
556 else
557 {
558 arg = 8.0/modvalue;
559
560 value2 = arg*arg;
561
562 shift = modvalue-0.785398164;
563
564 fact1 = 1.0 + value2*(-0.1098628627e-2
565 + value2*(0.2734510407e-4
566 + value2*(-0.2073370639e-5
567 + value2*0.2093887211e-6 ) ) );
568 fact2 = -0.1562499995e-1 + value2*(0.1430488765e-3
569 + value2*(-0.6911147651e-5
570 + value2*(0.7621095161e-6
571 - value2*0.934945152e-7 ) ) );
572
573 bessel = std::sqrt(0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
574 }
575 return bessel;
576}
577
578
579//////////////////////////////////////////////////////////////////////////////
580// Bessel J1 function based on rational approximation from
581// J.F. Hart, Computer Approximations, New York, Willey 1968, p. 141
582
584{
585 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
586
587 modvalue = std::fabs(value);
588
589 if ( modvalue < 8.0 )
590 {
591 value2 = value*value;
592 fact1 = value*(72362614232.0 + value2*(-7895059235.0
593 + value2*( 242396853.1
594 + value2*(-2972611.439
595 + value2*( 15704.48260
596 + value2*(-30.16036606 ) ) ) ) ) );
597
598 fact2 = 144725228442.0 + value2*(2300535178.0
599 + value2*(18583304.74
600 + value2*(99447.43394
601 + value2*(376.9991397
602 + value2*1.0 ) ) ) );
603 bessel = fact1/fact2;
604 }
605 else
606 {
607 arg = 8.0/modvalue;
608 value2 = arg*arg;
609
610 shift = modvalue - 2.356194491;
611
612 fact1 = 1.0 + value2*( 0.183105e-2
613 + value2*(-0.3516396496e-4
614 + value2*(0.2457520174e-5
615 + value2*(-0.240337019e-6 ) ) ) );
616
617 fact2 = 0.04687499995 + value2*(-0.2002690873e-3
618 + value2*( 0.8449199096e-5
619 + value2*(-0.88228987e-6
620 + value2*0.105787412e-6 ) ) );
621
622 bessel = std::sqrt( 0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
623 if (value < 0.0) bessel = -bessel;
624 }
625 return bessel;
626}
627
628////////////////////////////////////////////////////////////////////////////////
629// return J1(x)/x with special case for small x
631{
632 G4double x2, result;
633
634 if( std::fabs(x) < 0.01 )
635 {
636 x *= 0.5;
637 x2 = x*x;
638 result = (2.- x2 + x2*x2/6.)/4.;
639 }
640 else
641 {
642 result = BesselJone(x)/x;
643 }
644 return result;
645}
646
647/////////////////////////////////////////////////////////////////////////////////
648// return angle from which Coulomb scattering is calculated
650{
651
652// G4double p0 =G4LossTableManager::Instance()->FactorForAngleLimit()*CLHEP::hbarc/CLHEP::fermi;
653 G4double p0 = 1.*hbarc/fermi;
654//G4double cteta1 = 1.0 - p0*p0/2.0 * pow(A,2./3.)/(plab*plab);
655 G4double cteta1 = 1.0 - p0*p0/2.0 * G4Pow::GetInstance()->Z23(A)/(plab*plab);
656//////////////////
657 if(cteta1 < -1.) cteta1 = -1.0;
658 return cteta1;
659}
660
661
662
663
664
665
666
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:53
double z() const
double theta() const
double x() const
double y() const
double mag() const
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
Hep3Vector vect() const
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
static G4AntiAlpha * AntiAlpha()
Definition: G4AntiAlpha.cc:89
static G4AntiDeuteron * AntiDeuteron()
static G4AntiHe3 * AntiHe3()
Definition: G4AntiHe3.cc:94
static G4AntiNeutron * AntiNeutron()
G4double BesselOneByArg(G4double z)
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
G4double SampleThetaLab(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
virtual ~G4AntiNuclElastic()
G4double DampFactor(G4double z)
G4double BesselJone(G4double z)
G4double GetcosTeta1(G4double plab, G4int A)
G4double BesselJzero(G4double z)
G4double SampleThetaCMS(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:93
static G4AntiTriton * AntiTriton()
Definition: G4AntiTriton.cc:94
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 G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
static G4He3 * He3()
Definition: G4He3.cc:94
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetPDGCharge() const
static G4Pow * GetInstance()
Definition: G4Pow.cc:50
G4double A13(G4double A)
Definition: G4Pow.hh:115
G4double Z23(G4int Z)
Definition: G4Pow.hh:134
G4double Z13(G4int Z)
Definition: G4Pow.hh:110
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4Triton * Triton()
Definition: G4Triton.cc:95
T sqr(const T &x)
Definition: templates.hh:145