73 buildAsymmetryTable(true),
74 useAsymmetryTable(true),
78 theAsymmetryTable(NULL)
91 if (theAsymmetryTable) {
93 delete theAsymmetryTable;
102 isInitialised =
true;
109 else if(10 == mType) selectedModel = emModel;
120 G4cout <<
" Total cross sections has a good parametrisation"
121 <<
" from 10 KeV to (100/Z) GeV"
122 <<
"\n Sampling according " << selectedModel->
GetName() <<
" model"
130 if(ss ==
"Klein-Nishina") mType = 0;
131 if(ss ==
"Polarized-Compton") mType = 10;
149 if (theAsymmetryTable && useAsymmetryTable) {
166 if (!VolumeIsPolarized || mfp ==
DBL_MAX)
return mfp;
171 G4cout <<
" Polarization " << GammaPolarization <<
G4endl;
172 G4cout <<
" MaterialPol. " << ElectronPolarization <<
G4endl;
184 asymmetry = aVector->
GetValue(GammaEnergy, isOutRange);
186 G4cout <<
" MaterialIndex " << midx <<
" is out of range \n";
195 G4double pol=ElectronPolarization*GammaDirection0;
197 G4double polProduct = GammaPolarization.
p3() * pol;
198 mfp *= 1. / ( 1. + polProduct * asymmetry );
219 if (theAsymmetryTable && useAsymmetryTable) {
236 if (!VolumeIsPolarized || mfp ==
DBL_MAX)
return mfp;
241 G4cout <<
" Polarization " << GammaPolarization <<
G4endl;
242 G4cout <<
" MaterialPol. " << ElectronPolarization <<
G4endl;
254 asymmetry = aVector->
GetValue(GammaEnergy, isOutRange);
256 G4cout <<
" MaterialIndex " << midx <<
" is out of range \n";
265 G4double pol=ElectronPolarization*GammaDirection0;
267 G4double polProduct = GammaPolarization.
p3() * pol;
268 mfp *= 1. / ( 1. + polProduct * asymmetry );
285 if(buildAsymmetryTable)
296 if(buildAsymmetryTable)
309 for(
size_t i=0; i<numOfCouples; ++i) {
310 if (!theAsymmetryTable)
break;
311 if (theAsymmetryTable->
GetFlag(i)) {
362 lAsymmetry=sigma2/sigma0-1.;