80const G4double G4PAIxSection::fDelta = 0.005;
81const G4double G4PAIxSection::fError = 0.005;
83const G4int G4PAIxSection::fMaxSplineSize = 1000;
93 fMatSandiaMatrix =
nullptr;
94 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
95 fIntervalNumber = fSplineNumber = 0;
99 fRePartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
100 fImPartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
107 fIntegralPAIxSection =
G4DataVector(fMaxSplineSize,0.0);
116 for(
G4int i = 0; i < 500; ++i )
118 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
131 fMaterialIndex = matIndex;
134 fSandia = (*theMaterialTable)[matIndex]->GetSandiaTable();
149 for(j = 1; j < 5; ++j)
164 fMatSandiaMatrix =
nullptr;
169 fMaterialIndex = materialIndex;
170 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
171 fElectronDensity = (*theMaterialTable)[materialIndex]->
172 GetElectronDensity();
173 fIntervalNumber = (*theMaterialTable)[materialIndex]->
174 GetSandiaTable()->GetMatNbOfIntervals();
184 for(i = 1; i <= fIntervalNumber; i++ )
186 if(((*theMaterialTable)[materialIndex]->
187 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0) >= maxEnergyTransfer) ||
188 i > fIntervalNumber )
190 fEnergyInterval[i] = maxEnergyTransfer;
194 fEnergyInterval[i] = (*theMaterialTable)[materialIndex]->
195 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0);
196 fA1[i] = (*theMaterialTable)[materialIndex]->
197 GetSandiaTable()->GetSandiaCofForMaterial(i-1,1);
198 fA2[i] = (*theMaterialTable)[materialIndex]->
199 GetSandiaTable()->GetSandiaCofForMaterial(i-1,2);
200 fA3[i] = (*theMaterialTable)[materialIndex]->
201 GetSandiaTable()->GetSandiaCofForMaterial(i-1,3);
202 fA4[i] = (*theMaterialTable)[materialIndex]->
203 GetSandiaTable()->GetSandiaCofForMaterial(i-1,4);
207 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
210 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
215 for(i=1;i<fIntervalNumber;i++)
217 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
218 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
224 for(j=i;j<fIntervalNumber;j++)
226 fEnergyInterval[j] = fEnergyInterval[j+1];
279 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
280 fIntervalNumber = fSplineNumber = 0;
299 for(
G4int i = 0; i < 500; ++i )
301 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
305 fMatSandiaMatrix =
nullptr;
309 fMaterialIndex = materialIndex;
310 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
311 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
313 fIntervalNumber = intNumber;
331 for( i = 1; i <= fIntervalNumber; i++ )
333 if( ( photoAbsCof[i-1][0] >= maxEnergyTransfer ) ||
334 i > fIntervalNumber )
336 fEnergyInterval[i] = maxEnergyTransfer;
340 fEnergyInterval[i] = photoAbsCof[i-1][0];
341 fA1[i] = photoAbsCof[i-1][1];
342 fA2[i] = photoAbsCof[i-1][2];
343 fA3[i] = photoAbsCof[i-1][3];
344 fA4[i] = photoAbsCof[i-1][4];
350 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
353 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
357 for( i = 1; i <= fIntervalNumber; i++ )
364 for( i = 1; i < fIntervalNumber; i++ )
366 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
367 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
373 for(j=i;j<fIntervalNumber;j++)
375 fEnergyInterval[j] = fEnergyInterval[j+1];
387 for( i = 1; i <= fIntervalNumber; i++ )
397 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
404 for(i = 1; i <= fSplineNumber; i++)
438 fMatSandiaMatrix =
nullptr;
442 G4int i, j, numberOfElements;
444 fMaterialIndex = materialIndex;
445 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
446 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
447 numberOfElements = (
G4int)(*theMaterialTable)[materialIndex]->GetNumberOfElements();
449 G4int* thisMaterialZ =
new G4int[numberOfElements];
451 for( i = 0; i < numberOfElements; ++i )
453 thisMaterialZ[i] = (
G4int)(*theMaterialTable)[materialIndex]->
454 GetElement(i)->GetZ();
457 fSandia = (*theMaterialTable)[materialIndex]->GetSandiaTable();
459 fIntervalNumber = thisMaterialSandiaTable.
SandiaIntervals(thisMaterialZ,
463 (*theMaterialTable)[materialIndex]->GetFractionVector() ,
464 numberOfElements,fIntervalNumber);
481 for( i = 1; i <= fIntervalNumber; i++ )
486 fEnergyInterval[i] = maxEnergyTransfer;
497 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
500 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
501 fA1[fIntervalNumber] = fA1[fIntervalNumber-1];
502 fA2[fIntervalNumber] = fA2[fIntervalNumber-1];
503 fA3[fIntervalNumber] = fA3[fIntervalNumber-1];
504 fA4[fIntervalNumber] = fA4[fIntervalNumber-1];
506 for(i=1;i<=fIntervalNumber;i++)
513 for( i = 1; i < fIntervalNumber; i++ )
515 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
516 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
522 for( j = i; j < fIntervalNumber; j++ )
524 fEnergyInterval[j] = fEnergyInterval[j+1];
558 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
565 for(i = 1; i <= fSplineNumber; i++)
594 delete fMatSandiaMatrix;
599 return fLorentzFactor[j];
614 G4cout<<
"G4PAIxSection::Initialize(...,G4SandiaTable* sandia)"<<
G4endl;
628 G4cout<<
"fDensity = "<<fDensity<<
"\t"<<fElectronDensity<<
"\t fIntervalNumber = "<<fIntervalNumber<<
G4endl;
636 for( i = 1; i <= fIntervalNumber; i++ )
645 fEnergyInterval[i] = maxEnergyTransfer;
657 G4cout<<i<<
"\t"<<fEnergyInterval[i]/keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
658 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
661 if( fVerbose > 0 )
G4cout<<
"last i = "<<i<<
"; "<<
"fIntervalNumber = "<<fIntervalNumber<<
G4endl;
663 if( fEnergyInterval[fIntervalNumber] != maxEnergyTransfer )
666 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
670 for( i = 1; i <= fIntervalNumber; i++ )
672 G4cout<<i<<
"\t"<<fEnergyInterval[i]/keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
673 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
676 if( fVerbose > 0 )
G4cout<<
"Now checking, if two borders are too close together"<<
G4endl;
678 for( i = 1; i < fIntervalNumber; i++ )
680 if( fEnergyInterval[i+1]-fEnergyInterval[i] >
681 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]) && fEnergyInterval[i] > 0.)
continue;
684 if( fVerbose > 0 )
G4cout<<i<<
"\t"<<fEnergyInterval[i]/keV<<
"\t"<<fEnergyInterval[i+1]/keV;
686 for( j = i; j < fIntervalNumber; j++ )
688 fEnergyInterval[j] = fEnergyInterval[j+1];
700 for( i = 1; i <= fIntervalNumber; i++ )
702 G4cout<<i<<
"\t"<<fEnergyInterval[i]/keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
703 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
711 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
718 for( i = 1; i <= fSplineNumber; i++ )
734 for( i = 1; i <= fSplineNumber; i++ )
736 if(fVerbose>0)
G4cout<<i<<
"; w = "<<fSplineEnergy[i]/keV<<
" keV; dN/dx_>w = "<<fIntegralPAIxSection[i]<<
" 1/mm"<<
G4endl;
751 static const G4double p0 = 1.20923e+00;
752 static const G4double p1 = 3.53256e-01;
753 static const G4double p2 = -1.45052e-03;
758 for( i = 0; i < numberOfElements; ++i )
761 sumZ += thisMaterialZ[i];
762 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
764 for( i = 0; i < numberOfElements; ++i )
766 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
768 fLowEnergyCof = sumCof;
769 delete [] thisMaterialZ;
770 delete [] thisMaterialCof;
782 G4int i, numberOfElements = (
G4int)(*theMaterialTable)[fMaterialIndex]->GetNumberOfElements();
792 for( i = 0; i < numberOfElements; ++i )
794 thisMaterialZ[i] = (*theMaterialTable)[fMaterialIndex]->GetElement(i)->GetZ();
795 sumZ += thisMaterialZ[i];
796 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
798 for( i = 0; i < numberOfElements; ++i )
800 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
802 fLowEnergyCof = sumCof;
804 delete [] thisMaterialZ;
805 delete [] thisMaterialCof;
816 G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
817 fLorentzFactor[fRefGammaNumber] - 1;
830 for(i = 0; i<= fSplineNumber; i++)
832 fPAItable[i][fRefGammaNumber] = fIntegralPAIxSection[i];
835 fPAItable[i][0] = fSplineEnergy[i];
838 fPAItable[0][0] = fSplineNumber;
840 for(
G4int j = 1; j < 112; j++)
842 if( j == fRefGammaNumber )
continue;
844 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
846 for(i = 1; i <= fSplineNumber; i++)
860 for(i = 0; i <= fSplineNumber; i++)
862 fPAItable[i][j] = fIntegralPAIxSection[i];
877 if(fVerbose>0)
G4cout<<
" G4PAIxSection::NormShift call "<<
G4endl;
880 for( i = 1; i <= fIntervalNumber-1; i++ )
882 for( j = 1; j <= 2; j++ )
884 fSplineNumber = (i-1)*2 + j;
886 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
887 else fSplineEnergy[fSplineNumber] = fEnergyInterval[i+1]*(1-fDelta);
888 if(fVerbose>0)
G4cout<<
"cn = "<<fSplineNumber<<
"; "<<
"w = "<<fSplineEnergy[fSplineNumber]/keV<<
" keV"<<
G4endl;
895 for( i = 2; i <= fSplineNumber; i++ )
897 if( fSplineEnergy[i]<fEnergyInterval[j+1] )
899 fIntegralTerm[i] = fIntegralTerm[i-1] +
906 fEnergyInterval[j+1] );
908 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
912 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/keV<<
" keV \t"<<fIntegralTerm[i]<<
"\n"<<
G4endl;
914 fNormalizationCof = 2*pi*pi*hbarc*hbarc*fine_structure_const/electron_mass_c2;
915 fNormalizationCof *= fElectronDensity/fIntegralTerm[fSplineNumber];
922 for(
G4int k = 1; k <= fIntervalNumber-1; k++ )
924 for( j = 1; j <= 2; j++ )
927 fImPartDielectricConst[i] = fNormalizationCof*
929 fRePartDielectricConst[i] = fNormalizationCof*
931 fIntegralTerm[i] *= fNormalizationCof;
938 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/keV<<
" keV, xsc = "<<fDifPAIxSection[i]<<
"\n"<<
G4endl;
952 G4int j, k = 1, i = 1;
954 if(fVerbose>0)
G4cout<<
" G4PAIxSection::SplainPAI call "<<
G4endl;
956 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
959 if( fSplineEnergy[i+1] > fEnergyInterval[k+1] )
963 if(fVerbose>0)
G4cout<<
" in if: i = "<<i<<
"; k = "<<k<<
G4endl;
966 if(fVerbose>0)
G4cout<<
" out if: i = "<<i<<
"; k = "<<k<<
G4endl;
972 for( j = fSplineNumber; j >= i+2; j-- )
974 fSplineEnergy[j] = fSplineEnergy[j-1];
975 fImPartDielectricConst[j] = fImPartDielectricConst[j-1];
976 fRePartDielectricConst[j] = fRePartDielectricConst[j-1];
977 fIntegralTerm[j] = fIntegralTerm[j-1];
979 fDifPAIxSection[j] = fDifPAIxSection[j-1];
980 fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
981 fdNdxMM[j] = fdNdxMM[j-1];
982 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
983 fdNdxResonance[j] = fdNdxResonance[j-1];
990 if(fVerbose>0)
G4cout<<
"Spline: x1 = "<<x1<<
"; x2 = "<<x2<<
", yy1 = "<<yy1<<
"; y2 = "<<y2<<
G4endl;
997 fSplineEnergy[i+1] = en1;
1002 G4double a = log10(y2/yy1)/log10(x2/x1);
1003 G4double b = log10(yy1) - a*log10(x1);
1010 fImPartDielectricConst[i+1] = fNormalizationCof*
1012 fRePartDielectricConst[i+1] = fNormalizationCof*
1014 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
1016 fSplineEnergy[i+1]);
1020 fdNdxMM[i+1] =
PAIdNdxMM(i+1,betaGammaSq);
1026 if(fVerbose>0)
G4cout<<
"Spline, a = "<<a<<
"; b = "<<b<<
"; new xsc = "<<y<<
"; compxsc = "<<fDifPAIxSection[i+1]<<
G4endl;
1030 G4double x = 2*(fDifPAIxSection[i+1] - y)/(fDifPAIxSection[i+1] + y);
1032 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])/(fSplineEnergy[i+1]+fSplineEnergy[i]);
1038 if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
1061 c1 = (x2 - x1)/x1/x2;
1062 c2 = (x2 - x1)*(x2 + x1)/x1/x1/x2/x2;
1063 c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1066 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
1079 G4double energy2,energy3,energy4,result;
1081 energy2 = energy1*energy1;
1082 energy3 = energy2*energy1;
1083 energy4 = energy3*energy1;
1085 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
1086 result *=hbarc/energy1;
1099 G4double energy2, energy3, energy4, result, lambda;
1101 energy2 = energy1*energy1;
1102 energy3 = energy2*energy1;
1103 energy4 = energy3*energy1;
1109 for( i = 1; i <= fIntervalNumber; i++ )
1111 if( energy1 < fEnergyInterval[i])
break;
1116 result = fA1[i]/energy1+fA2[i]/energy2+fA3[i]/energy3+fA4[i]/energy4;
1118 if( result >
DBL_MIN ) lambda = 1./result;
1157 range = cofA*energy*( 1 - cofB/(1 + cofC*energy) );
1173 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
1174 c1, c2, c3, cof1, cof2, xln1, xln2, xln3, result;
1179 for(
G4int i=1;i<=fIntervalNumber-1;i++)
1181 x1 = fEnergyInterval[i];
1182 x2 = fEnergyInterval[i+1];
1193 xln3 = log((x2 + x0)/(x1 + x0));
1198 c1 = (x2 - x1)/x1/x2;
1199 c2 = (x2 - x1)*(x2 +x1)/x1/x1/x2/x2;
1200 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1202 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
1203 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
1204 result -= fA3[i]*c2/2/x02;
1205 result -= fA4[i]*c3/3/x02;
1207 cof1 = fA1[i]/x02 + fA3[i]/x04;
1208 cof2 = fA2[i]/x03 + fA4[i]/x05;
1210 result += 0.5*(cof1 +cof2)*xln2;
1211 result += 0.5*(cof1 - cof2)*xln3;
1213 result *= 2*hbarc/pi;
1228 G4double cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
1230 G4double betaBohr = fine_structure_const;
1234 G4double be2 = betaGammaSq/(1 + betaGammaSq);
1239 x1 = log(2*electron_mass_c2/fSplineEnergy[i]);
1241 if( betaGammaSq < 0.01 ) x2 = log(be2);
1244 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1245 (1/betaGammaSq - fRePartDielectricConst[i]) +
1246 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
1248 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
1254 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
1255 x5 = -1 - fRePartDielectricConst[i] +
1256 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1257 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1259 x7 = atan2(fImPartDielectricConst[i],x3);
1264 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
1268 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1269 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1271 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
1273 if( result < 1.0e-8 ) result = 1.0e-8;
1275 result *= fine_structure_const/be2/pi;
1281 result *= (1 - exp(-beta/betaBohr/lowCof));
1305 G4double logarithm, x3, x5, argument, modul2, dNdxC;
1306 G4double be2, betaBohr2, cofBetaBohr;
1309 betaBohr2 = fine_structure_const*fine_structure_const;
1310 G4double betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1312 be2 = betaGammaSq/(1 + betaGammaSq);
1315 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1318 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1319 (1/betaGammaSq - fRePartDielectricConst[i]) +
1320 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1321 logarithm += log(1+1.0/betaGammaSq);
1324 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1330 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1331 x5 = -1.0 - fRePartDielectricConst[i] +
1332 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1333 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1334 if( x3 == 0.0 ) argument = 0.5*pi;
1335 else argument = atan2(fImPartDielectricConst[i],x3);
1338 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
1340 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1342 dNdxC *= fine_structure_const/be2/pi;
1344 dNdxC *= (1-exp(-be4/betaBohr4));
1348 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1349 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1363 G4double logarithm, x3, x5, argument, dNdxC;
1364 G4double be2, be4, betaBohr2,betaBohr4,cofBetaBohr;
1367 betaBohr2 = fine_structure_const*fine_structure_const;
1368 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1370 be2 = betaGammaSq/(1 + betaGammaSq);
1373 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1376 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1377 (1/betaGammaSq - fRePartDielectricConst[i]) +
1378 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1379 logarithm += log(1+1.0/betaGammaSq);
1382 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1388 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1389 x5 = be2*( 1.0 + fRePartDielectricConst[i] ) - 1.0;
1390 if( x3 == 0.0 ) argument = 0.5*pi;
1391 else argument = atan2(fImPartDielectricConst[i],x3);
1394 dNdxC = ( logarithm*fImPartDielectricConst[i]*be2 + argument )/hbarc;
1396 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1398 dNdxC *= fine_structure_const/be2/pi;
1400 dNdxC *= (1-exp(-be4/betaBohr4));
1413 G4double resonance, modul2, dNdxP, cof = 1.;
1416 betaBohr = fine_structure_const;
1417 be2 = betaGammaSq/(1 + betaGammaSq);
1421 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1422 resonance *= fImPartDielectricConst[i]/hbarc;
1425 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
1427 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1429 dNdxP *= fine_structure_const/be2/pi;
1431 dNdxP *= (1 - exp(-beta/betaBohr/fLowEnergyCof));
1435 if( fDensity >= 0.1 )
1437 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1438 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1454 G4double be2, be4, betaBohr2, betaBohr4, cofBetaBohr;
1457 betaBohr2 = fine_structure_const*fine_structure_const;
1458 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1460 be2 = betaGammaSq/(1 + betaGammaSq);
1463 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1464 resonance *= fImPartDielectricConst[i]/hbarc;
1469 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1471 dNdxP *= fine_structure_const/be2/pi;
1472 dNdxP *= (1-exp(-be4/betaBohr4));
1474 if( fDensity >= 0.1 )
1476 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1477 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1492 fIntegralPAIxSection[fSplineNumber] = 0;
1493 fIntegralPAIdEdx[fSplineNumber] = 0;
1494 fIntegralPAIxSection[0] = 0;
1495 G4int i, k = fIntervalNumber -1;
1497 for( i = fSplineNumber-1; i >= 1; i--)
1499 if(fSplineEnergy[i] >= fEnergyInterval[k])
1501 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
SumOverInterval(i);
1506 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
1508 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
1512 if(fVerbose>0)
G4cout<<
"i = "<<i<<
"; k = "<<k<<
"; intPAIxsc[i] = "<<fIntegralPAIxSection[i]<<
G4endl;
1525 fIntegralCerenkov[fSplineNumber] = 0;
1526 fIntegralCerenkov[0] = 0;
1527 k = fIntervalNumber -1;
1529 for( i = fSplineNumber-1; i >= 1; i-- )
1531 if(fSplineEnergy[i] >= fEnergyInterval[k])
1538 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
1556 fIntegralMM[fSplineNumber] = 0;
1558 k = fIntervalNumber -1;
1560 for( i = fSplineNumber-1; i >= 1; i-- )
1562 if(fSplineEnergy[i] >= fEnergyInterval[k])
1569 fIntegralMM[i] = fIntegralMM[i+1] +
1586 fIntegralPlasmon[fSplineNumber] = 0;
1587 fIntegralPlasmon[0] = 0;
1588 G4int k = fIntervalNumber -1;
1589 for(
G4int i=fSplineNumber-1;i>=1;i--)
1591 if(fSplineEnergy[i] >= fEnergyInterval[k])
1597 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
1613 fIntegralResonance[fSplineNumber] = 0;
1614 fIntegralResonance[0] = 0;
1615 G4int k = fIntervalNumber -1;
1616 for(
G4int i=fSplineNumber-1;i>=1;i--)
1618 if(fSplineEnergy[i] >= fEnergyInterval[k])
1624 fIntegralResonance[i] = fIntegralResonance[i+1] +
1640 G4double x0,x1,y0,yy1,a,b,c,result;
1642 x0 = fSplineEnergy[i];
1643 x1 = fSplineEnergy[i+1];
1644 if(fVerbose>0)
G4cout<<
"SumOverInterval i= " << i <<
" x0 = "<<x0<<
"; x1 = "<<x1<<
G4endl;
1646 if( x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1648 y0 = fDifPAIxSection[i];
1649 yy1 = fDifPAIxSection[i+1];
1651 if(fVerbose>0)
G4cout<<
"x0 = "<<x0<<
"; x1 = "<<x1<<
", y0 = "<<y0<<
"; yy1 = "<<yy1<<
G4endl;
1654 a = log10(yy1/y0)/log10(c);
1656 if(fVerbose>0)
G4cout<<
"SumOverInterval, a = "<<a<<
"; c = "<<c<<
G4endl;
1661 if( std::abs(a) < 1.e-6 )
1663 result = b*log(x1/x0);
1667 result = y0*(x1*pow(c,a-1) - x0)/a;
1670 if( std::abs(a) < 1.e-6 )
1672 fIntegralPAIxSection[0] += b*log(x1/x0);
1676 fIntegralPAIxSection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1678 if(fVerbose>0)
G4cout<<
"SumOverInterval, result = "<<result<<
G4endl;
1687 G4double x0,x1,y0,yy1,a,b,c,result;
1689 x0 = fSplineEnergy[i];
1690 x1 = fSplineEnergy[i+1];
1692 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1694 y0 = fDifPAIxSection[i];
1695 yy1 = fDifPAIxSection[i+1];
1697 a = log10(yy1/y0)/log10(c);
1703 result = b*log(x1/x0);
1707 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1721 G4double x0,x1,y0,yy1,a,b,c,result;
1723 x0 = fSplineEnergy[i];
1724 x1 = fSplineEnergy[i+1];
1726 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1728 y0 = fdNdxCerenkov[i];
1729 yy1 = fdNdxCerenkov[i+1];
1734 a = log10(yy1/y0)/log10(c);
1738 if(a == 0) result = b*log(c);
1739 else result = y0*(x1*pow(c,a-1) - x0)/a;
1742 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1743 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1757 G4double x0,x1,y0,yy1,a,b,c,result;
1759 x0 = fSplineEnergy[i];
1760 x1 = fSplineEnergy[i+1];
1762 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1771 a = log10(yy1/y0)/log10(c);
1772 if(a > 10.0)
return 0.;
1776 if(a == 0) result = b*log(c);
1777 else result = y0*(x1*pow(c,a-1) - x0)/a;
1780 if( a == 0 ) fIntegralMM[0] += b*log(c);
1781 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1795 G4double x0,x1,y0,yy1,a,b,c,result;
1797 x0 = fSplineEnergy[i];
1798 x1 = fSplineEnergy[i+1];
1800 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1802 y0 = fdNdxPlasmon[i];
1803 yy1 = fdNdxPlasmon[i+1];
1805 a = log10(yy1/y0)/log10(c);
1806 if(a > 10.0)
return 0.;
1811 if(a == 0) result = b*log(x1/x0);
1812 else result = y0*(x1*pow(c,a-1) - x0)/a;
1815 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1816 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1830 G4double x0,x1,y0,yy1,a,b,c,result;
1832 x0 = fSplineEnergy[i];
1833 x1 = fSplineEnergy[i+1];
1835 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1837 y0 = fdNdxResonance[i];
1838 yy1 = fdNdxResonance[i+1];
1840 a = log10(yy1/y0)/log10(c);
1841 if(a > 10.0)
return 0.;
1846 if(a == 0) result = b*log(x1/x0);
1847 else result = y0*(x1*pow(c,a-1) - x0)/a;
1850 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1851 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1865 G4double x0,x1,y0,yy1,a,b,d,e0,result;
1868 x0 = fSplineEnergy[i];
1869 x1 = fSplineEnergy[i+1];
1870 y0 = fDifPAIxSection[i];
1871 yy1 = fDifPAIxSection[i+1];
1875 a = log10(yy1/y0)/log10(x1/x0);
1876 if(a > 10.0)
return 0.;
1878 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1884 if( std::abs(a) < 1.e-6 )
1886 result = b*log(x0/e0);
1890 result = y0*(x0 - e0*pow(d,a-1))/a;
1893 if( std::abs(a) < 1.e-6 )
1895 fIntegralPAIxSection[0] += b*log(x0/e0);
1899 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1901 x0 = fSplineEnergy[i - 1];
1902 x1 = fSplineEnergy[i - 2];
1903 y0 = fDifPAIxSection[i - 1];
1904 yy1 = fDifPAIxSection[i - 2];
1908 a = log10(yy1/y0)/log10(x1/x0);
1912 if( std::abs(a) < 1.e-6 )
1914 result += b*log(e0/x0);
1918 result += y0*(e0*pow(d,a-1) - x0)/a;
1921 if( std::abs(a) < 1.e-6 )
1923 fIntegralPAIxSection[0] += b*log(e0/x0);
1927 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1938 G4double x0,x1,y0,yy1,a,b,d,e0,result;
1941 x0 = fSplineEnergy[i];
1942 x1 = fSplineEnergy[i+1];
1943 y0 = fDifPAIxSection[i];
1944 yy1 = fDifPAIxSection[i+1];
1948 a = log10(yy1/y0)/log10(x1/x0);
1949 if(a > 10.0)
return 0.;
1956 result = b*log(x0/e0);
1960 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1962 x0 = fSplineEnergy[i - 1];
1963 x1 = fSplineEnergy[i - 2];
1964 y0 = fDifPAIxSection[i - 1];
1965 yy1 = fDifPAIxSection[i - 2];
1969 a = log10(yy1/y0)/log10(x1/x0);
1975 result += b*log(e0/x0);
1979 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1993 G4double x0,x1,y0,yy1,a,b,e0,c,d,result;
1996 x0 = fSplineEnergy[i];
1997 x1 = fSplineEnergy[i+1];
1998 y0 = fdNdxCerenkov[i];
1999 yy1 = fdNdxCerenkov[i+1];
2006 a = log10(yy1/y0)/log10(c);
2007 if(a > 10.0)
return 0.;
2012 if( a == 0 ) result = b*log(x0/e0);
2013 else result = y0*(x0 - e0*pow(d,a-1))/a;
2016 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
2017 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2021 x0 = fSplineEnergy[i - 1];
2022 x1 = fSplineEnergy[i - 2];
2023 y0 = fdNdxCerenkov[i - 1];
2024 yy1 = fdNdxCerenkov[i - 2];
2031 a = log10(yy1/y0)/log10(x1/x0);
2036 if( a == 0 ) result += b*log(e0/x0);
2037 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2040 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2041 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2058 G4double x0,x1,y0,yy1,a,b,e0,c,d,result;
2061 x0 = fSplineEnergy[i];
2062 x1 = fSplineEnergy[i+1];
2071 a = log10(yy1/y0)/log10(c);
2072 if(a > 10.0)
return 0.;
2077 if( a == 0 ) result = b*log(x0/e0);
2078 else result = y0*(x0 - e0*pow(d,a-1))/a;
2081 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2082 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2086 x0 = fSplineEnergy[i - 1];
2087 x1 = fSplineEnergy[i - 2];
2088 y0 = fdNdxMM[i - 1];
2089 yy1 = fdNdxMM[i - 2];
2096 a = log10(yy1/y0)/log10(x1/x0);
2101 if( a == 0 ) result += b*log(e0/x0);
2102 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2105 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2106 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2123 G4double x0,x1,y0,yy1,a,b,c,d,e0,result;
2126 x0 = fSplineEnergy[i];
2127 x1 = fSplineEnergy[i+1];
2128 y0 = fdNdxPlasmon[i];
2129 yy1 = fdNdxPlasmon[i+1];
2133 a = log10(yy1/y0)/log10(c);
2134 if(a > 10.0)
return 0.;
2139 if( a == 0 ) result = b*log(x0/e0);
2140 else result = y0*(x0 - e0*pow(d,a-1))/a;
2143 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2144 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2146 x0 = fSplineEnergy[i - 1];
2147 x1 = fSplineEnergy[i - 2];
2148 y0 = fdNdxPlasmon[i - 1];
2149 yy1 = fdNdxPlasmon[i - 2];
2153 a = log10(yy1/y0)/log10(c);
2158 if( a == 0 ) result += b*log(e0/x0);
2159 else result += y0*(e0*pow(d,a-1) - x0)/a;
2162 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2163 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2177 G4double x0,x1,y0,yy1,a,b,c,d,e0,result;
2180 x0 = fSplineEnergy[i];
2181 x1 = fSplineEnergy[i+1];
2182 y0 = fdNdxResonance[i];
2183 yy1 = fdNdxResonance[i+1];
2187 a = log10(yy1/y0)/log10(c);
2188 if(a > 10.0)
return 0.;
2193 if( a == 0 ) result = b*log(x0/e0);
2194 else result = y0*(x0 - e0*pow(d,a-1))/a;
2197 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2198 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2200 x0 = fSplineEnergy[i - 1];
2201 x1 = fSplineEnergy[i - 2];
2202 y0 = fdNdxResonance[i - 1];
2203 yy1 = fdNdxResonance[i - 2];
2207 a = log10(yy1/y0)/log10(c);
2212 if( a == 0 ) result += b*log(e0/x0);
2213 else result += y0*(e0*pow(d,a-1) - x0)/a;
2216 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2217 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2234 meanNumber = fIntegralPAIxSection[1]*step;
2235 numOfCollisions =
G4Poisson(meanNumber);
2239 while(numOfCollisions)
2262 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2264 if(
position >= fIntegralPAIxSection[iTransfer] )
break;
2266 if(iTransfer > fSplineNumber) iTransfer--;
2268 energyTransfer = fSplineEnergy[iTransfer];
2272 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2274 return energyTransfer;
2288 meanNumber = fIntegralCerenkov[1]*step;
2289 numOfCollisions =
G4Poisson(meanNumber);
2293 while(numOfCollisions)
2315 meanNumber = fIntegralMM[1]*step;
2316 numOfCollisions =
G4Poisson(meanNumber);
2320 while(numOfCollisions)
2343 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2345 if(
position >= fIntegralCerenkov[iTransfer] )
break;
2347 if(iTransfer > fSplineNumber) iTransfer--;
2349 energyTransfer = fSplineEnergy[iTransfer];
2353 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2355 return energyTransfer;
2370 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2372 if(
position >= fIntegralMM[iTransfer] )
break;
2374 if(iTransfer > fSplineNumber) iTransfer--;
2376 energyTransfer = fSplineEnergy[iTransfer];
2380 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2382 return energyTransfer;
2396 meanNumber = fIntegralPlasmon[1]*step;
2397 numOfCollisions =
G4Poisson(meanNumber);
2401 while(numOfCollisions)
2424 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2426 if(
position >= fIntegralPlasmon[iTransfer] )
break;
2428 if(iTransfer > fSplineNumber) iTransfer--;
2430 energyTransfer = fSplineEnergy[iTransfer];
2434 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2436 return energyTransfer;
2450 meanNumber = fIntegralResonance[1]*step;
2451 numOfCollisions =
G4Poisson(meanNumber);
2455 while(numOfCollisions)
2479 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2481 if(
position >= fIntegralResonance[iTransfer] )
break;
2483 if(iTransfer > fSplineNumber) iTransfer--;
2485 energyTransfer = fSplineEnergy[iTransfer];
2489 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2491 return energyTransfer;
2507 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2509 if(
position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2511 if(iTransfer > fSplineNumber) iTransfer--;
2513 energyTransfer = fSplineEnergy[iTransfer];
2517 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2519 return energyTransfer;
2525void G4PAIxSection::CallError(
G4int i,
const G4String& methodName)
const
2527 G4String head =
"G4PAIxSection::" + methodName +
"()";
2529 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2538G4int G4PAIxSection::fNumberOfGammas = 111;
2540const G4double G4PAIxSection::fLorentzFactor[112] =
25431.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
25441.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
25451.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
25461.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
25472.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
25483.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
25495.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
25508.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
25511.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
25522.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
25535.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
25541.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
25551.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
25563.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
25576.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
25581.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
25592.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
25604.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
25618.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
25621.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
25633.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
25645.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
2574G4int G4PAIxSection::fRefGammaNumber = 29;
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
std::vector< G4Material * > G4MaterialTable
G4long G4Poisson(G4double mean)
G4GLOB_DLL std::ostream G4cout
const G4Material * GetMaterial() const
G4double GetDensity() const
const G4Element * GetElement(G4int iel) const
size_t GetNumberOfElements() const
G4double GetElectronDensity() const
static G4MaterialTable * GetMaterialTable()
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double GetPlasmonEnergyTransfer()
G4double SumOverIntervaldEdx(G4int intervalNumber)
G4double SumOverInterCerenkov(G4int intervalNumber)
G4double GetStepMMLoss(G4double step)
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
G4double GetStepPlasmonLoss(G4double step)
G4double GetRutherfordEnergyTransfer()
G4double SumOverBordResonance(G4int intervalNumber, G4double energy)
void ComputeLowEnergyCof()
G4double SumOverInterMM(G4int intervalNumber)
G4double RePartDielectricConst(G4double energy)
G4double GetElectronRange(G4double energy)
G4double SumOverInterPlasmon(G4int intervalNumber)
G4double GetMMEnergyTransfer()
G4double PAIdNdxMM(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
G4double SumOverBordMM(G4int intervalNumber, G4double energy)
G4double DifPAIxSection(G4int intervalNumber, G4double betaGammaSq)
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double GetStepResonanceLoss(G4double step)
G4double GetResonanceEnergyTransfer()
G4double PAIdNdxResonance(G4int intervalNumber, G4double betaGammaSq)
void SplainPAI(G4double betaGammaSq)
G4double GetEnergyTransfer()
G4double GetCerenkovEnergyTransfer()
void NormShift(G4double betaGammaSq)
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
G4double GetPhotonRange(G4double energy)
void IntegralPAIxSection()
G4double SumOverInterval(G4int intervalNumber)
G4double SumOverBorder(G4int intervalNumber, G4double energy)
G4double GetStepCerenkovLoss(G4double step)
G4double GetStepEnergyLoss(G4double step)
G4double SumOverInterResonance(G4int intervalNumber)
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4double GetLorentzFactor(G4int i) const
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
G4int GetMaxInterval() const
G4double GetSandiaMatTablePAI(G4int, G4int) const
G4int SandiaMixing(G4int Z[], const G4double *fractionW, G4int el, G4int mi)
G4int SandiaIntervals(G4int Z[], G4int el)
G4double GetSandiaMatTable(G4int, G4int) const
G4double GetPhotoAbsorpCof(G4int i, G4int j) const