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;
1105 for( i = 1; i <= fIntervalNumber; i++ )
1107 if( energy1 < fEnergyInterval[i])
break;
1112 result = fA1[i]/energy1+fA2[i]/energy2+fA3[i]/energy3+fA4[i]/energy4;
1114 if( result >
DBL_MIN ) lambda = 1./result;
1153 range = cofA*energy*( 1 - cofB/(1 + cofC*energy) );
1169 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
1170 c1, c2, c3, cof1, cof2, xln1, xln2, xln3, result;
1175 for(
G4int i=1;i<=fIntervalNumber-1;i++)
1177 x1 = fEnergyInterval[i];
1178 x2 = fEnergyInterval[i+1];
1189 xln3 = log((x2 + x0)/(x1 + x0));
1194 c1 = (x2 - x1)/x1/x2;
1195 c2 = (x2 - x1)*(x2 +x1)/x1/x1/x2/x2;
1196 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1198 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
1199 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
1200 result -= fA3[i]*c2/2/x02;
1201 result -= fA4[i]*c3/3/x02;
1203 cof1 = fA1[i]/x02 + fA3[i]/x04;
1204 cof2 = fA2[i]/x03 + fA4[i]/x05;
1206 result += 0.5*(cof1 +cof2)*xln2;
1207 result += 0.5*(cof1 - cof2)*xln3;
1209 result *= 2*hbarc/pi;
1223 G4double cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
1225 G4double betaBohr = fine_structure_const;
1226 G4double be2 = betaGammaSq/(1 + betaGammaSq);
1230 x1 = std::log(2*electron_mass_c2/fSplineEnergy[i]);
1232 if( betaGammaSq < 0.01 ) x2 = std::log(be2);
1235 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1236 (1/betaGammaSq - fRePartDielectricConst[i]) +
1237 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
1239 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
1245 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
1246 x5 = -1 - fRePartDielectricConst[i] +
1247 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1248 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1250 x7 = atan2(fImPartDielectricConst[i],x3);
1254 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
1256 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1257 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1259 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
1261 if( result < 1.0e-8 ) result = 1.0e-8;
1263 result *= fine_structure_const/be2/pi;
1269 result *= (1 - std::exp(-beta/betaBohr/lowCof));
1285 G4double logarithm, x3, x5, argument, modul2, dNdxC;
1286 G4double be2, betaBohr2, cofBetaBohr;
1289 betaBohr2 = fine_structure_const*fine_structure_const;
1290 G4double betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1292 be2 = betaGammaSq/(1 + betaGammaSq);
1295 if( betaGammaSq < 0.01 ) logarithm = std::log(1.0+betaGammaSq);
1298 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1299 (1/betaGammaSq - fRePartDielectricConst[i]) +
1300 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1301 logarithm += log(1+1.0/betaGammaSq);
1304 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1310 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1311 x5 = -1.0 - fRePartDielectricConst[i] +
1312 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1313 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1314 if( x3 == 0.0 ) argument = 0.5*pi;
1315 else argument = std::atan2(fImPartDielectricConst[i],x3);
1318 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
1320 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1322 dNdxC *= fine_structure_const/be2/pi;
1324 dNdxC *= (1-std::exp(-be4/betaBohr4));
1326 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1327 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1343 G4double logarithm, x3, x5, argument, dNdxC;
1344 G4double be2, be4, betaBohr2,betaBohr4,cofBetaBohr;
1347 betaBohr2 = fine_structure_const*fine_structure_const;
1348 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1350 be2 = betaGammaSq/(1 + betaGammaSq);
1353 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1356 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1357 (1/betaGammaSq - fRePartDielectricConst[i]) +
1358 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1359 logarithm += log(1+1.0/betaGammaSq);
1362 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1368 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1369 x5 = be2*( 1.0 + fRePartDielectricConst[i] ) - 1.0;
1370 if( x3 == 0.0 ) argument = 0.5*pi;
1371 else argument = atan2(fImPartDielectricConst[i],x3);
1374 dNdxC = ( logarithm*fImPartDielectricConst[i]*be2 + argument )/hbarc;
1376 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1378 dNdxC *= fine_structure_const/be2/pi;
1380 dNdxC *= (1-std::exp(-be4/betaBohr4));
1393 G4double resonance, modul2, dNdxP, cof = 1.;
1396 betaBohr = fine_structure_const;
1397 be2 = betaGammaSq/(1 + betaGammaSq);
1401 resonance = std::log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1402 resonance *= fImPartDielectricConst[i]/hbarc;
1404 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
1406 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1408 dNdxP *= fine_structure_const/be2/pi;
1410 dNdxP *= (1 - std::exp(-beta/betaBohr/fLowEnergyCof));
1412 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1413 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1431 G4double be2, be4, betaBohr2, betaBohr4, cofBetaBohr;
1434 betaBohr2 = fine_structure_const*fine_structure_const;
1435 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1437 be2 = betaGammaSq/(1 + betaGammaSq);
1440 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1441 resonance *= fImPartDielectricConst[i]/hbarc;
1445 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1447 dNdxP *= fine_structure_const/be2/pi;
1448 dNdxP *= (1 - std::exp(-be4/betaBohr4));
1450 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1451 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1468 fIntegralPAIxSection[fSplineNumber] = 0;
1469 fIntegralPAIdEdx[fSplineNumber] = 0;
1470 fIntegralPAIxSection[0] = 0;
1471 G4int i, k = fIntervalNumber -1;
1473 for( i = fSplineNumber-1; i >= 1; i--)
1475 if(fSplineEnergy[i] >= fEnergyInterval[k])
1477 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
SumOverInterval(i);
1482 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
1484 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
1488 if(fVerbose>0)
G4cout<<
"i = "<<i<<
"; k = "<<k<<
"; intPAIxsc[i] = "<<fIntegralPAIxSection[i]<<
G4endl;
1501 fIntegralCerenkov[fSplineNumber] = 0;
1502 fIntegralCerenkov[0] = 0;
1503 k = fIntervalNumber -1;
1505 for( i = fSplineNumber-1; i >= 1; i-- )
1507 if(fSplineEnergy[i] >= fEnergyInterval[k])
1514 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
1532 fIntegralMM[fSplineNumber] = 0;
1534 k = fIntervalNumber -1;
1536 for( i = fSplineNumber-1; i >= 1; i-- )
1538 if(fSplineEnergy[i] >= fEnergyInterval[k])
1545 fIntegralMM[i] = fIntegralMM[i+1] +
1562 fIntegralPlasmon[fSplineNumber] = 0;
1563 fIntegralPlasmon[0] = 0;
1564 G4int k = fIntervalNumber -1;
1565 for(
G4int i=fSplineNumber-1;i>=1;i--)
1567 if(fSplineEnergy[i] >= fEnergyInterval[k])
1573 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
1589 fIntegralResonance[fSplineNumber] = 0;
1590 fIntegralResonance[0] = 0;
1591 G4int k = fIntervalNumber -1;
1592 for(
G4int i=fSplineNumber-1;i>=1;i--)
1594 if(fSplineEnergy[i] >= fEnergyInterval[k])
1600 fIntegralResonance[i] = fIntegralResonance[i+1] +
1616 G4double x0,x1,y0,yy1,a,b,c,result;
1618 x0 = fSplineEnergy[i];
1619 x1 = fSplineEnergy[i+1];
1620 if(fVerbose>0)
G4cout<<
"SumOverInterval i= " << i <<
" x0 = "<<x0<<
"; x1 = "<<x1<<
G4endl;
1622 if( x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1624 y0 = fDifPAIxSection[i];
1625 yy1 = fDifPAIxSection[i+1];
1627 if(fVerbose>0)
G4cout<<
"x0 = "<<x0<<
"; x1 = "<<x1<<
", y0 = "<<y0<<
"; yy1 = "<<yy1<<
G4endl;
1630 a = log10(yy1/y0)/log10(c);
1632 if(fVerbose>0)
G4cout<<
"SumOverInterval, a = "<<a<<
"; c = "<<c<<
G4endl;
1635 if(a < 20.) b = y0/pow(x0,a);
1638 if( std::abs(a) < 1.e-6 )
1640 result = b*log(x1/x0);
1644 result = y0*(x1*pow(c,a-1) - x0)/a;
1647 if( std::abs(a) < 1.e-6 )
1649 fIntegralPAIxSection[0] += b*log(x1/x0);
1653 fIntegralPAIxSection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1655 if(fVerbose>0)
G4cout<<
"SumOverInterval, result = "<<result<<
G4endl;
1664 G4double x0,x1,y0,yy1,a,b,c,result;
1666 x0 = fSplineEnergy[i];
1667 x1 = fSplineEnergy[i+1];
1669 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1671 y0 = fDifPAIxSection[i];
1672 yy1 = fDifPAIxSection[i+1];
1674 a = log10(yy1/y0)/log10(c);
1677 if(a < 20.) b = y0/pow(x0,a);
1682 result = b*log(x1/x0);
1686 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1700 G4double x0,x1,y0,yy1,a,b,c,result;
1702 x0 = fSplineEnergy[i];
1703 x1 = fSplineEnergy[i+1];
1705 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1707 y0 = fdNdxCerenkov[i];
1708 yy1 = fdNdxCerenkov[i+1];
1713 a = log10(yy1/y0)/log10(c);
1715 if(a > 20.0) b = 0.0;
1716 else b = y0/pow(x0,a);
1719 if(a == 0) result = b*log(c);
1720 else result = y0*(x1*pow(c,a-1) - x0)/a;
1723 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1724 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1738 G4double x0,x1,y0,yy1,a,b,c,result;
1740 x0 = fSplineEnergy[i];
1741 x1 = fSplineEnergy[i+1];
1743 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1752 a = log10(yy1/y0)/log10(c);
1755 if(a < 20.) b = y0/pow(x0,a);
1758 if(a == 0) result = b*log(c);
1759 else result = y0*(x1*pow(c,a-1) - x0)/a;
1762 if( a == 0 ) fIntegralMM[0] += b*log(c);
1763 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1777 G4double x0,x1,y0,yy1,a,b,c,result;
1779 x0 = fSplineEnergy[i];
1780 x1 = fSplineEnergy[i+1];
1782 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1784 y0 = fdNdxPlasmon[i];
1785 yy1 = fdNdxPlasmon[i+1];
1787 a = log10(yy1/y0)/log10(c);
1790 if(a < 20.) b = y0/pow(x0,a);
1793 if(a == 0) result = b*log(x1/x0);
1794 else result = y0*(x1*pow(c,a-1) - x0)/a;
1797 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1798 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1812 G4double x0,x1,y0,yy1,a,b,c,result;
1814 x0 = fSplineEnergy[i];
1815 x1 = fSplineEnergy[i+1];
1817 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1819 y0 = fdNdxResonance[i];
1820 yy1 = fdNdxResonance[i+1];
1822 a = log10(yy1/y0)/log10(c);
1825 if(a < 20.) b = y0/pow(x0,a);
1828 if(a == 0) result = b*log(x1/x0);
1829 else result = y0*(x1*pow(c,a-1) - x0)/a;
1832 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1833 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1847 G4double x0,x1,y0,yy1,a,b,d,e0,result;
1850 x0 = fSplineEnergy[i];
1851 x1 = fSplineEnergy[i+1];
1852 y0 = fDifPAIxSection[i];
1853 yy1 = fDifPAIxSection[i+1];
1857 a = log10(yy1/y0)/log10(x1/x0);
1859 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1862 if(a < 20.) b = y0/pow(x0,a);
1865 if( std::abs(a) < 1.e-6 )
1867 result = b*log(x0/e0);
1871 result = y0*(x0 - e0*pow(d,a-1))/a;
1874 if( std::abs(a) < 1.e-6 )
1876 fIntegralPAIxSection[0] += b*log(x0/e0);
1880 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1882 x0 = fSplineEnergy[i - 1];
1883 x1 = fSplineEnergy[i - 2];
1884 y0 = fDifPAIxSection[i - 1];
1885 yy1 = fDifPAIxSection[i - 2];
1888 a = log10(yy1/y0)/log10(x1/x0);
1891 if(a < 20.) b = y0/pow(x0,a);
1894 if( std::abs(a) < 1.e-6 )
1896 result += b*log(e0/x0);
1900 result += y0*(e0*pow(d,a-1) - x0)/a;
1903 if( std::abs(a) < 1.e-6 )
1905 fIntegralPAIxSection[0] += b*log(e0/x0);
1909 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1919 G4double x0,x1,y0,yy1,a,b,d,e0,result;
1922 x0 = fSplineEnergy[i];
1923 x1 = fSplineEnergy[i+1];
1924 y0 = fDifPAIxSection[i];
1925 yy1 = fDifPAIxSection[i+1];
1928 a = log10(yy1/y0)/log10(x1/x0);
1931 if(a < 20.) b = y0/pow(x0,a);
1936 result = b*log(x0/e0);
1940 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1942 x0 = fSplineEnergy[i - 1];
1943 x1 = fSplineEnergy[i - 2];
1944 y0 = fDifPAIxSection[i - 1];
1945 yy1 = fDifPAIxSection[i - 2];
1949 a = log10(yy1/y0)/log10(x1/x0);
1952 if(a < 20.) b = y0/pow(x0,a);
1957 result += b*log(e0/x0);
1961 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1974 G4double x0,x1,y0,yy1,a,b,e0,c,d,result;
1977 x0 = fSplineEnergy[i];
1978 x1 = fSplineEnergy[i+1];
1979 y0 = fdNdxCerenkov[i];
1980 yy1 = fdNdxCerenkov[i+1];
1986 a = log10(yy1/y0)/log10(c);
1990 if(a < 20.) b = y0/pow(x0,a);
1993 if( a == 0 ) result = b*log(x0/e0);
1994 else result = y0*(x0 - e0*pow(d,a-1))/a;
1997 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
1998 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2000 x0 = fSplineEnergy[i - 1];
2001 x1 = fSplineEnergy[i - 2];
2002 y0 = fdNdxCerenkov[i - 1];
2003 yy1 = fdNdxCerenkov[i - 2];
2010 a = log10(yy1/y0)/log10(c);
2013 if(a < 20.) b = y0/pow(x0,a);
2016 if( a == 0 ) result += b*log(e0/x0);
2017 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2020 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2021 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2034 G4double x0,x1,y0,yy1,a,b,e0,c,d,result;
2037 x0 = fSplineEnergy[i];
2038 x1 = fSplineEnergy[i+1];
2046 a = log10(yy1/y0)/log10(c);
2048 if(a > 20.0) b = 0.0;
2049 else b = y0/pow(x0,a);
2052 if( a == 0 ) result = b*log(x0/e0);
2053 else result = y0*(x0 - e0*pow(d,a-1))/a;
2056 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2057 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2061 x0 = fSplineEnergy[i - 1];
2062 x1 = fSplineEnergy[i - 2];
2063 y0 = fdNdxMM[i - 1];
2064 yy1 = fdNdxMM[i - 2];
2071 a = log10(yy1/y0)/log10(x1/x0);
2073 if(a > 20.0) b = 0.0;
2074 else b = y0/pow(x0,a);
2077 if( a == 0 ) result += b*log(e0/x0);
2078 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2081 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2082 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2099 G4double x0,x1,y0,yy1,a,b,c,d,e0,result;
2102 x0 = fSplineEnergy[i];
2103 x1 = fSplineEnergy[i+1];
2104 y0 = fdNdxPlasmon[i];
2105 yy1 = fdNdxPlasmon[i+1];
2109 a = log10(yy1/y0)/log10(c);
2111 if(a > 20.0) b = 0.0;
2112 else b = y0/pow(x0,a);
2115 if( a == 0 ) result = b*log(x0/e0);
2116 else result = y0*(x0 - e0*pow(d,a-1))/a;
2119 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2120 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2122 x0 = fSplineEnergy[i - 1];
2123 x1 = fSplineEnergy[i - 2];
2124 y0 = fdNdxPlasmon[i - 1];
2125 yy1 = fdNdxPlasmon[i - 2];
2129 a = log10(yy1/y0)/log10(c);
2131 if(a > 20.0) b = 0.0;
2132 else b = y0/pow(x0,a);
2135 if( a == 0 ) result += b*log(e0/x0);
2136 else result += y0*(e0*pow(d,a-1) - x0)/a;
2139 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2140 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2153 G4double x0,x1,y0,yy1,a,b,c,d,e0,result;
2156 x0 = fSplineEnergy[i];
2157 x1 = fSplineEnergy[i+1];
2158 y0 = fdNdxResonance[i];
2159 yy1 = fdNdxResonance[i+1];
2163 a = log10(yy1/y0)/log10(c);
2165 if(a > 20.0) b = 0.0;
2166 else b = y0/pow(x0,a);
2169 if( a == 0 ) result = b*log(x0/e0);
2170 else result = y0*(x0 - e0*pow(d,a-1))/a;
2173 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2174 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2176 x0 = fSplineEnergy[i - 1];
2177 x1 = fSplineEnergy[i - 2];
2178 y0 = fdNdxResonance[i - 1];
2179 yy1 = fdNdxResonance[i - 2];
2183 a = log10(yy1/y0)/log10(c);
2185 if(a > 20.0) b = 0.0;
2186 else b = y0/pow(x0,a);
2189 if( a == 0 ) result += b*log(e0/x0);
2190 else result += y0*(e0*pow(d,a-1) - x0)/a;
2193 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2194 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2211 meanNumber = fIntegralPAIxSection[1]*step;
2212 numOfCollisions =
G4Poisson(meanNumber);
2216 while(numOfCollisions)
2239 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2241 if(
position >= fIntegralPAIxSection[iTransfer] )
break;
2243 if(iTransfer > fSplineNumber) iTransfer--;
2245 energyTransfer = fSplineEnergy[iTransfer];
2249 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2251 return energyTransfer;
2265 meanNumber = fIntegralCerenkov[1]*step;
2266 numOfCollisions =
G4Poisson(meanNumber);
2270 while(numOfCollisions)
2292 meanNumber = fIntegralMM[1]*step;
2293 numOfCollisions =
G4Poisson(meanNumber);
2297 while(numOfCollisions)
2320 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2322 if(
position >= fIntegralCerenkov[iTransfer] )
break;
2324 if(iTransfer > fSplineNumber) iTransfer--;
2326 energyTransfer = fSplineEnergy[iTransfer];
2330 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2332 return energyTransfer;
2347 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2349 if(
position >= fIntegralMM[iTransfer] )
break;
2351 if(iTransfer > fSplineNumber) iTransfer--;
2353 energyTransfer = fSplineEnergy[iTransfer];
2357 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2359 return energyTransfer;
2373 meanNumber = fIntegralPlasmon[1]*step;
2374 numOfCollisions =
G4Poisson(meanNumber);
2378 while(numOfCollisions)
2401 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2403 if(
position >= fIntegralPlasmon[iTransfer] )
break;
2405 if(iTransfer > fSplineNumber) iTransfer--;
2407 energyTransfer = fSplineEnergy[iTransfer];
2411 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2413 return energyTransfer;
2427 meanNumber = fIntegralResonance[1]*step;
2428 numOfCollisions =
G4Poisson(meanNumber);
2432 while(numOfCollisions)
2456 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2458 if(
position >= fIntegralResonance[iTransfer] )
break;
2460 if(iTransfer > fSplineNumber) iTransfer--;
2462 energyTransfer = fSplineEnergy[iTransfer];
2466 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2468 return energyTransfer;
2484 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2486 if(
position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2488 if(iTransfer > fSplineNumber) iTransfer--;
2490 energyTransfer = fSplineEnergy[iTransfer];
2494 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2496 return energyTransfer;
2502void G4PAIxSection::CallError(
G4int i,
const G4String& methodName)
const
2504 G4String head =
"G4PAIxSection::" + methodName +
"()";
2506 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2515G4int G4PAIxSection::fNumberOfGammas = 111;
2517const G4double G4PAIxSection::fLorentzFactor[112] =
25201.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
25211.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
25221.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
25231.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
25242.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
25253.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
25265.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
25278.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
25281.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
25292.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
25305.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
25311.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
25321.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
25333.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
25346.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
25351.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
25362.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
25374.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
25388.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
25391.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
25403.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
25415.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
2551G4int 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
G4double GetElectronDensity() const
std::size_t GetIndex() const
static G4MaterialTable * GetMaterialTable()
std::size_t GetNumberOfElements() const
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