G4DNAChampionElasticModel.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 #ifndef G4DNAChampionElasticModel_h
00030 #define G4DNAChampionElasticModel_h 1
00031 
00032 #include <map>
00033 #include "G4DNACrossSectionDataSet.hh"
00034 #include "G4VEmModel.hh"
00035 #include "G4Electron.hh"
00036 #include "G4ParticleChangeForGamma.hh"
00037 #include "G4LogLogInterpolation.hh"
00038 #include "G4ProductionCutsTable.hh"
00039 #include "G4NistManager.hh"
00040 
00041 class G4DNAChampionElasticModel : public G4VEmModel
00042 {
00043 
00044 public:
00045 
00046   G4DNAChampionElasticModel(const G4ParticleDefinition* p = 0, 
00047                             const G4String& nam = "DNAChampionElasticModel");
00048 
00049   virtual ~G4DNAChampionElasticModel();
00050 
00051   virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00052 
00053   virtual G4double CrossSectionPerVolume(const G4Material* material,
00054                                          const G4ParticleDefinition* p,
00055                                          G4double ekin,
00056                                          G4double emin,
00057                                          G4double emax);
00058 
00059   virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00060                                  const G4MaterialCutsCouple*,
00061                                  const G4DynamicParticle*,
00062                                  G4double tmin,
00063                                  G4double maxEnergy);
00064                                  
00065   inline void SetKillBelowThreshold (G4double threshold);                
00066   G4double GetKillBelowThreshold () { return killBelowEnergy; }          
00067 
00068 protected:
00069 
00070   G4ParticleChangeForGamma* fParticleChangeForGamma;
00071 
00072 private:
00073   // Water density table
00074   const std::vector<G4double>* fpMolWaterDensity;
00075 
00076   G4double killBelowEnergy;  
00077   G4double lowEnergyLimit;  
00078   G4double highEnergyLimit; 
00079   G4bool isInitialised;
00080   G4int verboseLevel;
00081   
00082   // Cross section
00083   
00084   typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
00085   MapFile tableFile;
00086 
00087   typedef std::map<G4String,G4DNACrossSectionDataSet*,std::less<G4String> > MapData;
00088   MapData tableData;
00089   
00090   // Final state
00091 
00092   //G4double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double theta);
00093 
00094   G4double Theta(G4ParticleDefinition * aParticleDefinition, G4double k, G4double integrDiff);
00095   
00096   G4double LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
00097 
00098   G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
00099    
00100   G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
00101    
00102   G4double QuadInterpolator(G4double e11, 
00103                             G4double e12, 
00104                             G4double e21, 
00105                             G4double e22, 
00106                             G4double x11,
00107                             G4double x12, 
00108                             G4double x21, 
00109                             G4double x22, 
00110                             G4double t1, 
00111                             G4double t2, 
00112                             G4double t, 
00113                             G4double e);
00114 
00115   typedef std::map<double, std::map<double, double> > TriDimensionMap;
00116 
00117   TriDimensionMap eDiffCrossSectionData;
00118   std::vector<double> eTdummyVec;
00119 
00120   typedef std::map<double, std::vector<double> > VecMap;
00121   VecMap eVecm;
00122    
00123   G4double RandomizeCosTheta(G4double k);
00124    
00125   //
00126    
00127   G4DNAChampionElasticModel & operator=(const  G4DNAChampionElasticModel &right);
00128   G4DNAChampionElasticModel(const  G4DNAChampionElasticModel&);
00129 
00130 };
00131 
00132 
00133 inline void G4DNAChampionElasticModel::SetKillBelowThreshold (G4double /*threshold*/) 
00134 { 
00135 
00136 // SI - commented on 19/06/2013
00137 /*
00138   killBelowEnergy = threshold; 
00139     
00140   if (threshold < 1*eV)
00141      G4Exception ("*** WARNING : the G4DNAChampionElasticModel class is not validated below 1 eV !","",JustWarning,"") ;
00142 
00143   if (threshold < 0.025*eV) threshold = 0.025*eV;
00144 */
00145 
00146   G4Exception ("*** WARNING : G4DNAChampionElasticModel::SetKillBelowThreshold INACTIVE for now","",JustWarning,"") ;
00147             
00148 }                
00149 
00150 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00151 
00152 #endif

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