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 G4DNADingfelderChargeIncreaseModel_h
00030 #define G4DNADingfelderChargeIncreaseModel_h 1
00031
00032 #include "G4VEmModel.hh"
00033 #include "G4ParticleChangeForGamma.hh"
00034 #include "G4ProductionCutsTable.hh"
00035
00036 #include "G4Electron.hh"
00037 #include "G4Proton.hh"
00038 #include "G4DNAGenericIonsManager.hh"
00039 #include "G4NistManager.hh"
00040
00041 class G4DNADingfelderChargeIncreaseModel : public G4VEmModel
00042 {
00043
00044 public:
00045
00046 G4DNADingfelderChargeIncreaseModel(const G4ParticleDefinition* p = 0,
00047 const G4String& nam = "DNADingfelderChargeIncreaseModel");
00048
00049 virtual ~G4DNADingfelderChargeIncreaseModel();
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 protected:
00066
00067 G4ParticleChangeForGamma* fParticleChangeForGamma;
00068
00069 private:
00070
00071 const std::vector<G4double>* fpMolWaterDensity;
00072
00073 std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit;
00074 std::map<G4String,G4double,std::less<G4String> > highEnergyLimit;
00075
00076 G4bool isInitialised;
00077 G4int verboseLevel;
00078
00079
00080
00081 G4double PartialCrossSection(G4double energy, G4int level, const G4ParticleDefinition* particle);
00082
00083 G4double Sum(G4double energy, const G4ParticleDefinition* particle);
00084
00085 G4int RandomSelect(G4double energy, const G4ParticleDefinition* particle);
00086
00087 G4int numberOfPartialCrossSections[2];
00088
00089 G4double f0[2][2];
00090 G4double a0[2][2];
00091 G4double a1[2][2];
00092 G4double b0[2][2];
00093 G4double b1[2][2];
00094 G4double c0[2][2];
00095 G4double d0[2][2];
00096 G4double x0[2][2];
00097 G4double x1[2][2];
00098
00099
00100
00101 G4int NumberOfFinalStates(G4ParticleDefinition* particleDefinition, G4int finalStateIndex);
00102
00103 G4ParticleDefinition* OutgoingParticleDefinition(G4ParticleDefinition* particleDefinition, G4int finalStateIndex);
00104
00105 G4double WaterBindingEnergyConstant(G4ParticleDefinition * aParticleDefinition, G4int finalStateIndex);
00106
00107 G4double OutgoingParticleBindingEnergyConstant(G4ParticleDefinition* particleDefinition, G4int finalStateIndex);
00108
00109 G4double IncomingParticleBindingEnergyConstant(G4ParticleDefinition* particleDefinition, G4int finalStateIndex);
00110
00111
00112
00113 G4DNADingfelderChargeIncreaseModel & operator=(const G4DNADingfelderChargeIncreaseModel &right);
00114 G4DNADingfelderChargeIncreaseModel(const G4DNADingfelderChargeIncreaseModel&);
00115
00116 };
00117
00118
00119
00120 #endif