source: trunk/source/processes/electromagnetic/polarisation/src/G4PolarizedBremsstrahlungCrossSection.cc @ 1350

Last change on this file since 1350 was 1337, checked in by garnier, 14 years ago

tag geant4.9.4 beta 1 + modifs locales

File size: 7.9 KB
Line 
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// $Id: G4PolarizedBremsstrahlungCrossSection.cc,v 1.4 2007/11/01 17:32:34 schaelic Exp $
27// GEANT4 tag $Name: geant4-09-04-beta-01 $
28//
29// -------------------------------------------------------------------
30//
31// GEANT4 Class file
32//
33//
34// File name:     G4PolarizedBremsstrahlungCrossSection
35//
36// Author:        Andreas Schaelicke on the base of Karim Laihems code
37//
38// Creation date: 16.08.2006
39//
40
41#include "G4PolarizedBremsstrahlungCrossSection.hh"
42//#include "G4ePolarizedBremsstrahlungModel.hh"
43//#include "G4Element.hh"
44
45G4bool G4PolarizedBremsstrahlungCrossSection::scrnInitialized=false;
46G4double G4PolarizedBremsstrahlungCrossSection::SCRN [3][20]; 
47// screening function lookup table;
48
49
50void G4PolarizedBremsstrahlungCrossSection::InitializeMe()
51{
52  if (!scrnInitialized) {
53    SCRN [1][1]=  0.5   ; SCRN [2][1] = 0.0145;
54    SCRN [1][2]=  1.0   ; SCRN [2][2] = 0.0490;
55    SCRN [1][3]=  2.0   ; SCRN [2][3] = 0.1400;
56    SCRN [1][4]=  4.0   ; SCRN [2][4] = 0.3312;
57    SCRN [1][5]=  8.0   ; SCRN [2][5] = 0.6758;
58    SCRN [1][6]=  15.0  ; SCRN [2][6] = 1.126;
59    SCRN [1][7]=  20.0  ; SCRN [2][7] = 1.367;
60    SCRN [1][8]=  25.0  ; SCRN [2][8] = 1.564;
61    SCRN [1][9]=  30.0  ; SCRN [2][9] = 1.731;
62    SCRN [1][10]= 35.0  ; SCRN [2][10]= 1.875;
63    SCRN [1][11]= 40.0  ; SCRN [2][11]= 2.001;
64    SCRN [1][12]= 45.0  ; SCRN [2][12]= 2.114;
65    SCRN [1][13]= 50.0  ; SCRN [2][13]= 2.216;
66    SCRN [1][14]= 60.0  ; SCRN [2][14]= 2.393;
67    SCRN [1][15]= 70.0  ; SCRN [2][15]= 2.545;
68    SCRN [1][16]= 80.0  ; SCRN [2][16]= 2.676;
69    SCRN [1][17]= 90.0  ; SCRN [2][17]= 2.793;
70    SCRN [1][18]= 100.0 ; SCRN [2][18]= 2.897;
71    SCRN [1][19]= 120.0 ; SCRN [2][19]= 3.078;   
72
73    scrnInitialized=true;
74  }
75}
76
77G4PolarizedBremsstrahlungCrossSection::G4PolarizedBremsstrahlungCrossSection()
78{
79  InitializeMe();
80}
81
82
83void G4PolarizedBremsstrahlungCrossSection::Initialize(
84     G4double aLept0E, G4double aGammaE, G4double sintheta,
85     const G4StokesVector & beamPol,
86     const G4StokesVector & /*p1*/,
87     G4int /*flag*/)
88{
89//   G4cout<<"G4PolarizedBremsstrahlungCrossSection::Initialize \n"
90//      <<"lepE = "<<aLept0E
91//      <<"gamE = "<<aGammaE
92//      <<"sint = "<<sintheta<<"\n"
93//      <<"beamPol="<<beamPol<<"\n";
94
95  G4double aLept1E = aLept0E - aGammaE;
96
97  G4double Stokes_S1  = beamPol.x()   ; 
98  G4double Stokes_S2  = beamPol.y()   ; 
99  G4double Stokes_S3  = beamPol.z()   ; 
100  // ************************************************************************** 
101   
102  G4double m0_c2  = electron_mass_c2; 
103  G4double Lept0E = aLept0E/m0_c2+1.,   Lept0E2 = Lept0E * Lept0E ;
104  G4double GammaE = aGammaE/m0_c2,      GammaE2 = GammaE * GammaE ;
105  G4double Lept1E = aLept1E/m0_c2+1.,   Lept1E2 = Lept1E * Lept1E ;
106   
107
108  //  const G4Element* theSelectedElement = theModel->SelectedAtom();
109
110  // *******  Gamma Transvers Momentum
111   
112  G4double TMom = std::sqrt(Lept0E2 -1.)* sintheta;
113  G4double u    = TMom       , u2 =u * u ;
114  G4double Xsi  = 1./(1.+u2)                      , Xsi2 = Xsi * Xsi  ; 
115
116  //  G4double theZ  = theSelectedElement->GetZ();
117   
118  //  G4double fCoul = theSelectedElement->GetfCoulomb();
119  G4double delta = 12. * std::pow(theZ, 1./3.) * 
120    Lept0E * Lept1E * Xsi / (121. * GammaE); 
121  G4double GG=0.;
122
123  if(delta < 0.5) {
124    GG = std::log(2.* Lept0E * Lept1E / GammaE) - 2. - fCoul; 
125  }
126  else if ( delta < 120) {
127    for (G4int j=2; j<=19; j++)  {
128      if(SCRN[1][j] >= delta)    {
129        GG =std::log(2 * Lept0E * Lept1E / GammaE) - 2 - fCoul
130          -(SCRN[2][j-1]+(delta-SCRN[1][j-1])*(SCRN[2][j]-SCRN[2][j-1])
131            /(SCRN[1][j]-SCRN[1][j-1]));
132        break;
133      }
134    }
135  }
136  else  {
137    G4double alpha_sc  = (111 * std::pow(theZ, -1./3.)) / Xsi;
138    GG = std::log(alpha_sc)- 2 - fCoul;
139  }
140
141  if(GG<-1) GG=-1;     // *KL* do we need this ?!
142
143  G4double I_Lept   = (Lept0E2 + Lept1E2) * (3.+2.*GG) - 2 * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
144  G4double F_Lept   = Lept1E * 4. * GammaE *  u * Xsi * (1. - 2 * Xsi) * GG / I_Lept;
145  G4double E_Lept   = Lept0E * 4. * GammaE *  u * Xsi * (2. * Xsi - 1.) * GG / I_Lept; 
146  G4double M_Lept   = 4. * Lept0E * Lept1E * (1. + GG - 2. * Xsi2 * u2 * GG) / I_Lept ;
147  G4double P_Lept   = GammaE2 * (1. + 8. * GG * (Xsi - 0.5)*(Xsi - 0.5)) / I_Lept ;
148   
149  G4double Stokes_SS1 = M_Lept * Stokes_S1 + E_Lept * Stokes_S3;
150  G4double Stokes_SS2 = M_Lept * Stokes_S2 ;
151  G4double Stokes_SS3 = (M_Lept + P_Lept) * Stokes_S3 + F_Lept * Stokes_S1; 
152
153  theFinalLeptonPolarization.setX(Stokes_SS1);
154  theFinalLeptonPolarization.setY(Stokes_SS2);
155  theFinalLeptonPolarization.setZ(Stokes_SS3);
156
157  if(theFinalLeptonPolarization.mag2()>1) { 
158    G4cout<<" WARNING in pol-brem theFinalLeptonPolarization \n";
159    G4cout
160      <<"\t"<<theFinalLeptonPolarization
161      <<"\t GG\t"<<GG
162      <<"\t delta\t"<<delta
163      <<G4endl;
164    theFinalLeptonPolarization.setX(0);
165    theFinalLeptonPolarization.setY(0);
166    theFinalLeptonPolarization.setZ(Stokes_SS3);
167    if(Stokes_SS3>1) theFinalLeptonPolarization.setZ(1);
168  }
169
170
171  G4double I_Gamma   = (Lept0E2 + Lept1E2)*(3+2*GG) - 2 * Lept0E * Lept1E * (1 + 4 * u2 * Xsi2 * GG);
172  G4double D_Gamma   = 8 * Lept0E * Lept1E * u2 * Xsi2 * GG / I_Gamma;
173  G4double L_Gamma   = GammaE * ((Lept0E + Lept1E) * (3 + 2 * GG) 
174                                 - 2 * Lept1E * (1 + 4 * u2 * Xsi2 * GG))/I_Gamma;   
175  G4double T_Gamma   = 4 * GammaE * Lept1E * Xsi * u * (2 * Xsi - 1) * GG / I_Gamma ;
176   
177  G4double Stokes_P1 = D_Gamma ;
178  G4double Stokes_P2 = 0 ;
179  G4double Stokes_P3 = (Stokes_S3*L_Gamma + Stokes_S1*T_Gamma) ;
180
181  theFinalGammaPolarization.SetPhoton();
182
183  theFinalGammaPolarization.setX(Stokes_P1);
184  theFinalGammaPolarization.setY(Stokes_P2);
185  theFinalGammaPolarization.setZ(Stokes_P3);
186   
187  if(theFinalGammaPolarization.mag2()>1) {
188    G4cout<<" WARNING in pol-brem theFinalGammaPolarization \n";
189    G4cout
190      <<"\t"<<theFinalGammaPolarization
191      <<"\t GG\t"<<GG
192      <<"\t delta\t"<<delta
193      <<G4endl;
194  }
195}
196
197G4double G4PolarizedBremsstrahlungCrossSection::XSection(const G4StokesVector & /*pol2*/,
198                                                         const G4StokesVector & /*pol3*/)
199{
200  G4cout<<"ERROR dummy routine G4PolarizedBremsstrahlungCrossSection::XSection called \n";
201  return 0;
202}
203
204  // return expected mean polarisation
205G4StokesVector G4PolarizedBremsstrahlungCrossSection::GetPol2()
206{
207  // electron/positron
208  return theFinalLeptonPolarization;
209}
210G4StokesVector G4PolarizedBremsstrahlungCrossSection::GetPol3()
211{
212  // photon
213  return theFinalGammaPolarization;;
214}
215
216
Note: See TracBrowser for help on using the repository browser.