98 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
99 fIntervalNumber = fSplineNumber = 0;
103 fRePartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
104 fImPartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
111 fIntegralPAIxSection =
G4DataVector(fMaxSplineSize,0.0);
120 for(
G4int i = 0; i < 500; ++i )
122 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
135 fMaterialIndex = matIndex;
142 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
146 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
148 (*(*fMatSandiaMatrix)[i])[0] = fSandia->GetSandiaMatTable(i,0);
150 for(j = 1; j < 5; j++)
152 (*(*fMatSandiaMatrix)[i])[j] = fSandia->GetSandiaMatTable(i,j)*fDensity;
155 ComputeLowEnergyCof();
165 fMatSandiaMatrix = 0;
170 fMaterialIndex = materialIndex;
171 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
172 fElectronDensity = (*theMaterialTable)[materialIndex]->
173 GetElectronDensity();
174 fIntervalNumber = (*theMaterialTable)[materialIndex]->
175 GetSandiaTable()->GetMatNbOfIntervals();
185 for(i = 1; i <= fIntervalNumber; i++ )
187 if(((*theMaterialTable)[materialIndex]->
188 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0) >= maxEnergyTransfer) ||
189 i > fIntervalNumber )
191 fEnergyInterval[i] = maxEnergyTransfer;
195 fEnergyInterval[i] = (*theMaterialTable)[materialIndex]->
196 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0);
197 fA1[i] = (*theMaterialTable)[materialIndex]->
198 GetSandiaTable()->GetSandiaCofForMaterial(i-1,1);
199 fA2[i] = (*theMaterialTable)[materialIndex]->
200 GetSandiaTable()->GetSandiaCofForMaterial(i-1,2);
201 fA3[i] = (*theMaterialTable)[materialIndex]->
202 GetSandiaTable()->GetSandiaCofForMaterial(i-1,3);
203 fA4[i] = (*theMaterialTable)[materialIndex]->
204 GetSandiaTable()->GetSandiaCofForMaterial(i-1,4);
208 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
211 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
216 for(i=1;i<fIntervalNumber;i++)
218 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
219 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
225 for(j=i;j<fIntervalNumber;j++)
227 fEnergyInterval[j] = fEnergyInterval[j+1];
258 ComputeLowEnergyCof();
280 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
281 fIntervalNumber = fSplineNumber = 0;
300 for(
G4int i = 0; i < 500; ++i )
302 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
306 fMatSandiaMatrix = 0;
310 fMaterialIndex = materialIndex;
311 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
312 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
314 fIntervalNumber = intNumber;
332 for( i = 1; i <= fIntervalNumber; i++ )
334 if( ( photoAbsCof[i-1][0] >= maxEnergyTransfer ) ||
335 i > fIntervalNumber )
337 fEnergyInterval[i] = maxEnergyTransfer;
341 fEnergyInterval[i] = photoAbsCof[i-1][0];
342 fA1[i] = photoAbsCof[i-1][1];
343 fA2[i] = photoAbsCof[i-1][2];
344 fA3[i] = photoAbsCof[i-1][3];
345 fA4[i] = photoAbsCof[i-1][4];
351 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
354 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
358 for( i = 1; i <= fIntervalNumber; i++ )
365 for( i = 1; i < fIntervalNumber; i++ )
367 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
368 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
374 for(j=i;j<fIntervalNumber;j++)
376 fEnergyInterval[j] = fEnergyInterval[j+1];
388 for( i = 1; i <= fIntervalNumber; i++ )
396 ComputeLowEnergyCof();
398 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
400 NormShift(betaGammaSqRef);
401 SplainPAI(betaGammaSqRef);
405 for(i = 1; i <= fSplineNumber; i++)
407 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
408 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
409 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
410 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
411 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
420 IntegralPAIxSection();
439 fMatSandiaMatrix = 0;
443 G4int i, j, numberOfElements;
445 fMaterialIndex = materialIndex;
446 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
447 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
448 numberOfElements = (*theMaterialTable)[materialIndex]->GetNumberOfElements();
450 G4int* thisMaterialZ =
new G4int[numberOfElements];
452 for( i = 0; i < numberOfElements; i++ )
454 thisMaterialZ[i] = (
G4int)(*theMaterialTable)[materialIndex]->
455 GetElement(i)->GetZ();
458 fSandia = (*theMaterialTable)[materialIndex]->GetSandiaTable();
460 fIntervalNumber = thisMaterialSandiaTable.
SandiaIntervals(thisMaterialZ,
464 (*theMaterialTable)[materialIndex]->GetFractionVector() ,
465 numberOfElements,fIntervalNumber);
482 for( i = 1; i <= fIntervalNumber; i++ )
487 fEnergyInterval[i] = maxEnergyTransfer;
498 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
501 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
502 fA1[fIntervalNumber] = fA1[fIntervalNumber-1];
503 fA2[fIntervalNumber] = fA2[fIntervalNumber-1];
504 fA3[fIntervalNumber] = fA3[fIntervalNumber-1];
505 fA4[fIntervalNumber] = fA4[fIntervalNumber-1];
507 for(i=1;i<=fIntervalNumber;i++)
514 for( i = 1; i < fIntervalNumber; i++ )
516 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
517 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
523 for( j = i; j < fIntervalNumber; j++ )
525 fEnergyInterval[j] = fEnergyInterval[j+1];
557 ComputeLowEnergyCof();
559 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
561 NormShift(betaGammaSqRef);
562 SplainPAI(betaGammaSqRef);
566 for(i = 1; i <= fSplineNumber; i++)
568 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
569 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
570 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
571 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
572 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
574 IntegralPAIxSection();
596 delete fMatSandiaMatrix;
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;
708 ComputeLowEnergyCof(material);
711 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
713 NormShift(betaGammaSqRef);
714 SplainPAI(betaGammaSqRef);
718 for( i = 1; i <= fSplineNumber; i++ )
720 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
723 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
724 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
725 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
726 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
728 IntegralPAIxSection();
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 = (*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;
821 NormShift(betaGammaSq);
822 SplainPAI(betaGammaSq);
824 IntegralPAIxSection();
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++)
848 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
849 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
850 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
851 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
852 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
854 IntegralPAIxSection();
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;
891 fIntegralTerm[1]=RutherfordIntegral(1,fEnergyInterval[1],fSplineEnergy[1]);
895 for( i = 2; i <= fSplineNumber; i++ )
897 if( fSplineEnergy[i]<fEnergyInterval[j+1] )
899 fIntegralTerm[i] = fIntegralTerm[i-1] +
900 RutherfordIntegral(j,fSplineEnergy[i-1],
905 G4double x = RutherfordIntegral(j,fSplineEnergy[i-1],
906 fEnergyInterval[j+1] );
908 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
909 RutherfordIntegral(j,fEnergyInterval[j],
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*
928 ImPartDielectricConst(k,fSplineEnergy[i]);
929 fRePartDielectricConst[i] = fNormalizationCof*
930 RePartDielectricConst(fSplineEnergy[i]);
931 fIntegralTerm[i] *= fNormalizationCof;
933 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
934 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
935 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
936 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
937 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
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*
1011 ImPartDielectricConst(k,fSplineEnergy[i+1]);
1012 fRePartDielectricConst[i+1] = fNormalizationCof*
1013 RePartDielectricConst(fSplineEnergy[i+1]);
1014 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
1015 RutherfordIntegral(k,fSplineEnergy[i],
1016 fSplineEnergy[i+1]);
1018 fDifPAIxSection[i+1] = DifPAIxSection(i+1,betaGammaSq);
1019 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
1020 fdNdxMM[i+1] = PAIdNdxMM(i+1,betaGammaSq);
1021 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
1022 fdNdxResonance[i+1] = PAIdNdxResonance(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 )
1060 c1 = (x2 - x1)/x1/x2;
1061 c2 = (x2 - x1)*(x2 + x1)/x1/x1/x2/x2;
1062 c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1065 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
1078 G4double energy2,energy3,energy4,result;
1080 energy2 = energy1*energy1;
1081 energy3 = energy2*energy1;
1082 energy4 = energy3*energy1;
1084 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
1085 result *=hbarc/energy1;
1100 energy2 = energy1*energy1;
1101 energy3 = energy2*energy1;
1102 energy4 = energy3*energy1;
1108 for( i = 1; i <= fIntervalNumber; i++ )
1110 if( energy1 < fEnergyInterval[i])
break;
1115 result = fA1[i]/energy1+fA2[i]/energy2+fA3[i]/energy3+fA4[i]/energy4;
1117 if( result >
DBL_MIN ) lambda = 1./result;
1156 range = cofA*energy*( 1 - cofB/(1 + cofC*
energy) );
1172 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
1173 c1,
c2,
c3, cof1, cof2, xln1, xln2, xln3, result;
1178 for(
G4int i=1;i<=fIntervalNumber-1;i++)
1180 x1 = fEnergyInterval[i];
1181 x2 = fEnergyInterval[i+1];
1192 xln3 = log((x2 + x0)/(x1 + x0));
1197 c1 = (x2 - x1)/x1/x2;
1198 c2 = (x2 - x1)*(x2 +x1)/x1/x1/x2/x2;
1199 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1201 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
1202 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
1203 result -= fA3[i]*c2/2/x02;
1204 result -= fA4[i]*c3/3/x02;
1206 cof1 = fA1[i]/x02 + fA3[i]/x04;
1207 cof2 = fA2[i]/x03 + fA4[i]/x05;
1209 result += 0.5*(cof1 +cof2)*xln2;
1210 result += 0.5*(cof1 - cof2)*xln3;
1212 result *= 2*hbarc/
pi;
1227 G4double cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
1233 G4double be2 = betaGammaSq/(1 + betaGammaSq);
1238 x1 = log(2*electron_mass_c2/fSplineEnergy[i]);
1240 if( betaGammaSq < 0.01 ) x2 = log(be2);
1243 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1244 (1/betaGammaSq - fRePartDielectricConst[i]) +
1245 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
1247 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
1253 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
1254 x5 = -1 - fRePartDielectricConst[i] +
1255 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1256 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1258 x7 = atan2(fImPartDielectricConst[i],x3);
1263 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
1267 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1268 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1270 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
1272 if( result < 1.0e-8 ) result = 1.0e-8;
1274 result *= fine_structure_const/be2/
pi;
1280 result *= (1 - exp(-beta/betaBohr/lowCof));
1304 G4double logarithm, x3, x5, argument, modul2, dNdxC;
1308 betaBohr2 = fine_structure_const*fine_structure_const;
1311 be2 = betaGammaSq/(1 + betaGammaSq);
1314 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1317 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1318 (1/betaGammaSq - fRePartDielectricConst[i]) +
1319 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1320 logarithm += log(1+1.0/betaGammaSq);
1323 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1329 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1330 x5 = -1.0 - fRePartDielectricConst[i] +
1331 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1332 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1333 if( x3 == 0.0 ) argument = 0.5*
pi;
1334 else argument = atan2(fImPartDielectricConst[i],x3);
1337 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
1339 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1341 dNdxC *= fine_structure_const/be2/
pi;
1343 dNdxC *= (1-exp(-be4/betaBohr4));
1347 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1348 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1362 G4double logarithm, x3, x5, argument, dNdxC;
1366 betaBohr2 = fine_structure_const*fine_structure_const;
1369 be2 = betaGammaSq/(1 + betaGammaSq);
1372 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1375 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1376 (1/betaGammaSq - fRePartDielectricConst[i]) +
1377 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1378 logarithm += log(1+1.0/betaGammaSq);
1381 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1387 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1388 x5 = be2*( 1.0 + fRePartDielectricConst[i] ) - 1.0;
1389 if( x3 == 0.0 ) argument = 0.5*
pi;
1390 else argument = atan2(fImPartDielectricConst[i],x3);
1393 dNdxC = ( logarithm*fImPartDielectricConst[i]*be2 + argument )/hbarc;
1395 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1397 dNdxC *= fine_structure_const/be2/
pi;
1399 dNdxC *= (1-exp(-be4/betaBohr4));
1412 G4double resonance, modul2, dNdxP, cof = 1.;
1415 betaBohr = fine_structure_const;
1416 be2 = betaGammaSq/(1 + betaGammaSq);
1420 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1421 resonance *= fImPartDielectricConst[i]/hbarc;
1424 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
1426 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1428 dNdxP *= fine_structure_const/be2/
pi;
1430 dNdxP *= (1 - exp(-beta/betaBohr/fLowEnergyCof));
1434 if( fDensity >= 0.1 )
1436 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1437 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1456 betaBohr2 = fine_structure_const*fine_structure_const;
1459 be2 = betaGammaSq/(1 + betaGammaSq);
1462 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1463 resonance *= fImPartDielectricConst[i]/hbarc;
1468 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1470 dNdxP *= fine_structure_const/be2/
pi;
1471 dNdxP *= (1-exp(-be4/betaBohr4));
1473 if( fDensity >= 0.1 )
1475 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1476 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1491 fIntegralPAIxSection[fSplineNumber] = 0;
1492 fIntegralPAIdEdx[fSplineNumber] = 0;
1493 fIntegralPAIxSection[0] = 0;
1494 G4int i, k = fIntervalNumber -1;
1496 for( i = fSplineNumber-1; i >= 1; i--)
1498 if(fSplineEnergy[i] >= fEnergyInterval[k])
1500 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] + SumOverInterval(i);
1501 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] + SumOverIntervaldEdx(i);
1505 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
1506 SumOverBorder(i+1,fEnergyInterval[k]);
1507 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
1508 SumOverBorderdEdx(i+1,fEnergyInterval[k]);
1511 if(fVerbose>0)
G4cout<<
"i = "<<i<<
"; k = "<<k<<
"; intPAIxsc[i] = "<<fIntegralPAIxSection[i]<<
G4endl;
1524 fIntegralCerenkov[fSplineNumber] = 0;
1525 fIntegralCerenkov[0] = 0;
1526 k = fIntervalNumber -1;
1528 for( i = fSplineNumber-1; i >= 1; i-- )
1530 if(fSplineEnergy[i] >= fEnergyInterval[k])
1532 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] + SumOverInterCerenkov(i);
1537 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
1538 SumOverBordCerenkov(i+1,fEnergyInterval[k]);
1555 fIntegralMM[fSplineNumber] = 0;
1557 k = fIntervalNumber -1;
1559 for( i = fSplineNumber-1; i >= 1; i-- )
1561 if(fSplineEnergy[i] >= fEnergyInterval[k])
1563 fIntegralMM[i] = fIntegralMM[i+1] + SumOverInterMM(i);
1568 fIntegralMM[i] = fIntegralMM[i+1] +
1569 SumOverBordMM(i+1,fEnergyInterval[k]);
1585 fIntegralPlasmon[fSplineNumber] = 0;
1586 fIntegralPlasmon[0] = 0;
1587 G4int k = fIntervalNumber -1;
1588 for(
G4int i=fSplineNumber-1;i>=1;i--)
1590 if(fSplineEnergy[i] >= fEnergyInterval[k])
1592 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] + SumOverInterPlasmon(i);
1596 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
1597 SumOverBordPlasmon(i+1,fEnergyInterval[k]);
1612 fIntegralResonance[fSplineNumber] = 0;
1613 fIntegralResonance[0] = 0;
1614 G4int k = fIntervalNumber -1;
1615 for(
G4int i=fSplineNumber-1;i>=1;i--)
1617 if(fSplineEnergy[i] >= fEnergyInterval[k])
1619 fIntegralResonance[i] = fIntegralResonance[i+1] + SumOverInterResonance(i);
1623 fIntegralResonance[i] = fIntegralResonance[i+1] +
1624 SumOverBordResonance(i+1,fEnergyInterval[k]);
1641 x0 = fSplineEnergy[i];
1642 x1 = fSplineEnergy[i+1];
1644 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1646 y0 = fDifPAIxSection[i];
1647 yy1 = fDifPAIxSection[i+1];
1649 if(fVerbose>0)
G4cout<<
"x0 = "<<x0<<
"; x1 = "<<x1<<
", y0 = "<<y0<<
"; yy1 = "<<yy1<<
G4endl;
1652 a = log10(yy1/y0)/log10(c);
1654 if(fVerbose>0)
G4cout<<
"SumOverInterval, a = "<<a<<
"; c = "<<c<<
G4endl;
1659 if( std::fabs(a) < 1.e-6 )
1661 result = b*log(x1/x0);
1665 result = y0*(x1*pow(c,a-1) - x0)/a;
1668 if( std::fabs(a) < 1.e-6 )
1670 fIntegralPAIxSection[0] += b*log(x1/x0);
1674 fIntegralPAIxSection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1686 x0 = fSplineEnergy[i];
1687 x1 = fSplineEnergy[i+1];
1689 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1691 y0 = fDifPAIxSection[i];
1692 yy1 = fDifPAIxSection[i+1];
1694 a = log10(yy1/y0)/log10(c);
1700 result = b*log(x1/x0);
1704 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1720 x0 = fSplineEnergy[i];
1721 x1 = fSplineEnergy[i+1];
1723 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1725 y0 = fdNdxCerenkov[i];
1726 yy1 = fdNdxCerenkov[i+1];
1731 a = log10(yy1/y0)/log10(c);
1735 if(a == 0) result = b*log(c);
1736 else result = y0*(x1*pow(c,a-1) - x0)/a;
1739 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1740 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1756 x0 = fSplineEnergy[i];
1757 x1 = fSplineEnergy[i+1];
1759 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1767 a = log10(yy1/y0)/log10(c);
1771 if(a == 0) result = b*log(c);
1772 else result = y0*(x1*pow(c,a-1) - x0)/a;
1775 if( a == 0 ) fIntegralMM[0] += b*log(x1/x0);
1776 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1792 x0 = fSplineEnergy[i];
1793 x1 = fSplineEnergy[i+1];
1795 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1797 y0 = fdNdxPlasmon[i];
1798 yy1 = fdNdxPlasmon[i+1];
1800 a = log10(yy1/y0)/log10(c);
1805 if(a == 0) result = b*log(x1/x0);
1806 else result = y0*(x1*pow(c,a-1) - x0)/a;
1809 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1810 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1826 x0 = fSplineEnergy[i];
1827 x1 = fSplineEnergy[i+1];
1829 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1831 y0 = fdNdxResonance[i];
1832 yy1 = fdNdxResonance[i+1];
1834 a = log10(yy1/y0)/log10(c);
1839 if(a == 0) result = b*log(x1/x0);
1840 else result = y0*(x1*pow(c,a-1) - x0)/a;
1843 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1844 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1861 x0 = fSplineEnergy[i];
1862 x1 = fSplineEnergy[i+1];
1863 y0 = fDifPAIxSection[i];
1864 yy1 = fDifPAIxSection[i+1];
1868 a = log10(yy1/y0)/log10(x1/x0);
1870 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1876 if( std::fabs(a) < 1.e-6 )
1878 result = b*log(x0/e0);
1882 result = y0*(x0 - e0*pow(d,a-1))/a;
1885 if( std::fabs(a) < 1.e-6 )
1887 fIntegralPAIxSection[0] += b*log(x0/e0);
1891 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1893 x0 = fSplineEnergy[i - 1];
1894 x1 = fSplineEnergy[i - 2];
1895 y0 = fDifPAIxSection[i - 1];
1896 yy1 = fDifPAIxSection[i - 2];
1900 a = log10(yy1/y0)/log10(x1/x0);
1904 if( std::fabs(a) < 1.e-6 )
1906 result += b*log(e0/x0);
1910 result += y0*(e0*pow(d,a-1) - x0)/a;
1913 if( std::fabs(a) < 1.e-6 )
1915 fIntegralPAIxSection[0] += b*log(e0/x0);
1919 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1933 x0 = fSplineEnergy[i];
1934 x1 = fSplineEnergy[i+1];
1935 y0 = fDifPAIxSection[i];
1936 yy1 = fDifPAIxSection[i+1];
1940 a = log10(yy1/y0)/log10(x1/x0);
1947 result = b*log(x0/e0);
1951 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1953 x0 = fSplineEnergy[i - 1];
1954 x1 = fSplineEnergy[i - 2];
1955 y0 = fDifPAIxSection[i - 1];
1956 yy1 = fDifPAIxSection[i - 2];
1960 a = log10(yy1/y0)/log10(x1/x0);
1966 result += b*log(e0/x0);
1970 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1984 G4double x0,x1,y0,yy1,
a,b,e0,c,d,result;
1987 x0 = fSplineEnergy[i];
1988 x1 = fSplineEnergy[i+1];
1989 y0 = fdNdxCerenkov[i];
1990 yy1 = fdNdxCerenkov[i+1];
1997 a = log10(yy1/y0)/log10(c);
2002 if( a == 0 ) result = b*log(x0/e0);
2003 else result = y0*(x0 - e0*pow(d,a-1))/a;
2006 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
2007 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2011 x0 = fSplineEnergy[i - 1];
2012 x1 = fSplineEnergy[i - 2];
2013 y0 = fdNdxCerenkov[i - 1];
2014 yy1 = fdNdxCerenkov[i - 2];
2021 a = log10(yy1/y0)/log10(x1/x0);
2026 if( a == 0 ) result += b*log(e0/x0);
2027 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2030 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2031 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2048 G4double x0,x1,y0,yy1,
a,b,e0,c,d,result;
2051 x0 = fSplineEnergy[i];
2052 x1 = fSplineEnergy[i+1];
2061 a = log10(yy1/y0)/log10(c);
2066 if( a == 0 ) result = b*log(x0/e0);
2067 else result = y0*(x0 - e0*pow(d,a-1))/a;
2070 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2071 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2075 x0 = fSplineEnergy[i - 1];
2076 x1 = fSplineEnergy[i - 2];
2077 y0 = fdNdxMM[i - 1];
2078 yy1 = fdNdxMM[i - 2];
2085 a = log10(yy1/y0)/log10(x1/x0);
2090 if( a == 0 ) result += b*log(e0/x0);
2091 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2094 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2095 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2112 G4double x0,x1,y0,yy1,
a,b,c,d,e0,result;
2115 x0 = fSplineEnergy[i];
2116 x1 = fSplineEnergy[i+1];
2117 y0 = fdNdxPlasmon[i];
2118 yy1 = fdNdxPlasmon[i+1];
2122 a = log10(yy1/y0)/log10(c);
2127 if( a == 0 ) result = b*log(x0/e0);
2128 else result = y0*(x0 - e0*pow(d,a-1))/a;
2131 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2132 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2134 x0 = fSplineEnergy[i - 1];
2135 x1 = fSplineEnergy[i - 2];
2136 y0 = fdNdxPlasmon[i - 1];
2137 yy1 = fdNdxPlasmon[i - 2];
2141 a = log10(yy1/y0)/log10(c);
2146 if( a == 0 ) result += b*log(e0/x0);
2147 else result += y0*(e0*pow(d,a-1) - x0)/a;
2150 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2151 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2165 G4double x0,x1,y0,yy1,
a,b,c,d,e0,result;
2168 x0 = fSplineEnergy[i];
2169 x1 = fSplineEnergy[i+1];
2170 y0 = fdNdxResonance[i];
2171 yy1 = fdNdxResonance[i+1];
2175 a = log10(yy1/y0)/log10(c);
2180 if( a == 0 ) result = b*log(x0/e0);
2181 else result = y0*(x0 - e0*pow(d,a-1))/a;
2184 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2185 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2187 x0 = fSplineEnergy[i - 1];
2188 x1 = fSplineEnergy[i - 2];
2189 y0 = fdNdxResonance[i - 1];
2190 yy1 = fdNdxResonance[i - 2];
2194 a = log10(yy1/y0)/log10(c);
2199 if( a == 0 ) result += b*log(e0/x0);
2200 else result += y0*(e0*pow(d,a-1) - x0)/a;
2203 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2204 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2221 meanNumber = fIntegralPAIxSection[1]*step;
2222 numOfCollisions =
G4Poisson(meanNumber);
2226 while(numOfCollisions)
2228 loss += GetEnergyTransfer();
2248 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2250 if( position >= fIntegralPAIxSection[iTransfer] )
break;
2252 if(iTransfer > fSplineNumber) iTransfer--;
2254 energyTransfer = fSplineEnergy[iTransfer];
2258 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2260 return energyTransfer;
2274 meanNumber = fIntegralCerenkov[1]*step;
2275 numOfCollisions =
G4Poisson(meanNumber);
2279 while(numOfCollisions)
2281 loss += GetCerenkovEnergyTransfer();
2300 meanNumber = fIntegralMM[1]*step;
2301 numOfCollisions =
G4Poisson(meanNumber);
2305 while(numOfCollisions)
2307 loss += GetMMEnergyTransfer();
2327 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2329 if( position >= fIntegralCerenkov[iTransfer] )
break;
2331 if(iTransfer > fSplineNumber) iTransfer--;
2333 energyTransfer = fSplineEnergy[iTransfer];
2337 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2339 return energyTransfer;
2354 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2356 if( position >= fIntegralMM[iTransfer] )
break;
2358 if(iTransfer > fSplineNumber) iTransfer--;
2360 energyTransfer = fSplineEnergy[iTransfer];
2364 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2366 return energyTransfer;
2380 meanNumber = fIntegralPlasmon[1]*step;
2381 numOfCollisions =
G4Poisson(meanNumber);
2385 while(numOfCollisions)
2387 loss += GetPlasmonEnergyTransfer();
2407 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2409 if( position >= fIntegralPlasmon[iTransfer] )
break;
2411 if(iTransfer > fSplineNumber) iTransfer--;
2413 energyTransfer = fSplineEnergy[iTransfer];
2417 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2419 return energyTransfer;
2433 meanNumber = fIntegralResonance[1]*step;
2434 numOfCollisions =
G4Poisson(meanNumber);
2438 while(numOfCollisions)
2440 loss += GetResonanceEnergyTransfer();
2461 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2463 if( position >= fIntegralResonance[iTransfer] )
break;
2465 if(iTransfer > fSplineNumber) iTransfer--;
2467 energyTransfer = fSplineEnergy[iTransfer];
2471 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2473 return energyTransfer;
2487 position = (fIntegralPlasmon[1]-fIntegralResonance[1])*
G4UniformRand();
2489 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2491 if( position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2493 if(iTransfer > fSplineNumber) iTransfer--;
2495 energyTransfer = fSplineEnergy[iTransfer];
2499 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2501 return energyTransfer;
2509 G4String head =
"G4PAIxSection::" + methodName +
"()";
2511 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2525 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
2526 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
2527 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
2528 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
2529 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
2530 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
2531 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
2532 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
2533 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
2534 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
2535 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
2536 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
2537 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
2538 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
2539 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
2540 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
2541 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
2542 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
2543 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
2544 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
2545 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
2546 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
void IntegralPAIxSection()
void SplainPAI(G4double betaGammaSq)
G4double GetRutherfordEnergyTransfer()
G4double PAIdNdxResonance(G4int intervalNumber, G4double betaGammaSq)
static c2_factory< G4double > c2
G4long G4Poisson(G4double mean)
G4double GetPlasmonEnergyTransfer()
std::ostringstream G4ExceptionDescription
G4double GetStepResonanceLoss(G4double step)
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4double SumOverInterMM(G4int intervalNumber)
static const G4double betaBohr
static G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
static const G4double cofBetaBohr
G4double GetDensity() const
void NormShift(G4double betaGammaSq)
G4int GetMaxInterval() const
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordResonance(G4int intervalNumber, G4double energy)
static G4int fNumberOfGammas
G4double SumOverInterPlasmon(G4int intervalNumber)
G4double GetSandiaMatTablePAI(G4int, G4int)
G4double SumOverInterval(G4int intervalNumber)
G4double RePartDielectricConst(G4double energy)
const G4Element * GetElement(G4int iel) const
void ComputeLowEnergyCof()
void CallError(G4int i, const G4String &methodName) const
static const G4int fMaxSplineSize
G4int SandiaMixing(G4int Z[], const G4double *fractionW, G4int el, G4int mi)
static const G4double betaBohr4
G4double GetResonanceEnergyTransfer()
G4GLOB_DLL std::ostream G4cout
G4double GetElectronDensity() const
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double GetPhotonRange(G4double energy)
G4double SumOverBordMM(G4int intervalNumber, G4double energy)
static const G4double betaBohr2
G4double GetCerenkovEnergyTransfer()
static const G4int fRefGammaNumber
static const G4double fError
G4double SumOverInterResonance(G4int intervalNumber)
G4int SandiaIntervals(G4int Z[], G4int el)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetStepPlasmonLoss(G4double step)
G4double PAIdNdxMM(G4int intervalNumber, G4double betaGammaSq)
G4double GetStepEnergyLoss(G4double step)
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
G4double GetMMEnergyTransfer()
G4double SumOverBorder(G4int intervalNumber, G4double energy)
G4double energy(const ThreeVector &p, const G4double m)
static const G4double fDelta
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
G4double SumOverInterCerenkov(G4int intervalNumber)
G4double GetPhotoAbsorpCof(G4int i, G4int j) const
size_t GetNumberOfElements() const
G4double GetEnergyTransfer()
G4double GetStepMMLoss(G4double step)
G4double SumOverIntervaldEdx(G4int intervalNumber)
G4double GetStepCerenkovLoss(G4double step)
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
G4double DifPAIxSection(G4int intervalNumber, G4double betaGammaSq)
static const G4double fLorentzFactor[112]
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
const G4Material * GetMaterial() const
G4double GetElectronRange(G4double energy)