55 :
G4VEmModel(nam),fParticleChange(0),isInitialised(false),
56 crossSectionHandler(0),formFactorData(0)
73 G4cout <<
"Livermore Polarized Rayleigh is constructed " <<
G4endl
102 G4cout <<
"Calling G4LivermorePolarizedRayleighModel::Initialise()" <<
G4endl;
114 G4String crossSectionFile =
"rayl/re-cs-";
118 G4String formFactorFile =
"rayl/re-ff-";
126 G4cout <<
"Loaded cross section files for Livermore Polarized Rayleigh model" <<
G4endl;
131 G4cout <<
"Livermore Polarized Rayleigh model is initialized " << G4endl
152 G4cout <<
"Calling CrossSectionPerAtom() of G4LivermorePolarizedRayleighModel" <<
G4endl;
154 if (GammaEnergy < lowEnergyLimit || GammaEnergy >
highEnergyLimit)
return 0.0;
169 G4cout <<
"Calling SampleSecondaries() of G4LivermorePolarizedRayleighModel" <<
G4endl;
211 zDir=outcomingPhotonCosTheta;
212 xDir=std::sqrt(1-outcomingPhotonCosTheta*outcomingPhotonCosTheta);
214 xDir*=std::cos(outcomingPhotonPhi);
215 yDir*=std::sin(outcomingPhotonPhi);
222 G4ThreeVector outcomingPhotonPolarization(xPrime*std::cos(beta) + yPrime*std::sin(beta));
252 const G4double xFactor = (incomingPhotonEnergy*
cm)/(h_Planck*c_light);
260 if (incomingPhotonEnergy > 5.*
MeV)
271 fCosTheta = (1.+cosTheta*cosTheta)/2.;
275 x = xFactor*std::sqrt((1.-cosTheta)/2.);
306 sin2Theta=1.-cosTheta*cosTheta;
311 cosPhi = std::cos(phi);
312 phiProbability= 1. - sin2Theta*cosPhi*cosPhi;
341 if ((!photonPolarization.isOrthogonal(photonMomentumDirection, 1e-6)) || photonPolarization.mag()==0.)
354 photonPolarization=
e1+
e2;
356 else if (photonPolarization.howOrthogonal(photonMomentumDirection) != 0.)
361 photonPolarization=photonPolarization.perpPart(photonMomentumDirection);
364 return photonPolarization.unit();
G4double LowEnergyLimit() const
virtual G4double FindValue(G4double x, G4int componentId=0) const =0
G4double GetKineticEnergy() const
CLHEP::Hep3Vector G4ThreeVector
G4double GeneratePolarizationAngle(void) const
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
G4double HighEnergyLimit() const
G4double GeneratePhi(G4double cosTheta) const
G4ThreeVector GetPhotonPolarization(const G4DynamicParticle &photon)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0, G4double cut=0, G4double emax=DBL_MAX)
G4ParticleChangeForGamma * fParticleChange
G4double GenerateCosTheta(G4double incomingPhotonEnergy, G4int zAtom) const
G4ParticleDefinition * GetDefinition() const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetHighEnergyLimit(G4double)
G4double FindValue(G4int Z, G4double e) const
G4GLOB_DLL std::ostream G4cout
const G4ThreeVector & GetMomentumDirection() const
G4VEMDataSet * formFactorData
void ProposePolarization(const G4ThreeVector &dir)
G4VCrossSectionHandler * crossSectionHandler
const G4ThreeVector & GetPolarization() const
void LoadData(const G4String &dataFile)
virtual G4bool LoadData(const G4String &fileName)=0
virtual ~G4LivermorePolarizedRayleighModel()
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeTrackStatus(G4TrackStatus status)
G4ThreeVector G4ParticleMomentum
G4LivermorePolarizedRayleighModel(const G4ParticleDefinition *p=0, const G4String &nam="LivermorePolarizedRayleigh")
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4ParticleChangeForGamma * GetParticleChangeForGamma()