82 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
83 fIntervalNumber = fSplineNumber = 0;
87 fRePartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
88 fImPartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
98 for(
G4int i = 0; i < 500; ++i )
100 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
123 G4cout<<
"G4PAIySection::Initialize(...,G4SandiaTable* sandia)"<<
G4endl;
137 G4cout<<
"fDensity = "<<fDensity<<
"\t"<<fElectronDensity<<
"\t fIntervalNumber = "
138 <<fIntervalNumber<<
" (beta*gamma)^2= " << betaGammaSq <<
G4endl;
146 for( i = 1; i <= fIntervalNumber; i++ )
154 || i >= fIntervalNumber )
156 fEnergyInterval[i] = maxEnergyTransfer;
167 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
168 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
172 G4cout<<
"last i = "<<i<<
"; "<<
"fIntervalNumber = "
173 <<fIntervalNumber<<
G4endl;
175 if( fEnergyInterval[fIntervalNumber] != maxEnergyTransfer )
178 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
182 for( i = 1; i <= fIntervalNumber; i++ )
184 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
185 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
189 G4cout<<
"Now checking, if two borders are too close together"<<
G4endl;
191 for( i = 1; i < fIntervalNumber; i++ )
193 if( fEnergyInterval[i+1]-fEnergyInterval[i] >
194 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]) )
continue;
197 for( j = i; j < fIntervalNumber; j++ )
199 fEnergyInterval[j] = fEnergyInterval[j+1];
210 for( i = 1; i <= fIntervalNumber; i++ )
212 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
213 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
218 ComputeLowEnergyCof(material);
221 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
223 NormShift(betaGammaSqRef);
224 SplainPAI(betaGammaSqRef);
228 for( i = 1; i <= fSplineNumber; i++ )
230 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
232 if( fVerbose > 0 )
G4cout<<i<<
"; dNdxPAI = "<<fDifPAIySection[i]<<
G4endl;
234 IntegralPAIySection();
254 for( i = 0; i < numberOfElements; i++ )
257 sumZ += thisMaterialZ[i];
258 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
260 for( i = 0; i < numberOfElements; i++ )
262 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
264 fLowEnergyCof = sumCof;
265 delete [] thisMaterialZ;
266 delete [] thisMaterialCof;
278 G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
279 fLorentzFactor[fRefGammaNumber] - 1;
283 NormShift(betaGammaSq);
284 SplainPAI(betaGammaSq);
286 IntegralPAIySection();
290 for( i = 0; i<= fSplineNumber; i++)
292 fPAItable[i][fRefGammaNumber] = fIntegralPAIySection[i];
294 if(i != 0) fPAItable[i][0] = fSplineEnergy[i];
296 fPAItable[0][0] = fSplineNumber;
298 for(
G4int j = 1; j < 112; j++)
300 if( j == fRefGammaNumber )
continue;
302 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
304 for(i = 1; i <= fSplineNumber; i++)
306 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
307 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
308 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
310 IntegralPAIySection();
314 for(i = 0; i <= fSplineNumber; i++)
316 fPAItable[i][j] = fIntegralPAIySection[i];
330 for( i = 1; i <= fIntervalNumber-1; i++ )
332 for( j = 1; j <= 2; j++ )
334 fSplineNumber = (i-1)*2 + j;
336 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
337 else fSplineEnergy[fSplineNumber] = fEnergyInterval[i+1]*(1-fDelta);
342 fIntegralTerm[1]=RutherfordIntegral(1,fEnergyInterval[1],fSplineEnergy[1]);
346 for(i=2;i<=fSplineNumber;i++)
348 if(fSplineEnergy[i]<fEnergyInterval[j+1])
350 fIntegralTerm[i] = fIntegralTerm[i-1] +
351 RutherfordIntegral(j,fSplineEnergy[i-1],
356 G4double x = RutherfordIntegral(j,fSplineEnergy[i-1],
357 fEnergyInterval[j+1] );
359 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
360 RutherfordIntegral(j,fEnergyInterval[j],
365 fNormalizationCof = 2*
pi*
pi*hbarc*hbarc*fine_structure_const/electron_mass_c2;
366 fNormalizationCof *= fElectronDensity/fIntegralTerm[fSplineNumber];
373 for(
G4int k=1;k<=fIntervalNumber-1;k++)
378 fImPartDielectricConst[i] = fNormalizationCof*
379 ImPartDielectricConst(k,fSplineEnergy[i]);
380 fRePartDielectricConst[i] = fNormalizationCof*
381 RePartDielectricConst(fSplineEnergy[i]);
382 fIntegralTerm[i] *= fNormalizationCof;
384 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
385 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
386 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
403 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
405 if(fSplineEnergy[i+1] > fEnergyInterval[k+1])
415 for(
G4int j = fSplineNumber; j >= i+2; j-- )
417 fSplineEnergy[j] = fSplineEnergy[j-1];
418 fImPartDielectricConst[j] = fImPartDielectricConst[j-1];
419 fRePartDielectricConst[j] = fRePartDielectricConst[j-1];
420 fIntegralTerm[j] = fIntegralTerm[j-1];
422 fDifPAIySection[j] = fDifPAIySection[j-1];
423 fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
424 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
432 fSplineEnergy[i+1] = en1;
438 G4double b = log10(yy1) - a*log10(x1);
444 fImPartDielectricConst[i+1] = fNormalizationCof*
445 ImPartDielectricConst(k,fSplineEnergy[i+1]);
446 fRePartDielectricConst[i+1] = fNormalizationCof*
447 RePartDielectricConst(fSplineEnergy[i+1]);
448 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
449 RutherfordIntegral(k,fSplineEnergy[i],
452 fDifPAIySection[i+1] = DifPAIySection(i+1,betaGammaSq);
453 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
454 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
459 G4double x = 2*(fDifPAIySection[i+1] - y)/(fDifPAIySection[i+1] + y);
461 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])/(fSplineEnergy[i+1]+fSplineEnergy[i]);
467 if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
489 c1 = (x2 - x1)/x1/x2;
490 c2 = (x2 - x1)*(x2 + x1)/x1/x1/x2/x2;
491 c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
494 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
507 G4double energy2,energy3,energy4,result;
509 energy2 = energy1*energy1;
510 energy3 = energy2*energy1;
511 energy4 = energy3*energy1;
513 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
514 result *=hbarc/energy1;
529 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
530 c1,
c2,
c3, cof1, cof2, xln1, xln2, xln3, result;
535 for(
G4int i=1;i<=fIntervalNumber-1;i++)
537 x1 = fEnergyInterval[i];
538 x2 = fEnergyInterval[i+1];
549 xln3 = log((x2 + x0)/(x1 + x0));
554 c1 = (x2 - x1)/x1/x2;
555 c2 = (x2 - x1)*(x2 +x1)/x1/x1/x2/x2;
556 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
558 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
559 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
560 result -= fA3[i]*c2/2/x02;
561 result -= fA4[i]*c3/3/x02;
563 cof1 = fA1[i]/x02 + fA3[i]/x04;
564 cof2 = fA2[i]/x03 + fA4[i]/x05;
566 result += 0.5*(cof1 +cof2)*xln2;
567 result += 0.5*(cof1 - cof2)*xln3;
569 result *= 2*hbarc/
pi;
584 G4double beta, be2,cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
589 be2 = betaGammaSq/(1 + betaGammaSq);
593 x1 = log(2*electron_mass_c2/fSplineEnergy[i]);
595 if( betaGammaSq < 0.01 ) x2 = log(be2);
598 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
599 (1/betaGammaSq - fRePartDielectricConst[i]) +
600 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
602 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
608 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
609 x5 = -1 - fRePartDielectricConst[i] +
610 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
611 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
613 x7 = atan2(fImPartDielectricConst[i],x3);
618 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
620 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
621 fImPartDielectricConst[i]*fImPartDielectricConst[i];
623 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
624 if(result < 1.0e-8) result = 1.0e-8;
625 result *= fine_structure_const/be2/
pi;
630 result *= (1 - exp(-beta/
betaBohr/lowCof));
651 G4double logarithm, x3, x5, argument, modul2, dNdxC;
656 be2 = betaGammaSq/(1 + betaGammaSq);
659 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
662 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
663 (1/betaGammaSq - fRePartDielectricConst[i]) +
664 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
665 logarithm += log(1+1.0/betaGammaSq);
668 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
674 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
675 x5 = -1.0 - fRePartDielectricConst[i] +
676 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
677 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
678 if( x3 == 0.0 ) argument = 0.5*
pi;
679 else argument = atan2(fImPartDielectricConst[i],x3);
682 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
684 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
686 dNdxC *= fine_structure_const/be2/
pi;
692 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
693 fImPartDielectricConst[i]*fImPartDielectricConst[i];
710 G4double cof, resonance, modul2, dNdxP;
715 be2 = betaGammaSq/(1 + betaGammaSq);
718 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
719 resonance *= fImPartDielectricConst[i]/hbarc;
721 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
723 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
725 dNdxP *= fine_structure_const/be2/
pi;
730 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
731 fImPartDielectricConst[i]*fImPartDielectricConst[i];
748 fIntegralPAIySection[fSplineNumber] = 0;
749 fIntegralPAIdEdx[fSplineNumber] = 0;
750 fIntegralPAIySection[0] = 0;
751 G4int k = fIntervalNumber -1;
753 for(
G4int i = fSplineNumber-1; i >= 1; i--)
755 if(fSplineEnergy[i] >= fEnergyInterval[k])
757 fIntegralPAIySection[i] = fIntegralPAIySection[i+1] + SumOverInterval(i);
758 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] + SumOverIntervaldEdx(i);
762 fIntegralPAIySection[i] = fIntegralPAIySection[i+1] +
763 SumOverBorder(i+1,fEnergyInterval[k]);
764 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
765 SumOverBorderdEdx(i+1,fEnergyInterval[k]);
780 fIntegralCerenkov[fSplineNumber] = 0;
781 fIntegralCerenkov[0] = 0;
782 k = fIntervalNumber -1;
784 for( i = fSplineNumber-1; i >= 1; i-- )
786 if(fSplineEnergy[i] >= fEnergyInterval[k])
788 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] + SumOverInterCerenkov(i);
793 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
794 SumOverBordCerenkov(i+1,fEnergyInterval[k]);
810 fIntegralPlasmon[fSplineNumber] = 0;
811 fIntegralPlasmon[0] = 0;
812 G4int k = fIntervalNumber -1;
813 for(
G4int i=fSplineNumber-1;i>=1;i--)
815 if(fSplineEnergy[i] >= fEnergyInterval[k])
817 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] + SumOverInterPlasmon(i);
821 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
822 SumOverBordPlasmon(i+1,fEnergyInterval[k]);
839 x0 = fSplineEnergy[i];
840 x1 = fSplineEnergy[i+1];
842 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
844 y0 = fDifPAIySection[i];
845 yy1 = fDifPAIySection[i+1];
849 a = log10(yy1/y0)/log10(c);
856 result = b*log(x1/x0);
860 result = y0*(x1*pow(c,a-1) - x0)/a;
865 fIntegralPAIySection[0] += b*log(x1/x0);
869 fIntegralPAIySection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
881 x0 = fSplineEnergy[i];
882 x1 = fSplineEnergy[i+1];
884 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
886 y0 = fDifPAIySection[i];
887 yy1 = fDifPAIySection[i+1];
889 a = log10(yy1/y0)/log10(c);
895 result = b*log(x1/x0);
899 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
915 x0 = fSplineEnergy[i];
916 x1 = fSplineEnergy[i+1];
918 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
920 y0 = fdNdxCerenkov[i];
921 yy1 = fdNdxCerenkov[i+1];
926 a = log10(yy1/y0)/log10(c);
928 if(a < 20.) b = y0/pow(x0,a);
931 if(a == 0) result = b*log(c);
932 else result = y0*(x1*pow(c,a-1) - x0)/a;
935 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
936 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
952 x0 = fSplineEnergy[i];
953 x1 = fSplineEnergy[i+1];
955 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
957 y0 = fdNdxPlasmon[i];
958 yy1 = fdNdxPlasmon[i+1];
960 a = log10(yy1/y0)/log10(c);
963 if(a < 20.) b = y0/pow(x0,a);
966 if(a == 0) result = b*log(x1/x0);
967 else result = y0*(x1*pow(c,a-1) - x0)/a;
970 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
971 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
988 x0 = fSplineEnergy[i];
989 x1 = fSplineEnergy[i+1];
990 y0 = fDifPAIySection[i];
991 yy1 = fDifPAIySection[i+1];
995 a = log10(yy1/y0)/log10(x1/x0);
998 if(a < 20.) b = y0/pow(x0,a);
1003 result = b*log(x0/e0);
1007 result = y0*(x0 - e0*pow(d,a-1))/a;
1012 fIntegralPAIySection[0] += b*log(x0/e0);
1016 fIntegralPAIySection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1018 x0 = fSplineEnergy[i - 1];
1019 x1 = fSplineEnergy[i - 2];
1020 y0 = fDifPAIySection[i - 1];
1021 yy1 = fDifPAIySection[i - 2];
1025 a = log10(yy1/y0)/log10(x1/x0);
1031 result += b*log(e0/x0);
1035 result += y0*(e0*pow(d,a-1) - x0)/a;
1040 fIntegralPAIySection[0] += b*log(e0/x0);
1044 fIntegralPAIySection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1058 x0 = fSplineEnergy[i];
1059 x1 = fSplineEnergy[i+1];
1060 y0 = fDifPAIySection[i];
1061 yy1 = fDifPAIySection[i+1];
1065 a = log10(yy1/y0)/log10(x1/x0);
1068 if(a < 20.) b = y0/pow(x0,a);
1073 result = b*log(x0/e0);
1077 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1079 x0 = fSplineEnergy[i - 1];
1080 x1 = fSplineEnergy[i - 2];
1081 y0 = fDifPAIySection[i - 1];
1082 yy1 = fDifPAIySection[i - 2];
1086 a = log10(yy1/y0)/log10(x1/x0);
1088 if(a < 20.) b = y0/pow(x0,a);
1093 result += b*log(e0/x0);
1097 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1114 x0 = fSplineEnergy[i];
1115 x1 = fSplineEnergy[i+1];
1116 y0 = fdNdxCerenkov[i];
1117 yy1 = fdNdxCerenkov[i+1];
1124 a = log10(yy1/y0)/log10(c);
1127 if(a < 20.) b = y0/pow(x0,a);
1130 if( a == 0 ) result = b*log(x0/e0);
1131 else result = y0*(x0 - e0*pow(d,a-1))/a;
1134 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
1135 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1139 x0 = fSplineEnergy[i - 1];
1140 x1 = fSplineEnergy[i - 2];
1141 y0 = fdNdxCerenkov[i - 1];
1142 yy1 = fdNdxCerenkov[i - 2];
1149 a = log10(yy1/y0)/log10(x1/x0);
1152 if(a < 20.) b = y0/pow(x0,a);
1154 if(a > 20.0) b = 0.0;
1155 else b = y0/pow(x0,a);
1160 if( a == 0 ) result += b*log(e0/x0);
1161 else result += y0*(e0*pow(d,a-1) - x0 )/a;
1165 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
1166 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1185 x0 = fSplineEnergy[i];
1186 x1 = fSplineEnergy[i+1];
1187 y0 = fdNdxPlasmon[i];
1188 yy1 = fdNdxPlasmon[i+1];
1192 a = log10(yy1/y0)/log10(c);
1195 if(a < 20.) b = y0/pow(x0,a);
1198 if( a == 0 ) result = b*log(x0/e0);
1199 else result = y0*(x0 - e0*pow(d,a-1))/a;
1202 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
1203 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1205 x0 = fSplineEnergy[i - 1];
1206 x1 = fSplineEnergy[i - 2];
1207 y0 = fdNdxPlasmon[i - 1];
1208 yy1 = fdNdxPlasmon[i - 2];
1212 a = log10(yy1/y0)/log10(c);
1214 if(a < 20.) b = y0/pow(x0,a);
1217 if( a == 0 ) result += b*log(e0/x0);
1218 else result += y0*(e0*pow(d,a-1) - x0)/a;
1221 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
1222 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1243 meanNumber = fIntegralPAIySection[1]*step;
1244 numOfCollisions =
G4Poisson(meanNumber);
1248 while(numOfCollisions)
1252 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1254 if( position >= fIntegralPAIySection[iTransfer] )
break;
1256 loss += fSplineEnergy[iTransfer] ;
1279 meanNumber = fIntegralCerenkov[1]*step;
1280 numOfCollisions =
G4Poisson(meanNumber);
1284 while(numOfCollisions)
1288 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1290 if( position >= fIntegralCerenkov[iTransfer] )
break;
1292 loss += fSplineEnergy[iTransfer] ;
1315 meanNumber = fIntegralPlasmon[1]*step;
1316 numOfCollisions =
G4Poisson(meanNumber);
1320 while(numOfCollisions)
1324 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1326 if( position >= fIntegralPlasmon[iTransfer] )
break;
1328 loss += fSplineEnergy[iTransfer] ;
1341 G4String head =
"G4PAIySection::" + methodName +
"()";
1343 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
1357 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
1358 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
1359 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
1360 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
1361 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
1362 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
1363 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
1364 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
1365 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
1366 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
1367 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
1368 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
1369 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
1370 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
1371 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
1372 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
1373 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
1374 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
1375 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
1376 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
1377 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
1378 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
static c2_factory< G4double > c2
G4long G4Poisson(G4double mean)
G4double SumOverIntervaldEdx(G4int intervalNumber)
std::ostringstream G4ExceptionDescription
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
static const G4double fDelta
static const G4int fMaxSplineSize
void NormShift(G4double betaGammaSq)
static const G4double betaBohr
static const G4double fLorentzFactor[112]
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double SumOverInterCerenkov(G4int intervalNumber)
static const G4double cofBetaBohr
G4double GetDensity() const
void CallError(G4int i, const G4String &methodName) 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)
static const G4double betaBohr4
static G4int fNumberOfGammas
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 const G4double betaBohr2
G4double GetStepCerenkovLoss(G4double step)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
static const G4int fRefGammaNumber
G4double SumOverBorder(G4int intervalNumber, G4double energy)
void SplainPAI(G4double betaGammaSq)
static const G4double fError
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
size_t GetNumberOfElements() const
G4double RePartDielectricConst(G4double energy)
G4double GetStepPlasmonLoss(G4double step)
G4double DifPAIySection(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverInterval(G4int intervalNumber)
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
void IntegralPAIySection()
G4double SumOverInterPlasmon(G4int intervalNumber)