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 >> 71 >> 72 #include "G4MottCoefficients.hh" 69 #include "globals.hh" 73 #include "globals.hh" 70 #include "G4ParticleDefinition.hh" << 74 #include "G4Material.hh" 71 #include <vector> << 75 #include "G4Element.hh" >> 76 #include "G4ElementVector.hh" >> 77 #include "G4NistManager.hh" >> 78 #include "G4ThreeVector.hh" >> 79 #include "G4Pow.hh" >> 80 #include "G4LossTableManager.hh" 72 81 73 //....oooOO0OOooo........oooOO0OOooo........oo 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 74 83 75 static const G4int DIMMOTT = 750; << 84 static const G4int DIM = 750; 76 85 77 class G4NistManager; << 86 class G4ParticleDefinition; 78 class G4Pow; << 79 87 80 class G4ScreeningMottCrossSection 88 class G4ScreeningMottCrossSection 81 { 89 { 82 90 83 public: 91 public: 84 92 85 explicit G4ScreeningMottCrossSection(); << 93 explicit G4ScreeningMottCrossSection(); 86 94 87 ~G4ScreeningMottCrossSection(); << 95 virtual ~G4ScreeningMottCrossSection(); 88 96 89 void Initialise(const G4ParticleDefinition*, << 97 void Initialise(const G4ParticleDefinition*, G4double cosThetaLim); 90 98 91 void SetupKinematic(G4double kinEnergy, G4in << 99 G4double GetScreeningAngle(); >> 100 void SetScreeningCoefficient(); >> 101 >> 102 inline void SetupParticle(const G4ParticleDefinition*); >> 103 void SetupKinematic(G4double kinEnergy ,G4double Z); >> 104 >> 105 G4double NuclearCrossSection(G4int form); >> 106 G4ThreeVector GetNewDirection(); >> 107 >> 108 inline G4double GetMom2CM()const; >> 109 inline G4double GetMom2Lab()const; >> 110 inline G4double GetTrec() const; >> 111 inline G4double GetScreeningCoefficient() const; >> 112 inline G4double GetTotalCross() const; >> 113 >> 114 G4double McFcorrection(G4double); >> 115 G4double RatioMottRutherford(G4double); >> 116 G4double FormFactor2ExpHof(G4double); >> 117 G4double FormFactor2Gauss(G4double); >> 118 G4double FormFactor2UniformHelm(G4double); >> 119 G4double GetScatteringAngle(); >> 120 G4double AngleDistribution(G4double); >> 121 >> 122 private: 92 123 93 G4double NuclearCrossSection(G4int form, G4i << 124 G4ScreeningMottCrossSection & operator=(const G4ScreeningMottCrossSection &right) = delete; 94 G4double GetScatteringAngle(G4int form, G4in << 125 G4ScreeningMottCrossSection(const G4ScreeningMottCrossSection&) = delete; 95 126 96 G4double RatioMottRutherford(G4double tet); << 127 G4NistManager* fNistManager; 97 G4double RatioMottRutherfordCosT(G4double si << 128 G4Pow* fG4pow; >> 129 G4MottCoefficients * mottcoeff; >> 130 >> 131 G4double TotalCross; >> 132 >> 133 //cost - min - max >> 134 G4double cosThetaMin;// def 1.0 >> 135 G4double cosThetaMax;// def -1.0 >> 136 >> 137 G4double cosTetMinNuc; >> 138 G4double cosTetMaxNuc; >> 139 >> 140 //energy cut >> 141 G4double ecut; >> 142 G4double etag; >> 143 >> 144 // projectile........................ >> 145 const G4ParticleDefinition* particle; >> 146 >> 147 G4double spin; >> 148 G4double mass; >> 149 >> 150 //lab of incedent particle >> 151 G4double tkinLab; >> 152 G4double momLab2; >> 153 G4double invbetaLab2; >> 154 >> 155 //relative system with nucleus >> 156 G4double mu_rel; >> 157 G4double tkin; >> 158 G4double mom2; >> 159 G4double invbeta2; >> 160 G4double beta; >> 161 G4double gamma; >> 162 >> 163 // target nucleus >> 164 G4double targetZ; >> 165 G4double targetA; >> 166 G4double targetMass; >> 167 G4double Trec; >> 168 G4double As; >> 169 G4double coeffb[5][6]; >> 170 >> 171 //constants >> 172 G4double alpha; >> 173 G4double htc2; >> 174 G4double e2; 98 175 99 G4double McFcorrection(G4double sin2t2); << 176 //angle 100 inline void SetupParticle(const G4ParticleDe << 177 G4double cross[DIM]; >> 178 }; 101 179 102 G4ScreeningMottCrossSection & operator= << 103 (const G4ScreeningMottCrossSection &right) = << 104 G4ScreeningMottCrossSection(const G4Screenin << 105 180 106 private: << 181 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 107 182 108 G4double ComputeAngle(G4int idx, G4double& r << 183 inline void G4ScreeningMottCrossSection::SetupParticle(const G4ParticleDefinition* p) >> 184 { >> 185 particle = p; >> 186 mass = particle->GetPDGMass(); >> 187 spin = particle->GetPDGSpin(); >> 188 if(0.0 != spin) { spin = 0.5; } >> 189 tkin = 0.0; >> 190 } >> 191 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 109 192 110 G4double FormFactor2ExpHof(G4double sin2t2); << 111 G4double FormFactor2Gauss(G4double sin2t2); << 112 G4double FormFactor2UniformHelm(G4double sin << 113 G4double DifferentialXSection(G4int idx, G4i << 114 << 115 G4double GetTransitionRandom(); << 116 << 117 G4NistManager* fNistManager; << 118 G4Pow* fG4pow; << 119 << 120 const G4ParticleDefinition* particle; << 121 << 122 G4double fTotalCross; << 123 //cost - min - max << 124 G4double cosThetaMin;// def 1.0 << 125 G4double cosThetaMax;// def -1. << 126 << 127 G4double cosTetMinNuc; << 128 G4double cosTetMaxNuc; << 129 << 130 //energy cut << 131 G4double ecut; << 132 G4double etag; << 133 << 134 G4double spin; << 135 G4double mass; << 136 << 137 //lab of incedent particle << 138 G4double tkinLab; << 139 G4double momLab2; << 140 G4double invbetaLab2; << 141 << 142 //relative system with nucleus << 143 G4double mu_rel; << 144 G4double tkin; << 145 G4double mom2; << 146 G4double invbeta2; << 147 G4double beta; << 148 G4double gamma; << 149 << 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 193 161 // working array << 194 inline G4double G4ScreeningMottCrossSection::GetMom2CM() const 162 std::vector<G4double> cross; << 195 { 163 }; << 196 return mom2; >> 197 } >> 198 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 164 199 165 200 >> 201 inline G4double G4ScreeningMottCrossSection::GetMom2Lab() const >> 202 { >> 203 return momLab2; >> 204 } >> 205 >> 206 >> 207 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 208 >> 209 inline G4double G4ScreeningMottCrossSection::GetTrec() const >> 210 { >> 211 return Trec; >> 212 } >> 213 166 //....oooOO0OOooo........oooOO0OOooo........oo 214 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 167 215 168 inline << 216 inline G4double G4ScreeningMottCrossSection::GetScreeningCoefficient() const 169 void G4ScreeningMottCrossSection::SetupParticl << 170 { 217 { 171 particle = p; << 218 return As; 172 mass = particle->GetPDGMass(); << 219 } 173 spin = particle->GetPDGSpin(); << 220 174 if(0.0 != spin) { spin = 0.5; } << 221 175 tkin = 0.0; << 222 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 223 >> 224 inline G4double G4ScreeningMottCrossSection::GetTotalCross() const >> 225 { >> 226 return TotalCross; 176 } 227 } 177 228 178 //....oooOO0OOooo........oooOO0OOooo........oo 229 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 179 230 180 #endif 231 #endif >> 232 >> 233 181 234