G4eCoulombScatteringModel.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 // $Id$
00027 //
00028 // -------------------------------------------------------------------
00029 //
00030 // GEANT4 Class header file
00031 //
00032 //
00033 // File name:     G4eCoulombScatteringModel
00034 //
00035 // Author:        Vladimir Ivanchenko 
00036 //
00037 // Creation date: 19.02.2006
00038 //
00039 // Modifications:
00040 // 01.08.06 V.Ivanchenko extend upper limit of table to TeV and review the
00041 //          logic of building - only elements from G4ElementTable
00042 // 08.08.06 V.Ivanchenko build internal table in ekin scale, introduce faclim
00043 // 19.08.06 V.Ivanchenko add inline function ScreeningParameter and
00044 //                       make some members protected
00045 // 09.10.07 V.Ivanchenko reorganized methods, add cut dependence in scattering off e- 
00046 // 09.06.08 V.Ivanchenko add SelectIsotope and sampling of the recoil ion 
00047 // 17.06.09 C.Consoalndi modified SetupTarget method - remove kinFactor
00048 // 27.05.10 V.Ivanchenko added G4WentzelOKandVIxSection class to
00049 //              compute cross sections and sample scattering angle
00050 //                                     
00051 //
00052 // Class Description:
00053 //
00054 // Implementation of eCoulombScattering of pointlike charge particle 
00055 // on Atomic Nucleus for interval of scattering anles in Lab system 
00056 // thetaMin - ThetaMax, nucleus recoil is neglected.
00057 //   The model based on analysis of J.M.Fernandez-Varea et al. 
00058 // NIM B73(1993)447 originated from G.Wentzel Z.Phys. 40(1927)590 with 
00059 // screening parameter from H.A.Bethe Phys. Rev. 89 (1953) 1256.
00060 // 
00061 
00062 // -------------------------------------------------------------------
00063 //
00064 
00065 #ifndef G4eCoulombScatteringModel_h
00066 #define G4eCoulombScatteringModel_h 1
00067 
00068 #include "G4VEmModel.hh"
00069 #include "globals.hh"
00070 #include "G4MaterialCutsCouple.hh"
00071 #include "G4WentzelOKandVIxSection.hh"
00072 
00073 class G4ParticleChangeForGamma;
00074 class G4ParticleDefinition;
00075 class G4ParticleTable;
00076 class G4NistManager;
00077 
00078 class G4eCoulombScatteringModel : public G4VEmModel
00079 {
00080 
00081 public:
00082 
00083   G4eCoulombScatteringModel(const G4String& nam = "eCoulombScattering");
00084  
00085   virtual ~G4eCoulombScatteringModel();
00086 
00087   virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00088 
00089   virtual G4double ComputeCrossSectionPerAtom(
00090                                 const G4ParticleDefinition*,
00091                                 G4double kinEnergy, 
00092                                 G4double Z, 
00093                                 G4double A, 
00094                                 G4double cut,
00095                                 G4double emax);
00096 
00097   virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00098                                  const G4MaterialCutsCouple*,
00099                                  const G4DynamicParticle*,
00100                                  G4double tmin,
00101                                  G4double maxEnergy);
00102 
00103   // defines low energy limit of the model
00104   inline void SetLowEnergyThreshold(G4double val);
00105 
00106   // user definition of low-energy threshold of recoil
00107   inline void SetRecoilThreshold(G4double eth);
00108 
00109 protected:
00110 
00111   inline void DefineMaterial(const G4MaterialCutsCouple*);
00112 
00113   inline void SetupParticle(const G4ParticleDefinition*);
00114 
00115 private:
00116 
00117   // hide assignment operator
00118   G4eCoulombScatteringModel & operator=(const G4eCoulombScatteringModel &right);
00119   G4eCoulombScatteringModel(const  G4eCoulombScatteringModel&);
00120 
00121 protected:
00122  
00123   G4ParticleTable*          theParticleTable;
00124   G4ParticleChangeForGamma* fParticleChange;
00125   G4WentzelOKandVIxSection* wokvi;
00126   G4NistManager*            fNistManager;
00127 
00128   const std::vector<G4double>* pCuts;
00129 
00130   const G4MaterialCutsCouple* currentCouple;
00131   const G4Material*           currentMaterial;
00132   G4int                       currentMaterialIndex;
00133 
00134   G4double                  cosThetaMin;
00135   G4double                  cosThetaMax;
00136   G4double                  cosTetMinNuc;
00137   G4double                  cosTetMaxNuc;
00138   G4double                  recoilThreshold;
00139   G4double                  elecRatio;
00140   G4double                  mass;
00141 
00142   // projectile
00143   const G4ParticleDefinition* particle;
00144   const G4ParticleDefinition* theProton;
00145 
00146   G4double                  lowEnergyThreshold;
00147 
00148 private:
00149 
00150   G4bool                    isInitialised;             
00151 };
00152 
00153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00154 
00155 inline
00156 void G4eCoulombScatteringModel::DefineMaterial(const G4MaterialCutsCouple* cup) 
00157 { 
00158   if(cup != currentCouple) {
00159     currentCouple = cup;
00160     currentMaterial = cup->GetMaterial();
00161     currentMaterialIndex = currentCouple->GetIndex(); 
00162   }
00163 }
00164 
00165 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00166 
00167 inline 
00168 void G4eCoulombScatteringModel::SetupParticle(const G4ParticleDefinition* p)
00169 {
00170   // Initialise mass and charge
00171   if(p != particle) {
00172     particle = p;
00173     mass = particle->GetPDGMass();
00174     wokvi->SetupParticle(p);
00175   }
00176 }
00177 
00178 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00179 
00180 inline void G4eCoulombScatteringModel::SetLowEnergyThreshold(G4double val)
00181 {
00182   lowEnergyThreshold = val;
00183 }
00184 
00185 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00186 
00187 inline void G4eCoulombScatteringModel::SetRecoilThreshold(G4double eth)
00188 {
00189   recoilThreshold = eth;
00190 }
00191 
00192 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00193 
00194 #endif

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