84 const G4double G4PAIxSection::fDelta = 0.005;
85 const G4double G4PAIxSection::fError = 0.005;
87 const G4int G4PAIxSection::fMaxSplineSize = 1000;
97 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
98 fIntervalNumber = fSplineNumber = 0;
102 fRePartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
103 fImPartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
110 fIntegralPAIxSection =
G4DataVector(fMaxSplineSize,0.0);
117 for(
G4int i = 0; i < 500; ++i )
119 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
132 fMaterialIndex = matIndex;
139 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
143 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
145 (*(*fMatSandiaMatrix)[i])[0] = fSandia->GetSandiaMatTable(i,0);
147 for(j = 1; j < 5; j++)
149 (*(*fMatSandiaMatrix)[i])[j] = fSandia->GetSandiaMatTable(i,j)*fDensity;
152 ComputeLowEnergyCof();
162 fMatSandiaMatrix = 0;
167 fMaterialIndex = materialIndex;
168 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
169 fElectronDensity = (*theMaterialTable)[materialIndex]->
170 GetElectronDensity();
171 fIntervalNumber = (*theMaterialTable)[materialIndex]->
172 GetSandiaTable()->GetMatNbOfIntervals();
182 for(i = 1; i <= fIntervalNumber; i++ )
184 if(((*theMaterialTable)[materialIndex]->
185 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0) >= maxEnergyTransfer) ||
186 i > fIntervalNumber )
188 fEnergyInterval[i] = maxEnergyTransfer;
192 fEnergyInterval[i] = (*theMaterialTable)[materialIndex]->
193 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0);
194 fA1[i] = (*theMaterialTable)[materialIndex]->
195 GetSandiaTable()->GetSandiaCofForMaterial(i-1,1);
196 fA2[i] = (*theMaterialTable)[materialIndex]->
197 GetSandiaTable()->GetSandiaCofForMaterial(i-1,2);
198 fA3[i] = (*theMaterialTable)[materialIndex]->
199 GetSandiaTable()->GetSandiaCofForMaterial(i-1,3);
200 fA4[i] = (*theMaterialTable)[materialIndex]->
201 GetSandiaTable()->GetSandiaCofForMaterial(i-1,4);
205 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
208 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
213 for(i=1;i<fIntervalNumber;i++)
215 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
216 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
222 for(j=i;j<fIntervalNumber;j++)
224 fEnergyInterval[j] = fEnergyInterval[j+1];
255 ComputeLowEnergyCof();
277 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
278 fIntervalNumber = fSplineNumber = 0;
297 for(
G4int i = 0; i < 500; ++i )
299 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
303 fMatSandiaMatrix = 0;
307 fMaterialIndex = materialIndex;
308 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
309 fElectronDensity = (*theMaterialTable)[materialIndex]->
310 GetElectronDensity();
312 fIntervalNumber = intNumber;
330 for( i = 1; i <= fIntervalNumber; i++ )
332 if( ( photoAbsCof[i-1][0] >= maxEnergyTransfer ) ||
333 i > fIntervalNumber )
335 fEnergyInterval[i] = maxEnergyTransfer;
339 fEnergyInterval[i] = photoAbsCof[i-1][0];
340 fA1[i] = photoAbsCof[i-1][1];
341 fA2[i] = photoAbsCof[i-1][2];
342 fA3[i] = photoAbsCof[i-1][3];
343 fA4[i] = photoAbsCof[i-1][4];
349 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
352 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
356 for( i = 1; i <= fIntervalNumber; i++ )
363 for( i = 1; i < fIntervalNumber; i++ )
365 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
366 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
372 for(j=i;j<fIntervalNumber;j++)
374 fEnergyInterval[j] = fEnergyInterval[j+1];
386 for( i = 1; i <= fIntervalNumber; i++ )
394 ComputeLowEnergyCof();
396 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
398 NormShift(betaGammaSqRef);
399 SplainPAI(betaGammaSqRef);
403 for(i = 1; i <= fSplineNumber; i++)
405 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
406 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
407 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
408 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
409 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
418 IntegralPAIxSection();
437 fMatSandiaMatrix = 0;
441 G4int i, j, numberOfElements;
443 fMaterialIndex = materialIndex;
444 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
445 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
446 numberOfElements = (*theMaterialTable)[materialIndex]->GetNumberOfElements();
448 G4int* thisMaterialZ =
new G4int[numberOfElements];
450 for( i = 0; i < numberOfElements; i++ )
452 thisMaterialZ[i] = (
G4int)(*theMaterialTable)[materialIndex]->
453 GetElement(i)->GetZ();
456 fSandia = (*theMaterialTable)[materialIndex]->
460 (thisMaterialZ,numberOfElements);
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];
556 ComputeLowEnergyCof();
558 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
560 NormShift(betaGammaSqRef);
561 SplainPAI(betaGammaSqRef);
565 for(i = 1; i <= fSplineNumber; i++)
567 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
568 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
569 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
570 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
571 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
573 IntegralPAIxSection();
597 delete fMatSandiaMatrix;
615 G4cout<<
"G4PAIxSection::Initialize(...,G4SandiaTable* sandia)"<<
G4endl;
629 G4cout<<
"fDensity = "<<fDensity<<
"\t"<<fElectronDensity<<
"\t fIntervalNumber = "<<fIntervalNumber<<
G4endl;
637 for( i = 1; i <= fIntervalNumber; i++ )
646 fEnergyInterval[i] = maxEnergyTransfer;
658 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
659 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
662 if( fVerbose > 0 )
G4cout<<
"last i = "<<i<<
"; "<<
"fIntervalNumber = "<<fIntervalNumber<<
G4endl;
664 if( fEnergyInterval[fIntervalNumber] != maxEnergyTransfer )
667 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
671 for( i = 1; i <= fIntervalNumber; i++ )
673 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
674 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
677 if( fVerbose > 0 )
G4cout<<
"Now checking, if two borders are too close together"<<
G4endl;
679 for( i = 1; i < fIntervalNumber; i++ )
681 if( fEnergyInterval[i+1]-fEnergyInterval[i] >
682 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]) && fEnergyInterval[i] > 0.)
continue;
685 if( fVerbose > 0 )
G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fEnergyInterval[i+1]/
keV;
687 for( j = i; j < fIntervalNumber; j++ )
689 fEnergyInterval[j] = fEnergyInterval[j+1];
701 for( i = 1; i <= fIntervalNumber; i++ )
703 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
704 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
709 ComputeLowEnergyCof(material);
712 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
714 NormShift(betaGammaSqRef);
715 SplainPAI(betaGammaSqRef);
719 for( i = 1; i <= fSplineNumber; i++ )
721 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
724 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
725 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
726 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
727 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
729 IntegralPAIxSection();
735 for( i = 1; i <= fSplineNumber; i++ )
737 if(fVerbose>0)
G4cout<<i<<
"; w = "<<fSplineEnergy[i]/
keV<<
" keV; dN/dx_>w = "<<fIntegralPAIxSection[i]<<
" 1/mm"<<
G4endl;
752 static const G4double p0 = 1.20923e+00;
753 static const G4double p1 = 3.53256e-01;
754 static const G4double p2 = -1.45052e-03;
759 for( i = 0; i < numberOfElements; i++ )
762 sumZ += thisMaterialZ[i];
763 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
765 for( i = 0; i < numberOfElements; i++ )
767 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
769 fLowEnergyCof = sumCof;
770 delete [] thisMaterialZ;
771 delete [] thisMaterialCof;
783 G4int i, numberOfElements = (*theMaterialTable)[fMaterialIndex]->GetNumberOfElements();
793 for( i = 0; i < numberOfElements; i++ )
795 thisMaterialZ[i] = (*theMaterialTable)[fMaterialIndex]->GetElement(i)->GetZ();
796 sumZ += thisMaterialZ[i];
797 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
799 for( i = 0; i < numberOfElements; i++ )
801 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
803 fLowEnergyCof = sumCof;
805 delete [] thisMaterialZ;
806 delete [] thisMaterialCof;
817 G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
818 fLorentzFactor[fRefGammaNumber] - 1;
822 NormShift(betaGammaSq);
823 SplainPAI(betaGammaSq);
825 IntegralPAIxSection();
831 for(i = 0; i<= fSplineNumber; i++)
833 fPAItable[i][fRefGammaNumber] = fIntegralPAIxSection[i];
836 fPAItable[i][0] = fSplineEnergy[i];
839 fPAItable[0][0] = fSplineNumber;
841 for(
G4int j = 1; j < 112; j++)
843 if( j == fRefGammaNumber )
continue;
845 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
847 for(i = 1; i <= fSplineNumber; i++)
849 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
850 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
851 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
852 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
853 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
855 IntegralPAIxSection();
861 for(i = 0; i <= fSplineNumber; i++)
863 fPAItable[i][j] = fIntegralPAIxSection[i];
878 if(fVerbose>0)
G4cout<<
" G4PAIxSection::NormShift call "<<
G4endl;
881 for( i = 1; i <= fIntervalNumber-1; i++ )
883 for( j = 1; j <= 2; j++ )
885 fSplineNumber = (i-1)*2 + j;
887 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
888 else fSplineEnergy[fSplineNumber] = fEnergyInterval[i+1]*(1-fDelta);
889 if(fVerbose>0)
G4cout<<
"cn = "<<fSplineNumber<<
"; "<<
"w = "<<fSplineEnergy[fSplineNumber]/
keV<<
" keV"<<
G4endl;
892 fIntegralTerm[1]=RutherfordIntegral(1,fEnergyInterval[1],fSplineEnergy[1]);
896 for( i = 2; i <= fSplineNumber; i++ )
898 if( fSplineEnergy[i]<fEnergyInterval[j+1] )
900 fIntegralTerm[i] = fIntegralTerm[i-1] +
901 RutherfordIntegral(j,fSplineEnergy[i-1],
906 G4double x = RutherfordIntegral(j,fSplineEnergy[i-1],
907 fEnergyInterval[j+1] );
909 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
910 RutherfordIntegral(j,fEnergyInterval[j],
913 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV \t"<<fIntegralTerm[i]<<
"\n"<<
G4endl;
916 fNormalizationCof *= fElectronDensity/fIntegralTerm[fSplineNumber];
923 for(
G4int k = 1; k <= fIntervalNumber-1; k++ )
925 for( j = 1; j <= 2; j++ )
928 fImPartDielectricConst[i] = fNormalizationCof*
929 ImPartDielectricConst(k,fSplineEnergy[i]);
930 fRePartDielectricConst[i] = fNormalizationCof*
931 RePartDielectricConst(fSplineEnergy[i]);
932 fIntegralTerm[i] *= fNormalizationCof;
934 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
935 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
936 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
937 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
938 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
939 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV, xsc = "<<fDifPAIxSection[i]<<
"\n"<<
G4endl;
953 G4int j, k = 1, i = 1;
955 if(fVerbose>0)
G4cout<<
" G4PAIxSection::SplainPAI call "<<
G4endl;
957 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
960 if( fSplineEnergy[i+1] > fEnergyInterval[k+1] )
964 if(fVerbose>0)
G4cout<<
" in if: i = "<<i<<
"; k = "<<k<<
G4endl;
967 if(fVerbose>0)
G4cout<<
" out if: i = "<<i<<
"; k = "<<k<<
G4endl;
973 for( j = fSplineNumber; j >= i+2; j-- )
975 fSplineEnergy[j] = fSplineEnergy[j-1];
976 fImPartDielectricConst[j] = fImPartDielectricConst[j-1];
977 fRePartDielectricConst[j] = fRePartDielectricConst[j-1];
978 fIntegralTerm[j] = fIntegralTerm[j-1];
980 fDifPAIxSection[j] = fDifPAIxSection[j-1];
981 fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
982 fdNdxMM[j] = fdNdxMM[j-1];
983 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
984 fdNdxResonance[j] = fdNdxResonance[j-1];
991 if(fVerbose>0)
G4cout<<
"Spline: x1 = "<<x1<<
"; x2 = "<<x2<<
", yy1 = "<<yy1<<
"; y2 = "<<y2<<
G4endl;
998 fSplineEnergy[i+1] = en1;
1003 G4double a = log10(y2/yy1)/log10(x2/x1);
1011 fImPartDielectricConst[i+1] = fNormalizationCof*
1012 ImPartDielectricConst(k,fSplineEnergy[i+1]);
1013 fRePartDielectricConst[i+1] = fNormalizationCof*
1014 RePartDielectricConst(fSplineEnergy[i+1]);
1015 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
1016 RutherfordIntegral(k,fSplineEnergy[i],
1017 fSplineEnergy[i+1]);
1019 fDifPAIxSection[i+1] = DifPAIxSection(i+1,betaGammaSq);
1020 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
1021 fdNdxMM[i+1] = PAIdNdxMM(i+1,betaGammaSq);
1022 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
1023 fdNdxResonance[i+1] = PAIdNdxResonance(i+1,betaGammaSq);
1027 if(fVerbose>0)
G4cout<<
"Spline, a = "<<a<<
"; b = "<<b<<
"; new xsc = "<<y<<
"; compxsc = "<<fDifPAIxSection[i+1]<<
G4endl;
1031 G4double x = 2*(fDifPAIxSection[i+1] -
y)/(fDifPAIxSection[i+1] + y);
1033 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])/(fSplineEnergy[i+1]+fSplineEnergy[i]);
1039 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;
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;
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;
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;
1234 G4double be2 = betaGammaSq/(1 + betaGammaSq);
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;
1281 result *= (1 - exp(-beta/betaBohr/lowCof));
1305 G4double logarithm, x3, x5, argument, modul2, dNdxC;
1306 G4double be2, betaBohr2, cofBetaBohr;
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;
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.;
1417 be2 = betaGammaSq/(1 + betaGammaSq);
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;
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;
1458 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1460 be2 = betaGammaSq/(1 + betaGammaSq);
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);
1502 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] + SumOverIntervaldEdx(i);
1506 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
1507 SumOverBorder(i+1,fEnergyInterval[k]);
1508 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
1509 SumOverBorderdEdx(i+1,fEnergyInterval[k]);
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])
1533 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] + SumOverInterCerenkov(i);
1538 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
1539 SumOverBordCerenkov(i+1,fEnergyInterval[k]);
1556 fIntegralMM[fSplineNumber] = 0;
1558 k = fIntervalNumber -1;
1560 for( i = fSplineNumber-1; i >= 1; i-- )
1562 if(fSplineEnergy[i] >= fEnergyInterval[k])
1564 fIntegralMM[i] = fIntegralMM[i+1] + SumOverInterMM(i);
1569 fIntegralMM[i] = fIntegralMM[i+1] +
1570 SumOverBordMM(i+1,fEnergyInterval[k]);
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])
1593 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] + SumOverInterPlasmon(i);
1597 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
1598 SumOverBordPlasmon(i+1,fEnergyInterval[k]);
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])
1620 fIntegralResonance[i] = fIntegralResonance[i+1] + SumOverInterResonance(i);
1624 fIntegralResonance[i] = fIntegralResonance[i+1] +
1625 SumOverBordResonance(i+1,fEnergyInterval[k]);
1642 x0 = fSplineEnergy[i];
1643 x1 = fSplineEnergy[i+1];
1645 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1647 y0 = fDifPAIxSection[i];
1648 yy1 = fDifPAIxSection[i+1];
1650 if(fVerbose>0)
G4cout<<
"x0 = "<<x0<<
"; x1 = "<<x1<<
", y0 = "<<y0<<
"; yy1 = "<<yy1<<
G4endl;
1653 a = log10(yy1/y0)/log10(c);
1655 if(fVerbose>0)
G4cout<<
"SumOverInterval, a = "<<a<<
"; c = "<<c<<
G4endl;
1660 if( std::fabs(a) < 1.e-6 )
1662 result = b*log(x1/x0);
1666 result = y0*(x1*pow(c,a-1) - x0)/a;
1669 if( std::fabs(a) < 1.e-6 )
1671 fIntegralPAIxSection[0] += b*log(x1/x0);
1675 fIntegralPAIxSection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1687 x0 = fSplineEnergy[i];
1688 x1 = fSplineEnergy[i+1];
1690 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1692 y0 = fDifPAIxSection[i];
1693 yy1 = fDifPAIxSection[i+1];
1695 a = log10(yy1/y0)/log10(c);
1701 result = b*log(x1/x0);
1705 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1721 x0 = fSplineEnergy[i];
1722 x1 = fSplineEnergy[i+1];
1724 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1726 y0 = fdNdxCerenkov[i];
1727 yy1 = fdNdxCerenkov[i+1];
1732 a = log10(yy1/y0)/log10(c);
1736 if(a == 0) result = b*log(c);
1737 else result = y0*(x1*pow(c,a-1) - x0)/a;
1740 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1741 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1757 x0 = fSplineEnergy[i];
1758 x1 = fSplineEnergy[i+1];
1760 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1768 a = log10(yy1/y0)/log10(c);
1772 if(a == 0) result = b*log(c);
1773 else result = y0*(x1*pow(c,a-1) - x0)/a;
1776 if( a == 0 ) fIntegralMM[0] += b*log(x1/x0);
1777 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1793 x0 = fSplineEnergy[i];
1794 x1 = fSplineEnergy[i+1];
1796 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1798 y0 = fdNdxPlasmon[i];
1799 yy1 = fdNdxPlasmon[i+1];
1801 a = log10(yy1/y0)/log10(c);
1806 if(a == 0) result = b*log(x1/x0);
1807 else result = y0*(x1*pow(c,a-1) - x0)/a;
1810 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1811 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1827 x0 = fSplineEnergy[i];
1828 x1 = fSplineEnergy[i+1];
1830 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1832 y0 = fdNdxResonance[i];
1833 yy1 = fdNdxResonance[i+1];
1835 a = log10(yy1/y0)/log10(c);
1840 if(a == 0) result = b*log(x1/x0);
1841 else result = y0*(x1*pow(c,a-1) - x0)/a;
1844 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1845 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1862 x0 = fSplineEnergy[i];
1863 x1 = fSplineEnergy[i+1];
1864 y0 = fDifPAIxSection[i];
1865 yy1 = fDifPAIxSection[i+1];
1869 a = log10(yy1/y0)/log10(x1/x0);
1871 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1877 if( std::fabs(a) < 1.e-6 )
1879 result = b*log(x0/e0);
1883 result = y0*(x0 - e0*pow(d,a-1))/a;
1886 if( std::fabs(a) < 1.e-6 )
1888 fIntegralPAIxSection[0] += b*log(x0/e0);
1892 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1894 x0 = fSplineEnergy[i - 1];
1895 x1 = fSplineEnergy[i - 2];
1896 y0 = fDifPAIxSection[i - 1];
1897 yy1 = fDifPAIxSection[i - 2];
1901 a = log10(yy1/y0)/log10(x1/x0);
1905 if( std::fabs(a) < 1.e-6 )
1907 result += b*log(e0/x0);
1911 result += y0*(e0*pow(d,a-1) - x0)/a;
1914 if( std::fabs(a) < 1.e-6 )
1916 fIntegralPAIxSection[0] += b*log(e0/x0);
1920 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1934 x0 = fSplineEnergy[i];
1935 x1 = fSplineEnergy[i+1];
1936 y0 = fDifPAIxSection[i];
1937 yy1 = fDifPAIxSection[i+1];
1941 a = log10(yy1/y0)/log10(x1/x0);
1948 result = b*log(x0/e0);
1952 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1954 x0 = fSplineEnergy[i - 1];
1955 x1 = fSplineEnergy[i - 2];
1956 y0 = fDifPAIxSection[i - 1];
1957 yy1 = fDifPAIxSection[i - 2];
1961 a = log10(yy1/y0)/log10(x1/x0);
1967 result += b*log(e0/x0);
1971 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1988 x0 = fSplineEnergy[i];
1989 x1 = fSplineEnergy[i+1];
1990 y0 = fdNdxCerenkov[i];
1991 yy1 = fdNdxCerenkov[i+1];
1998 a = log10(yy1/y0)/log10(c);
2003 if( a == 0 ) result = b*log(x0/e0);
2004 else result = y0*(x0 - e0*pow(d,a-1))/a;
2007 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
2008 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2012 x0 = fSplineEnergy[i - 1];
2013 x1 = fSplineEnergy[i - 2];
2014 y0 = fdNdxCerenkov[i - 1];
2015 yy1 = fdNdxCerenkov[i - 2];
2022 a = log10(yy1/y0)/log10(x1/x0);
2027 if( a == 0 ) result += b*log(e0/x0);
2028 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2031 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2032 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2052 x0 = fSplineEnergy[i];
2053 x1 = fSplineEnergy[i+1];
2062 a = log10(yy1/y0)/log10(c);
2067 if( a == 0 ) result = b*log(x0/e0);
2068 else result = y0*(x0 - e0*pow(d,a-1))/a;
2071 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2072 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2076 x0 = fSplineEnergy[i - 1];
2077 x1 = fSplineEnergy[i - 2];
2078 y0 = fdNdxMM[i - 1];
2079 yy1 = fdNdxMM[i - 2];
2086 a = log10(yy1/y0)/log10(x1/x0);
2091 if( a == 0 ) result += b*log(e0/x0);
2092 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2095 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2096 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2116 x0 = fSplineEnergy[i];
2117 x1 = fSplineEnergy[i+1];
2118 y0 = fdNdxPlasmon[i];
2119 yy1 = fdNdxPlasmon[i+1];
2123 a = log10(yy1/y0)/log10(c);
2128 if( a == 0 ) result = b*log(x0/e0);
2129 else result = y0*(x0 - e0*pow(d,a-1))/a;
2132 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2133 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2135 x0 = fSplineEnergy[i - 1];
2136 x1 = fSplineEnergy[i - 2];
2137 y0 = fdNdxPlasmon[i - 1];
2138 yy1 = fdNdxPlasmon[i - 2];
2142 a = log10(yy1/y0)/log10(c);
2147 if( a == 0 ) result += b*log(e0/x0);
2148 else result += y0*(e0*pow(d,a-1) - x0)/a;
2151 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2152 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2169 x0 = fSplineEnergy[i];
2170 x1 = fSplineEnergy[i+1];
2171 y0 = fdNdxResonance[i];
2172 yy1 = fdNdxResonance[i+1];
2176 a = log10(yy1/y0)/log10(c);
2181 if( a == 0 ) result = b*log(x0/e0);
2182 else result = y0*(x0 - e0*pow(d,a-1))/a;
2185 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2186 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2188 x0 = fSplineEnergy[i - 1];
2189 x1 = fSplineEnergy[i - 2];
2190 y0 = fdNdxResonance[i - 1];
2191 yy1 = fdNdxResonance[i - 2];
2195 a = log10(yy1/y0)/log10(c);
2200 if( a == 0 ) result += b*log(e0/x0);
2201 else result += y0*(e0*pow(d,a-1) - x0)/a;
2204 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2205 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2222 meanNumber = fIntegralPAIxSection[1]*step;
2223 numOfCollisions =
G4Poisson(meanNumber);
2227 while(numOfCollisions)
2229 loss += GetEnergyTransfer();
2249 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2251 if( position >= fIntegralPAIxSection[iTransfer] )
break;
2253 if(iTransfer > fSplineNumber) iTransfer--;
2255 energyTransfer = fSplineEnergy[iTransfer];
2259 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2261 return energyTransfer;
2275 meanNumber = fIntegralCerenkov[1]*step;
2276 numOfCollisions =
G4Poisson(meanNumber);
2280 while(numOfCollisions)
2282 loss += GetCerenkovEnergyTransfer();
2301 meanNumber = fIntegralMM[1]*step;
2302 numOfCollisions =
G4Poisson(meanNumber);
2306 while(numOfCollisions)
2308 loss += GetMMEnergyTransfer();
2328 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2330 if( position >= fIntegralCerenkov[iTransfer] )
break;
2332 if(iTransfer > fSplineNumber) iTransfer--;
2334 energyTransfer = fSplineEnergy[iTransfer];
2338 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2340 return energyTransfer;
2355 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2357 if( position >= fIntegralMM[iTransfer] )
break;
2359 if(iTransfer > fSplineNumber) iTransfer--;
2361 energyTransfer = fSplineEnergy[iTransfer];
2365 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2367 return energyTransfer;
2381 meanNumber = fIntegralPlasmon[1]*step;
2382 numOfCollisions =
G4Poisson(meanNumber);
2386 while(numOfCollisions)
2388 loss += GetPlasmonEnergyTransfer();
2408 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2410 if( position >= fIntegralPlasmon[iTransfer] )
break;
2412 if(iTransfer > fSplineNumber) iTransfer--;
2414 energyTransfer = fSplineEnergy[iTransfer];
2418 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2420 return energyTransfer;
2434 meanNumber = fIntegralResonance[1]*step;
2435 numOfCollisions =
G4Poisson(meanNumber);
2439 while(numOfCollisions)
2441 loss += GetResonanceEnergyTransfer();
2462 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2464 if( position >= fIntegralResonance[iTransfer] )
break;
2466 if(iTransfer > fSplineNumber) iTransfer--;
2468 energyTransfer = fSplineEnergy[iTransfer];
2472 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2474 return energyTransfer;
2488 position = (fIntegralPlasmon[1]-fIntegralResonance[1])*
G4UniformRand();
2490 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2492 if( position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2494 if(iTransfer > fSplineNumber) iTransfer--;
2496 energyTransfer = fSplineEnergy[iTransfer];
2500 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2502 return energyTransfer;
2508 void G4PAIxSection::CallError(
G4int i,
const G4String& methodName)
const
2510 G4String head =
"G4PAIxSection::" + methodName +
"()";
2512 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2521 G4int G4PAIxSection::fNumberOfGammas = 111;
2523 const G4double G4PAIxSection::fLorentzFactor[112] =
2526 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
2527 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
2528 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
2529 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
2530 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
2531 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
2532 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
2533 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
2534 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
2535 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
2536 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
2537 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
2538 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
2539 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
2540 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
2541 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
2542 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
2543 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
2544 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
2545 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
2546 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
2547 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
2557 G4int G4PAIxSection::fRefGammaNumber = 29;
void IntegralPAIxSection()
void SplainPAI(G4double betaGammaSq)
G4double GetRutherfordEnergyTransfer()
G4double PAIdNdxResonance(G4int intervalNumber, G4double betaGammaSq)
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 G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
G4double GetDensity() const
G4double G4NeutronHPJENDLHEData::G4double result
void NormShift(G4double betaGammaSq)
G4int GetMaxInterval() const
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordResonance(G4int intervalNumber, G4double energy)
G4double SumOverInterPlasmon(G4int intervalNumber)
G4double GetSandiaMatTablePAI(G4int, G4int)
G4double SumOverInterval(G4int intervalNumber)
G4double RePartDielectricConst(G4double energy)
const G4Element * GetElement(G4int iel) const
void ComputeLowEnergyCof()
G4int SandiaMixing(G4int Z[], const G4double *fractionW, G4int el, G4int mi)
G4double GetResonanceEnergyTransfer()
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition const G4Material *G4double range
G4double GetElectronDensity() const
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double GetPhotonRange(G4double energy)
G4double SumOverBordMM(G4int intervalNumber, G4double energy)
G4double GetCerenkovEnergyTransfer()
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)
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)
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
const G4Material * GetMaterial() const
G4double GetElectronRange(G4double energy)