Geant4 Cross Reference |
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 // G4ScreeningMottCrossSection.hh 26 // G4ScreeningMottCrossSection.hh 27 //-------------------------------------------- 27 //------------------------------------------------------------------- 28 // 28 // 29 // GEANT4 Class header file 29 // GEANT4 Class header file 30 // 30 // 31 // File name: G4ScreeningMottCrossSection 31 // File name: G4ScreeningMottCrossSection 32 // 32 // 33 // Author: Cristina Consolandi 33 // Author: Cristina Consolandi 34 // 34 // 35 // Creation date: 20.10.2011 << 35 // Creation date: 20.10.2011 36 // 36 // 37 // Modifications: 37 // Modifications: >> 38 // 27-05-2012 Added Analytic Fitting to the Mott Cross Section by means of G4MottCoefficients class. >> 39 // 38 // 40 // 39 // Class Description: 41 // Class Description: 40 // Computation of electron Coulomb Scatte 42 // Computation of electron Coulomb Scattering Cross Section. 41 // Suitable for high energy electrons and << 43 // Suitable for high energy electrons and light target materials. 42 // 44 // 43 // Reference: 45 // Reference: 44 // M.J. Boschini et al. 46 // M.J. Boschini et al. 45 // "Non Ionizing Energy Loss induced by El 47 // "Non Ionizing Energy Loss induced by Electrons in the Space Environment" 46 // Proc. of the 13th Int. Conf. on Partic << 48 // Proc. of the 13th International Conference on Particle Physics and Advanced Technology 47 // (13th ICPPAT, Como 3-7/10/2011), World 49 // (13th ICPPAT, Como 3-7/10/2011), World Scientific (Singapore). 48 // Available at: http://arxiv.org/abs/111 50 // Available at: http://arxiv.org/abs/1111.4042v4 49 // 51 // 50 // 1) Mott Differential Cross Section App << 52 // 1) Mott Differential Cross Section Approximation: 51 // For Target material up to Z=92 (U): 53 // For Target material up to Z=92 (U): 52 // As described in http://arxiv.org/ab << 54 // As described in http://arxiv.org/abs/1111.4042v4 53 // par. 2.1 , eq. (16)-(17) 55 // par. 2.1 , eq. (16)-(17) 54 // Else (Z>92): 56 // Else (Z>92): 55 // W. A. McKinley and H. Fashbach, Phy 57 // W. A. McKinley and H. Fashbach, Phys. Rev. 74, (1948) 1759. 56 // 2) Screening coefficient: << 58 // 2) Screening coefficient: 57 // vomn G. Moliere, Z. Naturforsh A2 (194 59 // vomn G. Moliere, Z. Naturforsh A2 (1947), 133-145; A3 (1948), 78. 58 // 3) Nuclear Form Factor: << 60 // 3) Nuclear Form Factor: 59 // A.V. Butkevich et al. Nucl. Instr. Met << 61 // A.V. Butkevich et al. Nucl. Instr. and Meth. in Phys. Res. A 488 (2002), 282-294. 60 // 62 // 61 // ------------------------------------------- << 63 // ---------------------------------------------------------------------------------------- 62 64 63 // 65 // 64 #ifndef G4ScreeningMottCrossSection_h 66 #ifndef G4ScreeningMottCrossSection_h 65 #define G4ScreeningMottCrossSection_h 1 67 #define G4ScreeningMottCrossSection_h 1 66 68 67 //....oooOO0OOooo........oooOO0OOooo........oo 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 68 70 69 #include "globals.hh" << 70 #include "G4ParticleDefinition.hh" << 71 #include <vector> << 72 71 73 //....oooOO0OOooo........oooOO0OOooo........oo << 72 #include "G4MottCoefficients.hh" >> 73 #include "globals.hh" >> 74 #include "G4Material.hh" >> 75 #include "G4Element.hh" >> 76 #include "G4ElementVector.hh" >> 77 #include "G4NistManager.hh" >> 78 #include "G4ThreeVector.hh" >> 79 #include "G4Pow.hh" >> 80 #include "G4LossTableManager.hh" 74 81 75 static const G4int DIMMOTT = 750; << 82 class G4ParticleDefinition; 76 83 77 class G4NistManager; << 84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 78 class G4Pow; << 79 85 80 class G4ScreeningMottCrossSection 86 class G4ScreeningMottCrossSection 81 { 87 { 82 88 83 public: 89 public: 84 90 85 explicit G4ScreeningMottCrossSection(); << 91 G4ScreeningMottCrossSection(); >> 92 >> 93 virtual ~G4ScreeningMottCrossSection(); >> 94 >> 95 void Initialise(const G4ParticleDefinition*, G4double cosThetaLim); 86 96 87 ~G4ScreeningMottCrossSection(); << 97 G4double GetScreeningAngle(); >> 98 void SetScreeningCoefficient(); 88 99 89 void Initialise(const G4ParticleDefinition*, << 90 100 91 void SetupKinematic(G4double kinEnergy, G4in << 101 >> 102 inline void SetupParticle(const G4ParticleDefinition*); >> 103 void SetupKinematic(G4double kinEnergy ,G4double Z); 92 104 93 G4double NuclearCrossSection(G4int form, G4i << 105 G4double NuclearCrossSection(); 94 G4double GetScatteringAngle(G4int form, G4in << 106 G4ThreeVector GetNewDirection(); 95 107 96 G4double RatioMottRutherford(G4double tet); << 108 inline G4double GetMom2CM()const; 97 G4double RatioMottRutherfordCosT(G4double si << 109 inline G4double GetMom2Lab()const; >> 110 inline G4double GetTrec() const; >> 111 inline G4double GetScreeningCoefficient() const; >> 112 inline G4double GetTotalCross() const; 98 113 99 G4double McFcorrection(G4double sin2t2); << 100 inline void SetupParticle(const G4ParticleDe << 101 114 102 G4ScreeningMottCrossSection & operator= << 115 103 (const G4ScreeningMottCrossSection &right) = << 116 G4double McFcorrection(G4double); 104 G4ScreeningMottCrossSection(const G4Screenin << 117 G4double RatioMottRutherford(G4double);//.....new >> 118 G4double FormFactor2ExpHof(G4double); >> 119 G4double GetScatteringAngle(); >> 120 G4double AngleDistribution(G4double); >> 121 105 122 106 private: 123 private: 107 124 108 G4double ComputeAngle(G4int idx, G4double& r << 125 G4ScreeningMottCrossSection & operator=(const G4ScreeningMottCrossSection &right); >> 126 G4ScreeningMottCrossSection(const G4ScreeningMottCrossSection&); >> 127 >> 128 >> 129 G4NistManager* fNistManager; >> 130 G4MottCoefficients * mottcoeff; >> 131 >> 132 G4double TotalCross; >> 133 >> 134 //cost - min - max >> 135 G4double cosThetaMin;// def 1.0 >> 136 G4double cosThetaMax;// def -1.0 109 137 110 G4double FormFactor2ExpHof(G4double sin2t2); << 138 G4double cosTetMinNuc; 111 G4double FormFactor2Gauss(G4double sin2t2); << 139 G4double cosTetMaxNuc; 112 G4double FormFactor2UniformHelm(G4double sin << 140 113 G4double DifferentialXSection(G4int idx, G4i << 141 114 << 142 //energy cut 115 G4double GetTransitionRandom(); << 143 G4double ecut; 116 << 144 G4double etag; 117 G4NistManager* fNistManager; << 145 118 G4Pow* fG4pow; << 146 // projectile........................ 119 << 147 const G4ParticleDefinition* particle; 120 const G4ParticleDefinition* particle; << 148 121 << 149 G4double spin; 122 G4double fTotalCross; << 150 G4double mass; 123 //cost - min - max << 151 124 G4double cosThetaMin;// def 1.0 << 152 //lab of incedent particle 125 G4double cosThetaMax;// def -1. << 153 G4double tkinLab; 126 << 154 G4double momLab2; 127 G4double cosTetMinNuc; << 155 G4double invbetaLab2; 128 G4double cosTetMaxNuc; << 156 129 << 157 //relative system with nucleus 130 //energy cut << 158 G4double mu_rel; 131 G4double ecut; << 159 G4double tkin; 132 G4double etag; << 160 G4double mom2; 133 << 161 G4double invbeta2; 134 G4double spin; << 162 G4double beta; 135 G4double mass; << 163 G4double gamma; 136 << 164 137 //lab of incedent particle << 165 138 G4double tkinLab; << 166 // target nucleus 139 G4double momLab2; << 167 G4double targetZ; 140 G4double invbetaLab2; << 168 G4double targetA; 141 << 169 G4double targetMass; 142 //relative system with nucleus << 170 G4double Trec; 143 G4double mu_rel; << 171 G4double As; 144 G4double tkin; << 172 G4double coeffb[5][6]; 145 G4double mom2; << 173 146 G4double invbeta2; << 174 //constants 147 G4double beta; << 175 G4double alpha; 148 G4double gamma; << 176 G4double htc2; 149 << 177 G4double e2; 150 //constants << 151 G4double alpha; << 152 G4double htc2; << 153 G4double e2; << 154 << 155 // target nucleus << 156 G4double targetMass; << 157 G4double As; << 158 G4int targetZ; << 159 G4int targetA; << 160 178 161 // working array << 162 std::vector<G4double> cross; << 163 }; 179 }; 164 180 165 181 166 //....oooOO0OOooo........oooOO0OOooo........oo 182 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 167 183 168 inline << 184 inline void G4ScreeningMottCrossSection::SetupParticle(const G4ParticleDefinition* p) 169 void G4ScreeningMottCrossSection::SetupParticl << 170 { 185 { 171 particle = p; << 186 particle = p; 172 mass = particle->GetPDGMass(); << 187 mass = particle->GetPDGMass(); 173 spin = particle->GetPDGSpin(); << 188 spin = particle->GetPDGSpin(); 174 if(0.0 != spin) { spin = 0.5; } << 189 if(0.0 != spin) { spin = 0.5; } 175 tkin = 0.0; << 190 tkin = 0.0; >> 191 } >> 192 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 193 >> 194 >> 195 inline G4double G4ScreeningMottCrossSection::GetMom2CM() const >> 196 { >> 197 return mom2; >> 198 } >> 199 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 200 >> 201 >> 202 inline G4double G4ScreeningMottCrossSection::GetMom2Lab() const >> 203 { >> 204 return momLab2; >> 205 } >> 206 >> 207 >> 208 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 209 >> 210 inline G4double G4ScreeningMottCrossSection::GetTrec() const >> 211 { >> 212 return Trec; >> 213 } >> 214 >> 215 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 216 >> 217 inline G4double G4ScreeningMottCrossSection::GetScreeningCoefficient() const >> 218 { >> 219 return As; >> 220 } >> 221 >> 222 >> 223 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 224 >> 225 inline G4double G4ScreeningMottCrossSection::GetTotalCross() const >> 226 { >> 227 return TotalCross; 176 } 228 } 177 229 178 //....oooOO0OOooo........oooOO0OOooo........oo 230 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 179 231 180 #endif 232 #endif >> 233 >> 234 181 235