#include <G4PolarizedGammaConversionModel.hh>
Inheritance diagram for G4PolarizedGammaConversionModel:
Public Member Functions | |
G4PolarizedGammaConversionModel (const G4ParticleDefinition *p=0, const G4String &nam="polConv") | |
virtual | ~G4PolarizedGammaConversionModel () |
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 G4PolarizedGammaConversionModel.hh.
G4PolarizedGammaConversionModel::G4PolarizedGammaConversionModel | ( | const G4ParticleDefinition * | p = 0 , |
|
const G4String & | nam = "polConv" | |||
) |
Definition at line 68 of file G4PolarizedGammaConversionModel.cc.
00070 : G4BetheHeitlerModel(pd,nam), crossSectionCalculator(0) 00071 { 00072 }
G4PolarizedGammaConversionModel::~G4PolarizedGammaConversionModel | ( | ) | [virtual] |
Definition at line 76 of file G4PolarizedGammaConversionModel.cc.
References crossSectionCalculator.
00077 { 00078 if (crossSectionCalculator) delete crossSectionCalculator; 00079 }
void G4PolarizedGammaConversionModel::Initialise | ( | const G4ParticleDefinition * | , | |
const G4DataVector & | ||||
) | [virtual] |
Reimplemented from G4BetheHeitlerModel.
Definition at line 83 of file G4PolarizedGammaConversionModel.cc.
References crossSectionCalculator, and G4BetheHeitlerModel::Initialise().
00085 { 00086 G4BetheHeitlerModel::Initialise(pd,dv); 00087 if (!crossSectionCalculator) 00088 crossSectionCalculator = new G4PolarizedPairProductionCrossSection(); 00089 }
void G4PolarizedGammaConversionModel::SampleSecondaries | ( | std::vector< G4DynamicParticle * > * | , | |
const G4MaterialCutsCouple * | , | |||
const G4DynamicParticle * | , | |||
G4double | tmin, | |||
G4double | maxEnergy | |||
) | [virtual] |
Reimplemented from G4BetheHeitlerModel.
Definition at line 93 of file G4PolarizedGammaConversionModel.cc.
References crossSectionCalculator, G4cout, G4VEmModel::GetCurrentElement(), G4PolarizationHelper::GetFrame(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMomentumDirection(), G4VPolarizedCrossSection::GetPol2(), G4VPolarizedCrossSection::GetPol3(), G4DynamicParticle::GetPolarization(), G4VPolarizedCrossSection::Initialize(), G4StokesVector::InvRotateAz(), G4StokesVector::p1(), G4StokesVector::p2(), G4StokesVector::p3(), G4StokesVector::RotateAz(), G4BetheHeitlerModel::SampleSecondaries(), G4VPolarizedCrossSection::SetMaterial(), G4StokesVector::SetPhoton(), and G4StokesVector::ZERO.
00098 { 00099 G4BetheHeitlerModel::SampleSecondaries(vdp, couple, dp, tmin, maxEnergy); 00100 00101 if(vdp && vdp->size()>0) { 00102 G4double gamEnergy0 = dp->GetKineticEnergy(); 00103 G4double lepEnergy1 = (*vdp)[0]->GetKineticEnergy(); 00104 G4double sintheta = dp->GetMomentumDirection().cross((*vdp)[0]->GetMomentumDirection()).mag(); 00105 if (sintheta>1.) sintheta=1.; 00106 00107 G4StokesVector beamPol = dp->GetPolarization(); 00108 beamPol.SetPhoton(); 00109 00110 // determine interaction plane 00111 G4ThreeVector nInteractionFrame = 00112 G4PolarizationHelper::GetFrame(dp->GetMomentumDirection(), 00113 (*vdp)[0]->GetMomentumDirection()); 00114 00115 // transform polarization into interaction frame 00116 beamPol.InvRotateAz(nInteractionFrame,dp->GetMomentumDirection()); 00117 00118 // calulcate polarization transfer 00119 crossSectionCalculator->SetMaterial(GetCurrentElement()->GetN(), // number of nucleons 00120 GetCurrentElement()->GetZ(), 00121 GetCurrentElement()->GetfCoulomb()); 00122 crossSectionCalculator->Initialize(gamEnergy0, lepEnergy1, sintheta, 00123 beamPol, G4StokesVector::ZERO); 00124 00125 // deterimine final state polarization 00126 G4StokesVector lep1Pol = crossSectionCalculator->GetPol2(); 00127 lep1Pol.RotateAz(nInteractionFrame,(*vdp)[0]->GetMomentumDirection()); 00128 (*vdp)[0]->SetPolarization(lep1Pol.p1(), 00129 lep1Pol.p2(), 00130 lep1Pol.p3()); 00131 00132 size_t num = vdp->size(); 00133 if (num!=2) G4cout<<" WARNING "<<num<<" secondaries in polarized pairproduction not supported!\n"; 00134 for (size_t i =1; i<num; ++i) { 00135 G4StokesVector lep2Pol = crossSectionCalculator->GetPol3(); 00136 lep2Pol.RotateAz(nInteractionFrame,(*vdp)[i]->GetMomentumDirection()); 00137 (*vdp)[i]->SetPolarization(lep2Pol.p1(), 00138 lep2Pol.p2(), 00139 lep2Pol.p3()); 00140 00141 } 00142 } 00143 }
const G4Element * G4PolarizedGammaConversionModel::SelectedAtom | ( | ) | [inline] |
Definition at line 87 of file G4PolarizedGammaConversionModel.hh.
References G4VEmModel::GetCurrentElement().
00088 { 00089 return GetCurrentElement(); 00090 }
Definition at line 79 of file G4PolarizedGammaConversionModel.hh.
Referenced by Initialise(), SampleSecondaries(), and ~G4PolarizedGammaConversionModel().