Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4NuclNuclDiffuseElastic.hh
이 파일의 문서화 페이지로 가기
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 //
27 // $Id: G4NuclNuclDiffuseElastic.hh 106722 2017-10-20 09:48:19Z gcosmo $
28 //
29 //
30 // G4 Model: optical elastic scattering with 4-momentum balance
31 //
32 // Class Description
33 // Final state production model for nucleus-nucleus elastic scattering;
34 // Coulomb amplitude is not considered as correction
35 // (as in G4DiffuseElastic)
36 // Class Description - End
37 //
38 //
39 // 17.03.09 V. Grichine implementation for Coulomb elastic scattering
40 
41 
42 #ifndef G4NuclNuclDiffuseElastic_h
43 #define G4NuclNuclDiffuseElastic_h 1
44 
45 #include <complex>
47 #include "globals.hh"
48 #include "G4Integrator.hh"
49 #include "G4HadronElastic.hh"
50 #include "G4HadProjectile.hh"
51 #include "G4Nucleus.hh"
52 
53 #include "G4Exp.hh"
54 #include "G4Log.hh"
55 #include "G4Pow.hh"
56 
57 
59 class G4PhysicsTable;
60 class G4PhysicsLogVector;
61 
62 class G4NuclNuclDiffuseElastic : public G4HadronElastic // G4HadronicInteraction
63 {
64 public:
65 
67 
68  // G4NuclNuclDiffuseElastic(const G4ParticleDefinition* aParticle);
69 
70  virtual ~G4NuclNuclDiffuseElastic();
71 
72  void Initialise();
73 
75 
76  void BuildAngleTable();
77 
79  G4double plab,
80  G4int Z, G4int A);
81 
83 
84  void SetHEModelLowLimit(G4double value);
85 
86  void SetQModelLowLimit(G4double value);
87 
88  void SetLowestEnergyLimit(G4double value);
89 
91 
92  G4double SampleT(const G4ParticleDefinition* aParticle,
93  G4double p, G4double A);
94 
95  G4double SampleTableT(const G4ParticleDefinition* aParticle,
96  G4double p, G4double Z, G4double A);
97 
99 
101 
103  G4double Z, G4double A);
104 
106 
107  G4double SampleThetaLab(const G4HadProjectile* aParticle,
108  G4double tmass, G4double A);
109 
111  G4double theta,
112  G4double momentum,
113  G4double A );
114 
116  G4double theta,
117  G4double momentum,
118  G4double A, G4double Z );
119 
121  G4double theta,
122  G4double momentum,
123  G4double A, G4double Z );
124 
126  G4double tMand,
127  G4double momentum,
128  G4double A, G4double Z );
129 
131  G4double theta,
132  G4double momentum,
133  G4double A );
134 
135 
137  G4double theta,
138  G4double momentum,
139  G4double Z );
140 
142 
144  G4double tMand,
145  G4double momentum,
146  G4double A, G4double Z );
147 
149  G4double momentum, G4double Z );
150 
152  G4double momentum, G4double Z,
153  G4double theta1, G4double theta2 );
154 
155 
157  G4double momentum );
158 
160 
162 
164 
166  G4double tmass, G4double thetaCMS);
167 
169  G4double tmass, G4double thetaLab);
170 
171  void TestAngleTable(const G4ParticleDefinition* theParticle, G4double partMom,
172  G4double Z, G4double A);
173 
174 
175 
180 
185 
187 
188 
189  // Technical math functions for strong Coulomb contribution
190 
193 
195 
196  G4double GetCosHaPit2(G4double t){return std::cos(CLHEP::halfpi*t*t);};
197  G4double GetSinHaPit2(G4double t){return std::sin(CLHEP::halfpi*t*t);};
198 
201 
202 
205  G4complex GetErfcInt(G4complex z); // , G4int nMax);
206 
207  G4complex GetErfComp(G4complex z, G4int nMax); // AandS algorithm != Ser, Int
209 
212  G4complex GetErfInt(G4complex z); // , G4int nMax);
213 
215 
218  G4complex TestErfcInt(G4complex z); // , G4int nMax);
219 
222 
226 
229  G4double Profile(G4double theta);
230 
232  G4complex PhaseFar(G4double theta);
233 
236 
239 
242 
245 
248 
251 
252 
255 
258 
259  void InitParameters(const G4ParticleDefinition* theParticle,
260  G4double partMom, G4double Z, G4double A);
261 
262  void InitDynParameters(const G4ParticleDefinition* theParticle,
263  G4double partMom);
264 
265  void InitParametersGla(const G4DynamicParticle* aParticle,
266  G4double partMom, G4double Z, G4double A);
267 
269  G4double pTkin,
270  G4ParticleDefinition* tParticle);
271 
272  G4double CalcMandelstamS( const G4double mp , const G4double mt ,
273  const G4double Plab );
274 
276 
277  inline void SetProfileLambda(G4double pl) {fProfileLambda = pl;};
278  inline void SetProfileDelta(G4double pd) {fProfileDelta = pd;};
279  inline void SetProfileAlpha(G4double pa){fProfileAlpha = pa;};
280  inline void SetCofLambda(G4double pa){fCofLambda = pa;};
281 
282  inline void SetCofAlpha(G4double pa){fCofAlpha = pa;};
283  inline void SetCofAlphaMax(G4double pa){fCofAlphaMax = pa;};
285 
286  inline void SetCofDelta(G4double pa){fCofDelta = pa;};
287  inline void SetCofPhase(G4double pa){fCofPhase = pa;};
288  inline void SetCofFar(G4double pa){fCofFar = pa;};
289  inline void SetEtaRatio(G4double pa){fEtaRatio = pa;};
290  inline void SetMaxL(G4int l){fMaxL = l;};
292 
295 
296 private:
297 
302 
305 
311 
314 
317  std::vector<G4PhysicsTable*> fAngleBank;
318 
319  std::vector<G4double> fElementNumberVector;
320  std::vector<G4String> fElementNameVector;
321 
323 
327 
333 
339 
344 
348 
354 
357 
361 
364 
365 };
366 
367 
369 {
371 }
372 
374 {
376 }
377 
379 {
381 }
382 
384 {
386 }
387 
389 {
391 }
392 
394 //
395 // damp factor in diffraction x/sh(x), x was already *pi
396 
398 {
399  G4double df;
400  G4double f2 = 2., f3 = 6., f4 = 24.; // first factorials
401 
402  // x *= pi;
403 
404  if( std::fabs(x) < 0.01 )
405  {
406  df = 1./(1. + x/f2 + x*x/f3 + x*x*x/f4);
407  }
408  else
409  {
410  df = x/std::sinh(x);
411  }
412  return df;
413 }
414 
415 
417 //
418 // return J1(x)/x with special case for small x
419 
421 {
422  G4double x2, result;
423 
424  if( std::fabs(x) < 0.01 )
425  {
426  x *= 0.5;
427  x2 = x*x;
428  result = 2. - x2 + x2*x2/6.;
429  }
430  else
431  {
432  result = BesselJone(x)/x;
433  }
434  return result;
435 }
436 
438 //
439 // return particle beta
440 
441 inline G4double
443  G4double momentum)
444 {
445  G4double mass = particle->GetPDGMass();
446  G4double a = momentum/mass;
447  fBeta = a/std::sqrt(1+a*a);
448 
449  return fBeta;
450 }
451 
453 //
454 // return Zommerfeld parameter for Coulomb scattering
455 
456 inline G4double
458 {
460 
461  return fZommerfeld;
462 }
463 
465 //
466 // return Wentzel correction for Coulomb scattering
467 
468 inline G4double
470 {
471  G4double k = momentum/CLHEP::hbarc;
472  G4double ch = 1.13 + 3.76*n*n;
473  G4double zn = 1.77*k*(1.0/G4Pow::GetInstance()->A13(Z))*CLHEP::Bohr_radius;
474  G4double zn2 = zn*zn;
475  fAm = ch/zn2;
476 
477  return fAm;
478 }
479 
481 //
482 // calculate nuclear radius for different atomic weights using different approximations
483 
485 {
486  G4double r0 = 1.*CLHEP::fermi, radius;
487  // r0 *= 1.12;
488  // r0 *= 1.44;
489  r0 *= fNuclearRadiusCof;
490 
491  /*
492  if( A < 50. )
493  {
494  if( A > 10. ) r0 = 1.16*( 1 - (1.0/G4Pow::GetInstance()->A23(A)) )*CLHEP::fermi; // 1.08*fermi;
495  else r0 = 1.1*CLHEP::fermi;
496 
497  radius = r0*G4Pow::GetInstance()->A13(A);
498  }
499  else
500  {
501  r0 = 1.7*CLHEP::fermi; // 1.7*fermi;
502 
503  radius = r0*G4Pow::GetInstance()->powA(A, 0.27); // 0.27);
504  }
505  */
506  radius = r0*G4Pow::GetInstance()->A13(A);
507 
508  return radius;
509 }
510 
512 //
513 // return Coulomb scattering differential xsc with Wentzel correction. Test function
514 
516  G4double theta,
517  G4double momentum,
518  G4double Z )
519 {
520  G4double sinHalfTheta = std::sin(0.5*theta);
521  G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
522  G4double beta = CalculateParticleBeta( particle, momentum);
523  G4double z = particle->GetPDGCharge();
524  G4double n = CalculateZommerfeld( beta, z, Z );
525  G4double am = CalculateAm( momentum, n, Z);
526  G4double k = momentum/CLHEP::hbarc;
527  G4double ch = 0.5*n/k;
528  G4double ch2 = ch*ch;
529  G4double xsc = ch2/((sinHalfTheta2+am)*(sinHalfTheta2+am));
530 
531  return xsc;
532 }
533 
535 //
536 // return Rutherford scattering differential xsc with Wentzel correction. For Sampling.
537 
539 {
540  G4double sinHalfTheta = std::sin(0.5*theta);
541  G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
542 
544 
545  G4double xsc = ch2/(sinHalfTheta2+fAm)/(sinHalfTheta2+fAm);
546 
547  return xsc;
548 }
549 
551 //
552 // return Coulomb scattering total xsc with Wentzel correction
553 
555  G4double momentum, G4double Z )
556 {
557  G4double beta = CalculateParticleBeta( particle, momentum);
558  G4cout<<"beta = "<<beta<<G4endl;
559  G4double z = particle->GetPDGCharge();
560  G4double n = CalculateZommerfeld( beta, z, Z );
561  G4cout<<"fZomerfeld = "<<n<<G4endl;
562  G4double am = CalculateAm( momentum, n, Z);
563  G4cout<<"cof Am = "<<am<<G4endl;
564  G4double k = momentum/CLHEP::hbarc;
565  G4cout<<"k = "<<k*CLHEP::fermi<<" 1/fermi"<<G4endl;
566  G4cout<<"k*Bohr_radius = "<<k*CLHEP::Bohr_radius<<G4endl;
567  G4double ch = n/k;
568  G4double ch2 = ch*ch;
569  G4double xsc = ch2*CLHEP::pi/(am +am*am);
570 
571  return xsc;
572 }
573 
575 //
576 // return Coulomb scattering xsc with Wentzel correction integrated between
577 // theta1 and < theta2
578 
579 inline G4double
581  G4double momentum, G4double Z,
582  G4double theta1, G4double theta2 )
583 {
584  G4double c1 = std::cos(theta1);
585  //G4cout<<"c1 = "<<c1<<G4endl;
586  G4double c2 = std::cos(theta2);
587  // G4cout<<"c2 = "<<c2<<G4endl;
588  G4double beta = CalculateParticleBeta( particle, momentum);
589  // G4cout<<"beta = "<<beta<<G4endl;
590  G4double z = particle->GetPDGCharge();
591  G4double n = CalculateZommerfeld( beta, z, Z );
592  // G4cout<<"fZomerfeld = "<<n<<G4endl;
593  G4double am = CalculateAm( momentum, n, Z);
594  // G4cout<<"cof Am = "<<am<<G4endl;
595  G4double k = momentum/CLHEP::hbarc;
596  // G4cout<<"k = "<<k*CLHEP::fermi<<" 1/fermi"<<G4endl;
597  // G4cout<<"k*Bohr_radius = "<<k*CLHEP::Bohr_radius<<G4endl;
598  G4double ch = n/k;
599  G4double ch2 = ch*ch;
600  am *= 2.;
601  G4double xsc = ch2*CLHEP::twopi*(c1-c2)/((1 - c1 + am)*(1 - c2 + am));
602 
603  return xsc;
604 }
605 
607 //
608 // For the calculation of arg Gamma(z) one needs complex extension
609 // of ln(Gamma(z)) here is approximate algorithm
610 
612 {
613  G4complex z1 = 12.*z;
614  G4complex z2 = z*z;
615  G4complex z3 = z2*z;
616  G4complex z5 = z2*z3;
617  G4complex z7 = z2*z5;
618 
619  z3 *= 360.;
620  z5 *= 1260.;
621  z7 *= 1680.;
622 
623  G4complex result = (z-0.5)*std::log(z)-z+0.5*G4Log(CLHEP::twopi);
624  result += 1./z1 - 1./z3 +1./z5 -1./z7;
625  return result;
626 }
627 
629 //
630 //
631 
633 {
634  G4double t, z, tmp, result;
635 
636  z = std::fabs(x);
637  t = 1.0/(1.0+0.5*z);
638 
639  tmp = t*std::exp(-z*z-1.26551223+t*(1.00002368+t*(0.37409196+t*(0.09678418+
640  t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+
641  t*(-0.82215223+t*0.17087277)))))))));
642 
643  if( x >= 0.) result = 1. - tmp;
644  else result = 1. + tmp;
645 
646  return result;
647 }
648 
650 //
651 //
652 
654 {
655  G4complex erfcz = 1. - GetErfComp( z, nMax);
656  return erfcz;
657 }
658 
660 //
661 //
662 
664 {
665  G4complex erfcz = 1. - GetErfSer( z, nMax);
666  return erfcz;
667 }
668 
670 //
671 //
672 
674 {
675  G4complex erfcz = 1. - GetErfInt( z); // , nMax);
676  return erfcz;
677 }
678 
679 
681 //
682 //
683 
685 {
686  G4complex miz = G4complex( z.imag(), -z.real() );
687  G4complex erfcz = 1. - GetErfComp( miz, nMax);
688  G4complex w = std::exp(-z*z)*erfcz;
689  return w;
690 }
691 
693 //
694 //
695 
697 {
698  G4complex miz = G4complex( z.imag(), -z.real() );
699  G4complex erfcz = 1. - GetErfSer( miz, nMax);
700  G4complex w = std::exp(-z*z)*erfcz;
701  return w;
702 }
703 
705 //
706 //
707 
709 {
710  G4complex miz = G4complex( z.imag(), -z.real() );
711  G4complex erfcz = 1. - GetErfInt( miz); // , nMax);
712  G4complex w = std::exp(-z*z)*erfcz;
713  return w;
714 }
715 
717 //
718 //
719 
721 {
722  G4int n;
723  G4double a =1., b = 1., tmp;
724  G4complex sum = z, d = z;
725 
726  for( n = 1; n <= nMax; n++)
727  {
728  a *= 2.;
729  b *= 2.*n +1.;
730  d *= z*z;
731 
732  tmp = a/b;
733 
734  sum += tmp*d;
735  }
736  sum *= 2.*std::exp(-z*z)/std::sqrt(CLHEP::pi);
737 
738  return sum;
739 }
740 
742 
744 {
746 
747  result = G4Exp(x*x-fReZ*fReZ);
748  result *= std::cos(2.*x*fReZ);
749  return result;
750 }
751 
753 
755 {
757 
758  result = G4Exp(x*x-fReZ*fReZ);
759  result *= std::sin(2.*x*fReZ);
760  return result;
761 }
762 
763 
765 //
766 //
767 
769 {
770  G4double out;
771 
773 
774  out= integral.Legendre96(this,&G4NuclNuclDiffuseElastic::GetCosHaPit2, 0., x );
775 
776  return out;
777 }
778 
780 //
781 //
782 
784 {
786 
787  G4double out =
788  integral.Legendre96(this,&G4NuclNuclDiffuseElastic::GetSinHaPit2, 0., x );
789 
790  return out;
791 }
792 
793 
795 //
796 //
797 
799 {
800  G4complex ca;
801 
802  G4double sinHalfTheta = std::sin(0.5*theta);
803  G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
804  sinHalfTheta2 += fAm;
805 
806  G4double order = 2.*fCoulombPhase0 - fZommerfeld*G4Log(sinHalfTheta2);
807  G4complex z = G4complex(0., order);
808  ca = std::exp(z);
809 
810  ca *= -fZommerfeld/(2.*fWaveVector*sinHalfTheta2);
811 
812  return ca;
813 }
814 
816 //
817 //
818 
820 {
821  G4complex ca = CoulombAmplitude(theta);
822  G4double out = ca.real()*ca.real() + ca.imag()*ca.imag();
823 
824  return out;
825 }
826 
828 //
829 //
830 
831 
833 {
835  // G4complex gammalog = GammaLogarithm(z);
836  G4complex gammalog = GammaLogB2n(z);
837  fCoulombPhase0 = gammalog.imag();
838 }
839 
841 //
842 //
843 
844 
846 {
847  G4complex z = G4complex(1. + n, fZommerfeld);
848  // G4complex gammalog = GammaLogarithm(z);
849  G4complex gammalog = GammaLogB2n(z);
850  return gammalog.imag();
851 }
852 
853 
855 //
856 //
857 
858 
860 {
861  fHalfRutThetaTg = fZommerfeld/fProfileLambda; // (fWaveVector*fNuclearRadius);
862  fRutherfordTheta = 2.*std::atan(fHalfRutThetaTg);
864  // G4cout<<"fRutherfordTheta = "<<fRutherfordTheta/degree<<" degree"<<G4endl;
865 
866 }
867 
869 //
870 //
871 
873 {
874  G4double dTheta = fRutherfordTheta - theta;
875  G4double result = 0., argument = 0.;
876 
877  if(std::abs(dTheta) < 0.001) result = fProfileAlpha*fProfileDelta;
878  else
879  {
880  argument = fProfileDelta*dTheta;
881  result = CLHEP::pi*argument*G4Exp(fProfileAlpha*argument);
882  result /= std::sinh(CLHEP::pi*argument);
883  result -= 1.;
884  result /= dTheta;
885  }
886  return result;
887 }
888 
890 //
891 //
892 
894 {
895  G4double dTheta = fRutherfordTheta + theta;
896  G4double argument = fProfileDelta*dTheta;
897 
898  G4double result = CLHEP::pi*argument*G4Exp(fProfileAlpha*argument);
899  result /= std::sinh(CLHEP::pi*argument);
900  result /= dTheta;
901 
902  return result;
903 }
904 
906 //
907 //
908 
910 {
911  G4double dTheta = fRutherfordTheta - theta;
912  G4double result = 0., argument = 0.;
913 
914  if(std::abs(dTheta) < 0.001) result = 1.;
915  else
916  {
917  argument = fProfileDelta*dTheta;
918  result = CLHEP::pi*argument;
919  result /= std::sinh(result);
920  }
921  return result;
922 }
923 
925 //
926 //
927 
929 {
930  G4double twosigma = 2.*fCoulombPhase0;
933  twosigma -= fProfileLambda*theta - 0.25*CLHEP::pi;
934 
935  twosigma *= fCofPhase;
936 
937  G4complex z = G4complex(0., twosigma);
938 
939  return std::exp(z);
940 }
941 
943 //
944 //
945 
947 {
948  G4double twosigma = 2.*fCoulombPhase0;
951  twosigma += fProfileLambda*theta - 0.25*CLHEP::pi;
952 
953  twosigma *= fCofPhase;
954 
955  G4complex z = G4complex(0., twosigma);
956 
957  return std::exp(z);
958 }
959 
960 
962 //
963 //
964 
966 {
967  G4double kappa = std::sqrt(0.5*fProfileLambda/std::sin(theta)/CLHEP::pi);
968  G4complex out = G4complex(kappa/fWaveVector,0.);
969  out *= ProfileFar(theta);
970  out *= PhaseFar(theta);
971  return out;
972 }
973 
974 
976 //
977 //
978 
980 {
981 
982  G4complex out = AmplitudeNear(theta) + fCofFar*AmplitudeFar(theta);
983  // G4complex out = AmplitudeNear(theta);
984  // G4complex out = AmplitudeFar(theta);
985  return out;
986 }
987 
989 //
990 //
991 
993 {
994  G4complex out = Amplitude(theta);
995  G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
996  return mod2;
997 }
998 
999 
1001 //
1002 //
1003 
1005 {
1006  G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1007  G4double dTheta = 0.5*(theta - fRutherfordTheta);
1008  G4double sindTheta = std::sin(dTheta);
1009 
1010  G4double order = std::sqrt(fProfileLambda/sinThetaR/CLHEP::pi)*2.*sindTheta;
1011  // G4cout<<"order = "<<order<<G4endl;
1012  G4double cosFresnel = 0.5 - GetCint(order);
1013  G4double sinFresnel = 0.5 - GetSint(order);
1014 
1015  G4double out = 0.5*( cosFresnel*cosFresnel + sinFresnel*sinFresnel );
1016 
1017  return out;
1018 }
1019 
1021 //
1022 // The xsc for Fresnel smooth nucleus profile
1023 
1025 {
1026  G4double ratio = GetRatioGen(theta);
1027  G4double ruthXsc = GetRutherfordXsc(theta);
1028  G4double xsc = ratio*ruthXsc;
1029  return xsc;
1030 }
1031 
1033 //
1034 // The xsc for Fresnel smooth nucleus profile for integration
1035 
1037 {
1038  G4double theta = std::sqrt(alpha);
1039  G4double xsc = GetFresnelDiffuseXsc(theta);
1040  return xsc;
1041 }
1042 
1044 //
1045 //
1046 
1048 {
1049  G4complex out = AmplitudeSim(theta);
1050  G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
1051  return mod2;
1052 }
1053 
1054 
1056 //
1057 //
1058 
1060 {
1061  G4complex out = AmplitudeGla(theta);
1062  G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
1063  return mod2;
1064 }
1065 
1067 //
1068 //
1069 
1071 {
1072  G4complex out = AmplitudeGG(theta);
1073  G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
1074  return mod2;
1075 }
1076 
1078 //
1079 //
1080 
1082  const G4double mt ,
1083  const G4double Plab )
1084 {
1085  G4double Elab = std::sqrt ( mp * mp + Plab * Plab );
1086  G4double sMand = mp*mp + mt*mt + 2*Elab*mt ;
1087 
1088  return sMand;
1089 }
1090 
1091 
1092 
1093 #endif
Float_t x
Definition: compare.C:6
const G4ParticleDefinition * thePionPlus
G4double CalculateNuclearRad(G4double A)
Float_t f4
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
G4complex GetErfSer(G4complex z, G4int nMax)
G4double GetRatioSim(G4double theta)
G4complex GetErfcInt(G4complex z)
G4double GetDiffElasticProb(G4double theta)
G4complex AmplitudeGG(G4double theta)
G4complex GetErfcComp(G4complex z, G4int nMax)
Double_t xx
std::vector< ExP01TrackerHit * > a
Definition: ExP01Classes.hh:33
G4double A13(G4double A) const
Definition: G4Pow.cc:138
G4double AmplitudeGGMod2(G4double theta)
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
G4double GetDiffElasticSumProbA(G4double alpha)
G4complex GetErfComp(G4complex z, G4int nMax)
G4complex GammaMore(G4double theta)
void SetQModelLowLimit(G4double value)
void InitialiseOnFly(G4double Z, G4double A)
G4complex TestErfcComp(G4complex z, G4int nMax)
const G4ParticleDefinition * fParticle
G4complex Amplitude(G4double theta)
G4complex CoulombAmplitude(G4double theta)
#define G4endl
Definition: G4ios.hh:61
const char * p
Definition: xmltok.h:285
G4double ProfileFar(G4double theta)
static constexpr double hbarc
Double_t z
G4double AmplitudeSimMod2(G4double theta)
G4double Legendre96(T &typeT, F f, G4double a, G4double b)
G4double GetDiffElasticSumProb(G4double theta)
G4double GetCoulombTotalXsc(const G4ParticleDefinition *particle, G4double momentum, G4double Z)
G4double GetPDGCharge() const
void SetHEModelLowLimit(G4double value)
G4double GetFresnelDiffuseXsc(G4double theta)
void InitDynParameters(const G4ParticleDefinition *theParticle, G4double partMom)
Float_t tmp
G4complex GammaLogarithm(G4complex xx)
Float_t f2
G4double GetInvCoulombElasticXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
Double_t beta
G4ParticleDefinition * theDeuteron
G4complex TestErfcInt(G4complex z)
G4double GetDiffuseElasticSumXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
std::vector< G4PhysicsTable * > fAngleBank
G4double SampleThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double A)
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
G4double GetPDGMass() const
void SetRecoilKinEnergyLimit(G4double value)
G4double AmplitudeGlaMod2(G4double theta)
G4double G4Log(G4double x)
Definition: G4Log.hh:230
std::vector< G4String > fElementNameVector
G4complex GammaLess(G4double theta)
G4double GetRatioGen(G4double theta)
Float_t Z
G4ParticleDefinition * theNeutron
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
static constexpr double fermi
Definition: SystemOfUnits.h:83
G4double SampleCoulombMuCMS(const G4ParticleDefinition *aParticle, G4double p)
G4double GetHadronNucleonXscNS(G4ParticleDefinition *pParticle, G4double pTkin, G4ParticleDefinition *tParticle)
Float_t f3
std::complex< G4double > G4complex
Definition: G4Types.hh:81
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
G4double ThetaCMStoThetaLab(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaCMS)
static G4Pow * GetInstance()
Definition: G4Pow.cc:57
void TestAngleTable(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)
TCanvas * c2
Definition: plot_hist.C:75
const XML_Char int const XML_Char * value
Definition: expat.h:331
void InitParametersGla(const G4DynamicParticle *aParticle, G4double partMom, G4double Z, G4double A)
G4double AmplitudeMod2(G4double theta)
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
G4double ThetaLabToThetaCMS(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaLab)
G4double GetFresnelIntegrandXsc(G4double alpha)
G4double SampleTableT(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
G4double SampleT(const G4ParticleDefinition *aParticle, G4double p, G4double A)
static const G4double alpha
G4ParticleDefinition * theProton
G4complex AmplitudeFar(G4double theta)
double A(double temperature)
Float_t d
G4complex PhaseFar(G4double theta)
G4double CalcMandelstamS(const G4double mp, const G4double mt, const G4double Plab)
Double_t radius
G4double G4ParticleHPJENDLHEData::G4double result
G4double GetDiffuseElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
G4double GetInvElasticSumXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
Double_t Z2
static constexpr double twopi
Definition: SystemOfUnits.h:55
G4complex AmplitudeNear(G4double theta)
G4complex GammaLogB2n(G4complex xx)
Double_t Z1
G4complex PhaseNear(G4double theta)
int G4int
Definition: G4Types.hh:78
void InitParameters(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)
G4complex GetErfcSer(G4complex z, G4int nMax)
G4double IntegralElasticProb(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
G4double GetRutherfordXsc(G4double theta)
G4double GetInvElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
G4double ProfileNear(G4double theta)
G4GLOB_DLL std::ostream G4cout
void SetPlabLowLimit(G4double value)
std::vector< G4double > fElementNumberVector
G4double SampleTableThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
G4double GetCoulombElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double Z)
Char_t n[5]
void SetLowestEnergyLimit(G4double value)
G4complex TestErfcSer(G4complex z, G4int nMax)
G4double Profile(G4double theta)
G4double GetCoulombIntegralXsc(const G4ParticleDefinition *particle, G4double momentum, G4double Z, G4double theta1, G4double theta2)
G4double SampleThetaLab(const G4HadProjectile *aParticle, G4double tmass, G4double A)
static constexpr double halfpi
Definition: SystemOfUnits.h:56
static constexpr double fine_structure_const
Float_t x2[n_points_geant4]
Definition: compare.C:26
const G4ParticleDefinition * thePionMinus
G4double GetScatteringAngle(G4int iMomentum, G4int iAngle, G4double position)
G4double CoulombAmplitudeMod2(G4double theta)
static constexpr double Bohr_radius
G4double GetIntegrandFunction(G4double theta)
static constexpr double pi
Definition: SystemOfUnits.h:54
G4double GetLegendrePol(G4int n, G4double x)
G4complex AmplitudeGla(G4double theta)
G4complex AmplitudeSim(G4double theta)