75 lowEnergyLimit(250*
eV),
76 highEnergyLimit(100*
GeV),
77 intrinsicLowEnergyLimit(10*
eV),
78 intrinsicHighEnergyLimit(100*
GeV)
80 if (lowEnergyLimit < intrinsicLowEnergyLimit ||
81 highEnergyLimit > intrinsicHighEnergyLimit)
83 G4Exception(
"G4LowEnergyRayleigh::G4LowEnergyRayleigh()",
85 "Energy limit outside intrinsic process validity range!");
91 G4String formFactorFile =
"rayl/re-ff-";
93 formFactorData->
LoadData(formFactorFile);
95 meanFreePathTable = 0;
101 << lowEnergyLimit /
keV <<
" keV - "
102 << highEnergyLimit /
GeV <<
" GeV"
109 delete meanFreePathTable;
110 delete crossSectionHandler;
111 delete formFactorData;
117 crossSectionHandler->
Clear();
118 G4String crossSectionFile =
"rayl/re-cs-";
119 crossSectionHandler->
LoadData(crossSectionFile);
121 delete meanFreePathTable;
134 if (photonEnergy0 <= lowEnergyLimit)
164 fcostheta = ( 1. + cosTheta*cosTheta)/2.;
167 G4double sinThetaHalf = std::sqrt((1. - cosTheta) / 2.);
168 x = sinThetaHalf / (wlPhoton/
cm);
170 dataFormFactor = formFactorData->
FindValue(x,Z-1);
172 dataFormFactor = formFactorData->
FindValue(0.,Z-1);
174 sinTheta = std::sqrt(1. - cosTheta*cosTheta);
175 gReject = dataFormFactor * dataFormFactor;
177 }
while( gReject < randomFormFactor);
181 G4double dirX = sinTheta*std::cos(phi);
182 G4double dirY = sinTheta*std::sin(phi);
188 photonDirection1.
rotateUz(photonDirection0);
209 size_t materialIndex = couple->
GetIndex();
212 if (energy > highEnergyLimit) meanFreePath = meanFreePathTable->
FindValue(highEnergyLimit,materialIndex);
213 else if (energy < lowEnergyLimit) meanFreePath =
DBL_MAX;
214 else meanFreePath = meanFreePathTable->
FindValue(energy,materialIndex);