98 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
99 fIntervalNumber = fSplineNumber = 0;
103 fRePartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
104 fImPartDielectricConst =
G4DataVector(fMaxSplineSize,0.0);
111 fIntegralPAIxSection =
G4DataVector(fMaxSplineSize,0.0);
120 for(
G4int i = 0; i < 500; ++i )
122 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
135 fMaterialIndex = matIndex;
142 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
146 for (i = 0; i < fSandia->GetMaxInterval()-1; i++)
148 (*(*fMatSandiaMatrix)[i])[0] = fSandia->GetSandiaMatTable(i,0);
150 for(j = 1; j < 5; j++)
152 (*(*fMatSandiaMatrix)[i])[j] = fSandia->GetSandiaMatTable(i,j)*fDensity;
155 ComputeLowEnergyCof();
165 fMatSandiaMatrix = 0;
170 fMaterialIndex = materialIndex;
171 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
172 fElectronDensity = (*theMaterialTable)[materialIndex]->
173 GetElectronDensity();
174 fIntervalNumber = (*theMaterialTable)[materialIndex]->
175 GetSandiaTable()->GetMatNbOfIntervals();
185 for(i = 1; i <= fIntervalNumber; i++ )
187 if(((*theMaterialTable)[materialIndex]->
188 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0) >= maxEnergyTransfer) ||
189 i > fIntervalNumber )
191 fEnergyInterval[i] = maxEnergyTransfer;
195 fEnergyInterval[i] = (*theMaterialTable)[materialIndex]->
196 GetSandiaTable()->GetSandiaCofForMaterial(i-1,0);
197 fA1[i] = (*theMaterialTable)[materialIndex]->
198 GetSandiaTable()->GetSandiaCofForMaterial(i-1,1);
199 fA2[i] = (*theMaterialTable)[materialIndex]->
200 GetSandiaTable()->GetSandiaCofForMaterial(i-1,2);
201 fA3[i] = (*theMaterialTable)[materialIndex]->
202 GetSandiaTable()->GetSandiaCofForMaterial(i-1,3);
203 fA4[i] = (*theMaterialTable)[materialIndex]->
204 GetSandiaTable()->GetSandiaCofForMaterial(i-1,4);
208 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
211 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
216 for(i=1;i<fIntervalNumber;i++)
218 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
219 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
225 for(j=i;j<fIntervalNumber;j++)
227 fEnergyInterval[j] = fEnergyInterval[j+1];
258 ComputeLowEnergyCof();
280 fDensity = fElectronDensity = fNormalizationCof = fLowEnergyCof = 0.0;
281 fIntervalNumber = fSplineNumber = 0;
300 for(
G4int i = 0; i < 500; ++i )
302 for(
G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
306 fMatSandiaMatrix = 0;
310 fMaterialIndex = materialIndex;
311 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
312 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
314 fIntervalNumber = intNumber;
332 for( i = 1; i <= fIntervalNumber; i++ )
334 if( ( photoAbsCof[i-1][0] >= maxEnergyTransfer ) ||
335 i > fIntervalNumber )
337 fEnergyInterval[i] = maxEnergyTransfer;
341 fEnergyInterval[i] = photoAbsCof[i-1][0];
342 fA1[i] = photoAbsCof[i-1][1];
343 fA2[i] = photoAbsCof[i-1][2];
344 fA3[i] = photoAbsCof[i-1][3];
345 fA4[i] = photoAbsCof[i-1][4];
351 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
354 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
358 for( i = 1; i <= fIntervalNumber; i++ )
365 for( i = 1; i < fIntervalNumber; i++ )
367 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
368 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
374 for(j=i;j<fIntervalNumber;j++)
376 fEnergyInterval[j] = fEnergyInterval[j+1];
388 for( i = 1; i <= fIntervalNumber; i++ )
396 ComputeLowEnergyCof();
398 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
400 NormShift(betaGammaSqRef);
401 SplainPAI(betaGammaSqRef);
405 for(i = 1; i <= fSplineNumber; i++)
407 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
408 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
409 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
410 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
411 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
420 IntegralPAIxSection();
439 fMatSandiaMatrix = 0;
443 G4int i, j, numberOfElements;
445 fMaterialIndex = materialIndex;
446 fDensity = (*theMaterialTable)[materialIndex]->GetDensity();
447 fElectronDensity = (*theMaterialTable)[materialIndex]->GetElectronDensity();
448 numberOfElements = (*theMaterialTable)[materialIndex]->GetNumberOfElements();
450 G4int* thisMaterialZ =
new G4int[numberOfElements];
452 for( i = 0; i < numberOfElements; i++ )
454 thisMaterialZ[i] = (
G4int)(*theMaterialTable)[materialIndex]->
455 GetElement(i)->GetZ();
458 fSandia = (*theMaterialTable)[materialIndex]->GetSandiaTable();
460 fIntervalNumber = thisMaterialSandiaTable.
SandiaIntervals(thisMaterialZ,
464 (*theMaterialTable)[materialIndex]->GetFractionVector() ,
465 numberOfElements,fIntervalNumber);
482 for( i = 1; i <= fIntervalNumber; i++ )
487 fEnergyInterval[i] = maxEnergyTransfer;
498 if(fEnergyInterval[fIntervalNumber] != maxEnergyTransfer)
501 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
502 fA1[fIntervalNumber] = fA1[fIntervalNumber-1];
503 fA2[fIntervalNumber] = fA2[fIntervalNumber-1];
504 fA3[fIntervalNumber] = fA3[fIntervalNumber-1];
505 fA4[fIntervalNumber] = fA4[fIntervalNumber-1];
507 for(i=1;i<=fIntervalNumber;i++)
514 for( i = 1; i < fIntervalNumber; i++ )
516 if(fEnergyInterval[i+1]-fEnergyInterval[i] >
517 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]))
523 for( j = i; j < fIntervalNumber; j++ )
525 fEnergyInterval[j] = fEnergyInterval[j+1];
557 ComputeLowEnergyCof();
559 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
561 NormShift(betaGammaSqRef);
562 SplainPAI(betaGammaSqRef);
566 for(i = 1; i <= fSplineNumber; i++)
568 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
569 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
570 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
571 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
572 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
574 IntegralPAIxSection();
595 delete fMatSandiaMatrix;
613 G4cout<<
"G4PAIxSection::Initialize(...,G4SandiaTable* sandia)"<<
G4endl;
627 G4cout<<
"fDensity = "<<fDensity<<
"\t"<<fElectronDensity<<
"\t fIntervalNumber = "<<fIntervalNumber<<
G4endl;
635 for( i = 1; i <= fIntervalNumber; i++ )
644 fEnergyInterval[i] = maxEnergyTransfer;
656 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
657 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
660 if( fVerbose > 0 )
G4cout<<
"last i = "<<i<<
"; "<<
"fIntervalNumber = "<<fIntervalNumber<<
G4endl;
662 if( fEnergyInterval[fIntervalNumber] != maxEnergyTransfer )
665 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
669 for( i = 1; i <= fIntervalNumber; i++ )
671 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
672 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
675 if( fVerbose > 0 )
G4cout<<
"Now checking, if two borders are too close together"<<
G4endl;
677 for( i = 1; i < fIntervalNumber; i++ )
679 if( fEnergyInterval[i+1]-fEnergyInterval[i] >
680 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]) && fEnergyInterval[i] > 0.)
continue;
683 if( fVerbose > 0 )
G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fEnergyInterval[i+1]/
keV;
685 for( j = i; j < fIntervalNumber; j++ )
687 fEnergyInterval[j] = fEnergyInterval[j+1];
699 for( i = 1; i <= fIntervalNumber; i++ )
701 G4cout<<i<<
"\t"<<fEnergyInterval[i]/
keV<<
"\t"<<fA1[i]<<
"\t"<<fA2[i]<<
"\t"
702 <<fA3[i]<<
"\t"<<fA4[i]<<
"\t"<<
G4endl;
707 ComputeLowEnergyCof(material);
710 fLorentzFactor[fRefGammaNumber]*fLorentzFactor[fRefGammaNumber] - 1;
712 NormShift(betaGammaSqRef);
713 SplainPAI(betaGammaSqRef);
717 for( i = 1; i <= fSplineNumber; i++ )
719 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
722 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
723 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
724 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
725 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
727 IntegralPAIxSection();
733 for( i = 1; i <= fSplineNumber; i++ )
735 if(fVerbose>0)
G4cout<<i<<
"; w = "<<fSplineEnergy[i]/
keV<<
" keV; dN/dx_>w = "<<fIntegralPAIxSection[i]<<
" 1/mm"<<
G4endl;
750 static const G4double p0 = 1.20923e+00;
751 static const G4double p1 = 3.53256e-01;
752 static const G4double p2 = -1.45052e-03;
757 for( i = 0; i < numberOfElements; i++ )
760 sumZ += thisMaterialZ[i];
761 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
763 for( i = 0; i < numberOfElements; i++ )
765 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
767 fLowEnergyCof = sumCof;
768 delete [] thisMaterialZ;
769 delete [] thisMaterialCof;
781 G4int i, numberOfElements = (*theMaterialTable)[fMaterialIndex]->GetNumberOfElements();
791 for( i = 0; i < numberOfElements; i++ )
793 thisMaterialZ[i] = (*theMaterialTable)[fMaterialIndex]->GetElement(i)->GetZ();
794 sumZ += thisMaterialZ[i];
795 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
797 for( i = 0; i < numberOfElements; i++ )
799 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
801 fLowEnergyCof = sumCof;
803 delete [] thisMaterialZ;
804 delete [] thisMaterialCof;
815 G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
816 fLorentzFactor[fRefGammaNumber] - 1;
820 NormShift(betaGammaSq);
821 SplainPAI(betaGammaSq);
823 IntegralPAIxSection();
829 for(i = 0; i<= fSplineNumber; i++)
831 fPAItable[i][fRefGammaNumber] = fIntegralPAIxSection[i];
834 fPAItable[i][0] = fSplineEnergy[i];
837 fPAItable[0][0] = fSplineNumber;
839 for(
G4int j = 1; j < 112; j++)
841 if( j == fRefGammaNumber )
continue;
843 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
845 for(i = 1; i <= fSplineNumber; i++)
847 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
848 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
849 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
850 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
851 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
853 IntegralPAIxSection();
859 for(i = 0; i <= fSplineNumber; i++)
861 fPAItable[i][j] = fIntegralPAIxSection[i];
876 if(fVerbose>0)
G4cout<<
" G4PAIxSection::NormShift call "<<
G4endl;
879 for( i = 1; i <= fIntervalNumber-1; i++ )
881 for( j = 1; j <= 2; j++ )
883 fSplineNumber = (i-1)*2 + j;
885 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
886 else fSplineEnergy[fSplineNumber] = fEnergyInterval[i+1]*(1-fDelta);
887 if(fVerbose>0)
G4cout<<
"cn = "<<fSplineNumber<<
"; "<<
"w = "<<fSplineEnergy[fSplineNumber]/
keV<<
" keV"<<
G4endl;
890 fIntegralTerm[1]=RutherfordIntegral(1,fEnergyInterval[1],fSplineEnergy[1]);
894 for( i = 2; i <= fSplineNumber; i++ )
896 if( fSplineEnergy[i]<fEnergyInterval[j+1] )
898 fIntegralTerm[i] = fIntegralTerm[i-1] +
899 RutherfordIntegral(j,fSplineEnergy[i-1],
904 G4double x = RutherfordIntegral(j,fSplineEnergy[i-1],
905 fEnergyInterval[j+1] );
907 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
908 RutherfordIntegral(j,fEnergyInterval[j],
911 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV \t"<<fIntegralTerm[i]<<
"\n"<<
G4endl;
913 fNormalizationCof = 2*
pi*
pi*hbarc*hbarc*fine_structure_const/electron_mass_c2;
914 fNormalizationCof *= fElectronDensity/fIntegralTerm[fSplineNumber];
921 for(
G4int k = 1; k <= fIntervalNumber-1; k++ )
923 for( j = 1; j <= 2; j++ )
926 fImPartDielectricConst[i] = fNormalizationCof*
927 ImPartDielectricConst(k,fSplineEnergy[i]);
928 fRePartDielectricConst[i] = fNormalizationCof*
929 RePartDielectricConst(fSplineEnergy[i]);
930 fIntegralTerm[i] *= fNormalizationCof;
932 fDifPAIxSection[i] = DifPAIxSection(i,betaGammaSq);
933 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
934 fdNdxMM[i] = PAIdNdxMM(i,betaGammaSq);
935 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
936 fdNdxResonance[i] = PAIdNdxResonance(i,betaGammaSq);
937 if(fVerbose>0)
G4cout<<i<<
" Shift: w = "<<fSplineEnergy[i]/
keV<<
" keV, xsc = "<<fDifPAIxSection[i]<<
"\n"<<
G4endl;
951 G4int j, k = 1, i = 1;
953 if(fVerbose>0)
G4cout<<
" G4PAIxSection::SplainPAI call "<<
G4endl;
955 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
958 if( fSplineEnergy[i+1] > fEnergyInterval[k+1] )
962 if(fVerbose>0)
G4cout<<
" in if: i = "<<i<<
"; k = "<<k<<
G4endl;
965 if(fVerbose>0)
G4cout<<
" out if: i = "<<i<<
"; k = "<<k<<
G4endl;
971 for( j = fSplineNumber; j >= i+2; j-- )
973 fSplineEnergy[j] = fSplineEnergy[j-1];
974 fImPartDielectricConst[j] = fImPartDielectricConst[j-1];
975 fRePartDielectricConst[j] = fRePartDielectricConst[j-1];
976 fIntegralTerm[j] = fIntegralTerm[j-1];
978 fDifPAIxSection[j] = fDifPAIxSection[j-1];
979 fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
980 fdNdxMM[j] = fdNdxMM[j-1];
981 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
982 fdNdxResonance[j] = fdNdxResonance[j-1];
989 if(fVerbose>0)
G4cout<<
"Spline: x1 = "<<x1<<
"; x2 = "<<x2<<
", yy1 = "<<yy1<<
"; y2 = "<<y2<<
G4endl;
996 fSplineEnergy[i+1] = en1;
1001 G4double a = log10(y2/yy1)/log10(x2/x1);
1002 G4double b = log10(yy1) - a*log10(x1);
1009 fImPartDielectricConst[i+1] = fNormalizationCof*
1010 ImPartDielectricConst(k,fSplineEnergy[i+1]);
1011 fRePartDielectricConst[i+1] = fNormalizationCof*
1012 RePartDielectricConst(fSplineEnergy[i+1]);
1013 fIntegralTerm[i+1] = fIntegralTerm[i] + fNormalizationCof*
1014 RutherfordIntegral(k,fSplineEnergy[i],
1015 fSplineEnergy[i+1]);
1017 fDifPAIxSection[i+1] = DifPAIxSection(i+1,betaGammaSq);
1018 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
1019 fdNdxMM[i+1] = PAIdNdxMM(i+1,betaGammaSq);
1020 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
1021 fdNdxResonance[i+1] = PAIdNdxResonance(i+1,betaGammaSq);
1025 if(fVerbose>0)
G4cout<<
"Spline, a = "<<a<<
"; b = "<<b<<
"; new xsc = "<<y<<
"; compxsc = "<<fDifPAIxSection[i+1]<<
G4endl;
1029 G4double x = 2*(fDifPAIxSection[i+1] - y)/(fDifPAIxSection[i+1] + y);
1031 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])/(fSplineEnergy[i+1]+fSplineEnergy[i]);
1037 if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
1059 c1 = (x2 - x1)/x1/x2;
1060 c2 = (x2 - x1)*(x2 + x1)/x1/x1/x2/x2;
1061 c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1064 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
1077 G4double energy2,energy3,energy4,result;
1079 energy2 = energy1*energy1;
1080 energy3 = energy2*energy1;
1081 energy4 = energy3*energy1;
1083 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
1084 result *=hbarc/energy1;
1099 energy2 = energy1*energy1;
1100 energy3 = energy2*energy1;
1101 energy4 = energy3*energy1;
1107 for( i = 1; i <= fIntervalNumber; i++ )
1109 if( energy1 < fEnergyInterval[i])
break;
1114 result = fA1[i]/energy1+fA2[i]/energy2+fA3[i]/energy3+fA4[i]/energy4;
1116 if( result >
DBL_MIN ) lambda = 1./result;
1155 range = cofA*energy*( 1 - cofB/(1 + cofC*
energy) );
1171 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
1172 c1,
c2,
c3, cof1, cof2, xln1, xln2, xln3, result;
1177 for(
G4int i=1;i<=fIntervalNumber-1;i++)
1179 x1 = fEnergyInterval[i];
1180 x2 = fEnergyInterval[i+1];
1191 xln3 = log((x2 + x0)/(x1 + x0));
1196 c1 = (x2 - x1)/x1/x2;
1197 c2 = (x2 - x1)*(x2 +x1)/x1/x1/x2/x2;
1198 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
1200 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
1201 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
1202 result -= fA3[i]*c2/2/x02;
1203 result -= fA4[i]*c3/3/x02;
1205 cof1 = fA1[i]/x02 + fA3[i]/x04;
1206 cof2 = fA2[i]/x03 + fA4[i]/x05;
1208 result += 0.5*(cof1 +cof2)*xln2;
1209 result += 0.5*(cof1 - cof2)*xln3;
1211 result *= 2*hbarc/
pi;
1226 G4double cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
1232 G4double be2 = betaGammaSq/(1 + betaGammaSq);
1237 x1 = log(2*electron_mass_c2/fSplineEnergy[i]);
1239 if( betaGammaSq < 0.01 ) x2 = log(be2);
1242 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1243 (1/betaGammaSq - fRePartDielectricConst[i]) +
1244 fImPartDielectricConst[i]*fImPartDielectricConst[i] )/2;
1246 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
1252 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
1253 x5 = -1 - fRePartDielectricConst[i] +
1254 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1255 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1257 x7 = atan2(fImPartDielectricConst[i],x3);
1262 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
1266 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1267 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1269 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
1271 if( result < 1.0e-8 ) result = 1.0e-8;
1273 result *= fine_structure_const/be2/
pi;
1279 result *= (1 - exp(-beta/betaBohr/lowCof));
1303 G4double logarithm, x3, x5, argument, modul2, dNdxC;
1307 betaBohr2 = fine_structure_const*fine_structure_const;
1310 be2 = betaGammaSq/(1 + betaGammaSq);
1313 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1316 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1317 (1/betaGammaSq - fRePartDielectricConst[i]) +
1318 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1319 logarithm += log(1+1.0/betaGammaSq);
1322 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1328 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1329 x5 = -1.0 - fRePartDielectricConst[i] +
1330 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1331 fImPartDielectricConst[i]*fImPartDielectricConst[i]);
1332 if( x3 == 0.0 ) argument = 0.5*
pi;
1333 else argument = atan2(fImPartDielectricConst[i],x3);
1336 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
1338 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1340 dNdxC *= fine_structure_const/be2/
pi;
1342 dNdxC *= (1-exp(-be4/betaBohr4));
1346 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
1347 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1361 G4double logarithm, x3, x5, argument, dNdxC;
1365 betaBohr2 = fine_structure_const*fine_structure_const;
1368 be2 = betaGammaSq/(1 + betaGammaSq);
1371 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq);
1374 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
1375 (1/betaGammaSq - fRePartDielectricConst[i]) +
1376 fImPartDielectricConst[i]*fImPartDielectricConst[i] )*0.5;
1377 logarithm += log(1+1.0/betaGammaSq);
1380 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
1386 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
1387 x5 = be2*( 1.0 + fRePartDielectricConst[i] ) - 1.0;
1388 if( x3 == 0.0 ) argument = 0.5*
pi;
1389 else argument = atan2(fImPartDielectricConst[i],x3);
1392 dNdxC = ( logarithm*fImPartDielectricConst[i]*be2 + argument )/hbarc;
1394 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
1396 dNdxC *= fine_structure_const/be2/
pi;
1398 dNdxC *= (1-exp(-be4/betaBohr4));
1411 G4double resonance, modul2, dNdxP, cof = 1.;
1414 betaBohr = fine_structure_const;
1415 be2 = betaGammaSq/(1 + betaGammaSq);
1419 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1420 resonance *= fImPartDielectricConst[i]/hbarc;
1423 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
1425 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1427 dNdxP *= fine_structure_const/be2/
pi;
1429 dNdxP *= (1 - exp(-beta/betaBohr/fLowEnergyCof));
1433 if( fDensity >= 0.1 )
1435 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1436 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1455 betaBohr2 = fine_structure_const*fine_structure_const;
1458 be2 = betaGammaSq/(1 + betaGammaSq);
1461 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
1462 resonance *= fImPartDielectricConst[i]/hbarc;
1467 if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
1469 dNdxP *= fine_structure_const/be2/
pi;
1470 dNdxP *= (1-exp(-be4/betaBohr4));
1472 if( fDensity >= 0.1 )
1474 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
1475 fImPartDielectricConst[i]*fImPartDielectricConst[i];
1490 fIntegralPAIxSection[fSplineNumber] = 0;
1491 fIntegralPAIdEdx[fSplineNumber] = 0;
1492 fIntegralPAIxSection[0] = 0;
1493 G4int i, k = fIntervalNumber -1;
1495 for( i = fSplineNumber-1; i >= 1; i--)
1497 if(fSplineEnergy[i] >= fEnergyInterval[k])
1499 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] + SumOverInterval(i);
1500 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] + SumOverIntervaldEdx(i);
1504 fIntegralPAIxSection[i] = fIntegralPAIxSection[i+1] +
1505 SumOverBorder(i+1,fEnergyInterval[k]);
1506 fIntegralPAIdEdx[i] = fIntegralPAIdEdx[i+1] +
1507 SumOverBorderdEdx(i+1,fEnergyInterval[k]);
1510 if(fVerbose>0)
G4cout<<
"i = "<<i<<
"; k = "<<k<<
"; intPAIxsc[i] = "<<fIntegralPAIxSection[i]<<
G4endl;
1523 fIntegralCerenkov[fSplineNumber] = 0;
1524 fIntegralCerenkov[0] = 0;
1525 k = fIntervalNumber -1;
1527 for( i = fSplineNumber-1; i >= 1; i-- )
1529 if(fSplineEnergy[i] >= fEnergyInterval[k])
1531 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] + SumOverInterCerenkov(i);
1536 fIntegralCerenkov[i] = fIntegralCerenkov[i+1] +
1537 SumOverBordCerenkov(i+1,fEnergyInterval[k]);
1554 fIntegralMM[fSplineNumber] = 0;
1556 k = fIntervalNumber -1;
1558 for( i = fSplineNumber-1; i >= 1; i-- )
1560 if(fSplineEnergy[i] >= fEnergyInterval[k])
1562 fIntegralMM[i] = fIntegralMM[i+1] + SumOverInterMM(i);
1567 fIntegralMM[i] = fIntegralMM[i+1] +
1568 SumOverBordMM(i+1,fEnergyInterval[k]);
1584 fIntegralPlasmon[fSplineNumber] = 0;
1585 fIntegralPlasmon[0] = 0;
1586 G4int k = fIntervalNumber -1;
1587 for(
G4int i=fSplineNumber-1;i>=1;i--)
1589 if(fSplineEnergy[i] >= fEnergyInterval[k])
1591 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] + SumOverInterPlasmon(i);
1595 fIntegralPlasmon[i] = fIntegralPlasmon[i+1] +
1596 SumOverBordPlasmon(i+1,fEnergyInterval[k]);
1611 fIntegralResonance[fSplineNumber] = 0;
1612 fIntegralResonance[0] = 0;
1613 G4int k = fIntervalNumber -1;
1614 for(
G4int i=fSplineNumber-1;i>=1;i--)
1616 if(fSplineEnergy[i] >= fEnergyInterval[k])
1618 fIntegralResonance[i] = fIntegralResonance[i+1] + SumOverInterResonance(i);
1622 fIntegralResonance[i] = fIntegralResonance[i+1] +
1623 SumOverBordResonance(i+1,fEnergyInterval[k]);
1640 x0 = fSplineEnergy[i];
1641 x1 = fSplineEnergy[i+1];
1642 if(fVerbose>0)
G4cout<<
"SumOverInterval i= " << i <<
" x0 = "<<x0<<
"; x1 = "<<x1<<
G4endl;
1644 if( x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1646 y0 = fDifPAIxSection[i];
1647 yy1 = fDifPAIxSection[i+1];
1649 if(fVerbose>0)
G4cout<<
"x0 = "<<x0<<
"; x1 = "<<x1<<
", y0 = "<<y0<<
"; yy1 = "<<yy1<<
G4endl;
1652 a = log10(yy1/y0)/log10(c);
1654 if(fVerbose>0)
G4cout<<
"SumOverInterval, a = "<<a<<
"; c = "<<c<<
G4endl;
1659 if( std::fabs(a) < 1.e-6 )
1661 result = b*log(x1/x0);
1665 result = y0*(x1*pow(c,a-1) - x0)/a;
1668 if( std::fabs(a) < 1.e-6 )
1670 fIntegralPAIxSection[0] += b*log(x1/x0);
1674 fIntegralPAIxSection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1676 if(fVerbose>0)
G4cout<<
"SumOverInterval, result = "<<result<<
G4endl;
1687 x0 = fSplineEnergy[i];
1688 x1 = fSplineEnergy[i+1];
1690 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1692 y0 = fDifPAIxSection[i];
1693 yy1 = fDifPAIxSection[i+1];
1695 a = log10(yy1/y0)/log10(c);
1701 result = b*log(x1/x0);
1705 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1721 x0 = fSplineEnergy[i];
1722 x1 = fSplineEnergy[i+1];
1724 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1726 y0 = fdNdxCerenkov[i];
1727 yy1 = fdNdxCerenkov[i+1];
1732 a = log10(yy1/y0)/log10(c);
1736 if(a == 0) result = b*log(c);
1737 else result = y0*(x1*pow(c,a-1) - x0)/a;
1740 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
1741 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1757 x0 = fSplineEnergy[i];
1758 x1 = fSplineEnergy[i+1];
1760 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1769 a = log10(yy1/y0)/log10(c);
1770 if(a > 10.0)
return 0.;
1774 if(a == 0) result = b*log(c);
1775 else result = y0*(x1*pow(c,a-1) - x0)/a;
1778 if( a == 0 ) fIntegralMM[0] += b*log(c);
1779 else fIntegralMM[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1795 x0 = fSplineEnergy[i];
1796 x1 = fSplineEnergy[i+1];
1798 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1800 y0 = fdNdxPlasmon[i];
1801 yy1 = fdNdxPlasmon[i+1];
1803 a = log10(yy1/y0)/log10(c);
1804 if(a > 10.0)
return 0.;
1809 if(a == 0) result = b*log(x1/x0);
1810 else result = y0*(x1*pow(c,a-1) - x0)/a;
1813 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
1814 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1830 x0 = fSplineEnergy[i];
1831 x1 = fSplineEnergy[i+1];
1833 if(x1+x0 <= 0.0 || std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6)
return 0.;
1835 y0 = fdNdxResonance[i];
1836 yy1 = fdNdxResonance[i+1];
1838 a = log10(yy1/y0)/log10(c);
1839 if(a > 10.0)
return 0.;
1844 if(a == 0) result = b*log(x1/x0);
1845 else result = y0*(x1*pow(c,a-1) - x0)/a;
1848 if( a == 0 ) fIntegralResonance[0] += b*log(x1/x0);
1849 else fIntegralResonance[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
1866 x0 = fSplineEnergy[i];
1867 x1 = fSplineEnergy[i+1];
1868 y0 = fDifPAIxSection[i];
1869 yy1 = fDifPAIxSection[i+1];
1873 a = log10(yy1/y0)/log10(x1/x0);
1874 if(a > 10.0)
return 0.;
1876 if(fVerbose>0)
G4cout<<
"SumOverBorder, a = "<<a<<
G4endl;
1882 if( std::fabs(a) < 1.e-6 )
1884 result = b*log(x0/e0);
1888 result = y0*(x0 - e0*pow(d,a-1))/a;
1891 if( std::fabs(a) < 1.e-6 )
1893 fIntegralPAIxSection[0] += b*log(x0/e0);
1897 fIntegralPAIxSection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1899 x0 = fSplineEnergy[i - 1];
1900 x1 = fSplineEnergy[i - 2];
1901 y0 = fDifPAIxSection[i - 1];
1902 yy1 = fDifPAIxSection[i - 2];
1906 a = log10(yy1/y0)/log10(x1/x0);
1910 if( std::fabs(a) < 1.e-6 )
1912 result += b*log(e0/x0);
1916 result += y0*(e0*pow(d,a-1) - x0)/a;
1919 if( std::fabs(a) < 1.e-6 )
1921 fIntegralPAIxSection[0] += b*log(e0/x0);
1925 fIntegralPAIxSection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1939 x0 = fSplineEnergy[i];
1940 x1 = fSplineEnergy[i+1];
1941 y0 = fDifPAIxSection[i];
1942 yy1 = fDifPAIxSection[i+1];
1946 a = log10(yy1/y0)/log10(x1/x0);
1947 if(a > 10.0)
return 0.;
1954 result = b*log(x0/e0);
1958 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1960 x0 = fSplineEnergy[i - 1];
1961 x1 = fSplineEnergy[i - 2];
1962 y0 = fDifPAIxSection[i - 1];
1963 yy1 = fDifPAIxSection[i - 2];
1967 a = log10(yy1/y0)/log10(x1/x0);
1973 result += b*log(e0/x0);
1977 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1991 G4double x0,x1,y0,yy1,
a,b,e0,c,d,result;
1994 x0 = fSplineEnergy[i];
1995 x1 = fSplineEnergy[i+1];
1996 y0 = fdNdxCerenkov[i];
1997 yy1 = fdNdxCerenkov[i+1];
2004 a = log10(yy1/y0)/log10(c);
2005 if(a > 10.0)
return 0.;
2010 if( a == 0 ) result = b*log(x0/e0);
2011 else result = y0*(x0 - e0*pow(d,a-1))/a;
2014 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
2015 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2019 x0 = fSplineEnergy[i - 1];
2020 x1 = fSplineEnergy[i - 2];
2021 y0 = fdNdxCerenkov[i - 1];
2022 yy1 = fdNdxCerenkov[i - 2];
2029 a = log10(yy1/y0)/log10(x1/x0);
2034 if( a == 0 ) result += b*log(e0/x0);
2035 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2038 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
2039 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2056 G4double x0,x1,y0,yy1,
a,b,e0,c,d,result;
2059 x0 = fSplineEnergy[i];
2060 x1 = fSplineEnergy[i+1];
2069 a = log10(yy1/y0)/log10(c);
2070 if(a > 10.0)
return 0.;
2075 if( a == 0 ) result = b*log(x0/e0);
2076 else result = y0*(x0 - e0*pow(d,a-1))/a;
2079 if( a == 0 ) fIntegralMM[0] += b*log(x0/e0);
2080 else fIntegralMM[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2084 x0 = fSplineEnergy[i - 1];
2085 x1 = fSplineEnergy[i - 2];
2086 y0 = fdNdxMM[i - 1];
2087 yy1 = fdNdxMM[i - 2];
2094 a = log10(yy1/y0)/log10(x1/x0);
2099 if( a == 0 ) result += b*log(e0/x0);
2100 else result += y0*(e0*pow(d,a-1) - x0 )/a;
2103 if( a == 0 ) fIntegralMM[0] += b*log(e0/x0);
2104 else fIntegralMM[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2121 G4double x0,x1,y0,yy1,
a,b,c,d,e0,result;
2124 x0 = fSplineEnergy[i];
2125 x1 = fSplineEnergy[i+1];
2126 y0 = fdNdxPlasmon[i];
2127 yy1 = fdNdxPlasmon[i+1];
2131 a = log10(yy1/y0)/log10(c);
2132 if(a > 10.0)
return 0.;
2137 if( a == 0 ) result = b*log(x0/e0);
2138 else result = y0*(x0 - e0*pow(d,a-1))/a;
2141 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
2142 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2144 x0 = fSplineEnergy[i - 1];
2145 x1 = fSplineEnergy[i - 2];
2146 y0 = fdNdxPlasmon[i - 1];
2147 yy1 = fdNdxPlasmon[i - 2];
2151 a = log10(yy1/y0)/log10(c);
2156 if( a == 0 ) result += b*log(e0/x0);
2157 else result += y0*(e0*pow(d,a-1) - x0)/a;
2160 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
2161 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2175 G4double x0,x1,y0,yy1,
a,b,c,d,e0,result;
2178 x0 = fSplineEnergy[i];
2179 x1 = fSplineEnergy[i+1];
2180 y0 = fdNdxResonance[i];
2181 yy1 = fdNdxResonance[i+1];
2185 a = log10(yy1/y0)/log10(c);
2186 if(a > 10.0)
return 0.;
2191 if( a == 0 ) result = b*log(x0/e0);
2192 else result = y0*(x0 - e0*pow(d,a-1))/a;
2195 if( a == 0 ) fIntegralResonance[0] += b*log(x0/e0);
2196 else fIntegralResonance[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
2198 x0 = fSplineEnergy[i - 1];
2199 x1 = fSplineEnergy[i - 2];
2200 y0 = fdNdxResonance[i - 1];
2201 yy1 = fdNdxResonance[i - 2];
2205 a = log10(yy1/y0)/log10(c);
2210 if( a == 0 ) result += b*log(e0/x0);
2211 else result += y0*(e0*pow(d,a-1) - x0)/a;
2214 if( a == 0 ) fIntegralResonance[0] += b*log(e0/x0);
2215 else fIntegralResonance[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
2232 meanNumber = fIntegralPAIxSection[1]*step;
2233 numOfCollisions =
G4Poisson(meanNumber);
2237 while(numOfCollisions)
2239 loss += GetEnergyTransfer();
2259 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2261 if( position >= fIntegralPAIxSection[iTransfer] )
break;
2263 if(iTransfer > fSplineNumber) iTransfer--;
2265 energyTransfer = fSplineEnergy[iTransfer];
2269 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2271 return energyTransfer;
2285 meanNumber = fIntegralCerenkov[1]*step;
2286 numOfCollisions =
G4Poisson(meanNumber);
2290 while(numOfCollisions)
2292 loss += GetCerenkovEnergyTransfer();
2311 meanNumber = fIntegralMM[1]*step;
2312 numOfCollisions =
G4Poisson(meanNumber);
2316 while(numOfCollisions)
2318 loss += GetMMEnergyTransfer();
2338 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2340 if( position >= fIntegralCerenkov[iTransfer] )
break;
2342 if(iTransfer > fSplineNumber) iTransfer--;
2344 energyTransfer = fSplineEnergy[iTransfer];
2348 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2350 return energyTransfer;
2365 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2367 if( position >= fIntegralMM[iTransfer] )
break;
2369 if(iTransfer > fSplineNumber) iTransfer--;
2371 energyTransfer = fSplineEnergy[iTransfer];
2375 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2377 return energyTransfer;
2391 meanNumber = fIntegralPlasmon[1]*step;
2392 numOfCollisions =
G4Poisson(meanNumber);
2396 while(numOfCollisions)
2398 loss += GetPlasmonEnergyTransfer();
2418 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2420 if( position >= fIntegralPlasmon[iTransfer] )
break;
2422 if(iTransfer > fSplineNumber) iTransfer--;
2424 energyTransfer = fSplineEnergy[iTransfer];
2428 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2430 return energyTransfer;
2444 meanNumber = fIntegralResonance[1]*step;
2445 numOfCollisions =
G4Poisson(meanNumber);
2449 while(numOfCollisions)
2451 loss += GetResonanceEnergyTransfer();
2472 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2474 if( position >= fIntegralResonance[iTransfer] )
break;
2476 if(iTransfer > fSplineNumber) iTransfer--;
2478 energyTransfer = fSplineEnergy[iTransfer];
2482 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2484 return energyTransfer;
2498 position = (fIntegralPlasmon[1]-fIntegralResonance[1])*
G4UniformRand();
2500 for( iTransfer = 1; iTransfer <= fSplineNumber; iTransfer++ )
2502 if( position >= (fIntegralPlasmon[iTransfer]-fIntegralResonance[iTransfer]) )
break;
2504 if(iTransfer > fSplineNumber) iTransfer--;
2506 energyTransfer = fSplineEnergy[iTransfer];
2510 energyTransfer -= (fSplineEnergy[iTransfer]-fSplineEnergy[iTransfer-1])*
G4UniformRand();
2512 return energyTransfer;
2520 G4String head =
"G4PAIxSection::" + methodName +
"()";
2522 ed <<
"Wrong index " << i <<
" fSplineNumber= " << fSplineNumber;
2536 1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
2537 1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
2538 1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
2539 1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
2540 2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
2541 3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
2542 5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
2543 8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
2544 1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
2545 2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
2546 5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
2547 1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
2548 1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
2549 3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
2550 6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
2551 1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
2552 2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
2553 4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
2554 8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
2555 1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
2556 3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
2557 5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
void IntegralPAIxSection()
void SplainPAI(G4double betaGammaSq)
G4double GetRutherfordEnergyTransfer()
G4double PAIdNdxResonance(G4int intervalNumber, G4double betaGammaSq)
static c2_factory< G4double > c2
G4long G4Poisson(G4double mean)
G4double GetPlasmonEnergyTransfer()
std::ostringstream G4ExceptionDescription
G4double GetStepResonanceLoss(G4double step)
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4double SumOverInterMM(G4int intervalNumber)
static const G4double betaBohr
static G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
static const G4double cofBetaBohr
G4double GetDensity() const
void NormShift(G4double betaGammaSq)
G4int GetMaxInterval() const
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
G4double SumOverBordResonance(G4int intervalNumber, G4double energy)
static G4int fNumberOfGammas
G4double SumOverInterPlasmon(G4int intervalNumber)
G4double GetSandiaMatTablePAI(G4int, G4int)
G4double SumOverInterval(G4int intervalNumber)
G4double RePartDielectricConst(G4double energy)
const G4Element * GetElement(G4int iel) const
void ComputeLowEnergyCof()
void CallError(G4int i, const G4String &methodName) const
static const G4int fMaxSplineSize
G4int SandiaMixing(G4int Z[], const G4double *fractionW, G4int el, G4int mi)
static const G4double betaBohr4
G4double GetResonanceEnergyTransfer()
G4GLOB_DLL std::ostream G4cout
G4double GetElectronDensity() const
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double GetPhotonRange(G4double energy)
G4double SumOverBordMM(G4int intervalNumber, G4double energy)
static const G4double betaBohr2
G4double GetCerenkovEnergyTransfer()
static const G4int fRefGammaNumber
static const G4double fError
G4double SumOverInterResonance(G4int intervalNumber)
G4int SandiaIntervals(G4int Z[], G4int el)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetStepPlasmonLoss(G4double step)
G4double PAIdNdxMM(G4int intervalNumber, G4double betaGammaSq)
G4double GetStepEnergyLoss(G4double step)
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
G4double GetMMEnergyTransfer()
G4double SumOverBorder(G4int intervalNumber, G4double energy)
G4double energy(const ThreeVector &p, const G4double m)
static const G4double fDelta
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
G4double SumOverInterCerenkov(G4int intervalNumber)
G4double GetPhotoAbsorpCof(G4int i, G4int j) const
size_t GetNumberOfElements() const
G4double GetEnergyTransfer()
G4double GetStepMMLoss(G4double step)
G4double SumOverIntervaldEdx(G4int intervalNumber)
G4double GetStepCerenkovLoss(G4double step)
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
G4double DifPAIxSection(G4int intervalNumber, G4double betaGammaSq)
static const G4double fLorentzFactor[112]
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
const G4Material * GetMaterial() const
G4double GetElectronRange(G4double energy)