Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // CPA100 ionisation model class for electrons 26 // CPA100 ionisation model class for electrons 27 // 27 // 28 // Based on the work of M. Terrissol and M. C. 28 // Based on the work of M. Terrissol and M. C. Bordage 29 // 29 // 30 // Users are requested to cite the following p 30 // Users are requested to cite the following papers: 31 // - M. Terrissol, A. Baudre, Radiat. Prot. Do 31 // - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 32 // - M.C. Bordage, J. Bordes, S. Edel, M. Terr << 32 // - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, 33 // M. Bardies, N. Lampe, S. Incerti, Phys. M 33 // M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 34 // 34 // 35 // Authors of this class: << 35 // Authors of this class: 36 // M.C. Bordage, M. Terrissol, S. Edel, J. Bor 36 // M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti 37 // 37 // 38 // 15.01.2014: creation 38 // 15.01.2014: creation 39 // 39 // 40 // Based on the study by S. Zein et. al. Nucl. << 41 // 1/2/2023 : Hoang added modification for DNA << 42 40 43 #ifndef G4DNACPA100IonisationModel_h 41 #ifndef G4DNACPA100IonisationModel_h 44 #define G4DNACPA100IonisationModel_h 1 42 #define G4DNACPA100IonisationModel_h 1 45 43 46 #include "G4DNACPA100IonisationStructure.hh" << 44 #include "G4VEmModel.hh" 47 #include "G4DNACrossSectionDataSet.hh" << 48 #include "G4Electron.hh" << 49 #include "G4LogLogInterpolation.hh" << 50 #include "G4NistManager.hh" << 51 #include "G4ParticleChangeForGamma.hh" 45 #include "G4ParticleChangeForGamma.hh" 52 #include "G4ProductionCutsTable.hh" 46 #include "G4ProductionCutsTable.hh" 53 #include "G4VAtomDeexcitation.hh" << 54 #include "G4VDNAModel.hh" << 55 << 56 class G4DNACPA100IonisationModel : public G4VD << 57 { << 58 using TriDimensionMap = << 59 std::map<std::size_t, << 60 std::map<const G4ParticleDefini << 61 std::map<G4int, std::m << 62 using VecMap = << 63 std::map<std::size_t, << 64 std::map<const G4ParticleDefini << 65 using VecMapWithShell = << 66 std::map<std::size_t, << 67 std::map<const G4ParticleDefini << 68 std::map<G4double, std << 69 using PartKineticInMat = << 70 const std::tuple<std::size_t /*Mat*/, G4 << 71 << 72 public: << 73 explicit G4DNACPA100IonisationModel(const << 74 const << 75 << 76 ~G4DNACPA100IonisationModel() override = d << 77 << 78 void Initialise(const G4ParticleDefinition << 79 << 80 G4double CrossSectionPerVolume(const G4Mat << 81 G4double ek << 82 << 83 void SampleSecondaries(std::vector<G4Dynam << 84 const G4DynamicPart << 85 << 86 G4double DifferentialCrossSection(PartKine << 87 << 88 // G4double DifferentialCrossSection(const << 89 // const << 90 // ioniz << 91 << 92 inline void SelectFasterComputation(G4bool << 93 << 94 inline void SelectUseDcs(G4bool input); << 95 47 96 inline void SelectStationary(G4bool input) << 48 #include "G4DNACrossSectionDataSet.hh" 97 << 49 #include "G4Electron.hh" 98 G4DNACPA100IonisationModel& operator=(cons << 50 #include "G4Proton.hh" 99 G4DNACPA100IonisationModel(const G4DNACPA1 << 100 void ReadDiffCSFile(const std::size_t& mat << 101 const G4String& file, << 102 << 103 protected: << 104 G4ParticleChangeForGamma* fParticleChangeF << 105 << 106 private: << 107 G4bool statCode = false; << 108 G4bool fasterCode = true; << 109 G4bool useDcs = false; << 110 << 111 // const std::vector<G4double>* fpMolMate << 112 << 113 // Deexcitation manager to produce fluo ph << 114 G4VAtomDeexcitation* fAtomDeexcitation = n << 115 << 116 G4bool isInitialised = false; << 117 G4int verboseLevel = 0; << 118 51 119 G4DNACPA100IonisationStructure iStructure; << 52 #include "G4LogLogInterpolation.hh" >> 53 //#include "G4DNACPA100LogLogInterpolation.hh" 120 54 121 G4double RandomizeEjectedElectronEnergy(Pa << 55 #include "G4DNACPA100WaterIonisationStructure.hh" >> 56 #include "G4VAtomDeexcitation.hh" >> 57 #include "G4NistManager.hh" 122 58 123 G4double RandomizeEjectedElectronEnergyFro << 124 59 125 G4double RandomizeEjectedElectronEnergyFro << 60 class G4DNACPA100IonisationModel : public G4VEmModel >> 61 { 126 62 127 G4double RandomTransferedEnergy(PartKineti << 63 public: 128 64 129 void RandomizeEjectedElectronDirection(G4P << 65 G4DNACPA100IonisationModel(const G4ParticleDefinition* p = 0, 130 G4d << 66 const G4String& nam = "DNACPA100IonisationModel"); 131 G4d << 132 G4d << 133 67 134 G4double Interpolate(G4double e1, G4double << 68 virtual ~G4DNACPA100IonisationModel(); 135 69 136 G4double QuadInterpolator(G4double e11, G4 << 70 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector& = *(new G4DataVector())); 137 G4double x12, G4 << 138 G4double t, G4do << 139 71 140 TriDimensionMap diffCrossSectionData, fEne << 72 virtual G4double CrossSectionPerVolume( const G4Material* material, 141 std::map<std::size_t, std::map<const G4Par << 73 const G4ParticleDefinition* p, 142 fTMapWithVec; << 74 G4double ekin, 143 VecMap fEMapWithVector; << 75 G4double emin, 144 VecMapWithShell fProbaShellMap; << 76 G4double emax); >> 77 >> 78 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*, >> 79 const G4MaterialCutsCouple*, >> 80 const G4DynamicParticle*, >> 81 G4double tmin, >> 82 G4double maxEnergy); >> 83 >> 84 G4double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell); >> 85 >> 86 inline void SelectFasterComputation(G4bool input); >> 87 >> 88 inline void SelectUseDcs(G4bool input); >> 89 >> 90 inline void SelectStationary(G4bool input); >> 91 >> 92 protected: >> 93 >> 94 G4ParticleChangeForGamma* fParticleChangeForGamma; >> 95 >> 96 private: >> 97 >> 98 G4bool statCode; >> 99 >> 100 G4bool fasterCode; >> 101 G4bool useDcs; >> 102 >> 103 // Water density table >> 104 const std::vector<G4double>* fpMolWaterDensity; >> 105 >> 106 // Deexcitation manager to produce fluo photons and e- >> 107 G4VAtomDeexcitation* fAtomDeexcitation; >> 108 >> 109 std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit; >> 110 std::map<G4String,G4double,std::less<G4String> > highEnergyLimit; >> 111 >> 112 G4bool isInitialised; >> 113 G4int verboseLevel; >> 114 >> 115 // Cross section >> 116 >> 117 typedef std::map<G4String,G4String,std::less<G4String> > MapFile; >> 118 MapFile tableFile; >> 119 >> 120 typedef std::map<G4String,G4DNACrossSectionDataSet*,std::less<G4String> > MapData; >> 121 MapData tableData; >> 122 >> 123 // Final state >> 124 >> 125 G4DNACPA100WaterIonisationStructure waterStructure; >> 126 >> 127 G4double RandomizeEjectedElectronEnergy(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; >> 128 >> 129 G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; >> 130 >> 131 G4double RandomizeEjectedElectronEnergyFromCompositionSampling(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; >> 132 >> 133 G4double RandomTransferedEnergy(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; >> 134 >> 135 void RandomizeEjectedElectronDirection(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4double >> 136 outgoingParticleEnergy, G4double & cosTheta, G4double & phi ); >> 137 >> 138 G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); >> 139 >> 140 G4double QuadInterpolator( G4double e11, >> 141 G4double e12, >> 142 G4double e21, >> 143 G4double e22, >> 144 G4double x11, >> 145 G4double x12, >> 146 G4double x21, >> 147 G4double x22, >> 148 G4double t1, >> 149 G4double t2, >> 150 G4double t, >> 151 G4double e); >> 152 >> 153 typedef std::map<G4double, std::map<G4double, G4double> > TriDimensionMap; >> 154 >> 155 TriDimensionMap eDiffCrossSectionData[6]; >> 156 TriDimensionMap eNrjTransfData[6]; // for cumulated dcs >> 157 >> 158 std::vector<G4double> eTdummyVec; >> 159 >> 160 typedef std::map<G4double, std::vector<G4double> > VecMap; >> 161 >> 162 VecMap eVecm; >> 163 >> 164 VecMap eProbaShellMap[6]; // for cumulated dcs >> 165 >> 166 // Partial cross section >> 167 >> 168 G4int RandomSelect(G4double energy,const G4String& particle ); >> 169 >> 170 // >> 171 >> 172 G4DNACPA100IonisationModel & operator=(const G4DNACPA100IonisationModel &right); >> 173 G4DNACPA100IonisationModel(const G4DNACPA100IonisationModel&); 145 174 146 const G4Material* fpGuanine = nullptr; << 147 const G4Material* fpG4_WATER = nullptr; << 148 const G4Material* fpDeoxyribose = nullptr; << 149 const G4Material* fpCytosine = nullptr; << 150 const G4Material* fpThymine = nullptr; << 151 const G4Material* fpAdenine = nullptr; << 152 const G4Material* fpPhosphate = nullptr; << 153 const G4ParticleDefinition* fpParticle = n << 154 G4DNACPA100IonisationModel* fpModelData = << 155 }; 175 }; 156 176 157 //....oooOO0OOooo........oooOO0OOooo........oo 177 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 158 178 159 inline void G4DNACPA100IonisationModel::Select << 179 inline void G4DNACPA100IonisationModel::SelectFasterComputation (G4bool input) 160 { << 180 { 161 fasterCode = input; << 181 fasterCode = input; 162 } << 182 } 163 183 164 //....oooOO0OOooo........oooOO0OOooo........oo 184 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 165 185 166 inline void G4DNACPA100IonisationModel::Select << 186 inline void G4DNACPA100IonisationModel::SelectUseDcs (G4bool input) 167 { << 187 { 168 useDcs = input; << 188 useDcs = input; 169 } << 189 } 170 190 171 //....oooOO0OOooo........oooOO0OOooo........oo 191 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 172 192 173 //....oooOO0OOooo........oooOO0OOooo........oo 193 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 174 194 175 inline void G4DNACPA100IonisationModel::Select << 195 inline void G4DNACPA100IonisationModel::SelectStationary (G4bool input) 176 { << 196 { 177 statCode = input; << 197 statCode = input; 178 } << 198 } 179 199 180 //....oooOO0OOooo........oooOO0OOooo........oo 200 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 181 201 182 #endif 202 #endif 183 203