Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/polarisation/src/G4PolarizedAnnihilationXS.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/polarisation/src/G4PolarizedAnnihilationXS.cc (Version 11.3.0) and /processes/electromagnetic/polarisation/src/G4PolarizedAnnihilationXS.cc (Version 11.0.p2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // Geant4 Class file                               26 // Geant4 Class file
 27 //                                                 27 //
 28 // File name:     G4PolarizedAnnihilationXS        28 // File name:     G4PolarizedAnnihilationXS
 29 //                                                 29 //
 30 // Author:        Andreas Schaelicke               30 // Author:        Andreas Schaelicke
 31 //                                                 31 //
 32 // Class Description:                              32 // Class Description:
 33 //   * calculates the differential cross secti     33 //   * calculates the differential cross section in e+e- -> gamma gamma
 34                                                    34 
 35 #include "G4PolarizedAnnihilationXS.hh"            35 #include "G4PolarizedAnnihilationXS.hh"
 36                                                    36 
 37 #include "G4PhysicalConstants.hh"                  37 #include "G4PhysicalConstants.hh"
 38                                                    38 
 39 G4PolarizedAnnihilationXS::G4PolarizedAnnihila     39 G4PolarizedAnnihilationXS::G4PolarizedAnnihilationXS()
 40   : polxx(0.)                                      40   : polxx(0.)
 41   , polyy(0.)                                      41   , polyy(0.)
 42   , polzz(0.)                                      42   , polzz(0.)
 43   , polxz(0.)                                      43   , polxz(0.)
 44   , polzx(0.)                                      44   , polzx(0.)
 45   , polxy(0.)                                      45   , polxy(0.)
 46   , polyx(0.)                                      46   , polyx(0.)
 47   , polyz(0.)                                      47   , polyz(0.)
 48   , polzy(0.)                                      48   , polzy(0.)
 49   , fPhi0(0.)                                      49   , fPhi0(0.)
 50 {                                                  50 {
 51   fPhi2  = G4ThreeVector(0., 0., 0.);              51   fPhi2  = G4ThreeVector(0., 0., 0.);
 52   fPhi3  = G4ThreeVector(0., 0., 0.);              52   fPhi3  = G4ThreeVector(0., 0., 0.);
 53   fDice  = 0.;                                     53   fDice  = 0.;
 54   fPolXS = 0.;                                     54   fPolXS = 0.;
 55   fUnpXS = 0.;                                     55   fUnpXS = 0.;
 56   ISPxx = ISPyy = ISPzz = ISPnd = 0.;              56   ISPxx = ISPyy = ISPzz = ISPnd = 0.;
 57 }                                                  57 }
 58                                                    58 
 59 //....oooOO0OOooo........oooOO0OOooo........oo     59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 60 G4PolarizedAnnihilationXS::~G4PolarizedAnnihil     60 G4PolarizedAnnihilationXS::~G4PolarizedAnnihilationXS() {}
 61                                                    61 
 62 //....oooOO0OOooo........oooOO0OOooo........oo     62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 63 void G4PolarizedAnnihilationXS::TotalXS()          63 void G4PolarizedAnnihilationXS::TotalXS()
 64 {                                                  64 {
 65   // total cross section is sum of                 65   // total cross section is sum of
 66   //  + unpol xsec  "sigma0"                       66   //  + unpol xsec  "sigma0"
 67   //  + longitudinal polarised cross section "     67   //  + longitudinal polarised cross section "sigma_zz" times
 68   //  pol_3(e-)*pol_3(e+)                          68   //  pol_3(e-)*pol_3(e+)
 69   //  + transverse contribution "(sigma_xx+sig     69   //  + transverse contribution "(sigma_xx+sigma_yy)/2" times
 70   //  pol_T(e-)*pol_T(e+)                          70   //  pol_T(e-)*pol_T(e+)
 71   //     (Note: if both beams are transversely     71   //     (Note: if both beams are transversely polarised, i.e. pol_T(e-)!=0 and
 72   //      pol_T(e+)!=0, and sigma_xx!=sigma_yy     72   //      pol_T(e+)!=0, and sigma_xx!=sigma_yy, then the diff. cross section
 73   //      will exhibit a azimuthal asymmetry e     73   //      will exhibit a azimuthal asymmetry even if pol_T(e-)*pol_T(e+)==0)
 74 }                                                  74 }
 75                                                    75 
 76 //....oooOO0OOooo........oooOO0OOooo........oo     76 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 77 void G4PolarizedAnnihilationXS::Initialize(        77 void G4PolarizedAnnihilationXS::Initialize(
 78   G4double eps, G4double gam,                      78   G4double eps, G4double gam,
 79   G4double,                    // phi              79   G4double,                    // phi
 80   const G4StokesVector& pol0,  // positron pol     80   const G4StokesVector& pol0,  // positron polarization
 81   const G4StokesVector& pol1,  // electron pol     81   const G4StokesVector& pol1,  // electron polarization
 82   G4int flag)                                      82   G4int flag)
 83 {                                                  83 {
 84   G4double diffXSFactor = re2 / (gam - 1.);        84   G4double diffXSFactor = re2 / (gam - 1.);
 85   DefineCoefficients(pol0, pol1);                  85   DefineCoefficients(pol0, pol1);
 86                                                    86 
 87   // prepare dicing                                87   // prepare dicing
 88   fDice = 0.;                                      88   fDice = 0.;
 89   G4double symmXS =                                89   G4double symmXS =
 90     0.125 * ((-1. / sqr(gam + 1.)) / sqr(eps)      90     0.125 * ((-1. / sqr(gam + 1.)) / sqr(eps) +
 91              ((sqr(gam) + 4. * gam - 1.) / sqr     91              ((sqr(gam) + 4. * gam - 1.) / sqr(gam + 1.)) / eps - 1.);
 92                                                    92 
 93   G4ThreeVector epsVector(1. / sqr(eps), 1. /      93   G4ThreeVector epsVector(1. / sqr(eps), 1. / eps, 1.);
 94   G4ThreeVector oneEpsVector(1. / sqr(1. - eps     94   G4ThreeVector oneEpsVector(1. / sqr(1. - eps), 1. / (1. - eps), 1.);
 95   G4ThreeVector sumEpsVector(epsVector + oneEp     95   G4ThreeVector sumEpsVector(epsVector + oneEpsVector);
 96   G4ThreeVector difEpsVector(epsVector - oneEp     96   G4ThreeVector difEpsVector(epsVector - oneEpsVector);
 97   G4ThreeVector calcVector(0., 0., 0.);            97   G4ThreeVector calcVector(0., 0., 0.);
 98                                                    98 
 99   // temporary variables                           99   // temporary variables
100   G4double helpVar2 = 0., helpVar1 = 0.;          100   G4double helpVar2 = 0., helpVar1 = 0.;
101                                                   101 
102   // unpolarised contribution                     102   // unpolarised contribution
103   helpVar1   = (gam * gam + 4. * gam + 1.) / s    103   helpVar1   = (gam * gam + 4. * gam + 1.) / sqr(gam + 1.);
104   helpVar2   = -1. / sqr(gam + 1.);               104   helpVar2   = -1. / sqr(gam + 1.);
105   calcVector = G4ThreeVector(helpVar2, helpVar    105   calcVector = G4ThreeVector(helpVar2, helpVar1, -1.);
106   fUnpXS     = 0.125 * calcVector * sumEpsVect    106   fUnpXS     = 0.125 * calcVector * sumEpsVector;
107                                                   107 
108   // initial particles polarised contribution     108   // initial particles polarised contribution
109   helpVar2   = 1. / sqr(gam + 1.);                109   helpVar2   = 1. / sqr(gam + 1.);
110   helpVar1   = -(gam * gam + 4. * gam + 1.) /     110   helpVar1   = -(gam * gam + 4. * gam + 1.) / sqr(gam + 1.);
111   calcVector = G4ThreeVector(helpVar2, helpVar    111   calcVector = G4ThreeVector(helpVar2, helpVar1, 0.5 * (gam + 3.));
112   ISPxx      = 0.25 * (calcVector * sumEpsVect    112   ISPxx      = 0.25 * (calcVector * sumEpsVector) / (gam - 1.);
113                                                   113 
114   helpVar1   = 1. / sqr(gam + 1.);                114   helpVar1   = 1. / sqr(gam + 1.);
115   calcVector = G4ThreeVector(-helpVar1, 2. * g    115   calcVector = G4ThreeVector(-helpVar1, 2. * gam * helpVar1, -1.);
116   ISPyy      = 0.125 * calcVector * sumEpsVect    116   ISPyy      = 0.125 * calcVector * sumEpsVector;
117                                                   117 
118   helpVar1   = 1. / (gam - 1.);                   118   helpVar1   = 1. / (gam - 1.);
119   helpVar2   = 1. / sqr(gam + 1.);                119   helpVar2   = 1. / sqr(gam + 1.);
120   calcVector = G4ThreeVector(                     120   calcVector = G4ThreeVector(
121     -(gam * gam + 1.) * helpVar2,                 121     -(gam * gam + 1.) * helpVar2,
122     (gam * gam * (gam + 1.) + 7. * gam + 3.) *    122     (gam * gam * (gam + 1.) + 7. * gam + 3.) * helpVar2, -(gam + 3.));
123   ISPzz = 0.125 * helpVar1 * (calcVector * sum    123   ISPzz = 0.125 * helpVar1 * (calcVector * sumEpsVector);
124                                                   124 
125   helpVar1   = std::sqrt(std::fabs(eps * (1. -    125   helpVar1   = std::sqrt(std::fabs(eps * (1. - eps) * 2. * (gam + 1.) - 1.));
126   calcVector = G4ThreeVector(-1. / (gam * gam     126   calcVector = G4ThreeVector(-1. / (gam * gam - 1.), 2. / (gam - 1.), 0.);
127   ISPnd      = 0.125 * (calcVector * difEpsVec    127   ISPnd      = 0.125 * (calcVector * difEpsVector) * helpVar1;
128                                                   128 
129   fPolXS = ISPxx * polxx + ISPyy * polyy + ISP    129   fPolXS = ISPxx * polxx + ISPyy * polyy + ISPzz * polzz;
130   fPolXS += ISPnd * (polzx + polxz);              130   fPolXS += ISPnd * (polzx + polxz);
131   fPhi0 = fUnpXS + fPolXS;                        131   fPhi0 = fUnpXS + fPolXS;
132   fDice = symmXS;                                 132   fDice = symmXS;
133                                                   133 
134   if(polzz != 0.)                                 134   if(polzz != 0.)
135   {                                               135   {
136     fDice *= (1. + (polzz * ISPzz / fUnpXS));     136     fDice *= (1. + (polzz * ISPzz / fUnpXS));
137     if(fDice < 0.)                                137     if(fDice < 0.)
138       fDice = 0.;                                 138       fDice = 0.;
139   }                                               139   }
140   // prepare final state coefficients             140   // prepare final state coefficients
141   if(flag == 2)                                   141   if(flag == 2)
142   {                                               142   {
143     // circular polarisation                      143     // circular polarisation
144     G4double circ1 = 0., circ2 = 0., circ3 = 0    144     G4double circ1 = 0., circ2 = 0., circ3 = 0.;
145     helpVar1 = 8. * sqr(1. - eps) * sqr(eps) *    145     helpVar1 = 8. * sqr(1. - eps) * sqr(eps) * (gam - 1.) * sqr(gam + 1.) /
146                std::sqrt(gam * gam - 1.);         146                std::sqrt(gam * gam - 1.);
147     helpVar2 = sqr(gam + 1.) * sqr(eps) * (-2.    147     helpVar2 = sqr(gam + 1.) * sqr(eps) * (-2. * eps + 3.) -
148                (gam * gam + 3. * gam + 2.) * e    148                (gam * gam + 3. * gam + 2.) * eps;
149     circ1 = helpVar2 + gam;                       149     circ1 = helpVar2 + gam;
150     circ1 /= helpVar1;                            150     circ1 /= helpVar1;
151     circ2 = helpVar2 + 1.;                        151     circ2 = helpVar2 + 1.;
152     circ2 /= helpVar1;                            152     circ2 /= helpVar1;
153     helpVar1 = std::sqrt(std::fabs(eps * (1. -    153     helpVar1 = std::sqrt(std::fabs(eps * (1. - eps) * 2. * (gam + 1.) - 1.));
154     helpVar1 /= std::sqrt(gam * gam - 1.);        154     helpVar1 /= std::sqrt(gam * gam - 1.);
155     calcVector = G4ThreeVector(1., -2. * gam,     155     calcVector = G4ThreeVector(1., -2. * gam, 0.);
156     circ3      = 0.125 * (calcVector * sumEpsV    156     circ3      = 0.125 * (calcVector * sumEpsVector) / (gam + 1.);
157     circ3 *= helpVar1;                            157     circ3 *= helpVar1;
158                                                   158 
159     fPhi2.setZ(circ2 * pol1.z() + circ1 * pol0    159     fPhi2.setZ(circ2 * pol1.z() + circ1 * pol0.z() +
160                circ3 * (pol1.x() + pol0.x()));    160                circ3 * (pol1.x() + pol0.x()));
161     fPhi3.setZ(-circ1 * pol1.z() - circ2 * pol    161     fPhi3.setZ(-circ1 * pol1.z() - circ2 * pol0.z() -
162                circ3 * (pol1.x() + pol0.x()));    162                circ3 * (pol1.x() + pol0.x()));
163                                                   163 
164     // common to both linear polarisation         164     // common to both linear polarisation
165     calcVector          = G4ThreeVector(-1., 2    165     calcVector          = G4ThreeVector(-1., 2. * gam, 0.);
166     G4double linearZero = 0.125 * (calcVector     166     G4double linearZero = 0.125 * (calcVector * sumEpsVector) / sqr(gam + 1.);
167                                                   167 
168     //        Linear Polarisation #1              168     //        Linear Polarisation #1
169     helpVar1 = std::sqrt(std::fabs(2. * (gam +    169     helpVar1 = std::sqrt(std::fabs(2. * (gam + 1.) * (1. - eps) * eps - 1.)) /
170                ((gam + 1.) * eps * (1. - eps))    170                ((gam + 1.) * eps * (1. - eps));
171     helpVar2 = helpVar1 * helpVar1;               171     helpVar2 = helpVar1 * helpVar1;
172                                                   172 
173     // photon 1                                   173     // photon 1
174     G4double diagContrib = 0.125 * helpVar2 *     174     G4double diagContrib = 0.125 * helpVar2 * (polxx + polyy - polzz);
175     G4double nonDiagContrib =                     175     G4double nonDiagContrib =
176       0.125 * helpVar1 * (-polxz / (1. - eps)     176       0.125 * helpVar1 * (-polxz / (1. - eps) + polzx / eps);
177                                                   177 
178     fPhi2.setX(linearZero + diagContrib + nonD    178     fPhi2.setX(linearZero + diagContrib + nonDiagContrib);
179                                                   179 
180     // photon 2                                   180     // photon 2
181     nonDiagContrib = 0.125 * helpVar1 * (polxz    181     nonDiagContrib = 0.125 * helpVar1 * (polxz / eps - polzx / (1. - eps));
182                                                   182 
183     fPhi3.setX(linearZero + diagContrib + nonD    183     fPhi3.setX(linearZero + diagContrib + nonDiagContrib);
184                                                   184 
185     //        Linear Polarisation #2              185     //        Linear Polarisation #2
186     helpVar1 =                                    186     helpVar1 =
187       std::sqrt(gam * gam - 1.) * (2. * (gam +    187       std::sqrt(gam * gam - 1.) * (2. * (gam + 1.) * eps * (1. - eps) - 1.);
188     helpVar1 /= 8. * sqr(1. - eps) * sqr(eps)     188     helpVar1 /= 8. * sqr(1. - eps) * sqr(eps) * sqr(gam + 1.) * (gam - 1.);
189     helpVar2 = std::sqrt((gam * gam - 1.) *       189     helpVar2 = std::sqrt((gam * gam - 1.) *
190                          std::fabs(2. * (gam +    190                          std::fabs(2. * (gam + 1.) * eps * (1. - eps) - 1.));
191     helpVar2 /= 8. * sqr(1. - eps) * sqr(eps)     191     helpVar2 /= 8. * sqr(1. - eps) * sqr(eps) * sqr(gam + 1.) * (gam - 1.);
192                                                   192 
193     G4double contrib21 = (-polxy + polyx) * he    193     G4double contrib21 = (-polxy + polyx) * helpVar1;
194     G4double contrib32 =                          194     G4double contrib32 =
195       -(eps * (gam + 1.) - 1.) * polyz + (eps     195       -(eps * (gam + 1.) - 1.) * polyz + (eps * (gam + 1.) - gam) * polzy;
196                                                   196 
197     contrib32 *= helpVar2;                        197     contrib32 *= helpVar2;
198     fPhi2.setY(contrib21 + contrib32);            198     fPhi2.setY(contrib21 + contrib32);
199                                                   199 
200     contrib32 =                                   200     contrib32 =
201       -(eps * (gam + 1.) - gam) * polyz + (eps    201       -(eps * (gam + 1.) - gam) * polyz + (eps * (gam + 1.) - 1.) * polzy;
202     contrib32 *= helpVar2;                        202     contrib32 *= helpVar2;
203     fPhi3.setY(contrib21 + contrib32);            203     fPhi3.setY(contrib21 + contrib32);
204   }                                               204   }
205   fPhi0 *= diffXSFactor;                          205   fPhi0 *= diffXSFactor;
206   fPhi2 *= diffXSFactor;                          206   fPhi2 *= diffXSFactor;
207   fPhi3 *= diffXSFactor;                          207   fPhi3 *= diffXSFactor;
208 }                                                 208 }
209                                                   209 
210 //....oooOO0OOooo........oooOO0OOooo........oo    210 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
211 G4double G4PolarizedAnnihilationXS::XSection(c    211 G4double G4PolarizedAnnihilationXS::XSection(const G4StokesVector& pol2,
212                                              c    212                                              const G4StokesVector& pol3)
213 {                                                 213 {
214   G4double xs = fPhi0 + pol2 * fPhi2 + pol3 *     214   G4double xs = fPhi0 + pol2 * fPhi2 + pol3 * fPhi3;
215   return xs;                                      215   return xs;
216 }                                                 216 }
217                                                   217 
218 // calculate total cross section                  218 // calculate total cross section
219 //....oooOO0OOooo........oooOO0OOooo........oo    219 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
220 G4double G4PolarizedAnnihilationXS::TotalXSect    220 G4double G4PolarizedAnnihilationXS::TotalXSection(G4double, G4double,
221                                                   221                                                   G4double gam,
222                                                   222                                                   const G4StokesVector& pol0,
223                                                   223                                                   const G4StokesVector& pol1)
224 {                                                 224 {
225   G4double totalXSFactor = pi * re2 / (gam + 1    225   G4double totalXSFactor = pi * re2 / (gam + 1.);  // atomic number ignored
226   DefineCoefficients(pol0, pol1);                 226   DefineCoefficients(pol0, pol1);
227                                                   227 
228   G4double xs = 0.;                               228   G4double xs = 0.;
229                                                   229 
230   G4double gam2     = gam * gam;                  230   G4double gam2     = gam * gam;
231   G4double sqrtgam1 = std::sqrt(gam2 - 1.);       231   G4double sqrtgam1 = std::sqrt(gam2 - 1.);
232   G4double logMEM   = std::log(gam + sqrtgam1)    232   G4double logMEM   = std::log(gam + sqrtgam1);
233   G4double unpME    = (gam * (gam + 4.) + 1.)     233   G4double unpME    = (gam * (gam + 4.) + 1.) * logMEM;
234   unpME += -(gam + 3.) * sqrtgam1;                234   unpME += -(gam + 3.) * sqrtgam1;
235   unpME /= 4. * (gam2 - 1.);                      235   unpME /= 4. * (gam2 - 1.);
236   G4double longPart = (3 + gam * (gam * (gam +    236   G4double longPart = (3 + gam * (gam * (gam + 1.) + 7.)) * logMEM;
237   longPart += -(5. + gam * (3 * gam + 4.)) * s    237   longPart += -(5. + gam * (3 * gam + 4.)) * sqrtgam1;
238   longPart /= 4. * sqr(gam - 1.) * (gam + 1.);    238   longPart /= 4. * sqr(gam - 1.) * (gam + 1.);
239   G4double tranPart = -(5 * gam + 1.) * logMEM    239   G4double tranPart = -(5 * gam + 1.) * logMEM;
240   tranPart += (gam + 5.) * sqrtgam1;              240   tranPart += (gam + 5.) * sqrtgam1;
241   tranPart /= 4. * sqr(gam - 1.) * (gam + 1.);    241   tranPart /= 4. * sqr(gam - 1.) * (gam + 1.);
242                                                   242 
243   xs += unpME;                                    243   xs += unpME;
244   xs += polzz * longPart;                         244   xs += polzz * longPart;
245   xs += (polxx + polyy) * tranPart;               245   xs += (polxx + polyy) * tranPart;
246                                                   246 
247   return xs * totalXSFactor;                      247   return xs * totalXSFactor;
248 }                                                 248 }
249                                                   249 
250 //....oooOO0OOooo........oooOO0OOooo........oo    250 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
251 G4StokesVector G4PolarizedAnnihilationXS::GetP    251 G4StokesVector G4PolarizedAnnihilationXS::GetPol2()
252 {                                                 252 {
253   // Note, mean polarization can not contain c    253   // Note, mean polarization can not contain correlation effects.
254   return G4StokesVector(1. / fPhi0 * fPhi2);      254   return G4StokesVector(1. / fPhi0 * fPhi2);
255 }                                                 255 }
256                                                   256 
257 //....oooOO0OOooo........oooOO0OOooo........oo    257 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
258 G4StokesVector G4PolarizedAnnihilationXS::GetP    258 G4StokesVector G4PolarizedAnnihilationXS::GetPol3()
259 {                                                 259 {
260   // Note, mean polarization can not contain c    260   // Note, mean polarization can not contain correlation effects.
261   return G4StokesVector(1. / fPhi0 * fPhi3);      261   return G4StokesVector(1. / fPhi0 * fPhi3);
262 }                                                 262 }
263 //....oooOO0OOooo........oooOO0OOooo........oo    263 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
264 void G4PolarizedAnnihilationXS::DefineCoeffici    264 void G4PolarizedAnnihilationXS::DefineCoefficients(const G4StokesVector& pol0,
265                                                   265                                                    const G4StokesVector& pol1)
266 {                                                 266 {
267   polxx = pol0.x() * pol1.x();                    267   polxx = pol0.x() * pol1.x();
268   polyy = pol0.y() * pol1.y();                    268   polyy = pol0.y() * pol1.y();
269   polzz = pol0.z() * pol1.z();                    269   polzz = pol0.z() * pol1.z();
270                                                   270 
271   polxz = pol0.x() * pol1.z();                    271   polxz = pol0.x() * pol1.z();
272   polzx = pol0.z() * pol1.x();                    272   polzx = pol0.z() * pol1.x();
273                                                   273 
274   polyz = pol0.y() * pol1.z();                    274   polyz = pol0.y() * pol1.z();
275   polzy = pol0.z() * pol1.y();                    275   polzy = pol0.z() * pol1.y();
276                                                   276 
277   polxy = pol0.x() * pol1.y();                    277   polxy = pol0.x() * pol1.y();
278   polyx = pol0.y() * pol1.x();                    278   polyx = pol0.y() * pol1.x();
279 }                                                 279 }
280                                                   280 
281 //....oooOO0OOooo........oooOO0OOooo........oo    281 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
282 G4double G4PolarizedAnnihilationXS::GetXmin(G4    282 G4double G4PolarizedAnnihilationXS::GetXmin(G4double y)
283 {                                                 283 {
284   return 0.5 * (1. - std::sqrt((y - 1.) / (y +    284   return 0.5 * (1. - std::sqrt((y - 1.) / (y + 1.)));
285 }                                                 285 }
286                                                   286 
287 //....oooOO0OOooo........oooOO0OOooo........oo    287 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
288 G4double G4PolarizedAnnihilationXS::GetXmax(G4    288 G4double G4PolarizedAnnihilationXS::GetXmax(G4double y)
289 {                                                 289 {
290   return 0.5 * (1. + std::sqrt((y - 1.) / (y +    290   return 0.5 * (1. + std::sqrt((y - 1.) / (y + 1.)));
291 }                                                 291 }
292                                                   292 
293 //....oooOO0OOooo........oooOO0OOooo........oo    293 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
294 G4double G4PolarizedAnnihilationXS::DiceEpsilo    294 G4double G4PolarizedAnnihilationXS::DiceEpsilon() { return fDice; }
295                                                   295 
296 //....oooOO0OOooo........oooOO0OOooo........oo    296 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
297 G4double G4PolarizedAnnihilationXS::getVar(G4i    297 G4double G4PolarizedAnnihilationXS::getVar(G4int choice)
298 {                                                 298 {
299   if(choice == -1)                                299   if(choice == -1)
300     return fPolXS / fUnpXS;                       300     return fPolXS / fUnpXS;
301   if(choice == 0)                                 301   if(choice == 0)
302     return fUnpXS;                                302     return fUnpXS;
303   if(choice == 1)                                 303   if(choice == 1)
304     return ISPxx;                                 304     return ISPxx;
305   if(choice == 2)                                 305   if(choice == 2)
306     return ISPyy;                                 306     return ISPyy;
307   if(choice == 3)                                 307   if(choice == 3)
308     return ISPzz;                                 308     return ISPzz;
309   if(choice == 4)                                 309   if(choice == 4)
310     return ISPnd;                                 310     return ISPnd;
311   return 0;                                       311   return 0;
312 }                                                 312 }
313                                                   313