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 // G4IonCoulombCrossSection.hh 00027 //------------------------------------------------------------------- 00028 // 00029 // GEANT4 Class header file 00030 // 00031 // File name: G4IonCoulombCrossSection 00032 // 00033 // Author: Cristina Consolandi 00034 // 00035 // Creation date: 05.10.2010 from G4eCoulombScatteringModel 00036 // 00037 // Class Description: 00038 // Computation of Screen-Coulomb Cross Section 00039 // for protons, alpha and heavy Ions 00040 // 00041 // 00042 // Reference: 00043 // M.J. Boschini et al. "Nuclear and Non-Ionizing Energy-Loss 00044 // for Coulomb Scattered Particles from Low Energy up to Relativistic 00045 // Regime in Space Radiation Environment" 00046 // Accepted for publication in the Proceedings of the ICATPP Conference 00047 // on Cosmic Rays for Particle and Astroparticle Physics, Villa Olmo, 7-8 00048 // October, 2010, to be published by World Scientific (Singapore). 00049 // 00050 // Available for downloading at: 00051 // http://arxiv.org/abs/1011.4822 00052 // 00053 // ------------------------------------------------------------------- 00054 00055 // 00056 #ifndef G4IonCoulombCrossSection_h 00057 #define G4IonCoulombCrossSection_h 1 00058 00059 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 00060 00061 #include <CLHEP/Units/SystemOfUnits.h> 00062 00063 #include "globals.hh" 00064 #include "G4Material.hh" 00065 #include "G4Element.hh" 00066 #include "G4ElementVector.hh" 00067 #include "G4NistManager.hh" 00068 #include "G4ThreeVector.hh" 00069 #include "G4Pow.hh" 00070 #include "G4LossTableManager.hh" 00071 00072 class G4ParticleDefinition; 00073 00074 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 00075 00076 class G4IonCoulombCrossSection 00077 { 00078 00079 public: 00080 00081 G4IonCoulombCrossSection(); 00082 00083 virtual ~G4IonCoulombCrossSection(); 00084 00085 void Initialise(const G4ParticleDefinition*, G4double cosThetaLim); 00086 00087 G4double NuclearCrossSection(); 00088 00089 G4double SampleCosineTheta(); 00090 00091 inline void SetupParticle(const G4ParticleDefinition*); 00092 00093 void SetupKinematic(G4double kinEnergy, G4double cut,G4int iz); 00094 00095 void SetupTarget(G4double Z, G4double kinEnergy,G4int heavycorr); 00096 00097 inline G4double GetMomentum2(); 00098 00099 private: 00100 void SetScreenRSquare(G4int iz); 00101 00102 00103 G4IonCoulombCrossSection & operator=(const G4IonCoulombCrossSection &right); 00104 G4IonCoulombCrossSection(const G4IonCoulombCrossSection&); 00105 00106 00107 00108 const G4ParticleDefinition* theProton; 00109 00110 G4NistManager* fNistManager; 00111 00112 protected: 00113 G4double coeff; 00114 00115 //cost - min - max 00116 G4double cosThetaMin;// def 1.0 00117 G4double cosThetaMax;// def -1.0 00118 00119 //SetupTarget 00120 G4double cosTetMinNuc;// -->cosThetaMin 00121 G4double cosTetMaxNuc;// -->cosThetaMax 00122 00123 00124 //cross section 00125 G4double nucXSection; 00126 00127 //energy cut 00128 G4double ecut; 00129 G4double etag; 00130 00131 // projectile........................ 00132 const G4ParticleDefinition* particle; 00133 00134 G4double chargeSquare; 00135 G4double spin; 00136 G4double mass; 00137 00138 //lab of incedent particle 00139 G4double tkinLab; 00140 G4double momLab2; 00141 G4double invbetaLab2; 00142 00143 //relative system with nucleus 00144 G4double tkin; 00145 G4double mom2; 00146 G4double invbeta2; 00147 00148 // target nucleus 00149 G4double targetZ; 00150 G4double targetMass; 00151 G4double screenZ; 00152 00153 00154 private: 00155 00156 G4double alpha2; 00157 G4double ScreenRSquare; 00158 00159 }; 00160 00161 00162 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00163 00164 inline void G4IonCoulombCrossSection::SetupParticle(const G4ParticleDefinition* p) 00165 { 00166 particle = p; 00167 mass = particle->GetPDGMass(); 00168 spin = particle->GetPDGSpin(); 00169 if(0.0 != spin) { spin = 0.5; } 00170 G4double q = std::fabs(particle->GetPDGCharge()/CLHEP::eplus); 00171 chargeSquare = q*q; 00172 tkin = 0.0; 00173 } 00174 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00175 00176 00177 inline G4double G4IonCoulombCrossSection::GetMomentum2(){ 00178 return mom2; 00179 } 00180 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00181 00182 #endif 00183 00184