00001 // 00002 // ******************************************************************** 00003 // * License and Disclaimer * 00004 // * * 00005 // * The Geant4 software is copyright of the Copyright Holders of * 00006 // * the Geant4 Collaboration. It is provided under the terms and * 00007 // * conditions of the Geant4 Software License, included in the file * 00008 // * LICENSE and available at http://cern.ch/geant4/license . These * 00009 // * include a list of copyright holders. * 00010 // * * 00011 // * Neither the authors of this software system, nor their employing * 00012 // * institutes,nor the agencies providing financial support for this * 00013 // * work make any representation or warranty, express or implied, * 00014 // * regarding this software system or assume any liability for its * 00015 // * use. Please see the license in the file LICENSE and URL above * 00016 // * for the full disclaimer and the limitation of liability. * 00017 // * * 00018 // * This code implementation is the result of the scientific and * 00019 // * technical work of the GEANT4 collaboration. * 00020 // * By using, copying, modifying or distributing the software (or * 00021 // * any work based on the software) you agree to acknowledge its * 00022 // * use in resulting scientific publications, and indicate your * 00023 // * acceptance of all terms of the Geant4 Software license. * 00024 // ******************************************************************** 00025 // 00026 // G4ScreeningMottCrossSection.hh 00027 //------------------------------------------------------------------- 00028 // 00029 // GEANT4 Class header file 00030 // 00031 // File name: G4ScreeningMottCrossSection 00032 // 00033 // Author: Cristina Consolandi 00034 // 00035 // Creation date: 20.10.2011 00036 // 00037 // Modifications: 00038 // 27-05-2012 Added Analytic Fitting to the Mott Cross Section by means of G4MottCoefficients class. 00039 // 00040 // 00041 // Class Description: 00042 // Computation of electron Coulomb Scattering Cross Section. 00043 // Suitable for high energy electrons and light target materials. 00044 // 00045 // Reference: 00046 // M.J. Boschini et al. 00047 // "Non Ionizing Energy Loss induced by Electrons in the Space Environment" 00048 // Proc. of the 13th International Conference on Particle Physics and Advanced Technology 00049 // (13th ICPPAT, Como 3-7/10/2011), World Scientific (Singapore). 00050 // Available at: http://arxiv.org/abs/1111.4042v4 00051 // 00052 // 1) Mott Differential Cross Section Approximation: 00053 // For Target material up to Z=92 (U): 00054 // As described in http://arxiv.org/abs/1111.4042v4 00055 // par. 2.1 , eq. (16)-(17) 00056 // Else (Z>92): 00057 // W. A. McKinley and H. Fashbach, Phys. Rev. 74, (1948) 1759. 00058 // 2) Screening coefficient: 00059 // vomn G. Moliere, Z. Naturforsh A2 (1947), 133-145; A3 (1948), 78. 00060 // 3) Nuclear Form Factor: 00061 // A.V. Butkevich et al. Nucl. Instr. and Meth. in Phys. Res. A 488 (2002), 282-294. 00062 // 00063 // ---------------------------------------------------------------------------------------- 00064 00065 // 00066 #ifndef G4ScreeningMottCrossSection_h 00067 #define G4ScreeningMottCrossSection_h 1 00068 00069 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 00070 00071 00072 #include "G4MottCoefficients.hh" 00073 #include "globals.hh" 00074 #include "G4Material.hh" 00075 #include "G4Element.hh" 00076 #include "G4ElementVector.hh" 00077 #include "G4NistManager.hh" 00078 #include "G4ThreeVector.hh" 00079 #include "G4Pow.hh" 00080 #include "G4LossTableManager.hh" 00081 00082 class G4ParticleDefinition; 00083 00084 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 00085 00086 class G4ScreeningMottCrossSection 00087 { 00088 00089 public: 00090 00091 G4ScreeningMottCrossSection(); 00092 00093 virtual ~G4ScreeningMottCrossSection(); 00094 00095 void Initialise(const G4ParticleDefinition*, G4double cosThetaLim); 00096 00097 G4double GetScreeningAngle(); 00098 void SetScreeningCoefficient(); 00099 00100 00101 00102 inline void SetupParticle(const G4ParticleDefinition*); 00103 void SetupKinematic(G4double kinEnergy ,G4double Z); 00104 00105 G4double NuclearCrossSection(); 00106 G4ThreeVector GetNewDirection(); 00107 00108 inline G4double GetMom2CM()const; 00109 inline G4double GetMom2Lab()const; 00110 inline G4double GetTrec() const; 00111 inline G4double GetScreeningCoefficient() const; 00112 inline G4double GetTotalCross() const; 00113 00114 00115 00116 G4double McFcorrection(G4double); 00117 G4double RatioMottRutherford(G4double);//.....new 00118 G4double FormFactor2ExpHof(G4double); 00119 G4double GetScatteringAngle(); 00120 G4double AngleDistribution(G4double); 00121 00122 00123 private: 00124 00125 G4ScreeningMottCrossSection & operator=(const G4ScreeningMottCrossSection &right); 00126 G4ScreeningMottCrossSection(const G4ScreeningMottCrossSection&); 00127 00128 00129 G4NistManager* fNistManager; 00130 G4MottCoefficients * mottcoeff; 00131 00132 G4double TotalCross; 00133 00134 //cost - min - max 00135 G4double cosThetaMin;// def 1.0 00136 G4double cosThetaMax;// def -1.0 00137 00138 G4double cosTetMinNuc; 00139 G4double cosTetMaxNuc; 00140 00141 00142 //energy cut 00143 G4double ecut; 00144 G4double etag; 00145 00146 // projectile........................ 00147 const G4ParticleDefinition* particle; 00148 00149 G4double spin; 00150 G4double mass; 00151 00152 //lab of incedent particle 00153 G4double tkinLab; 00154 G4double momLab2; 00155 G4double invbetaLab2; 00156 00157 //relative system with nucleus 00158 G4double mu_rel; 00159 G4double tkin; 00160 G4double mom2; 00161 G4double invbeta2; 00162 G4double beta; 00163 G4double gamma; 00164 00165 00166 // target nucleus 00167 G4double targetZ; 00168 G4double targetA; 00169 G4double targetMass; 00170 G4double Trec; 00171 G4double As; 00172 G4double coeffb[5][6]; 00173 00174 //constants 00175 G4double alpha; 00176 G4double htc2; 00177 G4double e2; 00178 00179 }; 00180 00181 00182 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00183 00184 inline void G4ScreeningMottCrossSection::SetupParticle(const G4ParticleDefinition* p) 00185 { 00186 particle = p; 00187 mass = particle->GetPDGMass(); 00188 spin = particle->GetPDGSpin(); 00189 if(0.0 != spin) { spin = 0.5; } 00190 tkin = 0.0; 00191 } 00192 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00193 00194 00195 inline G4double G4ScreeningMottCrossSection::GetMom2CM() const 00196 { 00197 return mom2; 00198 } 00199 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00200 00201 00202 inline G4double G4ScreeningMottCrossSection::GetMom2Lab() const 00203 { 00204 return momLab2; 00205 } 00206 00207 00208 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00209 00210 inline G4double G4ScreeningMottCrossSection::GetTrec() const 00211 { 00212 return Trec; 00213 } 00214 00215 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00216 00217 inline G4double G4ScreeningMottCrossSection::GetScreeningCoefficient() const 00218 { 00219 return As; 00220 } 00221 00222 00223 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00224 00225 inline G4double G4ScreeningMottCrossSection::GetTotalCross() const 00226 { 00227 return TotalCross; 00228 } 00229 00230 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00231 00232 #endif 00233 00234