104 G4double fact = (1. + gg)/(1. - gg + 2. * gg * r);
105 costh = 2. * r * fact * fact * (1. - gg + gg * r) - 1.;
111 G4double sinth = std::sqrt(std::max(0., (1. - costh) * ( 1. + costh)));
117 G4ThreeVector newMomDir(sinth * std::cos(phi), sinth * std::sin(phi), costh);
119 newMomDir = newMomDir.
unit();
124 if(newPol.
mag() == 0.)
127 newPol.
set(std::cos(r), std::sin(r), 0.);
142 G4cout <<
"OpMie New Polarization: " << newPol <<
G4endl
144 <<
G4endl <<
" New Momentum Direction: " << newMomDir <<
G4endl
164 attLength = attVector->
Value(
G4PhysicsFreeVector G4MaterialPropertyVector
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
double dot(const Hep3Vector &) const
void set(double x, double y, double z)
Hep3Vector & rotateUz(const Hep3Vector &)
const G4ThreeVector & GetMomentumDirection() const
G4double GetTotalEnergy() const
const G4ThreeVector & GetPolarization() const
G4double GetConstProperty(const G4String &key) const
G4MaterialPropertyVector * GetProperty(const char *key) const
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
virtual G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override
G4OpMieHG(const G4String &processName="OpMieHG", G4ProcessType type=fOptical)
virtual void PreparePhysicsTable(const G4ParticleDefinition &) override
void SetVerboseLevel(G4int)
virtual void Initialise()
virtual G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override
static G4OpticalParameters * Instance()
void SetMieVerboseLevel(G4int)
G4double Value(const G4double energy, std::size_t &lastidx) const
G4Material * GetMaterial() const
const G4DynamicParticle * GetDynamicParticle() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4VDiscreteProcess(const G4String &aName, G4ProcessType aType=fNotDefined)
G4ParticleChange aParticleChange
void SetProcessSubType(G4int)
const G4String & GetProcessName() const