#include <G4ePolarizedBremsstrahlungModel.hh>
Inheritance diagram for G4ePolarizedBremsstrahlungModel:
Public Member Functions | |
G4ePolarizedBremsstrahlungModel (const G4ParticleDefinition *p=0, const G4String &nam="PolBrem") | |
virtual | ~G4ePolarizedBremsstrahlungModel () |
virtual void | Initialise (const G4ParticleDefinition *, const G4DataVector &) |
virtual void | SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) |
const G4Element * | SelectedAtom () |
Protected Attributes | |
G4VPolarizedCrossSection * | crossSectionCalculator |
Definition at line 58 of file G4ePolarizedBremsstrahlungModel.hh.
G4ePolarizedBremsstrahlungModel::G4ePolarizedBremsstrahlungModel | ( | const G4ParticleDefinition * | p = 0 , |
|
const G4String & | nam = "PolBrem" | |||
) |
Definition at line 56 of file G4ePolarizedBremsstrahlungModel.cc.
00058 : G4eBremsstrahlungModel(p,nam), 00059 crossSectionCalculator(0) 00060 { 00061 }
G4ePolarizedBremsstrahlungModel::~G4ePolarizedBremsstrahlungModel | ( | ) | [virtual] |
Definition at line 65 of file G4ePolarizedBremsstrahlungModel.cc.
References crossSectionCalculator.
00066 { 00067 if (crossSectionCalculator) delete crossSectionCalculator; 00068 }
void G4ePolarizedBremsstrahlungModel::Initialise | ( | const G4ParticleDefinition * | , | |
const G4DataVector & | ||||
) | [virtual] |
Reimplemented from G4eBremsstrahlungModel.
Definition at line 72 of file G4ePolarizedBremsstrahlungModel.cc.
References crossSectionCalculator, and G4eBremsstrahlungModel::Initialise().
00074 { 00075 G4eBremsstrahlungModel::Initialise(p,d); 00076 if (!crossSectionCalculator) 00077 crossSectionCalculator = new G4PolarizedBremsstrahlungCrossSection(); 00078 }
void G4ePolarizedBremsstrahlungModel::SampleSecondaries | ( | std::vector< G4DynamicParticle * > * | , | |
const G4MaterialCutsCouple * | , | |||
const G4DynamicParticle * | , | |||
G4double | tmin, | |||
G4double | maxEnergy | |||
) | [virtual] |
Reimplemented from G4eBremsstrahlungModel.
Definition at line 84 of file G4ePolarizedBremsstrahlungModel.cc.
References crossSectionCalculator, G4eBremsstrahlungModel::fParticleChange, G4cout, G4VEmModel::GetCurrentElement(), G4PolarizationHelper::GetFrame(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMomentumDirection(), G4VPolarizedCrossSection::GetPol2(), G4VPolarizedCrossSection::GetPol3(), G4DynamicParticle::GetPolarization(), G4ParticleChangeForLoss::GetProposedMomentumDirection(), G4VPolarizedCrossSection::Initialize(), G4StokesVector::InvRotateAz(), G4ParticleChangeForLoss::ProposePolarization(), G4StokesVector::RotateAz(), G4eBremsstrahlungModel::SampleSecondaries(), G4VPolarizedCrossSection::SetMaterial(), G4StokesVector::SetPhoton(), and G4StokesVector::ZERO.
00089 { 00090 G4eBremsstrahlungModel::SampleSecondaries(vdp,couple,dp,tmin,maxEnergy); 00091 G4int num = vdp->size(); 00092 00093 if(num > 0) { 00094 G4double lepEnergy0 = dp->GetKineticEnergy(); 00095 G4double gamEnergy1 = (*vdp)[0]->GetKineticEnergy(); 00096 G4double sintheta = dp->GetMomentumDirection().cross((*vdp)[0]->GetMomentumDirection()).mag(); 00097 if (sintheta>1.) sintheta=1.; 00098 00099 00100 G4StokesVector beamPol = dp->GetPolarization(); 00101 00102 // determine interaction plane 00103 G4ThreeVector nInteractionFrame = 00104 G4PolarizationHelper::GetFrame(dp->GetMomentumDirection(), 00105 fParticleChange->GetProposedMomentumDirection()); 00106 00107 // transform polarization into interaction frame 00108 beamPol.InvRotateAz(nInteractionFrame,dp->GetMomentumDirection()); 00109 00110 // calulcate polarization transfer 00111 crossSectionCalculator->SetMaterial(GetCurrentElement()->GetN(), // number of nucleons 00112 GetCurrentElement()->GetZ(), 00113 GetCurrentElement()->GetfCoulomb()); 00114 crossSectionCalculator->Initialize(lepEnergy0, gamEnergy1, sintheta, 00115 beamPol, G4StokesVector::ZERO); 00116 00117 // deterimine final state polarization 00118 G4StokesVector newBeamPol = crossSectionCalculator->GetPol2(); 00119 newBeamPol.RotateAz(nInteractionFrame, 00120 fParticleChange->GetProposedMomentumDirection()); 00121 fParticleChange->ProposePolarization(newBeamPol); 00122 00123 if (num!=1) G4cout<<" WARNING "<<num<<" secondaries in polarized bremsstrahlung not supported!\n"; 00124 for (G4int i=0; i<num; i++) { 00125 G4StokesVector photonPol = crossSectionCalculator->GetPol3(); 00126 photonPol.SetPhoton(); 00127 photonPol.RotateAz(nInteractionFrame,(*vdp)[i]->GetMomentumDirection()); 00128 (*vdp)[i]->SetPolarization(photonPol.p1(), 00129 photonPol.p2(), 00130 photonPol.p3()); 00131 } 00132 } 00133 return; 00134 }
const G4Element * G4ePolarizedBremsstrahlungModel::SelectedAtom | ( | ) | [inline] |
Definition at line 86 of file G4ePolarizedBremsstrahlungModel.hh.
References G4VEmModel::GetCurrentElement().
00087 { 00088 return GetCurrentElement(); 00089 }
Definition at line 79 of file G4ePolarizedBremsstrahlungModel.hh.
Referenced by Initialise(), SampleSecondaries(), and ~G4ePolarizedBremsstrahlungModel().