00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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
00074 const std::vector<G4double>* fpMolWaterDensity;
00075
00076 G4double killBelowEnergy;
00077 G4double lowEnergyLimit;
00078 G4double highEnergyLimit;
00079 G4bool isInitialised;
00080 G4int verboseLevel;
00081
00082
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
00091
00092
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 )
00134 {
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 G4Exception ("*** WARNING : G4DNAChampionElasticModel::SetKillBelowThreshold INACTIVE for now","",JustWarning,"") ;
00147
00148 }
00149
00150
00151
00152 #endif