65 const G4double G4PAIySection::fDelta = 0.005;
66 const G4double G4PAIySection::fError = 0.005;
68 const G4int G4PAIySection::fMaxSplineSize = 500;
79 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
80 fIntervalNumber = fSplineNumber = 0;
86 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
89 fRePartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
90 fImPartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
100 for(
G4int i = 0; i < 500; ++i )
102 for(
G4int j = 0; j < 112; ++j ) { fPAItable[i][j] = 0.0; }
125 G4cout<<
"G4PAIySection::Initialize(...,G4SandiaTable* sandia)"<<
G4endl;
139 G4cout<<
"fDensity = "<<fDensity<<
"\t"<<fElectronDensity<<
"\t fIntervalNumber = "
140 <<fIntervalNumber<<
" (beta*gamma)^2= " << betaGammaSq <<
G4endl;
148 for( i = 1; i <= fIntervalNumber; i++ )
156 || i >= fIntervalNumber )
158 fEnergyInterval[i] = maxEnergyTransfer;
169 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
170 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
174 G4cout<<
"last i = "<<i<<
"; "<<
"fIntervalNumber = "
175 <<fIntervalNumber<<
G4endl;
177 if( fEnergyInterval[fIntervalNumber] != maxEnergyTransfer )
180 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
184 for( i = 1; i <= fIntervalNumber; i++ )
186 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
187 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
191 G4cout<<
"Now checking, if two borders are too close together"<<
G4endl;
193 for( i = 1; i < fIntervalNumber; i++ )
195 if( fEnergyInterval[i+1]-fEnergyInterval[i] >
196 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]) )
continue;
199 for( j = i; j < fIntervalNumber; j++ )
201 fEnergyInterval[j] = fEnergyInterval[j+1];
212 for( i = 1; i <= fIntervalNumber; i++ )
214 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
215 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
220 ComputeLowEnergyCof(material);
223 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
225 NormShift(betaGammaSqRef);
226 SplainPAI(betaGammaSqRef);
230 for( i = 1; i <= fSplineNumber; i++ )
232 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
234 if( fVerbose > 0 )
G4cout<<i<<
"; dNdxPAI = "<<fDifPAIySection[i]<<
G4endl;
236 IntegralPAIySection();
249 static const G4double p0 = 1.20923e+00;
250 static const G4double p1 = 3.53256e-01;
251 static const G4double p2 = -1.45052e-03;
256 for( i = 0; i < numberOfElements; i++ )
259 sumZ += thisMaterialZ[i];
260 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
262 for( i = 0; i < numberOfElements; i++ )
264 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
266 fLowEnergyCof = sumCof;
267 delete [] thisMaterialZ;
268 delete [] thisMaterialCof;
280 G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
281 fLorentzFactor[fRefGammaNumber] - 1;
285 NormShift(betaGammaSq);
286 SplainPAI(betaGammaSq);
288 IntegralPAIySection();
292 for( i = 0; i<= fSplineNumber; i++)
294 fPAItable[i][fRefGammaNumber] = fIntegralPAIySection[i];
296 if(i != 0) fPAItable[i][0] = fSplineEnergy[i];
298 fPAItable[0][0] = fSplineNumber;
300 for(
G4int j = 1; j < 112; j++)
302 if( j == fRefGammaNumber )
continue;
304 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
306 for(i = 1; i <= fSplineNumber; i++)
308 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
309 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
310 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
312 IntegralPAIySection();
316 for(i = 0; i <= fSplineNumber; i++)
318 fPAItable[i][j] = fIntegralPAIySection[i];
332 for( i = 1; i <= fIntervalNumber-1; i++ )
334 for( j = 1; j <= 2; j++ )
336 fSplineNumber = (i-1)*2 + j;
338 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
339 else fSplineEnergy[fSplineNumber] = fEnergyInterval[i+1]*(1-fDelta);
344 fIntegralTerm[1]=RutherfordIntegral(1,fEnergyInterval[1],fSplineEnergy[1]);
348 for(i=2;i<=fSplineNumber;i++)
350 if(fSplineEnergy[i]<fEnergyInterval[j+1])
352 fIntegralTerm[i] = fIntegralTerm[i-1] +
353 RutherfordIntegral(j,fSplineEnergy[i-1],
358 G4double x = RutherfordIntegral(j,fSplineEnergy[i-1],
359 fEnergyInterval[j+1] );
361 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
362 RutherfordIntegral(j,fEnergyInterval[j],
369 fNormalizationCof = nfactor*fElectronDensity/fIntegralTerm[fSplineNumber];
376 for(
G4int k=1;k<=fIntervalNumber-1;k++)
381 fImPartDielectricConst[i] = fNormalizationCof*
382 ImPartDielectricConst(k,fSplineEnergy[i]);
383 fRePartDielectricConst[i] = fNormalizationCof*
384 RePartDielectricConst(fSplineEnergy[i]);
385 fIntegralTerm[i] *= fNormalizationCof;
387 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
388 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
389 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
406 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
408 if(fSplineEnergy[i+1] > fEnergyInterval[k+1])
418 for(
G4int j = fSplineNumber; j >= i+2; j-- )
420 fSplineEnergy[j] = fSplineEnergy[j-1];
421 fImPartDielectricConst[j] = fImPartDielectricConst[j-1];
422 fRePartDielectricConst[j] = fRePartDielectricConst[j-1];
423 fIntegralTerm[j] = fIntegralTerm[j-1];
425 fDifPAIySection[j] = fDifPAIySection[j-1];
426 fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
427 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
435 fSplineEnergy[i+1] = en1;
447 fImPartDielectricConst[i+1] = fNormalizationCof*
448 ImPartDielectricConst(k,fSplineEnergy[i+1]);
449 fRePartDielectricConst[i+1] = fNormalizationCof*
450 RePartDielectricConst(fSplineEnergy[i+1]);
451 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
452 RutherfordIntegral(k,fSplineEnergy[i],
455 fDifPAIySection[i+1] = DifPAIySection(i+1,betaGammaSq);
456 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
457 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
462 G4double x = 2*(fDifPAIySection[i+1] - y)/(fDifPAIySection[i+1] + y);
464 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])
465 /(fSplineEnergy[i+1]+fSplineEnergy[i]);
471 if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
496 c2 = (x2 - x1)*(x2 + x1)/(x12*x12);
497 c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/(x12*x12*x12);
500 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
515 energy2 = energy1*energy1;
516 energy3 = energy2*energy1;
517 energy4 = energy3*energy1;
519 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
520 result *=
hbarc/energy1;
535 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
536 c1,
c2, c3, cof1, cof2, xln1, xln2, xln3,
result;
541 for(
G4int i=1;i<=fIntervalNumber-1;i++)
543 x1 = fEnergyInterval[i];
544 x2 = fEnergyInterval[i+1];
555 xln3 = log((x2 + x0)/(x1 + x0));
562 c2 = (x2 - x1)*(x2 +x1)/(x12*x12);
563 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/(x12*x12*x12);
565 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
566 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
567 result -= fA3[i]*c2/2/x02;
568 result -= fA4[i]*c3/3/x02;
570 cof1 = fA1[i]/x02 + fA3[i]/x04;
571 cof2 = fA2[i]/x03 + fA4[i]/x05;
573 result += 0.5*(cof1 +cof2)*xln2;
574 result += 0.5*(cof1 - cof2)*xln3;
591 G4double beta, be2,cof,x1,x2,x3,x4,x5,x6,x7,x8,
result;
596 be2 = betaGammaSq/(1 + betaGammaSq);
602 if( betaGammaSq < 0.01 ) x2 = log(be2);
605 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
606 (1/betaGammaSq - fRePartDielectricConst[i]) +
607 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
609 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
615 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
616 x5 = -1 - fRePartDielectricConst[i] +
617 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
618 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
620 x7 = atan2(fImPartDielectricConst[i],x3);
625 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/
hbarc;
627 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
628 fImPartDielectricConst[i]*fImPartDielectricConst[i];
630 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
637 result *= (1 - exp(-beta/betaBohr/lowCof));
658 G4double logarithm, x3, x5, argument, modul2, dNdxC;
663 be2 = betaGammaSq/(1 + betaGammaSq);
666 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
669 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
670 (1/betaGammaSq - fRePartDielectricConst[i]) +
671 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
672 logarithm += log(1+1.0/betaGammaSq);
675 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
681 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
682 x5 = -1.0 - fRePartDielectricConst[i] +
683 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
684 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
685 if( x3 == 0.0 ) argument = 0.5*
pi;
686 else argument = atan2(fImPartDielectricConst[i],x3);
689 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/
hbarc;
691 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
695 dNdxC *= (1-exp(-be4/betaBohr4));
699 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
700 fImPartDielectricConst[i]*fImPartDielectricConst[i];
717 G4double cof, resonance, modul2, dNdxP;
722 be2 = betaGammaSq/(1 + betaGammaSq);
726 resonance *= fImPartDielectricConst[i]/
hbarc;
728 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
733 dNdxP *= (1-exp(-be4/betaBohr4));
737 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
738 fImPartDielectricConst[i]*fImPartDielectricConst[i];
755 fIntegralPAIySection[fSplineNumber] = 0;
756 fIntegralPAIdEdx[fSplineNumber] = 0;
757 fIntegralPAIySection[0] = 0;
758 G4int k = fIntervalNumber -1;
760 for(
G4int i = fSplineNumber-1; i >= 1; i--)
762 if(fSplineEnergy[i] >= fEnergyInterval[k])
764 fIntegralPAIySection[i] = fIntegralPAIySection[i+1] + SumOverInterval(i);
765 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] + SumOverIntervaldEdx(i);
769 fIntegralPAIySection[i] = fIntegralPAIySection[i+1] +
770 SumOverBorder(i+1,fEnergyInterval[k]);
771 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
772 SumOverBorderdEdx(i+1,fEnergyInterval[k]);
787 fIntegralCerenkov[fSplineNumber] = 0;
788 fIntegralCerenkov[0] = 0;
789 k = fIntervalNumber -1;
791 for( i = fSplineNumber-1; i >= 1; i-- )
793 if(fSplineEnergy[i] >= fEnergyInterval[k])
795 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] + SumOverInterCerenkov(i);
800 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
801 SumOverBordCerenkov(i+1,fEnergyInterval[k]);
817 fIntegralPlasmon[fSplineNumber] = 0;
818 fIntegralPlasmon[0] = 0;
819 G4int k = fIntervalNumber -1;
820 for(
G4int i=fSplineNumber-1;i>=1;i--)
822 if(fSplineEnergy[i] >= fEnergyInterval[k])
824 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] + SumOverInterPlasmon(i);
828 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
829 SumOverBordPlasmon(i+1,fEnergyInterval[k]);
846 x0 = fSplineEnergy[i];
847 x1 = fSplineEnergy[i+1];
849 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
851 y0 = fDifPAIySection[i];
852 yy1 = fDifPAIySection[i+1];
856 a = log10(yy1/y0)/log10(c);
863 result = b*log(x1/x0);
867 result = y0*(x1*pow(c,a-1) - x0)/a;
872 fIntegralPAIySection[0] += b*log(x1/x0);
876 fIntegralPAIySection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
888 x0 = fSplineEnergy[i];
889 x1 = fSplineEnergy[i+1];
891 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
893 y0 = fDifPAIySection[i];
894 yy1 = fDifPAIySection[i+1];
896 a = log10(yy1/y0)/log10(c);
902 result = b*log(x1/x0);
906 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
922 x0 = fSplineEnergy[i];
923 x1 = fSplineEnergy[i+1];
925 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
927 y0 = fdNdxCerenkov[i];
928 yy1 = fdNdxCerenkov[i+1];
933 a = log10(yy1/y0)/log10(c);
935 if(a < 20.) b = y0/pow(x0,a);
938 if(a == 0) result = b*log(c);
939 else result = y0*(x1*pow(c,a-1) - x0)/a;
942 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
943 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
959 x0 = fSplineEnergy[i];
960 x1 = fSplineEnergy[i+1];
962 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
964 y0 = fdNdxPlasmon[i];
965 yy1 = fdNdxPlasmon[i+1];
967 a = log10(yy1/y0)/log10(c);
970 if(a < 20.) b = y0/pow(x0,a);
973 if(a == 0) result = b*log(x1/x0);
974 else result = y0*(x1*pow(c,a-1) - x0)/a;
977 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
978 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
995 x0 = fSplineEnergy[i];
996 x1 = fSplineEnergy[i+1];
997 y0 = fDifPAIySection[i];
998 yy1 = fDifPAIySection[i+1];
1002 a = log10(yy1/y0)/log10(x1/x0);
1005 if(a < 20.) b = y0/pow(x0,a);
1010 result = b*log(x0/e0);
1014 result = y0*(x0 - e0*pow(d,a-1))/a;
1019 fIntegralPAIySection[0] += b*log(x0/e0);
1023 fIntegralPAIySection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1025 x0 = fSplineEnergy[i - 1];
1026 x1 = fSplineEnergy[i - 2];
1027 y0 = fDifPAIySection[i - 1];
1028 yy1 = fDifPAIySection[i - 2];
1032 a = log10(yy1/y0)/log10(x1/x0);
1038 result += b*log(e0/x0);
1042 result += y0*(e0*pow(d,a-1) - x0)/a;
1047 fIntegralPAIySection[0] += b*log(e0/x0);
1051 fIntegralPAIySection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1065 x0 = fSplineEnergy[i];
1066 x1 = fSplineEnergy[i+1];
1067 y0 = fDifPAIySection[i];
1068 yy1 = fDifPAIySection[i+1];
1072 a = log10(yy1/y0)/log10(x1/x0);
1075 if(a < 20.) b = y0/pow(x0,a);
1080 result = b*log(x0/e0);
1084 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1086 x0 = fSplineEnergy[i - 1];
1087 x1 = fSplineEnergy[i - 2];
1088 y0 = fDifPAIySection[i - 1];
1089 yy1 = fDifPAIySection[i - 2];
1093 a = log10(yy1/y0)/log10(x1/x0);
1095 if(a < 20.) b = y0/pow(x0,a);
1100 result += b*log(e0/x0);
1104 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1121 x0 = fSplineEnergy[i];
1122 x1 = fSplineEnergy[i+1];
1123 y0 = fdNdxCerenkov[i];
1124 yy1 = fdNdxCerenkov[i+1];
1131 a = log10(yy1/y0)/log10(c);
1134 if(a < 20.) b = y0/pow(x0,a);
1137 if( a == 0 ) result = b*log(x0/e0);
1138 else result = y0*(x0 - e0*pow(d,a-1))/a;
1141 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
1142 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1146 x0 = fSplineEnergy[i - 1];
1147 x1 = fSplineEnergy[i - 2];
1148 y0 = fdNdxCerenkov[i - 1];
1149 yy1 = fdNdxCerenkov[i - 2];
1156 a = log10(yy1/y0)/log10(x1/x0);
1159 if(a > 20.0) b = 0.0;
1160 else b = y0/pow(x0,a);
1165 if( a == 0 ) result += b*log(e0/x0);
1166 else result += y0*(e0*pow(d,a-1) - x0 )/a;
1170 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
1171 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1190 x0 = fSplineEnergy[i];
1191 x1 = fSplineEnergy[i+1];
1192 y0 = fdNdxPlasmon[i];
1193 yy1 = fdNdxPlasmon[i+1];
1197 a = log10(yy1/y0)/log10(c);
1200 if(a < 20.) b = y0/pow(x0,a);
1203 if( a == 0 ) result = b*log(x0/e0);
1204 else result = y0*(x0 - e0*pow(d,a-1))/a;
1207 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
1208 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1210 x0 = fSplineEnergy[i - 1];
1211 x1 = fSplineEnergy[i - 2];
1212 y0 = fdNdxPlasmon[i - 1];
1213 yy1 = fdNdxPlasmon[i - 2];
1217 a = log10(yy1/y0)/log10(c);
1219 if(a < 20.) b = y0/pow(x0,a);
1222 if( a == 0 ) result += b*log(e0/x0);
1223 else result += y0*(e0*pow(d,a-1) - x0)/a;
1226 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
1227 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1248 meanNumber = fIntegralPAIySection[1]*step;
1249 numOfCollisions =
G4Poisson(meanNumber);
1253 while(numOfCollisions)
1257 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1259 if( position >= fIntegralPAIySection[iTransfer] )
break;
1261 loss += fSplineEnergy[iTransfer] ;
1285 meanNumber = fIntegralCerenkov[1]*step;
1286 numOfCollisions =
G4Poisson(meanNumber);
1290 while(numOfCollisions)
1294 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1296 if( position >= fIntegralCerenkov[iTransfer] )
break;
1298 loss += fSplineEnergy[iTransfer] ;
1322 meanNumber = fIntegralPlasmon[1]*step;
1323 numOfCollisions =
G4Poisson(meanNumber);
1327 while(numOfCollisions)
1331 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1333 if( position >= fIntegralPlasmon[iTransfer] )
break;
1335 loss += fSplineEnergy[iTransfer] ;
1347 void G4PAIySection::CallError(
G4int i,
const G4String& methodName)
const
1349 G4String head =
"G4PAIySection::" + methodName +
"()";
1351 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
1360 G4int G4PAIySection::fNumberOfGammas = 111;
1362 const G4double G4PAIySection::fLorentzFactor[112] =
1365 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
1366 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
1367 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
1368 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
1369 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
1370 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
1371 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
1372 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
1373 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
1374 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
1375 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
1376 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
1377 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
1378 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
1379 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
1380 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
1381 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
1382 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
1383 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
1384 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
1385 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
1386 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
1395 const G4int G4PAIySection::fRefGammaNumber = 29;
G4double G4ParticleHPJENDLHEData::G4double result
static c2_factory< G4double > c2
G4long G4Poisson(G4double mean)
G4double SumOverIntervaldEdx(G4int intervalNumber)
std::ostringstream G4ExceptionDescription
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
void NormShift(G4double betaGammaSq)
std::vector< ExP01TrackerHit * > a
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double SumOverInterCerenkov(G4int intervalNumber)
G4double GetDensity() const
G4int GetMaxInterval() const
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double GetSandiaMatTablePAI(G4int, G4int) const
void ComputeLowEnergyCof(const G4Material *material)
const G4Element * GetElement(G4int iel) const
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4GLOB_DLL std::ostream G4cout
G4double GetStepEnergyLoss(G4double step)
G4double GetElectronDensity() const
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
static constexpr double eV
G4double GetStepCerenkovLoss(G4double step)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double SumOverBorder(G4int intervalNumber, G4double energy)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SplainPAI(G4double betaGammaSq)
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
static constexpr double pi
size_t GetNumberOfElements() const
G4double RePartDielectricConst(G4double energy)
G4double GetStepPlasmonLoss(G4double step)
G4double DifPAIySection(G4int intervalNumber, G4double betaGammaSq)
static constexpr double keV
G4double SumOverInterval(G4int intervalNumber)
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
void IntegralPAIySection()
G4double SumOverInterPlasmon(G4int intervalNumber)