G4PolarizedAnnihilationCrossSection Class Reference

#include <G4PolarizedAnnihilationCrossSection.hh>

Inheritance diagram for G4PolarizedAnnihilationCrossSection:

G4VPolarizedCrossSection

Public Member Functions

 G4PolarizedAnnihilationCrossSection ()
virtual ~G4PolarizedAnnihilationCrossSection ()
virtual void Initialize (G4double eps, G4double gamma, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0)
G4double DiceEpsilon ()
virtual G4double XSection (const G4StokesVector &pol2, const G4StokesVector &pol3)
virtual G4double TotalXSection (G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1)
G4StokesVector GetPol2 ()
G4StokesVector GetPol3 ()
virtual G4double GetXmin (G4double y)
virtual G4double GetXmax (G4double y)
G4double getVar (G4int)
void getCoeff ()

Detailed Description

Definition at line 55 of file G4PolarizedAnnihilationCrossSection.hh.


Constructor & Destructor Documentation

G4PolarizedAnnihilationCrossSection::G4PolarizedAnnihilationCrossSection (  ) 

Definition at line 52 of file G4PolarizedAnnihilationCrossSection.cc.

00052                                                                          :
00053   polxx(0.), polyy(0.), polzz(0.), polxz(0.), polzx(0.), polxy(0.), 
00054   polyx(0.), polyz(0.), polzy(0.),
00055   re2(1.), diffXSFactor(1.), totalXSFactor(1.),
00056   phi0(0.)
00057 {
00058   re2 = classic_electr_radius * classic_electr_radius;
00059   phi2 = G4ThreeVector(0., 0., 0.);
00060   phi3 = G4ThreeVector(0., 0., 0.);
00061   dice = 0.;
00062   polXS= 0.;
00063   unpXS = 0.;
00064   ISPxx=ISPyy=ISPzz=ISPnd=0.;
00065 }

G4PolarizedAnnihilationCrossSection::~G4PolarizedAnnihilationCrossSection (  )  [virtual]

Definition at line 69 of file G4PolarizedAnnihilationCrossSection.cc.

00070 {
00071 }


Member Function Documentation

G4double G4PolarizedAnnihilationCrossSection::DiceEpsilon (  ) 

Definition at line 317 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

00318 {
00319   return dice;
00320 }

void G4PolarizedAnnihilationCrossSection::getCoeff (  ) 

G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol2 (  )  [virtual]

Reimplemented from G4VPolarizedCrossSection.

Definition at line 272 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

00273 {
00274   // Note, mean polarization can not contain correlation
00275   // effects.
00276   return  1./phi0 * phi2;
00277 }

G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol3 (  )  [virtual]

Reimplemented from G4VPolarizedCrossSection.

Definition at line 281 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

00282 {
00283   // Note, mean polarization can not contain correlation
00284   // effects.
00285   return  1./phi0 * phi3;
00286 }

G4double G4PolarizedAnnihilationCrossSection::getVar ( G4int   ) 

Definition at line 322 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

00323 {
00324   if (choice == -1) return polXS/unpXS;
00325   if (choice == 0) return unpXS;
00326   if (choice == 1) return ISPxx;
00327   if (choice == 2) return ISPyy;
00328   if (choice == 3) return ISPzz;
00329   if (choice == 4) return ISPnd;
00330   return 0;
00331 }

G4double G4PolarizedAnnihilationCrossSection::GetXmax ( G4double  y  )  [virtual]

Reimplemented from G4VPolarizedCrossSection.

Definition at line 311 of file G4PolarizedAnnihilationCrossSection.cc.

00312 {
00313   return 0.5*(1.+std::sqrt((y-1.)/(y+1.)));
00314 }

G4double G4PolarizedAnnihilationCrossSection::GetXmin ( G4double  y  )  [virtual]

Reimplemented from G4VPolarizedCrossSection.

Definition at line 307 of file G4PolarizedAnnihilationCrossSection.cc.

00308 {
00309   return 0.5*(1.-std::sqrt((y-1.)/(y+1.)));
00310 }

void G4PolarizedAnnihilationCrossSection::Initialize ( G4double  eps,
G4double  gamma,
G4double  phi,
const G4StokesVector p0,
const G4StokesVector p1,
G4int  flag = 0 
) [virtual]

Reimplemented from G4VPolarizedCrossSection.

Definition at line 90 of file G4PolarizedAnnihilationCrossSection.cc.

References sqr().

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

00097 {
00098 
00099   diffXSFactor=re2/(gam - 1.);
00100   DefineCoefficients(pol0,pol1);
00101   //  
00102   // prepare dicing
00103   //
00104   dice = 0.;
00105   G4double symmXS = 0.125*((-1./sqr(gam + 1.))/sqr(eps) + 
00106                            ((sqr(gam) + 4.*gam - 1.)/sqr(gam + 1.))/eps - 1.);
00107   //
00108   //
00109   //
00110   G4ThreeVector epsVector(1./sqr(eps), 1./eps, 1.);
00111   G4ThreeVector oneEpsVector(1./sqr(1. - eps), 1./(1.-eps), 1.);
00112   G4ThreeVector sumEpsVector(epsVector + oneEpsVector);
00113   G4ThreeVector difEpsVector(epsVector - oneEpsVector);
00114   G4ThreeVector calcVector(0., 0., 0.);
00115   //
00116   // temporary variables
00117   //
00118   G4double helpVar2 = 0., helpVar1 = 0.;
00119   //
00120   // unpolarised contribution
00121   //
00122   helpVar1 = (gam*gam + 4.*gam + 1.)/sqr(gam + 1.);
00123   helpVar2 = -1./sqr(gam + 1.);
00124   calcVector = G4ThreeVector(helpVar2, helpVar1, -1.);
00125   unpXS = 0.125 * calcVector * sumEpsVector;
00126 
00127   // initial particles polarised contribution
00128   helpVar2 = 1./sqr(gam + 1.);
00129   helpVar1 = -(gam*gam + 4.*gam + 1.)/sqr(gam + 1.);
00130   calcVector = G4ThreeVector(helpVar2, helpVar1, 0.5*(gam + 3.));
00131   ISPxx = 0.25*(calcVector * sumEpsVector)/(gam - 1.);
00132 
00133   helpVar1 = 1./sqr(gam + 1.);
00134   calcVector = G4ThreeVector(-helpVar1, 2.*gam*helpVar1, -1.);
00135   ISPyy = 0.125 * calcVector * sumEpsVector;
00136 
00137   helpVar1 = 1./(gam - 1.);
00138   helpVar2 = 1./sqr(gam + 1.);
00139   calcVector = G4ThreeVector(-(gam*gam + 1.)*helpVar2,(gam*gam*(gam + 1.) + 7.*gam + 3.)*helpVar2, -(gam + 3.));
00140   ISPzz = 0.125*helpVar1*(calcVector * sumEpsVector);
00141 
00142   helpVar1 = std::sqrt(std::fabs(eps*(1. - eps)*2.*(gam + 1.) - 1.));
00143   calcVector = G4ThreeVector(-1./(gam*gam - 1.), 2./(gam - 1.), 0.);
00144   ISPnd = 0.125*(calcVector * difEpsVector) * helpVar1;
00145 
00146   polXS = 0.;  
00147   polXS += ISPxx*polxx;
00148   polXS += ISPyy*polyy;
00149   polXS += ISPzz*polzz;
00150   polXS += ISPnd*(polzx + polxz);
00151   phi0 = unpXS + polXS;
00152   dice = symmXS;
00153   //  if(polzz != 0.) dice *= (1. + std::fabs(polzz*ISPzz/unpXS));
00154   if(polzz != 0.) {
00155     dice *= (1. + (polzz*ISPzz/unpXS));
00156     if (dice<0.) dice=0.;
00157   }
00158     // prepare final state coefficients
00159   if (flag==2) {
00160     //
00161     // circular polarisation
00162     //
00163     G4double circ1 = 0., circ2 = 0., circ3 = 0.;
00164     helpVar1 = 8.*sqr(1. - eps)*sqr(eps)*(gam - 1.)*sqr(gam + 1.)/std::sqrt(gam*gam - 1.);
00165     helpVar2 =  sqr(gam + 1.)*sqr(eps)*(-2.*eps + 3.) - (gam*gam + 3.*gam + 2.)*eps;
00166     circ1 = helpVar2 + gam;
00167     circ1 /= helpVar1;
00168     circ2 = helpVar2 + 1.;
00169     circ2 /= helpVar1;
00170     helpVar1 = std::sqrt(std::fabs(eps*(1. - eps)*2.*(gam + 1.) - 1.));
00171     helpVar1 /= std::sqrt(gam*gam - 1.);
00172     calcVector = G4ThreeVector(1., -2.*gam, 0.);
00173     circ3 = 0.125*(calcVector * sumEpsVector)/(gam + 1.);
00174     circ3 *= helpVar1;
00175 
00176     phi2.setZ( circ2*pol1.z() + circ1*pol0.z() + circ3*(pol1.x() + pol0.x()));
00177     phi3.setZ(-circ1*pol1.z() - circ2*pol0.z() - circ3*(pol1.x() + pol0.x()));
00178     //
00179     // common to both linear polarisation
00180     //
00181     calcVector = G4ThreeVector(-1., 2.*gam, 0.);
00182     G4double linearZero = 0.125*(calcVector * sumEpsVector)/sqr(gam + 1.);
00183     //   
00184     //        Linear Polarisation #1 
00185     //
00186     helpVar1 = std::sqrt(std::fabs(2.*(gam + 1.)*(1. - eps)*eps - 1.))/((gam + 1.)*eps*(1. - eps));
00187     helpVar2 = helpVar1*helpVar1;
00188     //
00189     // photon 1
00190     //
00191     G4double diagContrib = 0.125*helpVar2*(polxx + polyy - polzz);
00192     G4double nonDiagContrib = 0.125*helpVar1*(-polxz/(1. - eps) + polzx/eps);
00193 
00194     phi2.setX(linearZero + diagContrib + nonDiagContrib);
00195     //
00196     // photon 2
00197     //
00198     nonDiagContrib = 0.125*helpVar1*(polxz/eps - polzx/(1. - eps));
00199 
00200 
00201     phi3.setX(linearZero + diagContrib + nonDiagContrib);
00202    //   
00203    //        Linear Polarisation #2
00204    //
00205     helpVar1 = std::sqrt(gam*gam - 1.)*(2.*(gam + 1.)*eps*(1. - eps) - 1.);
00206     helpVar1 /= 8.*sqr(1. - eps)*sqr(eps)*sqr(gam + 1.)*(gam - 1.);
00207     helpVar2 = std::sqrt((gam*gam - 1.)*std::fabs(2.*(gam + 1.)*eps*(1. - eps) - 1.));
00208     helpVar2 /= 8.*sqr(1. - eps)*sqr(eps)*sqr(gam + 1.)*(gam - 1.);
00209 
00210     G4double contrib21 = (-polxy + polyx)*helpVar1;
00211     G4double contrib32 = -(eps*(gam + 1.) - 1.)*polyz + (eps*(gam + 1.) - gam)*polzy;
00212 
00213              contrib32 *=helpVar2;
00214     phi2.setY(contrib21 + contrib32);
00215 
00216              contrib32 = -(eps*(gam + 1.) - gam)*polyz + (eps*(gam + 1.) - 1.)*polzy;
00217              contrib32 *=helpVar2;
00218     phi3.setY(contrib21 + contrib32);
00219 
00220   }
00221   phi0 *= diffXSFactor;
00222   phi2 *= diffXSFactor;
00223   phi3 *= diffXSFactor;
00224 }

G4double G4PolarizedAnnihilationCrossSection::TotalXSection ( G4double  xmin,
G4double  xmax,
G4double  y,
const G4StokesVector pol0,
const G4StokesVector pol1 
) [virtual]

Reimplemented from G4VPolarizedCrossSection.

Definition at line 238 of file G4PolarizedAnnihilationCrossSection.cc.

References G4INCL::Math::pi, and sqr().

Referenced by G4PolarizedAnnihilationModel::ComputeAsymmetriesPerElectron().

00241 {
00242   totalXSFactor =pi*re2/(gam + 1.);  // atomic number ignored  
00243   DefineCoefficients(pol0,pol1);
00244 
00245   G4double xs = 0.;
00246 
00247 
00248   G4double gam2 = gam*gam;
00249   G4double sqrtgam1 = std::sqrt(gam2 - 1.);
00250   G4double logMEM  = std::log(gam+sqrtgam1);
00251   G4double unpME = (gam*(gam + 4.) + 1.)*logMEM;
00252   unpME += -(gam + 3.)*sqrtgam1;
00253   unpME /= 4.*(gam2 - 1.);
00254 //   G4double longPart = - 2.*(gam*(gam + 4.) + 1.)*logMEM; 
00255 //   longPart += (gam*(gam + 4.) + 7.)*sqrtgam1;
00256 //   longPart /= 4.*sqr(gam - 1.)*(gam + 1.);
00257   G4double longPart = (3+gam*(gam*(gam + 1.) + 7.))*logMEM; 
00258   longPart += - (5.+ gam*(3*gam + 4.))*sqrtgam1;
00259   longPart /= 4.*sqr(gam - 1.)*(gam + 1.);
00260   G4double tranPart = -(5*gam + 1.)*logMEM;
00261   tranPart += (gam + 5.)*sqrtgam1;
00262   tranPart /= 4.*sqr(gam - 1.)*(gam + 1.);
00263                                    
00264   xs += unpME;
00265   xs += polzz*longPart;
00266   xs += (polxx + polyy)*tranPart;
00267 
00268   return xs*totalXSFactor;
00269 }

G4double G4PolarizedAnnihilationCrossSection::XSection ( const G4StokesVector pol2,
const G4StokesVector pol3 
) [virtual]

Implements G4VPolarizedCrossSection.

Definition at line 229 of file G4PolarizedAnnihilationCrossSection.cc.

00231 {
00232   G4double xs=phi0+pol2*phi2+pol3*phi3;
00233   return xs;
00234 }


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