G4IonCoulombScatteringModel.hh

Go to the documentation of this file.
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 //      G4IonCoulombScatteringModel.hh
00027 // -------------------------------------------------------------------
00028 //
00029 // GEANT4 Class header file
00030 //
00031 // File name:    G4IonCoulombScatteringModel 
00032 //
00033 // Author:      Cristina Consolandi
00034 //
00035 // Creation date: 05.10.2010 from G4eCoulombScatteringModel 
00036 //                              & G4CoulombScatteringModel
00037 //
00038 //
00039 // Class Description:
00040 //      Single Scattering Model for
00041 //      for protons, alpha and heavy Ions
00042 //
00043 // Reference:           
00044 //      M.J. Boschini et al. "Nuclear and Non-Ionizing Energy-Loss 
00045 //      for Coulomb ScatteredParticles from Low Energy up to Relativistic 
00046 //      Regime in Space Radiation Environment"
00047 //      Accepted for publication in the Proceedings of  the  ICATPP Conference
00048 //      on Cosmic Rays for Particle and Astroparticle Physics, Villa  Olmo, 7-8
00049 //      October,  2010, to be published by World Scientific (Singapore).
00050 //
00051 //      Available for downloading at:
00052 //      http://arxiv.org/abs/1011.4822
00053 //
00054 // -------------------------------------------------------------------
00055 //
00056 
00057 #ifndef G4IonCoulombScatteringModel_h
00058 #define G4IonCoulombScatteringModel_h 1
00059 
00060 #include "G4VEmModel.hh"
00061 #include "globals.hh"
00062 #include "G4NistManager.hh"
00063 #include "G4IonCoulombCrossSection.hh"
00064 
00065 #include <vector>
00066 using namespace std;
00067 
00068 class G4ParticleChangeForGamma;
00069 class G4ParticleDefinition;
00070 
00071 class G4IonCoulombScatteringModel : public G4VEmModel
00072 {
00073 
00074 public:
00075 
00076         G4IonCoulombScatteringModel(const G4String& nam = "IonCoulombScattering");
00077  
00078         virtual ~G4IonCoulombScatteringModel();
00079 
00080         virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00081  
00082         virtual G4double ComputeCrossSectionPerAtom(
00083                                 const G4ParticleDefinition*,
00084                                 G4double kinEnergy, 
00085                                 G4double Z, 
00086                                 G4double A, 
00087                                 G4double cut,
00088                                 G4double emax);
00089 
00090         virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00091                                  const G4MaterialCutsCouple*,
00092                                  const G4DynamicParticle*,
00093                                  G4double tmin,
00094                                  G4double maxEnergy);
00095 
00096 
00097         
00098         inline void SetRecoilThreshold(G4double eth);
00099         void        SetHeavyIonCorr(G4int b) {heavycorr=b; };
00100         G4int       GetHeavyIonCorr() {return heavycorr; };
00101 
00102 
00103 
00104 
00105 protected: 
00106 
00107          
00108         inline void DefineMaterial(const G4MaterialCutsCouple*);
00109   
00110         inline void SetupParticle(const G4ParticleDefinition*);
00111 
00112 
00113 
00114 private:
00115 
00116 
00117         // hide assignment operator
00118   G4IonCoulombScatteringModel & operator=(const G4IonCoulombScatteringModel &right);
00119   G4IonCoulombScatteringModel(const  G4IonCoulombScatteringModel&);
00120 
00121 
00122 protected:
00123 
00124 
00125         G4ParticleTable*          theParticleTable;
00126         G4ParticleChangeForGamma* fParticleChange; 
00127         G4NistManager*            fNistManager;
00128         G4IonCoulombCrossSection* ioncross;       
00129 
00130         const std::vector<G4double>* pCuts;
00131         const G4MaterialCutsCouple* currentCouple; 
00132         const G4Material*           currentMaterial;
00133         const G4Element*            currentElement;
00134         G4int                       currentMaterialIndex;
00135 
00136 
00137         G4int                     heavycorr;
00138 
00139         G4double                  cosThetaMin;
00140         G4double                  recoilThreshold;
00141                                 
00142 
00143         // projectile
00144         const G4ParticleDefinition* particle;           
00145         const G4ParticleDefinition* theProton;  
00146         G4double                  mass;         
00147         G4double                  lowEnergyLimit;
00148 
00149 
00150 private:
00151 
00152         G4bool                    isInitialised;        
00153 
00154 };
00155 
00156 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00157 void G4IonCoulombScatteringModel::DefineMaterial(const G4MaterialCutsCouple* cup)
00158 { 
00159         if(cup != currentCouple) {
00160                 currentCouple = cup;
00161                 currentMaterial = cup->GetMaterial();
00162                 currentMaterialIndex = currentCouple->GetIndex();
00163 
00164                 }
00165 }
00166 
00167 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00168 
00169 inline
00170 void G4IonCoulombScatteringModel::SetupParticle(const G4ParticleDefinition* p)
00171 {
00172         if(p != particle) {
00173                 particle = p;
00174                 mass = particle->GetPDGMass();
00175                 ioncross->SetupParticle(p);
00176                 }
00177 }
00178 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00179 
00180 inline void G4IonCoulombScatteringModel::SetRecoilThreshold(G4double eth)
00181 {
00182         recoilThreshold = eth;
00183 }
00184 
00185 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00186 
00187 #endif

Generated on Mon May 27 17:48:39 2013 for Geant4 by  doxygen 1.4.7