Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/polarisation/src/G4PolarizedBremsstrahlungXS.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 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 // -------------------------------------------------------------------
 27 //
 28 // Geant4 class file
 29 //
 30 // File name:     G4PolarizedBremsstrahlungXS
 31 //
 32 // Author:        Andreas Schaelicke on the base of Karim Laihems code
 33 
 34 #include "G4PolarizedBremsstrahlungXS.hh"
 35 
 36 #include "G4PhysicalConstants.hh"
 37 
 38 G4double G4PolarizedBremsstrahlungXS::SCRN[2][19] = {
 39   { 0.5, 1.0, 2.0, 4.0, 8.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0,
 40     60.0, 70.0, 80.0, 90.0, 100.0, 120.0 },
 41   { 0.0145, 0.0490, 0.1400, 0.3312, 0.6758, 1.126, 1.367, 1.564, 1.731, 1.875,
 42     2.001, 2.114, 2.216, 2.393, 2.545, 2.676, 2.793, 2.897, 3.078 }
 43 };
 44 
 45 G4PolarizedBremsstrahlungXS::G4PolarizedBremsstrahlungXS()
 46 {
 47   fFinalLeptonPolarization = G4StokesVector::ZERO;
 48   fFinalGammaPolarization  = G4StokesVector::ZERO;
 49 }
 50 
 51 G4PolarizedBremsstrahlungXS::~G4PolarizedBremsstrahlungXS() {}
 52 
 53 void G4PolarizedBremsstrahlungXS::Initialize(G4double aLept0E, G4double aGammaE,
 54                                              G4double sintheta,
 55                                              const G4StokesVector& beamPol,
 56                                              const G4StokesVector& /*p1*/,
 57                                              G4int /*flag*/)
 58 {
 59   G4double aLept1E = aLept0E - aGammaE;
 60 
 61   G4double Stokes_S1 = beamPol.x();
 62   G4double Stokes_S2 = beamPol.y();
 63   G4double Stokes_S3 = beamPol.z();
 64 
 65   G4double Lept0E  = aLept0E / electron_mass_c2 + 1.;
 66   G4double Lept0E2 = Lept0E * Lept0E;
 67   G4double GammaE  = aGammaE / electron_mass_c2;
 68   G4double GammaE2 = GammaE * GammaE;
 69   G4double Lept1E  = aLept1E / electron_mass_c2 + 1.;
 70   G4double Lept1E2 = Lept1E * Lept1E;
 71 
 72   // *******  Gamma Transverse Momentum
 73   G4double TMom = std::sqrt(Lept0E2 - 1.) * sintheta;
 74   G4double u    = TMom;
 75   G4double u2   = u * u;
 76   G4double Xsi  = 1. / (1. + u2);
 77   G4double Xsi2 = Xsi * Xsi;
 78 
 79   G4double delta =
 80     12. * std::pow(fZ, 1. / 3.) * Lept0E * Lept1E * Xsi / (121. * GammaE);
 81 
 82   G4double GG = 0.;
 83   if(delta < 0.5)
 84   {
 85     GG = std::log(2. * Lept0E * Lept1E / GammaE) - 2. - fCoul;
 86   }
 87   else if(delta < 120)
 88   {
 89     for(G4int j = 1; j < 19; ++j)
 90     {
 91       if(SCRN[0][j] >= delta)
 92       {
 93         GG = std::log(2 * Lept0E * Lept1E / GammaE) - 2 - fCoul -
 94              (SCRN[1][j - 1] + (delta - SCRN[0][j - 1]) *
 95                                  (SCRN[1][j] - SCRN[1][j - 1]) /
 96                                  (SCRN[0][j] - SCRN[0][j - 1]));
 97         break;
 98       }
 99     }
100   }
101   else
102   {
103     G4double alpha_sc = (111. * std::pow(fZ, -1. / 3.)) / Xsi;
104     GG                = std::log(alpha_sc) - 2. - fCoul;
105   }
106 
107   if(GG < -1.)
108     GG = -1.;
109 
110   G4double I_Lept = (Lept0E2 + Lept1E2) * (3. + 2. * GG) -
111                     2 * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
112   G4double F_Lept =
113     Lept1E * 4. * GammaE * u * Xsi * (1. - 2 * Xsi) * GG / I_Lept;
114   G4double E_Lept =
115     Lept0E * 4. * GammaE * u * Xsi * (2. * Xsi - 1.) * GG / I_Lept;
116   G4double M_Lept =
117     4. * Lept0E * Lept1E * (1. + GG - 2. * Xsi2 * u2 * GG) / I_Lept;
118   G4double P_Lept =
119     GammaE2 * (1. + 8. * GG * (Xsi - 0.5) * (Xsi - 0.5)) / I_Lept;
120 
121   G4double Stokes_SS1 = M_Lept * Stokes_S1 + E_Lept * Stokes_S3;
122   G4double Stokes_SS2 = M_Lept * Stokes_S2;
123   G4double Stokes_SS3 = (M_Lept + P_Lept) * Stokes_S3 + F_Lept * Stokes_S1;
124 
125   fFinalLeptonPolarization.setX(Stokes_SS1);
126   fFinalLeptonPolarization.setY(Stokes_SS2);
127   fFinalLeptonPolarization.setZ(Stokes_SS3);
128 
129   if(fFinalLeptonPolarization.mag2() > 1.)
130   {
131     G4ExceptionDescription ed;
132     ed << " WARNING in pol-brem fFinalLeptonPolarization \n";
133     ed << "\t" << fFinalLeptonPolarization << "\t GG\t" << GG << "\t delta\t"
134        << delta;
135     G4Exception("G4PolarizedBremsstrahlungXS::Initialize", "pol014",
136                 JustWarning, ed);
137     fFinalLeptonPolarization.setX(0);
138     fFinalLeptonPolarization.setY(0);
139     fFinalLeptonPolarization.setZ(Stokes_SS3);
140     if(Stokes_SS3 > 1)
141       fFinalLeptonPolarization.setZ(1);
142   }
143 
144   G4double I_Gamma = (Lept0E2 + Lept1E2) * (3. + 2. * GG) -
145                      2. * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
146   G4double D_Gamma = 8. * Lept0E * Lept1E * u2 * Xsi2 * GG / I_Gamma;
147   G4double L_Gamma = GammaE *
148                      ((Lept0E + Lept1E) * (3. + 2. * GG) -
149                       2. * Lept1E * (1. + 4. * u2 * Xsi2 * GG)) /
150                      I_Gamma;
151   G4double T_Gamma =
152     4. * GammaE * Lept1E * Xsi * u * (2. * Xsi - 1.) * GG / I_Gamma;
153 
154   G4double Stokes_P1 = D_Gamma;
155   G4double Stokes_P2 = 0.;
156   G4double Stokes_P3 = (Stokes_S3 * L_Gamma + Stokes_S1 * T_Gamma);
157 
158   fFinalGammaPolarization.SetPhoton();
159 
160   fFinalGammaPolarization.setX(Stokes_P1);
161   fFinalGammaPolarization.setY(Stokes_P2);
162   fFinalGammaPolarization.setZ(Stokes_P3);
163 
164   if(fFinalGammaPolarization.mag2() > 1.)
165   {
166     G4ExceptionDescription ed;
167     ed << " WARNING in pol-brem fFinalGammaPolarization \n";
168     ed << "\t" << fFinalGammaPolarization << "\t GG\t" << GG << "\t delta\t"
169        << delta;
170     G4Exception("G4PolarizedBremsstrahlungXS::Initialize", "pol015",
171                 JustWarning, ed);
172   }
173 }
174 
175 G4double G4PolarizedBremsstrahlungXS::XSection(const G4StokesVector& /*pol2*/,
176                                                const G4StokesVector& /*pol3*/)
177 {
178   G4ExceptionDescription ed;
179   ed << "ERROR dummy routine G4PolarizedBremsstrahlungXS::XSection "
180         "called.\n";
181   G4Exception("G4PolarizedBremsstrahlungXS::XSection", "pol016", FatalException,
182               ed);
183 
184   return 0.;
185 }
186 
187 // return expected mean polarisation
188 G4StokesVector G4PolarizedBremsstrahlungXS::GetPol2()
189 {
190   // electron/positron
191   return fFinalLeptonPolarization;
192 }
193 
194 G4StokesVector G4PolarizedBremsstrahlungXS::GetPol3()
195 {
196   // photon
197   return fFinalGammaPolarization;
198 }
199