82 const G4double G4PAIxSection::fDelta = 0.005;
83 const G4double G4PAIxSection::fError = 0.005;
85 const G4int G4PAIxSection::fMaxSplineSize = 1000;
96 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
97 fIntervalNumber = fSplineNumber = 0;
101 fRePartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
102 fImPartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
109 fIntegralPAIxSection =
G4DataVector(fMaxSplineSize,0.0);
118 for(
G4int i = 0; i < 500; ++i )
120 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
133 fMaterialIndex = matIndex;
136 fSandia = (*theMaterialTable)[matIndex]->GetSandiaTable();
143 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
147 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
149 (*(*fMatSandiaMatrix)[i])[0] = fSandia->GetSandiaMatTable(i,0);
151 for(j = 1; j < 5; j++)
153 (*(*fMatSandiaMatrix)[i])[j] = fSandia->GetSandiaMatTable(i,j)*fDensity;
156 ComputeLowEnergyCof();
166 fMatSandiaMatrix = 0;
171 fMaterialIndex = materialIndex;
172 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
173 fElectronDensity = (*theMaterialTable)[materialIndex]->
174 GetElectronDensity();
175 fIntervalNumber = (*theMaterialTable)[materialIndex]->
176 GetSandiaTable()->GetMatNbOfIntervals();
186 for(i = 1; i <= fIntervalNumber; i++ )
188 if(((*theMaterialTable)[materialIndex]->
189 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0) >= maxEnergyTransfer) ||
190 i > fIntervalNumber )
192 fEnergyInterval[i] = maxEnergyTransfer;
196 fEnergyInterval[i] = (*theMaterialTable)[materialIndex]->
197 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0);
198 fA1[i] = (*theMaterialTable)[materialIndex]->
199 GetSandiaTable()->GetSandiaCofForMaterial(i-1,1);
200 fA2[i] = (*theMaterialTable)[materialIndex]->
201 GetSandiaTable()->GetSandiaCofForMaterial(i-1,2);
202 fA3[i] = (*theMaterialTable)[materialIndex]->
203 GetSandiaTable()->GetSandiaCofForMaterial(i-1,3);
204 fA4[i] = (*theMaterialTable)[materialIndex]->
205 GetSandiaTable()->GetSandiaCofForMaterial(i-1,4);
209 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
212 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
217 for(i=1;i<fIntervalNumber;i++)
219 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
220 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
226 for(j=i;j<fIntervalNumber;j++)
228 fEnergyInterval[j] = fEnergyInterval[j+1];
259 ComputeLowEnergyCof();
281 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
282 fIntervalNumber = fSplineNumber = 0;
301 for(
G4int i = 0; i < 500; ++i )
303 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
307 fMatSandiaMatrix = 0;
311 fMaterialIndex = materialIndex;
312 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
313 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
315 fIntervalNumber = intNumber;
333 for( i = 1; i <= fIntervalNumber; i++ )
335 if( ( photoAbsCof[i-1][0] >= maxEnergyTransfer ) ||
336 i > fIntervalNumber )
338 fEnergyInterval[i] = maxEnergyTransfer;
342 fEnergyInterval[i] = photoAbsCof[i-1][0];
343 fA1[i] = photoAbsCof[i-1][1];
344 fA2[i] = photoAbsCof[i-1][2];
345 fA3[i] = photoAbsCof[i-1][3];
346 fA4[i] = photoAbsCof[i-1][4];
352 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
355 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
359 for( i = 1; i <= fIntervalNumber; i++ )
366 for( i = 1; i < fIntervalNumber; i++ )
368 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
369 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
375 for(j=i;j<fIntervalNumber;j++)
377 fEnergyInterval[j] = fEnergyInterval[j+1];
389 for( i = 1; i <= fIntervalNumber; i++ )
397 ComputeLowEnergyCof();
399 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
401 NormShift(betaGammaSqRef);
402 SplainPAI(betaGammaSqRef);
406 for(i = 1; i <= fSplineNumber; i++)
408 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
409 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
410 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
411 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
412 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
421 IntegralPAIxSection();
440 fMatSandiaMatrix = 0;
444 G4int i, j, numberOfElements;
446 fMaterialIndex = materialIndex;
447 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
448 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
449 numberOfElements = (*theMaterialTable)[materialIndex]->GetNumberOfElements();
451 G4int* thisMaterialZ =
new G4int[numberOfElements];
453 for( i = 0; i < numberOfElements; i++ )
455 thisMaterialZ[i] = (
G4int)(*theMaterialTable)[materialIndex]->
456 GetElement(i)->GetZ();
459 fSandia = (*theMaterialTable)[materialIndex]->GetSandiaTable();
461 fIntervalNumber = thisMaterialSandiaTable.
SandiaIntervals(thisMaterialZ,
465 (*theMaterialTable)[materialIndex]->GetFractionVector() ,
466 numberOfElements,fIntervalNumber);
483 for( i = 1; i <= fIntervalNumber; i++ )
488 fEnergyInterval[i] = maxEnergyTransfer;
499 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
502 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
503 fA1[fIntervalNumber] = fA1[fIntervalNumber-1];
504 fA2[fIntervalNumber] = fA2[fIntervalNumber-1];
505 fA3[fIntervalNumber] = fA3[fIntervalNumber-1];
506 fA4[fIntervalNumber] = fA4[fIntervalNumber-1];
508 for(i=1;i<=fIntervalNumber;i++)
515 for( i = 1; i < fIntervalNumber; i++ )
517 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
518 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
524 for( j = i; j < fIntervalNumber; j++ )
526 fEnergyInterval[j] = fEnergyInterval[j+1];
558 ComputeLowEnergyCof();
560 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
562 NormShift(betaGammaSqRef);
563 SplainPAI(betaGammaSqRef);
567 for(i = 1; i <= fSplineNumber; i++)
569 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
570 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
571 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
572 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
573 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
575 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;
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);
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 )
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];
1644 if(fVerbose>0)
G4cout<<
"SumOverInterval i= " << i <<
" x0 = "<<x0<<
"; x1 = "<<x1<<
G4endl;
1646 if( x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1648 y0 = fDifPAIxSection[i];
1649 yy1 = fDifPAIxSection[i+1];
1651 if(fVerbose>0)
G4cout<<
"x0 = "<<x0<<
"; x1 = "<<x1<<
", y0 = "<<y0<<
"; yy1 = "<<yy1<<
G4endl;
1654 a = log10(yy1/y0)/log10(c);
1656 if(fVerbose>0)
G4cout<<
"SumOverInterval, a = "<<a<<
"; c = "<<c<<
G4endl;
1661 if( std::fabs(a) < 1.e-6 )
1663 result = b*log(x1/x0);
1667 result = y0*(x1*pow(c,a-1) - x0)/a;
1670 if( std::fabs(a) < 1.e-6 )
1672 fIntegralPAIxSection[0] += b*log(x1/x0);
1676 fIntegralPAIxSection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1678 if(fVerbose>0)
G4cout<<
"SumOverInterval, result = "<<result<<
G4endl;
1689 x0 = fSplineEnergy[i];
1690 x1 = fSplineEnergy[i+1];
1692 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1694 y0 = fDifPAIxSection[i];
1695 yy1 = fDifPAIxSection[i+1];
1697 a = log10(yy1/y0)/log10(c);
1703 result = b*log(x1/x0);
1707 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1723 x0 = fSplineEnergy[i];
1724 x1 = fSplineEnergy[i+1];
1726 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1728 y0 = fdNdxCerenkov[i];
1729 yy1 = fdNdxCerenkov[i+1];
1734 a = log10(yy1/y0)/log10(c);
1738 if(a == 0) result = b*log(c);
1739 else result = y0*(x1*pow(c,a-1) - x0)/a;
1742 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1743 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1759 x0 = fSplineEnergy[i];
1760 x1 = fSplineEnergy[i+1];
1762 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1771 a = log10(yy1/y0)/log10(c);
1772 if(a > 10.0)
return 0.;
1776 if(a == 0) result = b*log(c);
1777 else result = y0*(x1*pow(c,a-1) - x0)/a;
1780 if( a == 0 ) fIntegralMM[0] += b*log(c);
1781 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1797 x0 = fSplineEnergy[i];
1798 x1 = fSplineEnergy[i+1];
1800 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1802 y0 = fdNdxPlasmon[i];
1803 yy1 = fdNdxPlasmon[i+1];
1805 a = log10(yy1/y0)/log10(c);
1806 if(a > 10.0)
return 0.;
1811 if(a == 0) result = b*log(x1/x0);
1812 else result = y0*(x1*pow(c,a-1) - x0)/a;
1815 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1816 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1832 x0 = fSplineEnergy[i];
1833 x1 = fSplineEnergy[i+1];
1835 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1837 y0 = fdNdxResonance[i];
1838 yy1 = fdNdxResonance[i+1];
1840 a = log10(yy1/y0)/log10(c);
1841 if(a > 10.0)
return 0.;
1846 if(a == 0) result = b*log(x1/x0);
1847 else result = y0*(x1*pow(c,a-1) - x0)/a;
1850 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1851 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1868 x0 = fSplineEnergy[i];
1869 x1 = fSplineEnergy[i+1];
1870 y0 = fDifPAIxSection[i];
1871 yy1 = fDifPAIxSection[i+1];
1875 a = log10(yy1/y0)/log10(x1/x0);
1876 if(a > 10.0)
return 0.;
1878 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1884 if( std::fabs(a) < 1.e-6 )
1886 result = b*log(x0/e0);
1890 result = y0*(x0 - e0*pow(d,a-1))/a;
1893 if( std::fabs(a) < 1.e-6 )
1895 fIntegralPAIxSection[0] += b*log(x0/e0);
1899 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1901 x0 = fSplineEnergy[i - 1];
1902 x1 = fSplineEnergy[i - 2];
1903 y0 = fDifPAIxSection[i - 1];
1904 yy1 = fDifPAIxSection[i - 2];
1908 a = log10(yy1/y0)/log10(x1/x0);
1912 if( std::fabs(a) < 1.e-6 )
1914 result += b*log(e0/x0);
1918 result += y0*(e0*pow(d,a-1) - x0)/a;
1921 if( std::fabs(a) < 1.e-6 )
1923 fIntegralPAIxSection[0] += b*log(e0/x0);
1927 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1941 x0 = fSplineEnergy[i];
1942 x1 = fSplineEnergy[i+1];
1943 y0 = fDifPAIxSection[i];
1944 yy1 = fDifPAIxSection[i+1];
1948 a = log10(yy1/y0)/log10(x1/x0);
1949 if(a > 10.0)
return 0.;
1956 result = b*log(x0/e0);
1960 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1962 x0 = fSplineEnergy[i - 1];
1963 x1 = fSplineEnergy[i - 2];
1964 y0 = fDifPAIxSection[i - 1];
1965 yy1 = fDifPAIxSection[i - 2];
1969 a = log10(yy1/y0)/log10(x1/x0);
1975 result += b*log(e0/x0);
1979 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1996 x0 = fSplineEnergy[i];
1997 x1 = fSplineEnergy[i+1];
1998 y0 = fdNdxCerenkov[i];
1999 yy1 = fdNdxCerenkov[i+1];
2006 a = log10(yy1/y0)/log10(c);
2007 if(a > 10.0)
return 0.;
2012 if( a == 0 ) result = b*log(x0/e0);
2013 else result = y0*(x0 - e0*pow(d,a-1))/a;
2016 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
2017 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2021 x0 = fSplineEnergy[i - 1];
2022 x1 = fSplineEnergy[i - 2];
2023 y0 = fdNdxCerenkov[i - 1];
2024 yy1 = fdNdxCerenkov[i - 2];
2031 a = log10(yy1/y0)/log10(x1/x0);
2036 if( a == 0 ) result += b*log(e0/x0);
2037 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2040 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2041 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2061 x0 = fSplineEnergy[i];
2062 x1 = fSplineEnergy[i+1];
2071 a = log10(yy1/y0)/log10(c);
2072 if(a > 10.0)
return 0.;
2077 if( a == 0 ) result = b*log(x0/e0);
2078 else result = y0*(x0 - e0*pow(d,a-1))/a;
2081 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2082 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2086 x0 = fSplineEnergy[i - 1];
2087 x1 = fSplineEnergy[i - 2];
2088 y0 = fdNdxMM[i - 1];
2089 yy1 = fdNdxMM[i - 2];
2096 a = log10(yy1/y0)/log10(x1/x0);
2101 if( a == 0 ) result += b*log(e0/x0);
2102 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2105 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2106 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2126 x0 = fSplineEnergy[i];
2127 x1 = fSplineEnergy[i+1];
2128 y0 = fdNdxPlasmon[i];
2129 yy1 = fdNdxPlasmon[i+1];
2133 a = log10(yy1/y0)/log10(c);
2134 if(a > 10.0)
return 0.;
2139 if( a == 0 ) result = b*log(x0/e0);
2140 else result = y0*(x0 - e0*pow(d,a-1))/a;
2143 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2144 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2146 x0 = fSplineEnergy[i - 1];
2147 x1 = fSplineEnergy[i - 2];
2148 y0 = fdNdxPlasmon[i - 1];
2149 yy1 = fdNdxPlasmon[i - 2];
2153 a = log10(yy1/y0)/log10(c);
2158 if( a == 0 ) result += b*log(e0/x0);
2159 else result += y0*(e0*pow(d,a-1) - x0)/a;
2162 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2163 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2180 x0 = fSplineEnergy[i];
2181 x1 = fSplineEnergy[i+1];
2182 y0 = fdNdxResonance[i];
2183 yy1 = fdNdxResonance[i+1];
2187 a = log10(yy1/y0)/log10(c);
2188 if(a > 10.0)
return 0.;
2193 if( a == 0 ) result = b*log(x0/e0);
2194 else result = y0*(x0 - e0*pow(d,a-1))/a;
2197 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2198 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2200 x0 = fSplineEnergy[i - 1];
2201 x1 = fSplineEnergy[i - 2];
2202 y0 = fdNdxResonance[i - 1];
2203 yy1 = fdNdxResonance[i - 2];
2207 a = log10(yy1/y0)/log10(c);
2212 if( a == 0 ) result += b*log(e0/x0);
2213 else result += y0*(e0*pow(d,a-1) - x0)/a;
2216 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2217 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2234 meanNumber = fIntegralPAIxSection[1]*step;
2235 numOfCollisions =
G4Poisson(meanNumber);
2239 while(numOfCollisions)
2241 loss += GetEnergyTransfer();
2262 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2264 if( position >= fIntegralPAIxSection[iTransfer] )
break;
2266 if(iTransfer > fSplineNumber) iTransfer--;
2268 energyTransfer = fSplineEnergy[iTransfer];
2272 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2274 return energyTransfer;
2288 meanNumber = fIntegralCerenkov[1]*step;
2289 numOfCollisions =
G4Poisson(meanNumber);
2293 while(numOfCollisions)
2295 loss += GetCerenkovEnergyTransfer();
2315 meanNumber = fIntegralMM[1]*step;
2316 numOfCollisions =
G4Poisson(meanNumber);
2320 while(numOfCollisions)
2322 loss += GetMMEnergyTransfer();
2343 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2345 if( position >= fIntegralCerenkov[iTransfer] )
break;
2347 if(iTransfer > fSplineNumber) iTransfer--;
2349 energyTransfer = fSplineEnergy[iTransfer];
2353 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2355 return energyTransfer;
2370 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2372 if( position >= fIntegralMM[iTransfer] )
break;
2374 if(iTransfer > fSplineNumber) iTransfer--;
2376 energyTransfer = fSplineEnergy[iTransfer];
2380 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2382 return energyTransfer;
2396 meanNumber = fIntegralPlasmon[1]*step;
2397 numOfCollisions =
G4Poisson(meanNumber);
2401 while(numOfCollisions)
2403 loss += GetPlasmonEnergyTransfer();
2424 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2426 if( position >= fIntegralPlasmon[iTransfer] )
break;
2428 if(iTransfer > fSplineNumber) iTransfer--;
2430 energyTransfer = fSplineEnergy[iTransfer];
2434 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2436 return energyTransfer;
2450 meanNumber = fIntegralResonance[1]*step;
2451 numOfCollisions =
G4Poisson(meanNumber);
2455 while(numOfCollisions)
2457 loss += GetResonanceEnergyTransfer();
2479 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2481 if( position >= fIntegralResonance[iTransfer] )
break;
2483 if(iTransfer > fSplineNumber) iTransfer--;
2485 energyTransfer = fSplineEnergy[iTransfer];
2489 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2491 return energyTransfer;
2505 position = (fIntegralPlasmon[1]-fIntegralResonance[1])*
G4UniformRand();
2507 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2509 if( position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2511 if(iTransfer > fSplineNumber) iTransfer--;
2513 energyTransfer = fSplineEnergy[iTransfer];
2517 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2519 return energyTransfer;
2525 void G4PAIxSection::CallError(
G4int i,
const G4String& methodName)
const
2527 G4String head =
"G4PAIxSection::" + methodName +
"()";
2529 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2538 G4int G4PAIxSection::fNumberOfGammas = 111;
2540 const G4double G4PAIxSection::fLorentzFactor[112] =
2543 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
2544 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
2545 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
2546 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
2547 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
2548 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
2549 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
2550 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
2551 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
2552 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
2553 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
2554 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
2555 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
2556 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
2557 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
2558 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
2559 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
2560 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
2561 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
2562 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
2563 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
2564 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
2574 G4int G4PAIxSection::fRefGammaNumber = 29;
G4double G4ParticleHPJENDLHEData::G4double result
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
static constexpr double cm2
G4double GetStepResonanceLoss(G4double step)
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
std::vector< ExP01TrackerHit * > a
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4double SumOverInterMM(G4int intervalNumber)
static G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
G4double GetDensity() const
void NormShift(G4double betaGammaSq)
G4int GetMaxInterval() const
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordResonance(G4int intervalNumber, G4double energy)
G4double GetSandiaMatTablePAI(G4int, G4int) const
G4double SumOverInterPlasmon(G4int intervalNumber)
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()
static constexpr double eV
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)
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
G4double SumOverInterCerenkov(G4int intervalNumber)
G4double GetPhotoAbsorpCof(G4int i, G4int j) const
static constexpr double pi
size_t GetNumberOfElements() const
G4double GetEnergyTransfer()
G4double GetStepMMLoss(G4double step)
G4double SumOverIntervaldEdx(G4int intervalNumber)
static constexpr double keV
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)