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 ]

Diff markup

Differences between /processes/electromagnetic/polarisation/src/G4PolarizedBremsstrahlungXS.cc (Version 11.3.0) and /processes/electromagnetic/polarisation/src/G4PolarizedBremsstrahlungXS.cc (Version 11.1.1)


  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 // -------------------------------------------     26 // -------------------------------------------------------------------
 27 //                                                 27 //
 28 // Geant4 class file                               28 // Geant4 class file
 29 //                                                 29 //
 30 // File name:     G4PolarizedBremsstrahlungXS      30 // File name:     G4PolarizedBremsstrahlungXS
 31 //                                                 31 //
 32 // Author:        Andreas Schaelicke on the ba     32 // Author:        Andreas Schaelicke on the base of Karim Laihems code
 33                                                    33 
 34 #include "G4PolarizedBremsstrahlungXS.hh"          34 #include "G4PolarizedBremsstrahlungXS.hh"
 35                                                    35 
 36 #include "G4PhysicalConstants.hh"                  36 #include "G4PhysicalConstants.hh"
 37                                                    37 
 38 G4double G4PolarizedBremsstrahlungXS::SCRN[2][     38 G4double G4PolarizedBremsstrahlungXS::SCRN[2][19] = {
 39   { 0.5, 1.0, 2.0, 4.0, 8.0, 15.0, 20.0, 25.0,     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 },        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.     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,      42     2.001, 2.114, 2.216, 2.393, 2.545, 2.676, 2.793, 2.897, 3.078 }
 43 };                                                 43 };
 44                                                    44 
 45 G4PolarizedBremsstrahlungXS::G4PolarizedBremss     45 G4PolarizedBremsstrahlungXS::G4PolarizedBremsstrahlungXS()
 46 {                                                  46 {
 47   fFinalLeptonPolarization = G4StokesVector::Z     47   fFinalLeptonPolarization = G4StokesVector::ZERO;
 48   fFinalGammaPolarization  = G4StokesVector::Z     48   fFinalGammaPolarization  = G4StokesVector::ZERO;
 49 }                                                  49 }
 50                                                    50 
 51 G4PolarizedBremsstrahlungXS::~G4PolarizedBrems     51 G4PolarizedBremsstrahlungXS::~G4PolarizedBremsstrahlungXS() {}
 52                                                    52 
 53 void G4PolarizedBremsstrahlungXS::Initialize(G     53 void G4PolarizedBremsstrahlungXS::Initialize(G4double aLept0E, G4double aGammaE,
 54                                              G     54                                              G4double sintheta,
 55                                              c     55                                              const G4StokesVector& beamPol,
 56                                              c     56                                              const G4StokesVector& /*p1*/,
 57                                              G     57                                              G4int /*flag*/)
 58 {                                                  58 {
 59   G4double aLept1E = aLept0E - aGammaE;            59   G4double aLept1E = aLept0E - aGammaE;
 60                                                    60 
 61   G4double Stokes_S1 = beamPol.x();                61   G4double Stokes_S1 = beamPol.x();
 62   G4double Stokes_S2 = beamPol.y();                62   G4double Stokes_S2 = beamPol.y();
 63   G4double Stokes_S3 = beamPol.z();                63   G4double Stokes_S3 = beamPol.z();
 64                                                    64 
 65   G4double Lept0E  = aLept0E / electron_mass_c     65   G4double Lept0E  = aLept0E / electron_mass_c2 + 1.;
 66   G4double Lept0E2 = Lept0E * Lept0E;              66   G4double Lept0E2 = Lept0E * Lept0E;
 67   G4double GammaE  = aGammaE / electron_mass_c     67   G4double GammaE  = aGammaE / electron_mass_c2;
 68   G4double GammaE2 = GammaE * GammaE;              68   G4double GammaE2 = GammaE * GammaE;
 69   G4double Lept1E  = aLept1E / electron_mass_c     69   G4double Lept1E  = aLept1E / electron_mass_c2 + 1.;
 70   G4double Lept1E2 = Lept1E * Lept1E;              70   G4double Lept1E2 = Lept1E * Lept1E;
 71                                                    71 
 72   // *******  Gamma Transverse Momentum            72   // *******  Gamma Transverse Momentum
 73   G4double TMom = std::sqrt(Lept0E2 - 1.) * si     73   G4double TMom = std::sqrt(Lept0E2 - 1.) * sintheta;
 74   G4double u    = TMom;                            74   G4double u    = TMom;
 75   G4double u2   = u * u;                           75   G4double u2   = u * u;
 76   G4double Xsi  = 1. / (1. + u2);                  76   G4double Xsi  = 1. / (1. + u2);
 77   G4double Xsi2 = Xsi * Xsi;                       77   G4double Xsi2 = Xsi * Xsi;
 78                                                    78 
 79   G4double delta =                                 79   G4double delta =
 80     12. * std::pow(fZ, 1. / 3.) * Lept0E * Lep     80     12. * std::pow(fZ, 1. / 3.) * Lept0E * Lept1E * Xsi / (121. * GammaE);
 81                                                    81 
 82   G4double GG = 0.;                                82   G4double GG = 0.;
 83   if(delta < 0.5)                                  83   if(delta < 0.5)
 84   {                                                84   {
 85     GG = std::log(2. * Lept0E * Lept1E / Gamma     85     GG = std::log(2. * Lept0E * Lept1E / GammaE) - 2. - fCoul;
 86   }                                                86   }
 87   else if(delta < 120)                             87   else if(delta < 120)
 88   {                                                88   {
 89     for(G4int j = 1; j < 19; ++j)                  89     for(G4int j = 1; j < 19; ++j)
 90     {                                              90     {
 91       if(SCRN[0][j] >= delta)                      91       if(SCRN[0][j] >= delta)
 92       {                                            92       {
 93         GG = std::log(2 * Lept0E * Lept1E / Ga     93         GG = std::log(2 * Lept0E * Lept1E / GammaE) - 2 - fCoul -
 94              (SCRN[1][j - 1] + (delta - SCRN[0     94              (SCRN[1][j - 1] + (delta - SCRN[0][j - 1]) *
 95                                  (SCRN[1][j] -     95                                  (SCRN[1][j] - SCRN[1][j - 1]) /
 96                                  (SCRN[0][j] -     96                                  (SCRN[0][j] - SCRN[0][j - 1]));
 97         break;                                     97         break;
 98       }                                            98       }
 99     }                                              99     }
100   }                                               100   }
101   else                                            101   else
102   {                                               102   {
103     G4double alpha_sc = (111. * std::pow(fZ, -    103     G4double alpha_sc = (111. * std::pow(fZ, -1. / 3.)) / Xsi;
104     GG                = std::log(alpha_sc) - 2    104     GG                = std::log(alpha_sc) - 2. - fCoul;
105   }                                               105   }
106                                                   106 
107   if(GG < -1.)                                    107   if(GG < -1.)
108     GG = -1.;                                     108     GG = -1.;
109                                                   109 
110   G4double I_Lept = (Lept0E2 + Lept1E2) * (3.     110   G4double I_Lept = (Lept0E2 + Lept1E2) * (3. + 2. * GG) -
111                     2 * Lept0E * Lept1E * (1.     111                     2 * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
112   G4double F_Lept =                               112   G4double F_Lept =
113     Lept1E * 4. * GammaE * u * Xsi * (1. - 2 *    113     Lept1E * 4. * GammaE * u * Xsi * (1. - 2 * Xsi) * GG / I_Lept;
114   G4double E_Lept =                               114   G4double E_Lept =
115     Lept0E * 4. * GammaE * u * Xsi * (2. * Xsi    115     Lept0E * 4. * GammaE * u * Xsi * (2. * Xsi - 1.) * GG / I_Lept;
116   G4double M_Lept =                               116   G4double M_Lept =
117     4. * Lept0E * Lept1E * (1. + GG - 2. * Xsi    117     4. * Lept0E * Lept1E * (1. + GG - 2. * Xsi2 * u2 * GG) / I_Lept;
118   G4double P_Lept =                               118   G4double P_Lept =
119     GammaE2 * (1. + 8. * GG * (Xsi - 0.5) * (X    119     GammaE2 * (1. + 8. * GG * (Xsi - 0.5) * (Xsi - 0.5)) / I_Lept;
120                                                   120 
121   G4double Stokes_SS1 = M_Lept * Stokes_S1 + E    121   G4double Stokes_SS1 = M_Lept * Stokes_S1 + E_Lept * Stokes_S3;
122   G4double Stokes_SS2 = M_Lept * Stokes_S2;       122   G4double Stokes_SS2 = M_Lept * Stokes_S2;
123   G4double Stokes_SS3 = (M_Lept + P_Lept) * St    123   G4double Stokes_SS3 = (M_Lept + P_Lept) * Stokes_S3 + F_Lept * Stokes_S1;
124                                                   124 
125   fFinalLeptonPolarization.setX(Stokes_SS1);      125   fFinalLeptonPolarization.setX(Stokes_SS1);
126   fFinalLeptonPolarization.setY(Stokes_SS2);      126   fFinalLeptonPolarization.setY(Stokes_SS2);
127   fFinalLeptonPolarization.setZ(Stokes_SS3);      127   fFinalLeptonPolarization.setZ(Stokes_SS3);
128                                                   128 
129   if(fFinalLeptonPolarization.mag2() > 1.)        129   if(fFinalLeptonPolarization.mag2() > 1.)
130   {                                               130   {
131     G4ExceptionDescription ed;                    131     G4ExceptionDescription ed;
132     ed << " WARNING in pol-brem fFinalLeptonPo    132     ed << " WARNING in pol-brem fFinalLeptonPolarization \n";
133     ed << "\t" << fFinalLeptonPolarization <<     133     ed << "\t" << fFinalLeptonPolarization << "\t GG\t" << GG << "\t delta\t"
134        << delta;                                  134        << delta;
135     G4Exception("G4PolarizedBremsstrahlungXS::    135     G4Exception("G4PolarizedBremsstrahlungXS::Initialize", "pol014",
136                 JustWarning, ed);                 136                 JustWarning, ed);
137     fFinalLeptonPolarization.setX(0);             137     fFinalLeptonPolarization.setX(0);
138     fFinalLeptonPolarization.setY(0);             138     fFinalLeptonPolarization.setY(0);
139     fFinalLeptonPolarization.setZ(Stokes_SS3);    139     fFinalLeptonPolarization.setZ(Stokes_SS3);
140     if(Stokes_SS3 > 1)                            140     if(Stokes_SS3 > 1)
141       fFinalLeptonPolarization.setZ(1);           141       fFinalLeptonPolarization.setZ(1);
142   }                                               142   }
143                                                   143 
144   G4double I_Gamma = (Lept0E2 + Lept1E2) * (3.    144   G4double I_Gamma = (Lept0E2 + Lept1E2) * (3. + 2. * GG) -
145                      2. * Lept0E * Lept1E * (1    145                      2. * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
146   G4double D_Gamma = 8. * Lept0E * Lept1E * u2    146   G4double D_Gamma = 8. * Lept0E * Lept1E * u2 * Xsi2 * GG / I_Gamma;
147   G4double L_Gamma = GammaE *                     147   G4double L_Gamma = GammaE *
148                      ((Lept0E + Lept1E) * (3.     148                      ((Lept0E + Lept1E) * (3. + 2. * GG) -
149                       2. * Lept1E * (1. + 4. *    149                       2. * Lept1E * (1. + 4. * u2 * Xsi2 * GG)) /
150                      I_Gamma;                     150                      I_Gamma;
151   G4double T_Gamma =                              151   G4double T_Gamma =
152     4. * GammaE * Lept1E * Xsi * u * (2. * Xsi    152     4. * GammaE * Lept1E * Xsi * u * (2. * Xsi - 1.) * GG / I_Gamma;
153                                                   153 
154   G4double Stokes_P1 = D_Gamma;                   154   G4double Stokes_P1 = D_Gamma;
155   G4double Stokes_P2 = 0.;                        155   G4double Stokes_P2 = 0.;
156   G4double Stokes_P3 = (Stokes_S3 * L_Gamma +     156   G4double Stokes_P3 = (Stokes_S3 * L_Gamma + Stokes_S1 * T_Gamma);
157                                                   157 
158   fFinalGammaPolarization.SetPhoton();            158   fFinalGammaPolarization.SetPhoton();
159                                                   159 
160   fFinalGammaPolarization.setX(Stokes_P1);        160   fFinalGammaPolarization.setX(Stokes_P1);
161   fFinalGammaPolarization.setY(Stokes_P2);        161   fFinalGammaPolarization.setY(Stokes_P2);
162   fFinalGammaPolarization.setZ(Stokes_P3);        162   fFinalGammaPolarization.setZ(Stokes_P3);
163                                                   163 
164   if(fFinalGammaPolarization.mag2() > 1.)         164   if(fFinalGammaPolarization.mag2() > 1.)
165   {                                               165   {
166     G4ExceptionDescription ed;                    166     G4ExceptionDescription ed;
167     ed << " WARNING in pol-brem fFinalGammaPol    167     ed << " WARNING in pol-brem fFinalGammaPolarization \n";
168     ed << "\t" << fFinalGammaPolarization << "    168     ed << "\t" << fFinalGammaPolarization << "\t GG\t" << GG << "\t delta\t"
169        << delta;                                  169        << delta;
170     G4Exception("G4PolarizedBremsstrahlungXS::    170     G4Exception("G4PolarizedBremsstrahlungXS::Initialize", "pol015",
171                 JustWarning, ed);                 171                 JustWarning, ed);
172   }                                               172   }
173 }                                                 173 }
174                                                   174 
175 G4double G4PolarizedBremsstrahlungXS::XSection    175 G4double G4PolarizedBremsstrahlungXS::XSection(const G4StokesVector& /*pol2*/,
176                                                   176                                                const G4StokesVector& /*pol3*/)
177 {                                                 177 {
178   G4ExceptionDescription ed;                      178   G4ExceptionDescription ed;
179   ed << "ERROR dummy routine G4PolarizedBremss    179   ed << "ERROR dummy routine G4PolarizedBremsstrahlungXS::XSection "
180         "called.\n";                              180         "called.\n";
181   G4Exception("G4PolarizedBremsstrahlungXS::XS    181   G4Exception("G4PolarizedBremsstrahlungXS::XSection", "pol016", FatalException,
182               ed);                                182               ed);
183                                                   183 
184   return 0.;                                      184   return 0.;
185 }                                                 185 }
186                                                   186 
187 // return expected mean polarisation              187 // return expected mean polarisation
188 G4StokesVector G4PolarizedBremsstrahlungXS::Ge    188 G4StokesVector G4PolarizedBremsstrahlungXS::GetPol2()
189 {                                                 189 {
190   // electron/positron                            190   // electron/positron
191   return fFinalLeptonPolarization;                191   return fFinalLeptonPolarization;
192 }                                                 192 }
193                                                   193 
194 G4StokesVector G4PolarizedBremsstrahlungXS::Ge    194 G4StokesVector G4PolarizedBremsstrahlungXS::GetPol3()
195 {                                                 195 {
196   // photon                                       196   // photon
197   return fFinalGammaPolarization;                 197   return fFinalGammaPolarization;
198 }                                                 198 }
199                                                   199