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;
601 return fLorentzFactor[j];
616 G4cout<<
"G4PAIxSection::Initialize(...,G4SandiaTable* sandia)"<<
G4endl;
630 G4cout<<
"fDensity = "<<fDensity<<
"\t"<<fElectronDensity<<
"\t fIntervalNumber = "<<fIntervalNumber<<
G4endl;
638 for( i = 1; i <= fIntervalNumber; i++ )
647 fEnergyInterval[i] = maxEnergyTransfer;
659 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
660 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
663 if( fVerbose > 0 )
G4cout<<
"last i = "<<i<<
"; "<<
"fIntervalNumber = "<<fIntervalNumber<<
G4endl;
665 if( fEnergyInterval[fIntervalNumber] != maxEnergyTransfer )
668 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
672 for( i = 1; i <= fIntervalNumber; i++ )
674 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
675 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
678 if( fVerbose > 0 )
G4cout<<
"Now checking, if two borders are too close together"<<
G4endl;
680 for( i = 1; i < fIntervalNumber; i++ )
682 if( fEnergyInterval[i+1]-fEnergyInterval[i] >
683 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]) && fEnergyInterval[i] > 0.)
continue;
686 if( fVerbose > 0 )
G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fEnergyInterval[i+1]/
keV;
688 for( j = i; j < fIntervalNumber; j++ )
690 fEnergyInterval[j] = fEnergyInterval[j+1];
702 for( i = 1; i <= fIntervalNumber; i++ )
704 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
705 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
710 ComputeLowEnergyCof(material);
713 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
715 NormShift(betaGammaSqRef);
716 SplainPAI(betaGammaSqRef);
720 for( i = 1; i <= fSplineNumber; i++ )
722 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
725 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
726 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
727 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
728 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
730 IntegralPAIxSection();
736 for( i = 1; i <= fSplineNumber; i++ )
738 if(fVerbose>0)
G4cout<<i<<
"; w = "<<fSplineEnergy[i]/
keV<<
" keV; dN/dx_>w = "<<fIntegralPAIxSection[i]<<
" 1/mm"<<
G4endl;
753 static const G4double p0 = 1.20923e+00;
754 static const G4double p1 = 3.53256e-01;
755 static const G4double p2 = -1.45052e-03;
760 for( i = 0; i < numberOfElements; i++ )
763 sumZ += thisMaterialZ[i];
764 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
766 for( i = 0; i < numberOfElements; i++ )
768 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
770 fLowEnergyCof = sumCof;
771 delete [] thisMaterialZ;
772 delete [] thisMaterialCof;
784 G4int i, numberOfElements = (*theMaterialTable)[fMaterialIndex]->GetNumberOfElements();
794 for( i = 0; i < numberOfElements; i++ )
796 thisMaterialZ[i] = (*theMaterialTable)[fMaterialIndex]->GetElement(i)->GetZ();
797 sumZ += thisMaterialZ[i];
798 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
800 for( i = 0; i < numberOfElements; i++ )
802 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
804 fLowEnergyCof = sumCof;
806 delete [] thisMaterialZ;
807 delete [] thisMaterialCof;
818 G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
819 fLorentzFactor[fRefGammaNumber] - 1;
823 NormShift(betaGammaSq);
824 SplainPAI(betaGammaSq);
826 IntegralPAIxSection();
832 for(i = 0; i<= fSplineNumber; i++)
834 fPAItable[i][fRefGammaNumber] = fIntegralPAIxSection[i];
837 fPAItable[i][0] = fSplineEnergy[i];
840 fPAItable[0][0] = fSplineNumber;
842 for(
G4int j = 1; j < 112; j++)
844 if( j == fRefGammaNumber )
continue;
846 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
848 for(i = 1; i <= fSplineNumber; i++)
850 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
851 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
852 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
853 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
854 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
856 IntegralPAIxSection();
862 for(i = 0; i <= fSplineNumber; i++)
864 fPAItable[i][j] = fIntegralPAIxSection[i];
879 if(fVerbose>0)
G4cout<<
" G4PAIxSection::NormShift call "<<
G4endl;
882 for( i = 1; i <= fIntervalNumber-1; i++ )
884 for( j = 1; j <= 2; j++ )
886 fSplineNumber = (i-1)*2 + j;
888 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
889 else fSplineEnergy[fSplineNumber] = fEnergyInterval[i+1]*(1-fDelta);
890 if(fVerbose>0)
G4cout<<
"cn = "<<fSplineNumber<<
"; "<<
"w = "<<fSplineEnergy[fSplineNumber]/
keV<<
" keV"<<
G4endl;
893 fIntegralTerm[1]=RutherfordIntegral(1,fEnergyInterval[1],fSplineEnergy[1]);
897 for( i = 2; i <= fSplineNumber; i++ )
899 if( fSplineEnergy[i]<fEnergyInterval[j+1] )
901 fIntegralTerm[i] = fIntegralTerm[i-1] +
902 RutherfordIntegral(j,fSplineEnergy[i-1],
907 G4double x = RutherfordIntegral(j,fSplineEnergy[i-1],
908 fEnergyInterval[j+1] );
910 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
911 RutherfordIntegral(j,fEnergyInterval[j],
914 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV \t"<<fIntegralTerm[i]<<
"\n"<<
G4endl;
917 fNormalizationCof *= fElectronDensity/fIntegralTerm[fSplineNumber];
924 for(
G4int k = 1; k <= fIntervalNumber-1; k++ )
926 for( j = 1; j <= 2; j++ )
929 fImPartDielectricConst[i] = fNormalizationCof*
930 ImPartDielectricConst(k,fSplineEnergy[i]);
931 fRePartDielectricConst[i] = fNormalizationCof*
932 RePartDielectricConst(fSplineEnergy[i]);
933 fIntegralTerm[i] *= fNormalizationCof;
935 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
936 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
937 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
938 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
939 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
940 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV, xsc = "<<fDifPAIxSection[i]<<
"\n"<<
G4endl;
954 G4int j, k = 1, i = 1;
956 if(fVerbose>0)
G4cout<<
" G4PAIxSection::SplainPAI call "<<
G4endl;
958 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
961 if( fSplineEnergy[i+1] > fEnergyInterval[k+1] )
965 if(fVerbose>0)
G4cout<<
" in if: i = "<<i<<
"; k = "<<k<<
G4endl;
968 if(fVerbose>0)
G4cout<<
" out if: i = "<<i<<
"; k = "<<k<<
G4endl;
974 for( j = fSplineNumber; j >= i+2; j-- )
976 fSplineEnergy[j] = fSplineEnergy[j-1];
977 fImPartDielectricConst[j] = fImPartDielectricConst[j-1];
978 fRePartDielectricConst[j] = fRePartDielectricConst[j-1];
979 fIntegralTerm[j] = fIntegralTerm[j-1];
981 fDifPAIxSection[j] = fDifPAIxSection[j-1];
982 fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
983 fdNdxMM[j] = fdNdxMM[j-1];
984 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
985 fdNdxResonance[j] = fdNdxResonance[j-1];
992 if(fVerbose>0)
G4cout<<
"Spline: x1 = "<<x1<<
"; x2 = "<<x2<<
", yy1 = "<<yy1<<
"; y2 = "<<y2<<
G4endl;
999 fSplineEnergy[i+1] = en1;
1004 G4double a = log10(y2/yy1)/log10(x2/x1);
1005 G4double b = log10(yy1) - a*log10(x1);
1012 fImPartDielectricConst[i+1] = fNormalizationCof*
1013 ImPartDielectricConst(k,fSplineEnergy[i+1]);
1014 fRePartDielectricConst[i+1] = fNormalizationCof*
1015 RePartDielectricConst(fSplineEnergy[i+1]);
1016 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
1017 RutherfordIntegral(k,fSplineEnergy[i],
1018 fSplineEnergy[i+1]);
1020 fDifPAIxSection[i+1] = DifPAIxSection(i+1,betaGammaSq);
1021 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
1022 fdNdxMM[i+1] = PAIdNdxMM(i+1,betaGammaSq);
1023 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
1024 fdNdxResonance[i+1] = PAIdNdxResonance(i+1,betaGammaSq);
1028 if(fVerbose>0)
G4cout<<
"Spline, a = "<<a<<
"; b = "<<b<<
"; new xsc = "<<y<<
"; compxsc = "<<fDifPAIxSection[i+1]<<
G4endl;
1032 G4double x = 2*(fDifPAIxSection[i+1] -
y)/(fDifPAIxSection[i+1] + y);
1034 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])/(fSplineEnergy[i+1]+fSplineEnergy[i]);
1040 if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
1063 c1 = (x2 -
x1)/x1/x2;
1064 c2 = (x2 -
x1)*(x2 + x1)/x1/x1/x2/
x2;
1065 c3 = (x2 -
x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/
x2;
1068 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
1083 energy2 = energy1*energy1;
1084 energy3 = energy2*energy1;
1085 energy4 = energy3*energy1;
1087 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
1088 result *=
hbarc/energy1;
1103 energy2 = energy1*energy1;
1104 energy3 = energy2*energy1;
1105 energy4 = energy3*energy1;
1111 for( i = 1; i <= fIntervalNumber; i++ )
1113 if( energy1 < fEnergyInterval[i])
break;
1118 result = fA1[i]/energy1+fA2[i]/energy2+fA3[i]/energy3+fA4[i]/energy4;
1159 range = cofA*energy*( 1 - cofB/(1 + cofC*
energy) );
1175 G4double x0, x02, x03, x04, x05,
x1,
x2, xx1 ,xx2 , xx12,
1176 c1,
c2, c3, cof1, cof2, xln1, xln2, xln3,
result;
1181 for(
G4int i=1;i<=fIntervalNumber-1;i++)
1183 x1 = fEnergyInterval[i];
1184 x2 = fEnergyInterval[i+1];
1195 xln3 = log((x2 + x0)/(x1 + x0));
1200 c1 = (x2 -
x1)/x1/x2;
1201 c2 = (x2 -
x1)*(x2 +x1)/x1/x1/x2/
x2;
1202 c3 = (x2 -
x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/
x2;
1204 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
1205 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
1206 result -= fA3[i]*c2/2/x02;
1207 result -= fA4[i]*c3/3/x02;
1209 cof1 = fA1[i]/x02 + fA3[i]/x04;
1210 cof2 = fA2[i]/x03 + fA4[i]/x05;
1212 result += 0.5*(cof1 +cof2)*xln2;
1213 result += 0.5*(cof1 - cof2)*xln3;
1236 G4double be2 = betaGammaSq/(1 + betaGammaSq);
1243 if( betaGammaSq < 0.01 ) x2 = log(be2);
1246 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1247 (1/betaGammaSq - fRePartDielectricConst[i]) +
1248 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
1250 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
1256 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
1257 x5 = -1 - fRePartDielectricConst[i] +
1258 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1259 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1261 x7 = atan2(fImPartDielectricConst[i],x3);
1266 x4 = ((x1 +
x2)*fImPartDielectricConst[i] + x6)/
hbarc;
1270 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1271 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1273 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
1275 if( result < 1.0
e-8 ) result = 1.0e-8;
1283 result *= (1 - exp(-beta/betaBohr/lowCof));
1307 G4double logarithm, x3, x5, argument, modul2, dNdxC;
1308 G4double be2, betaBohr2, cofBetaBohr;
1312 G4double betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1314 be2 = betaGammaSq/(1 + betaGammaSq);
1317 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1320 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1321 (1/betaGammaSq - fRePartDielectricConst[i]) +
1322 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1323 logarithm += log(1+1.0/betaGammaSq);
1326 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1332 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1333 x5 = -1.0 - fRePartDielectricConst[i] +
1334 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1335 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1336 if( x3 == 0.0 ) argument = 0.5*
pi;
1337 else argument = atan2(fImPartDielectricConst[i],x3);
1340 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/
hbarc;
1342 if(dNdxC < 1.0
e-8) dNdxC = 1.0e-8;
1344 dNdxC *= fine_structure_const/be2/
pi;
1346 dNdxC *= (1-exp(-be4/betaBohr4));
1350 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1351 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1365 G4double logarithm, x3, x5, argument, dNdxC;
1366 G4double be2, be4, betaBohr2,betaBohr4,cofBetaBohr;
1370 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1372 be2 = betaGammaSq/(1 + betaGammaSq);
1375 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1378 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1379 (1/betaGammaSq - fRePartDielectricConst[i]) +
1380 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1381 logarithm += log(1+1.0/betaGammaSq);
1384 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1390 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1391 x5 = be2*( 1.0 + fRePartDielectricConst[i] ) - 1.0;
1392 if( x3 == 0.0 ) argument = 0.5*
pi;
1393 else argument = atan2(fImPartDielectricConst[i],x3);
1396 dNdxC = ( logarithm*fImPartDielectricConst[i]*be2 + argument )/
hbarc;
1398 if(dNdxC < 1.0
e-8) dNdxC = 1.0e-8;
1400 dNdxC *= fine_structure_const/be2/
pi;
1402 dNdxC *= (1-exp(-be4/betaBohr4));
1415 G4double resonance, modul2, dNdxP, cof = 1.;
1419 be2 = betaGammaSq/(1 + betaGammaSq);
1424 resonance *= fImPartDielectricConst[i]/
hbarc;
1427 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
1429 if( dNdxP < 1.0
e-8 ) dNdxP = 1.0e-8;
1433 dNdxP *= (1 - exp(-beta/betaBohr/fLowEnergyCof));
1437 if( fDensity >= 0.1 )
1439 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1440 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1456 G4double be2, be4, betaBohr2, betaBohr4, cofBetaBohr;
1460 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
1462 be2 = betaGammaSq/(1 + betaGammaSq);
1466 resonance *= fImPartDielectricConst[i]/
hbarc;
1471 if( dNdxP < 1.0
e-8 ) dNdxP = 1.0e-8;
1473 dNdxP *= fine_structure_const/be2/
pi;
1474 dNdxP *= (1-exp(-be4/betaBohr4));
1476 if( fDensity >= 0.1 )
1478 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1479 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1494 fIntegralPAIxSection[fSplineNumber] = 0;
1495 fIntegralPAIdEdx[fSplineNumber] = 0;
1496 fIntegralPAIxSection[0] = 0;
1497 G4int i, k = fIntervalNumber -1;
1499 for( i = fSplineNumber-1; i >= 1; i--)
1501 if(fSplineEnergy[i] >= fEnergyInterval[k])
1503 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] + SumOverInterval(i);
1504 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] + SumOverIntervaldEdx(i);
1508 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
1509 SumOverBorder(i+1,fEnergyInterval[k]);
1510 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
1511 SumOverBorderdEdx(i+1,fEnergyInterval[k]);
1514 if(fVerbose>0)
G4cout<<
"i = "<<i<<
"; k = "<<k<<
"; intPAIxsc[i] = "<<fIntegralPAIxSection[i]<<
G4endl;
1527 fIntegralCerenkov[fSplineNumber] = 0;
1528 fIntegralCerenkov[0] = 0;
1529 k = fIntervalNumber -1;
1531 for( i = fSplineNumber-1; i >= 1; i-- )
1533 if(fSplineEnergy[i] >= fEnergyInterval[k])
1535 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] + SumOverInterCerenkov(i);
1540 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
1541 SumOverBordCerenkov(i+1,fEnergyInterval[k]);
1558 fIntegralMM[fSplineNumber] = 0;
1560 k = fIntervalNumber -1;
1562 for( i = fSplineNumber-1; i >= 1; i-- )
1564 if(fSplineEnergy[i] >= fEnergyInterval[k])
1566 fIntegralMM[i] = fIntegralMM[i+1] + SumOverInterMM(i);
1571 fIntegralMM[i] = fIntegralMM[i+1] +
1572 SumOverBordMM(i+1,fEnergyInterval[k]);
1588 fIntegralPlasmon[fSplineNumber] = 0;
1589 fIntegralPlasmon[0] = 0;
1590 G4int k = fIntervalNumber -1;
1591 for(
G4int i=fSplineNumber-1;i>=1;i--)
1593 if(fSplineEnergy[i] >= fEnergyInterval[k])
1595 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] + SumOverInterPlasmon(i);
1599 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
1600 SumOverBordPlasmon(i+1,fEnergyInterval[k]);
1615 fIntegralResonance[fSplineNumber] = 0;
1616 fIntegralResonance[0] = 0;
1617 G4int k = fIntervalNumber -1;
1618 for(
G4int i=fSplineNumber-1;i>=1;i--)
1620 if(fSplineEnergy[i] >= fEnergyInterval[k])
1622 fIntegralResonance[i] = fIntegralResonance[i+1] + SumOverInterResonance(i);
1626 fIntegralResonance[i] = fIntegralResonance[i+1] +
1627 SumOverBordResonance(i+1,fEnergyInterval[k]);
1644 x0 = fSplineEnergy[i];
1645 x1 = fSplineEnergy[i+1];
1646 if(fVerbose>0)
G4cout<<
"SumOverInterval i= " << i <<
" x0 = "<<x0<<
"; x1 = "<<x1<<
G4endl;
1648 if( x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.
e-6)
return 0.;
1650 y0 = fDifPAIxSection[i];
1651 yy1 = fDifPAIxSection[i+1];
1653 if(fVerbose>0)
G4cout<<
"x0 = "<<x0<<
"; x1 = "<<x1<<
", y0 = "<<y0<<
"; yy1 = "<<yy1<<
G4endl;
1656 a = log10(yy1/y0)/log10(c);
1658 if(fVerbose>0)
G4cout<<
"SumOverInterval, a = "<<a<<
"; c = "<<c<<
G4endl;
1663 if( std::abs(a) < 1.
e-6 )
1665 result = b*log(x1/x0);
1669 result = y0*(x1*pow(c,a-1) - x0)/a;
1672 if( std::abs(a) < 1.e-6 )
1674 fIntegralPAIxSection[0] += b*log(x1/x0);
1678 fIntegralPAIxSection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1680 if(fVerbose>0)
G4cout<<
"SumOverInterval, result = "<<result<<
G4endl;
1691 x0 = fSplineEnergy[i];
1692 x1 = fSplineEnergy[i+1];
1694 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.
e-6)
return 0.;
1696 y0 = fDifPAIxSection[i];
1697 yy1 = fDifPAIxSection[i+1];
1699 a = log10(yy1/y0)/log10(c);
1705 result = b*log(x1/x0);
1709 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1725 x0 = fSplineEnergy[i];
1726 x1 = fSplineEnergy[i+1];
1728 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.
e-6)
return 0.;
1730 y0 = fdNdxCerenkov[i];
1731 yy1 = fdNdxCerenkov[i+1];
1736 a = log10(yy1/y0)/log10(c);
1740 if(a == 0) result = b*log(c);
1741 else result = y0*(x1*pow(c,a-1) - x0)/a;
1744 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1745 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1761 x0 = fSplineEnergy[i];
1762 x1 = fSplineEnergy[i+1];
1764 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.
e-6)
return 0.;
1773 a = log10(yy1/y0)/log10(c);
1774 if(a > 10.0)
return 0.;
1778 if(a == 0) result = b*log(c);
1779 else result = y0*(x1*pow(c,a-1) - x0)/a;
1782 if( a == 0 ) fIntegralMM[0] += b*log(c);
1783 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1799 x0 = fSplineEnergy[i];
1800 x1 = fSplineEnergy[i+1];
1802 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.
e-6)
return 0.;
1804 y0 = fdNdxPlasmon[i];
1805 yy1 = fdNdxPlasmon[i+1];
1807 a = log10(yy1/y0)/log10(c);
1808 if(a > 10.0)
return 0.;
1813 if(a == 0) result = b*log(x1/x0);
1814 else result = y0*(x1*pow(c,a-1) - x0)/a;
1817 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1818 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1834 x0 = fSplineEnergy[i];
1835 x1 = fSplineEnergy[i+1];
1837 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.
e-6)
return 0.;
1839 y0 = fdNdxResonance[i];
1840 yy1 = fdNdxResonance[i+1];
1842 a = log10(yy1/y0)/log10(c);
1843 if(a > 10.0)
return 0.;
1848 if(a == 0) result = b*log(x1/x0);
1849 else result = y0*(x1*pow(c,a-1) - x0)/a;
1852 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1853 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1870 x0 = fSplineEnergy[i];
1871 x1 = fSplineEnergy[i+1];
1872 y0 = fDifPAIxSection[i];
1873 yy1 = fDifPAIxSection[i+1];
1877 a = log10(yy1/y0)/log10(x1/x0);
1878 if(a > 10.0)
return 0.;
1880 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1886 if( std::abs(a) < 1.
e-6 )
1888 result = b*log(x0/e0);
1892 result = y0*(x0 - e0*pow(d,a-1))/a;
1895 if( std::abs(a) < 1.e-6 )
1897 fIntegralPAIxSection[0] += b*log(x0/e0);
1901 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1903 x0 = fSplineEnergy[i - 1];
1904 x1 = fSplineEnergy[i - 2];
1905 y0 = fDifPAIxSection[i - 1];
1906 yy1 = fDifPAIxSection[i - 2];
1910 a = log10(yy1/y0)/log10(x1/x0);
1914 if( std::abs(a) < 1.
e-6 )
1916 result += b*log(e0/x0);
1920 result += y0*(e0*pow(d,a-1) - x0)/a;
1923 if( std::abs(a) < 1.e-6 )
1925 fIntegralPAIxSection[0] += b*log(e0/x0);
1929 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1943 x0 = fSplineEnergy[i];
1944 x1 = fSplineEnergy[i+1];
1945 y0 = fDifPAIxSection[i];
1946 yy1 = fDifPAIxSection[i+1];
1950 a = log10(yy1/y0)/log10(x1/x0);
1951 if(a > 10.0)
return 0.;
1958 result = b*log(x0/e0);
1962 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1964 x0 = fSplineEnergy[i - 1];
1965 x1 = fSplineEnergy[i - 2];
1966 y0 = fDifPAIxSection[i - 1];
1967 yy1 = fDifPAIxSection[i - 2];
1971 a = log10(yy1/y0)/log10(x1/x0);
1977 result += b*log(e0/x0);
1981 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1998 x0 = fSplineEnergy[i];
1999 x1 = fSplineEnergy[i+1];
2000 y0 = fdNdxCerenkov[i];
2001 yy1 = fdNdxCerenkov[i+1];
2008 a = log10(yy1/y0)/log10(c);
2009 if(a > 10.0)
return 0.;
2014 if( a == 0 ) result = b*log(x0/e0);
2015 else result = y0*(x0 - e0*pow(d,a-1))/a;
2018 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
2019 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2023 x0 = fSplineEnergy[i - 1];
2024 x1 = fSplineEnergy[i - 2];
2025 y0 = fdNdxCerenkov[i - 1];
2026 yy1 = fdNdxCerenkov[i - 2];
2033 a = log10(yy1/y0)/log10(x1/x0);
2038 if( a == 0 ) result += b*log(e0/x0);
2039 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2042 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2043 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2063 x0 = fSplineEnergy[i];
2064 x1 = fSplineEnergy[i+1];
2073 a = log10(yy1/y0)/log10(c);
2074 if(a > 10.0)
return 0.;
2079 if( a == 0 ) result = b*log(x0/e0);
2080 else result = y0*(x0 - e0*pow(d,a-1))/a;
2083 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2084 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2088 x0 = fSplineEnergy[i - 1];
2089 x1 = fSplineEnergy[i - 2];
2090 y0 = fdNdxMM[i - 1];
2091 yy1 = fdNdxMM[i - 2];
2098 a = log10(yy1/y0)/log10(x1/x0);
2103 if( a == 0 ) result += b*log(e0/x0);
2104 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2107 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2108 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2128 x0 = fSplineEnergy[i];
2129 x1 = fSplineEnergy[i+1];
2130 y0 = fdNdxPlasmon[i];
2131 yy1 = fdNdxPlasmon[i+1];
2135 a = log10(yy1/y0)/log10(c);
2136 if(a > 10.0)
return 0.;
2141 if( a == 0 ) result = b*log(x0/e0);
2142 else result = y0*(x0 - e0*pow(d,a-1))/a;
2145 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2146 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2148 x0 = fSplineEnergy[i - 1];
2149 x1 = fSplineEnergy[i - 2];
2150 y0 = fdNdxPlasmon[i - 1];
2151 yy1 = fdNdxPlasmon[i - 2];
2155 a = log10(yy1/y0)/log10(c);
2160 if( a == 0 ) result += b*log(e0/x0);
2161 else result += y0*(e0*pow(d,a-1) - x0)/a;
2164 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2165 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2182 x0 = fSplineEnergy[i];
2183 x1 = fSplineEnergy[i+1];
2184 y0 = fdNdxResonance[i];
2185 yy1 = fdNdxResonance[i+1];
2189 a = log10(yy1/y0)/log10(c);
2190 if(a > 10.0)
return 0.;
2195 if( a == 0 ) result = b*log(x0/e0);
2196 else result = y0*(x0 - e0*pow(d,a-1))/a;
2199 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2200 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2202 x0 = fSplineEnergy[i - 1];
2203 x1 = fSplineEnergy[i - 2];
2204 y0 = fdNdxResonance[i - 1];
2205 yy1 = fdNdxResonance[i - 2];
2209 a = log10(yy1/y0)/log10(c);
2214 if( a == 0 ) result += b*log(e0/x0);
2215 else result += y0*(e0*pow(d,a-1) - x0)/a;
2218 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2219 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2236 meanNumber = fIntegralPAIxSection[1]*step;
2237 numOfCollisions =
G4Poisson(meanNumber);
2241 while(numOfCollisions)
2243 loss += GetEnergyTransfer();
2264 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2266 if( position >= fIntegralPAIxSection[iTransfer] )
break;
2268 if(iTransfer > fSplineNumber) iTransfer--;
2270 energyTransfer = fSplineEnergy[iTransfer];
2274 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2276 return energyTransfer;
2290 meanNumber = fIntegralCerenkov[1]*step;
2291 numOfCollisions =
G4Poisson(meanNumber);
2295 while(numOfCollisions)
2297 loss += GetCerenkovEnergyTransfer();
2317 meanNumber = fIntegralMM[1]*step;
2318 numOfCollisions =
G4Poisson(meanNumber);
2322 while(numOfCollisions)
2324 loss += GetMMEnergyTransfer();
2345 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2347 if( position >= fIntegralCerenkov[iTransfer] )
break;
2349 if(iTransfer > fSplineNumber) iTransfer--;
2351 energyTransfer = fSplineEnergy[iTransfer];
2355 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2357 return energyTransfer;
2372 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2374 if( position >= fIntegralMM[iTransfer] )
break;
2376 if(iTransfer > fSplineNumber) iTransfer--;
2378 energyTransfer = fSplineEnergy[iTransfer];
2382 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2384 return energyTransfer;
2398 meanNumber = fIntegralPlasmon[1]*step;
2399 numOfCollisions =
G4Poisson(meanNumber);
2403 while(numOfCollisions)
2405 loss += GetPlasmonEnergyTransfer();
2426 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2428 if( position >= fIntegralPlasmon[iTransfer] )
break;
2430 if(iTransfer > fSplineNumber) iTransfer--;
2432 energyTransfer = fSplineEnergy[iTransfer];
2436 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2438 return energyTransfer;
2452 meanNumber = fIntegralResonance[1]*step;
2453 numOfCollisions =
G4Poisson(meanNumber);
2457 while(numOfCollisions)
2459 loss += GetResonanceEnergyTransfer();
2481 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2483 if( position >= fIntegralResonance[iTransfer] )
break;
2485 if(iTransfer > fSplineNumber) iTransfer--;
2487 energyTransfer = fSplineEnergy[iTransfer];
2491 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2493 return energyTransfer;
2507 position = (fIntegralPlasmon[1]-fIntegralResonance[1])*
G4UniformRand();
2509 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2511 if( position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2513 if(iTransfer > fSplineNumber) iTransfer--;
2515 energyTransfer = fSplineEnergy[iTransfer];
2519 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2521 return energyTransfer;
2529 G4String head =
"G4PAIxSection::" + methodName +
"()";
2531 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2545 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
2546 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
2547 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
2548 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
2549 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
2550 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
2551 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
2552 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
2553 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
2554 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
2555 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
2556 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
2557 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
2558 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
2559 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
2560 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
2561 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
2562 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
2563 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
2564 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
2565 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
2566 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
G4int SandiaMixing(G4int Z[], const G4double *fractionW, G4int el, G4int mi)
static const G4double fError
static const G4int fRefGammaNumber
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
std::ostringstream G4ExceptionDescription
std::vector< ExP01TrackerHit * > a
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4double PAIdNdxMM(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverInterPlasmon(G4int intervalNumber)
static G4MaterialTable * GetMaterialTable()
static constexpr double keV
G4double GetRutherfordEnergyTransfer()
G4double GetStepEnergyLoss(G4double step)
G4double GetResonanceEnergyTransfer()
Float_t x1[n_points_granero]
static constexpr double hbarc
void IntegralPAIxSection()
G4double GetStepMMLoss(G4double step)
G4double SumOverInterval(G4int intervalNumber)
void NormShift(G4double betaGammaSq)
G4double GetStepCerenkovLoss(G4double step)
static const G4double fLorentzFactor[112]
void CallError(G4int i, const G4String &methodName) const
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
G4int GetMaxInterval() const
G4double GetEnergyTransfer()
Float_t y2[n_points_geant4]
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
static constexpr double g
G4double GetMMEnergyTransfer()
static constexpr double cm2
const G4ParticleDefinition const G4Material *G4double range
static constexpr double electron_mass_c2
G4double RePartDielectricConst(G4double energy)
G4double SumOverBordResonance(G4int intervalNumber, G4double energy)
G4double SumOverBordMM(G4int intervalNumber, G4double energy)
static G4int fNumberOfGammas
G4double GetElectronRange(G4double energy)
G4int SandiaIntervals(G4int Z[], G4int el)
static constexpr double eV
G4double SumOverIntervaldEdx(G4int intervalNumber)
void SplainPAI(G4double betaGammaSq)
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
G4double DifPAIxSection(G4int intervalNumber, G4double betaGammaSq)
G4double GetSandiaMatTablePAI(G4int, G4int) const
static const G4double fDelta
G4double G4ParticleHPJENDLHEData::G4double result
std::vector< G4Material * > G4MaterialTable
G4double GetStepPlasmonLoss(G4double step)
G4double GetPhotoAbsorpCof(G4int i, G4int j) const
G4double SumOverInterResonance(G4int intervalNumber)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
G4double PAIdNdxResonance(G4int intervalNumber, G4double betaGammaSq)
G4double GetPlasmonEnergyTransfer()
G4GLOB_DLL std::ostream G4cout
G4double SumOverInterCerenkov(G4int intervalNumber)
void ComputeLowEnergyCof()
static const G4int fMaxSplineSize
G4long G4Poisson(G4double mean)
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
const G4Material * GetMaterial() const
G4double GetCerenkovEnergyTransfer()
static constexpr double pi
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
static constexpr double fine_structure_const
Float_t x2[n_points_geant4]
G4double SumOverInterMM(G4int intervalNumber)
const G4Element * GetElement(G4int iel) const
G4double GetLorentzFactor(G4int i) const
G4double GetElectronDensity() const
G4double GetStepResonanceLoss(G4double step)
size_t GetNumberOfElements() const
G4double SumOverBorder(G4int intervalNumber, G4double energy)
G4double GetPhotonRange(G4double energy)
G4double GetDensity() const