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;
758 for( i = 0; i < numberOfElements; i++ )
761 sumZ += thisMaterialZ[i];
762 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
764 for( i = 0; i < numberOfElements; i++ )
766 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
768 fLowEnergyCof = sumCof;
769 delete [] thisMaterialZ;
770 delete [] thisMaterialCof;
782 G4int i, numberOfElements = (*theMaterialTable)[fMaterialIndex]->GetNumberOfElements();
792 for( i = 0; i < numberOfElements; i++ )
794 thisMaterialZ[i] = (*theMaterialTable)[fMaterialIndex]->GetElement(i)->GetZ();
795 sumZ += thisMaterialZ[i];
796 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
798 for( i = 0; i < numberOfElements; i++ )
800 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
802 fLowEnergyCof = sumCof;
804 delete [] thisMaterialZ;
805 delete [] thisMaterialCof;
816 G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
817 fLorentzFactor[fRefGammaNumber] - 1;
821 NormShift(betaGammaSq);
822 SplainPAI(betaGammaSq);
824 IntegralPAIxSection();
830 for(i = 0; i<= fSplineNumber; i++)
832 fPAItable[i][fRefGammaNumber] = fIntegralPAIxSection[i];
835 fPAItable[i][0] = fSplineEnergy[i];
838 fPAItable[0][0] = fSplineNumber;
840 for(
G4int j = 1; j < 112; j++)
842 if( j == fRefGammaNumber )
continue;
844 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
846 for(i = 1; i <= fSplineNumber; i++)
848 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
849 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
850 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
851 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
852 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
854 IntegralPAIxSection();
860 for(i = 0; i <= fSplineNumber; i++)
862 fPAItable[i][j] = fIntegralPAIxSection[i];
877 if(fVerbose>0)
G4cout<<
" G4PAIxSection::NormShift call "<<
G4endl;
880 for( i = 1; i <= fIntervalNumber-1; i++ )
882 for( j = 1; j <= 2; j++ )
884 fSplineNumber = (i-1)*2 + j;
886 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
887 else fSplineEnergy[fSplineNumber] = fEnergyInterval[i+1]*(1-fDelta);
888 if(fVerbose>0)
G4cout<<
"cn = "<<fSplineNumber<<
"; "<<
"w = "<<fSplineEnergy[fSplineNumber]/
keV<<
" keV"<<
G4endl;
891 fIntegralTerm[1]=RutherfordIntegral(1,fEnergyInterval[1],fSplineEnergy[1]);
895 for( i = 2; i <= fSplineNumber; i++ )
897 if( fSplineEnergy[i]<fEnergyInterval[j+1] )
899 fIntegralTerm[i] = fIntegralTerm[i-1] +
900 RutherfordIntegral(j,fSplineEnergy[i-1],
905 G4double x = RutherfordIntegral(j,fSplineEnergy[i-1],
906 fEnergyInterval[j+1] );
908 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
909 RutherfordIntegral(j,fEnergyInterval[j],
912 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV \t"<<fIntegralTerm[i]<<
"\n"<<
G4endl;
914 fNormalizationCof = 2*
pi*
pi*hbarc*hbarc*fine_structure_const/electron_mass_c2;
915 fNormalizationCof *= fElectronDensity/fIntegralTerm[fSplineNumber];
922 for(
G4int k = 1; k <= fIntervalNumber-1; k++ )
924 for( j = 1; j <= 2; j++ )
927 fImPartDielectricConst[i] = fNormalizationCof*
928 ImPartDielectricConst(k,fSplineEnergy[i]);
929 fRePartDielectricConst[i] = fNormalizationCof*
930 RePartDielectricConst(fSplineEnergy[i]);
931 fIntegralTerm[i] *= fNormalizationCof;
933 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
934 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
935 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
936 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
937 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
938 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV, xsc = "<<fDifPAIxSection[i]<<
"\n"<<
G4endl;
952 G4int j, k = 1, i = 1;
954 if(fVerbose>0)
G4cout<<
" G4PAIxSection::SplainPAI call "<<
G4endl;
956 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
959 if( fSplineEnergy[i+1] > fEnergyInterval[k+1] )
963 if(fVerbose>0)
G4cout<<
" in if: i = "<<i<<
"; k = "<<k<<
G4endl;
966 if(fVerbose>0)
G4cout<<
" out if: i = "<<i<<
"; k = "<<k<<
G4endl;
972 for( j = fSplineNumber; j >= i+2; j-- )
974 fSplineEnergy[j] = fSplineEnergy[j-1];
975 fImPartDielectricConst[j] = fImPartDielectricConst[j-1];
976 fRePartDielectricConst[j] = fRePartDielectricConst[j-1];
977 fIntegralTerm[j] = fIntegralTerm[j-1];
979 fDifPAIxSection[j] = fDifPAIxSection[j-1];
980 fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
981 fdNdxMM[j] = fdNdxMM[j-1];
982 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
983 fdNdxResonance[j] = fdNdxResonance[j-1];
990 if(fVerbose>0)
G4cout<<
"Spline: x1 = "<<x1<<
"; x2 = "<<x2<<
", yy1 = "<<yy1<<
"; y2 = "<<y2<<
G4endl;
997 fSplineEnergy[i+1] = en1;
1002 G4double a = log10(y2/yy1)/log10(x2/x1);
1003 G4double b = log10(yy1) - a*log10(x1);
1010 fImPartDielectricConst[i+1] = fNormalizationCof*
1011 ImPartDielectricConst(k,fSplineEnergy[i+1]);
1012 fRePartDielectricConst[i+1] = fNormalizationCof*
1013 RePartDielectricConst(fSplineEnergy[i+1]);
1014 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
1015 RutherfordIntegral(k,fSplineEnergy[i],
1016 fSplineEnergy[i+1]);
1018 fDifPAIxSection[i+1] = DifPAIxSection(i+1,betaGammaSq);
1019 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
1020 fdNdxMM[i+1] = PAIdNdxMM(i+1,betaGammaSq);
1021 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
1022 fdNdxResonance[i+1] = PAIdNdxResonance(i+1,betaGammaSq);
1026 if(fVerbose>0)
G4cout<<
"Spline, a = "<<a<<
"; b = "<<b<<
"; new xsc = "<<y<<
"; compxsc = "<<fDifPAIxSection[i+1]<<
G4endl;
1030 G4double x = 2*(fDifPAIxSection[i+1] - y)/(fDifPAIxSection[i+1] + y);
1032 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])/(fSplineEnergy[i+1]+fSplineEnergy[i]);
1038 if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
1060 c1 = (x2 - x1)/x1/x2;
1061 c2 = (x2 - x1)*(x2 + x1)/x1/x1/x2/x2;
1062 c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1065 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
1078 G4double energy2,energy3,energy4,result;
1080 energy2 = energy1*energy1;
1081 energy3 = energy2*energy1;
1082 energy4 = energy3*energy1;
1084 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
1085 result *=hbarc/energy1;
1100 energy2 = energy1*energy1;
1101 energy3 = energy2*energy1;
1102 energy4 = energy3*energy1;
1108 for( i = 1; i <= fIntervalNumber; i++ )
1110 if( energy1 < fEnergyInterval[i])
break;
1115 result = fA1[i]/energy1+fA2[i]/energy2+fA3[i]/energy3+fA4[i]/energy4;
1117 if( result >
DBL_MIN ) lambda = 1./result;
1156 range = cofA*energy*( 1 - cofB/(1 + cofC*
energy) );
1172 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
1173 c1,
c2,
c3, cof1, cof2, xln1, xln2, xln3, result;
1178 for(
G4int i=1;i<=fIntervalNumber-1;i++)
1180 x1 = fEnergyInterval[i];
1181 x2 = fEnergyInterval[i+1];
1192 xln3 = log((x2 + x0)/(x1 + x0));
1197 c1 = (x2 - x1)/x1/x2;
1198 c2 = (x2 - x1)*(x2 +x1)/x1/x1/x2/x2;
1199 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1201 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
1202 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
1203 result -= fA3[i]*c2/2/x02;
1204 result -= fA4[i]*c3/3/x02;
1206 cof1 = fA1[i]/x02 + fA3[i]/x04;
1207 cof2 = fA2[i]/x03 + fA4[i]/x05;
1209 result += 0.5*(cof1 +cof2)*xln2;
1210 result += 0.5*(cof1 - cof2)*xln3;
1212 result *= 2*hbarc/
pi;
1227 G4double cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
1233 G4double be2 = betaGammaSq/(1 + betaGammaSq);
1238 x1 = log(2*electron_mass_c2/fSplineEnergy[i]);
1240 if( betaGammaSq < 0.01 ) x2 = log(be2);
1243 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1244 (1/betaGammaSq - fRePartDielectricConst[i]) +
1245 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
1247 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
1253 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
1254 x5 = -1 - fRePartDielectricConst[i] +
1255 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1256 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1258 x7 = atan2(fImPartDielectricConst[i],x3);
1263 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
1267 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1268 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1270 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
1272 if( result < 1.0e-8 ) result = 1.0e-8;
1274 result *= fine_structure_const/be2/
pi;
1280 result *= (1 - exp(-beta/betaBohr/lowCof));
1304 G4double logarithm, x3, x5, argument, modul2, dNdxC;
1308 betaBohr2 = fine_structure_const*fine_structure_const;
1311 be2 = betaGammaSq/(1 + betaGammaSq);
1314 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1317 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1318 (1/betaGammaSq - fRePartDielectricConst[i]) +
1319 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1320 logarithm += log(1+1.0/betaGammaSq);
1323 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1329 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1330 x5 = -1.0 - fRePartDielectricConst[i] +
1331 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1332 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1333 if( x3 == 0.0 ) argument = 0.5*
pi;
1334 else argument = atan2(fImPartDielectricConst[i],x3);
1337 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
1339 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1341 dNdxC *= fine_structure_const/be2/
pi;
1343 dNdxC *= (1-exp(-be4/betaBohr4));
1347 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1348 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1362 G4double logarithm, x3, x5, argument, dNdxC;
1366 betaBohr2 = fine_structure_const*fine_structure_const;
1369 be2 = betaGammaSq/(1 + betaGammaSq);
1372 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1375 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1376 (1/betaGammaSq - fRePartDielectricConst[i]) +
1377 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1378 logarithm += log(1+1.0/betaGammaSq);
1381 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1387 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1388 x5 = be2*( 1.0 + fRePartDielectricConst[i] ) - 1.0;
1389 if( x3 == 0.0 ) argument = 0.5*
pi;
1390 else argument = atan2(fImPartDielectricConst[i],x3);
1393 dNdxC = ( logarithm*fImPartDielectricConst[i]*be2 + argument )/hbarc;
1395 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1397 dNdxC *= fine_structure_const/be2/
pi;
1399 dNdxC *= (1-exp(-be4/betaBohr4));
1412 G4double resonance, modul2, dNdxP, cof = 1.;
1415 betaBohr = fine_structure_const;
1416 be2 = betaGammaSq/(1 + betaGammaSq);
1420 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1421 resonance *= fImPartDielectricConst[i]/hbarc;
1424 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
1426 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1428 dNdxP *= fine_structure_const/be2/
pi;
1430 dNdxP *= (1 - exp(-beta/betaBohr/fLowEnergyCof));
1434 if( fDensity >= 0.1 )
1436 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1437 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1456 betaBohr2 = fine_structure_const*fine_structure_const;
1459 be2 = betaGammaSq/(1 + betaGammaSq);
1462 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1463 resonance *= fImPartDielectricConst[i]/hbarc;
1468 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1470 dNdxP *= fine_structure_const/be2/
pi;
1471 dNdxP *= (1-exp(-be4/betaBohr4));
1473 if( fDensity >= 0.1 )
1475 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1476 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1491 fIntegralPAIxSection[fSplineNumber] = 0;
1492 fIntegralPAIdEdx[fSplineNumber] = 0;
1493 fIntegralPAIxSection[0] = 0;
1494 G4int i, k = fIntervalNumber -1;
1496 for( i = fSplineNumber-1; i >= 1; i--)
1498 if(fSplineEnergy[i] >= fEnergyInterval[k])
1500 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] + SumOverInterval(i);
1501 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] + SumOverIntervaldEdx(i);
1505 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
1506 SumOverBorder(i+1,fEnergyInterval[k]);
1507 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
1508 SumOverBorderdEdx(i+1,fEnergyInterval[k]);
1511 if(fVerbose>0)
G4cout<<
"i = "<<i<<
"; k = "<<k<<
"; intPAIxsc[i] = "<<fIntegralPAIxSection[i]<<
G4endl;
1524 fIntegralCerenkov[fSplineNumber] = 0;
1525 fIntegralCerenkov[0] = 0;
1526 k = fIntervalNumber -1;
1528 for( i = fSplineNumber-1; i >= 1; i-- )
1530 if(fSplineEnergy[i] >= fEnergyInterval[k])
1532 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] + SumOverInterCerenkov(i);
1537 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
1538 SumOverBordCerenkov(i+1,fEnergyInterval[k]);
1555 fIntegralMM[fSplineNumber] = 0;
1557 k = fIntervalNumber -1;
1559 for( i = fSplineNumber-1; i >= 1; i-- )
1561 if(fSplineEnergy[i] >= fEnergyInterval[k])
1563 fIntegralMM[i] = fIntegralMM[i+1] + SumOverInterMM(i);
1568 fIntegralMM[i] = fIntegralMM[i+1] +
1569 SumOverBordMM(i+1,fEnergyInterval[k]);
1585 fIntegralPlasmon[fSplineNumber] = 0;
1586 fIntegralPlasmon[0] = 0;
1587 G4int k = fIntervalNumber -1;
1588 for(
G4int i=fSplineNumber-1;i>=1;i--)
1590 if(fSplineEnergy[i] >= fEnergyInterval[k])
1592 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] + SumOverInterPlasmon(i);
1596 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
1597 SumOverBordPlasmon(i+1,fEnergyInterval[k]);
1612 fIntegralResonance[fSplineNumber] = 0;
1613 fIntegralResonance[0] = 0;
1614 G4int k = fIntervalNumber -1;
1615 for(
G4int i=fSplineNumber-1;i>=1;i--)
1617 if(fSplineEnergy[i] >= fEnergyInterval[k])
1619 fIntegralResonance[i] = fIntegralResonance[i+1] + SumOverInterResonance(i);
1623 fIntegralResonance[i] = fIntegralResonance[i+1] +
1624 SumOverBordResonance(i+1,fEnergyInterval[k]);
1641 x0 = fSplineEnergy[i];
1642 x1 = fSplineEnergy[i+1];
1643 if(fVerbose>0)
G4cout<<
"SumOverInterval i= " << i <<
" x0 = "<<x0<<
"; x1 = "<<x1<<
G4endl;
1645 if( x1+x0 <= 0.0 || 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;
1677 if(fVerbose>0)
G4cout<<
"SumOverInterval, result = "<<result<<
G4endl;
1688 x0 = fSplineEnergy[i];
1689 x1 = fSplineEnergy[i+1];
1691 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1693 y0 = fDifPAIxSection[i];
1694 yy1 = fDifPAIxSection[i+1];
1696 a = log10(yy1/y0)/log10(c);
1702 result = b*log(x1/x0);
1706 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1722 x0 = fSplineEnergy[i];
1723 x1 = fSplineEnergy[i+1];
1725 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1727 y0 = fdNdxCerenkov[i];
1728 yy1 = fdNdxCerenkov[i+1];
1733 a = log10(yy1/y0)/log10(c);
1737 if(a == 0) result = b*log(c);
1738 else result = y0*(x1*pow(c,a-1) - x0)/a;
1741 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1742 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1758 x0 = fSplineEnergy[i];
1759 x1 = fSplineEnergy[i+1];
1761 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1770 a = log10(yy1/y0)/log10(c);
1771 if(a > 10.0)
return 0.;
1775 if(a == 0) result = b*log(c);
1776 else result = y0*(x1*pow(c,a-1) - x0)/a;
1779 if( a == 0 ) fIntegralMM[0] += b*log(c);
1780 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1796 x0 = fSplineEnergy[i];
1797 x1 = fSplineEnergy[i+1];
1799 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1801 y0 = fdNdxPlasmon[i];
1802 yy1 = fdNdxPlasmon[i+1];
1804 a = log10(yy1/y0)/log10(c);
1805 if(a > 10.0)
return 0.;
1810 if(a == 0) result = b*log(x1/x0);
1811 else result = y0*(x1*pow(c,a-1) - x0)/a;
1814 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1815 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1831 x0 = fSplineEnergy[i];
1832 x1 = fSplineEnergy[i+1];
1834 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1836 y0 = fdNdxResonance[i];
1837 yy1 = fdNdxResonance[i+1];
1839 a = log10(yy1/y0)/log10(c);
1840 if(a > 10.0)
return 0.;
1845 if(a == 0) result = b*log(x1/x0);
1846 else result = y0*(x1*pow(c,a-1) - x0)/a;
1849 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1850 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1867 x0 = fSplineEnergy[i];
1868 x1 = fSplineEnergy[i+1];
1869 y0 = fDifPAIxSection[i];
1870 yy1 = fDifPAIxSection[i+1];
1874 a = log10(yy1/y0)/log10(x1/x0);
1875 if(a > 10.0)
return 0.;
1877 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1883 if( std::fabs(a) < 1.e-6 )
1885 result = b*log(x0/e0);
1889 result = y0*(x0 - e0*pow(d,a-1))/a;
1892 if( std::fabs(a) < 1.e-6 )
1894 fIntegralPAIxSection[0] += b*log(x0/e0);
1898 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1900 x0 = fSplineEnergy[i - 1];
1901 x1 = fSplineEnergy[i - 2];
1902 y0 = fDifPAIxSection[i - 1];
1903 yy1 = fDifPAIxSection[i - 2];
1907 a = log10(yy1/y0)/log10(x1/x0);
1911 if( std::fabs(a) < 1.e-6 )
1913 result += b*log(e0/x0);
1917 result += y0*(e0*pow(d,a-1) - x0)/a;
1920 if( std::fabs(a) < 1.e-6 )
1922 fIntegralPAIxSection[0] += b*log(e0/x0);
1926 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1940 x0 = fSplineEnergy[i];
1941 x1 = fSplineEnergy[i+1];
1942 y0 = fDifPAIxSection[i];
1943 yy1 = fDifPAIxSection[i+1];
1947 a = log10(yy1/y0)/log10(x1/x0);
1948 if(a > 10.0)
return 0.;
1955 result = b*log(x0/e0);
1959 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1961 x0 = fSplineEnergy[i - 1];
1962 x1 = fSplineEnergy[i - 2];
1963 y0 = fDifPAIxSection[i - 1];
1964 yy1 = fDifPAIxSection[i - 2];
1968 a = log10(yy1/y0)/log10(x1/x0);
1974 result += b*log(e0/x0);
1978 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1992 G4double x0,x1,y0,yy1,
a,b,e0,c,d,result;
1995 x0 = fSplineEnergy[i];
1996 x1 = fSplineEnergy[i+1];
1997 y0 = fdNdxCerenkov[i];
1998 yy1 = fdNdxCerenkov[i+1];
2005 a = log10(yy1/y0)/log10(c);
2006 if(a > 10.0)
return 0.;
2011 if( a == 0 ) result = b*log(x0/e0);
2012 else result = y0*(x0 - e0*pow(d,a-1))/a;
2015 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
2016 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2020 x0 = fSplineEnergy[i - 1];
2021 x1 = fSplineEnergy[i - 2];
2022 y0 = fdNdxCerenkov[i - 1];
2023 yy1 = fdNdxCerenkov[i - 2];
2030 a = log10(yy1/y0)/log10(x1/x0);
2035 if( a == 0 ) result += b*log(e0/x0);
2036 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2039 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2040 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2057 G4double x0,x1,y0,yy1,
a,b,e0,c,d,result;
2060 x0 = fSplineEnergy[i];
2061 x1 = fSplineEnergy[i+1];
2070 a = log10(yy1/y0)/log10(c);
2071 if(a > 10.0)
return 0.;
2076 if( a == 0 ) result = b*log(x0/e0);
2077 else result = y0*(x0 - e0*pow(d,a-1))/a;
2080 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2081 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2085 x0 = fSplineEnergy[i - 1];
2086 x1 = fSplineEnergy[i - 2];
2087 y0 = fdNdxMM[i - 1];
2088 yy1 = fdNdxMM[i - 2];
2095 a = log10(yy1/y0)/log10(x1/x0);
2100 if( a == 0 ) result += b*log(e0/x0);
2101 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2104 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2105 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2122 G4double x0,x1,y0,yy1,
a,b,c,d,e0,result;
2125 x0 = fSplineEnergy[i];
2126 x1 = fSplineEnergy[i+1];
2127 y0 = fdNdxPlasmon[i];
2128 yy1 = fdNdxPlasmon[i+1];
2132 a = log10(yy1/y0)/log10(c);
2133 if(a > 10.0)
return 0.;
2138 if( a == 0 ) result = b*log(x0/e0);
2139 else result = y0*(x0 - e0*pow(d,a-1))/a;
2142 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2143 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2145 x0 = fSplineEnergy[i - 1];
2146 x1 = fSplineEnergy[i - 2];
2147 y0 = fdNdxPlasmon[i - 1];
2148 yy1 = fdNdxPlasmon[i - 2];
2152 a = log10(yy1/y0)/log10(c);
2157 if( a == 0 ) result += b*log(e0/x0);
2158 else result += y0*(e0*pow(d,a-1) - x0)/a;
2161 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2162 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2176 G4double x0,x1,y0,yy1,
a,b,c,d,e0,result;
2179 x0 = fSplineEnergy[i];
2180 x1 = fSplineEnergy[i+1];
2181 y0 = fdNdxResonance[i];
2182 yy1 = fdNdxResonance[i+1];
2186 a = log10(yy1/y0)/log10(c);
2187 if(a > 10.0)
return 0.;
2192 if( a == 0 ) result = b*log(x0/e0);
2193 else result = y0*(x0 - e0*pow(d,a-1))/a;
2196 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2197 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2199 x0 = fSplineEnergy[i - 1];
2200 x1 = fSplineEnergy[i - 2];
2201 y0 = fdNdxResonance[i - 1];
2202 yy1 = fdNdxResonance[i - 2];
2206 a = log10(yy1/y0)/log10(c);
2211 if( a == 0 ) result += b*log(e0/x0);
2212 else result += y0*(e0*pow(d,a-1) - x0)/a;
2215 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2216 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2233 meanNumber = fIntegralPAIxSection[1]*step;
2234 numOfCollisions =
G4Poisson(meanNumber);
2238 while(numOfCollisions)
2240 loss += GetEnergyTransfer();
2260 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2262 if( position >= fIntegralPAIxSection[iTransfer] )
break;
2264 if(iTransfer > fSplineNumber) iTransfer--;
2266 energyTransfer = fSplineEnergy[iTransfer];
2270 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2272 return energyTransfer;
2286 meanNumber = fIntegralCerenkov[1]*step;
2287 numOfCollisions =
G4Poisson(meanNumber);
2291 while(numOfCollisions)
2293 loss += GetCerenkovEnergyTransfer();
2312 meanNumber = fIntegralMM[1]*step;
2313 numOfCollisions =
G4Poisson(meanNumber);
2317 while(numOfCollisions)
2319 loss += GetMMEnergyTransfer();
2339 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2341 if( position >= fIntegralCerenkov[iTransfer] )
break;
2343 if(iTransfer > fSplineNumber) iTransfer--;
2345 energyTransfer = fSplineEnergy[iTransfer];
2349 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2351 return energyTransfer;
2366 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2368 if( position >= fIntegralMM[iTransfer] )
break;
2370 if(iTransfer > fSplineNumber) iTransfer--;
2372 energyTransfer = fSplineEnergy[iTransfer];
2376 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2378 return energyTransfer;
2392 meanNumber = fIntegralPlasmon[1]*step;
2393 numOfCollisions =
G4Poisson(meanNumber);
2397 while(numOfCollisions)
2399 loss += GetPlasmonEnergyTransfer();
2419 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2421 if( position >= fIntegralPlasmon[iTransfer] )
break;
2423 if(iTransfer > fSplineNumber) iTransfer--;
2425 energyTransfer = fSplineEnergy[iTransfer];
2429 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2431 return energyTransfer;
2445 meanNumber = fIntegralResonance[1]*step;
2446 numOfCollisions =
G4Poisson(meanNumber);
2450 while(numOfCollisions)
2452 loss += GetResonanceEnergyTransfer();
2473 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2475 if( position >= fIntegralResonance[iTransfer] )
break;
2477 if(iTransfer > fSplineNumber) iTransfer--;
2479 energyTransfer = fSplineEnergy[iTransfer];
2483 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2485 return energyTransfer;
2499 position = (fIntegralPlasmon[1]-fIntegralResonance[1])*
G4UniformRand();
2501 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2503 if( position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2505 if(iTransfer > fSplineNumber) iTransfer--;
2507 energyTransfer = fSplineEnergy[iTransfer];
2511 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2513 return energyTransfer;
2521 G4String head =
"G4PAIxSection::" + methodName +
"()";
2523 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2537 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
2538 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
2539 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
2540 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
2541 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
2542 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
2543 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
2544 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
2545 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
2546 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
2547 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
2548 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
2549 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
2550 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
2551 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
2552 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
2553 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
2554 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
2555 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
2556 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
2557 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
2558 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
void IntegralPAIxSection()
void SplainPAI(G4double betaGammaSq)
G4double GetRutherfordEnergyTransfer()
G4double PAIdNdxResonance(G4int intervalNumber, G4double betaGammaSq)
static c2_factory< G4double > c2
G4long G4Poisson(G4double mean)
G4double GetPlasmonEnergyTransfer()
std::ostringstream G4ExceptionDescription
G4double GetStepResonanceLoss(G4double step)
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4double SumOverInterMM(G4int intervalNumber)
static const G4double betaBohr
static G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
static const G4double cofBetaBohr
G4double GetDensity() const
void NormShift(G4double betaGammaSq)
G4int GetMaxInterval() const
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordResonance(G4int intervalNumber, G4double energy)
static G4int fNumberOfGammas
G4double GetSandiaMatTablePAI(G4int, G4int) const
G4double SumOverInterPlasmon(G4int intervalNumber)
G4double SumOverInterval(G4int intervalNumber)
G4double RePartDielectricConst(G4double energy)
const G4Element * GetElement(G4int iel) const
void ComputeLowEnergyCof()
void CallError(G4int i, const G4String &methodName) const
static const G4int fMaxSplineSize
G4int SandiaMixing(G4int Z[], const G4double *fractionW, G4int el, G4int mi)
static const G4double betaBohr4
G4double GetResonanceEnergyTransfer()
G4GLOB_DLL std::ostream G4cout
G4double GetElectronDensity() const
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double GetPhotonRange(G4double energy)
G4double SumOverBordMM(G4int intervalNumber, G4double energy)
static const G4double betaBohr2
G4double GetCerenkovEnergyTransfer()
static const G4int fRefGammaNumber
static const G4double fError
G4double SumOverInterResonance(G4int intervalNumber)
G4int SandiaIntervals(G4int Z[], G4int el)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetStepPlasmonLoss(G4double step)
G4double PAIdNdxMM(G4int intervalNumber, G4double betaGammaSq)
G4double GetStepEnergyLoss(G4double step)
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
G4double GetMMEnergyTransfer()
G4double SumOverBorder(G4int intervalNumber, G4double energy)
G4double energy(const ThreeVector &p, const G4double m)
static const G4double fDelta
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
G4double SumOverInterCerenkov(G4int intervalNumber)
G4double GetPhotoAbsorpCof(G4int i, G4int j) const
size_t GetNumberOfElements() const
G4double GetEnergyTransfer()
G4double GetStepMMLoss(G4double step)
G4double SumOverIntervaldEdx(G4int intervalNumber)
G4double GetStepCerenkovLoss(G4double step)
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
G4double DifPAIxSection(G4int intervalNumber, G4double betaGammaSq)
static const G4double fLorentzFactor[112]
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
const G4Material * GetMaterial() const
G4double GetElectronRange(G4double energy)