G4PolarizedGammaConversionModel Class Reference

#include <G4PolarizedGammaConversionModel.hh>

Inheritance diagram for G4PolarizedGammaConversionModel:

G4BetheHeitlerModel G4VEmModel

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 G4ElementSelectedAtom ()

Protected Attributes

G4VPolarizedCrossSectioncrossSectionCalculator

Detailed Description

Definition at line 58 of file G4PolarizedGammaConversionModel.hh.


Constructor & Destructor Documentation

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 }


Member Function Documentation

void G4PolarizedGammaConversionModel::Initialise ( const G4ParticleDefinition ,
const G4DataVector  
) [virtual]

Reimplemented from G4BetheHeitlerModel.

Definition at line 83 of file G4PolarizedGammaConversionModel.cc.

References crossSectionCalculator, and G4BetheHeitlerModel::Initialise().

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 }


Field Documentation

G4VPolarizedCrossSection* G4PolarizedGammaConversionModel::crossSectionCalculator [protected]

Definition at line 79 of file G4PolarizedGammaConversionModel.hh.

Referenced by Initialise(), SampleSecondaries(), and ~G4PolarizedGammaConversionModel().


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:57 2013 for Geant4 by  doxygen 1.4.7