Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/dna/models/include/G4DNACPA100IonisationModel.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/dna/models/include/G4DNACPA100IonisationModel.hh (Version 11.3.0) and /processes/electromagnetic/dna/models/include/G4DNACPA100IonisationModel.hh (Version 11.2.2)


  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.     40 // Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82
 41 // 1/2/2023 : Hoang added modification for DNA     41 // 1/2/2023 : Hoang added modification for DNA cross sections
 42                                                    42 
 43 #ifndef G4DNACPA100IonisationModel_h               43 #ifndef G4DNACPA100IonisationModel_h
 44 #define G4DNACPA100IonisationModel_h 1             44 #define G4DNACPA100IonisationModel_h 1
 45                                                    45 
 46 #include "G4DNACPA100IonisationStructure.hh"       46 #include "G4DNACPA100IonisationStructure.hh"
 47 #include "G4DNACrossSectionDataSet.hh"             47 #include "G4DNACrossSectionDataSet.hh"
 48 #include "G4Electron.hh"                           48 #include "G4Electron.hh"
 49 #include "G4LogLogInterpolation.hh"                49 #include "G4LogLogInterpolation.hh"
 50 #include "G4NistManager.hh"                        50 #include "G4NistManager.hh"
 51 #include "G4ParticleChangeForGamma.hh"             51 #include "G4ParticleChangeForGamma.hh"
 52 #include "G4ProductionCutsTable.hh"                52 #include "G4ProductionCutsTable.hh"
 53 #include "G4VAtomDeexcitation.hh"                  53 #include "G4VAtomDeexcitation.hh"
 54 #include "G4VDNAModel.hh"                          54 #include "G4VDNAModel.hh"
 55                                                    55 
 56 class G4DNACPA100IonisationModel : public G4VD     56 class G4DNACPA100IonisationModel : public G4VDNAModel
 57 {                                                  57 {
 58     using TriDimensionMap =                        58     using TriDimensionMap =
 59       std::map<std::size_t,                        59       std::map<std::size_t,
 60                std::map<const G4ParticleDefini     60                std::map<const G4ParticleDefinition*,
 61                         std::map<G4int, std::m     61                         std::map<G4int, std::map<G4double, std::map<G4double, G4double>>>>>;
 62     using VecMap =                                 62     using VecMap =
 63       std::map<std::size_t,                        63       std::map<std::size_t,
 64                std::map<const G4ParticleDefini     64                std::map<const G4ParticleDefinition*, std::map<G4double, std::vector<G4double>>>>;
 65     using VecMapWithShell =                        65     using VecMapWithShell =
 66       std::map<std::size_t,                        66       std::map<std::size_t,
 67                std::map<const G4ParticleDefini     67                std::map<const G4ParticleDefinition*,
 68                         std::map<G4double, std     68                         std::map<G4double, std::map<G4double, std::vector<G4double>>>>>;
 69     using PartKineticInMat =                       69     using PartKineticInMat =
 70       const std::tuple<std::size_t /*Mat*/, G4     70       const std::tuple<std::size_t /*Mat*/, G4double /*Energy*/, G4int /*shell*/>&;
 71                                                    71 
 72   public:                                          72   public:
 73     explicit G4DNACPA100IonisationModel(const      73     explicit G4DNACPA100IonisationModel(const G4ParticleDefinition* p = nullptr,
 74                                         const      74                                         const G4String& nam = "DNACPA100IonisationModel");
 75                                                    75 
 76     ~G4DNACPA100IonisationModel() override = d     76     ~G4DNACPA100IonisationModel() override = default;
 77                                                    77 
 78     void Initialise(const G4ParticleDefinition     78     void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
 79                                                    79 
 80     G4double CrossSectionPerVolume(const G4Mat     80     G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p,
 81                                    G4double ek     81                                    G4double ekin, G4double emin, G4double emax) override;
 82                                                    82 
 83     void SampleSecondaries(std::vector<G4Dynam     83     void SampleSecondaries(std::vector<G4DynamicParticle*>*, const G4MaterialCutsCouple*,
 84                            const G4DynamicPart     84                            const G4DynamicParticle*, G4double tmin, G4double maxEnergy) override;
 85                                                    85 
 86     G4double DifferentialCrossSection(PartKine     86     G4double DifferentialCrossSection(PartKineticInMat info, const G4double& energyTransfer);
 87                                                    87 
 88     // G4double DifferentialCrossSection(const     88     // G4double DifferentialCrossSection(const G4double& k,
 89     //                                   const     89     //                                   const G4double& energyTransfer, const G4int&
 90     //                                   ioniz     90     //                                   ionizationLevelIndex, const std::size_t& materialID);
 91                                                    91 
 92     inline void SelectFasterComputation(G4bool     92     inline void SelectFasterComputation(G4bool input);
 93                                                    93 
 94     inline void SelectUseDcs(G4bool input);        94     inline void SelectUseDcs(G4bool input);
 95                                                    95 
 96     inline void SelectStationary(G4bool input)     96     inline void SelectStationary(G4bool input);
 97                                                    97 
 98     G4DNACPA100IonisationModel& operator=(cons     98     G4DNACPA100IonisationModel& operator=(const G4DNACPA100IonisationModel& right) = delete;
 99     G4DNACPA100IonisationModel(const G4DNACPA1     99     G4DNACPA100IonisationModel(const G4DNACPA100IonisationModel&) = delete;
100     void ReadDiffCSFile(const std::size_t& mat    100     void ReadDiffCSFile(const std::size_t& materialID, const G4ParticleDefinition* p,
101                         const G4String& file,     101                         const G4String& file, const G4double& scaleFactor) override;
102                                                   102 
103   protected:                                      103   protected:
104     G4ParticleChangeForGamma* fParticleChangeF    104     G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr;
105                                                   105 
106   private:                                        106   private:
107     G4bool statCode = false;                      107     G4bool statCode = false;
108     G4bool fasterCode = true;                     108     G4bool fasterCode = true;
109     G4bool useDcs = false;                        109     G4bool useDcs = false;
110                                                   110 
111     //  const std::vector<G4double>* fpMolMate    111     //  const std::vector<G4double>* fpMolMaterialDensity;
112                                                   112 
113     // Deexcitation manager to produce fluo ph    113     // Deexcitation manager to produce fluo photons and e-
114     G4VAtomDeexcitation* fAtomDeexcitation = n    114     G4VAtomDeexcitation* fAtomDeexcitation = nullptr;
115                                                   115 
116     G4bool isInitialised = false;                 116     G4bool isInitialised = false;
117     G4int verboseLevel = 0;                       117     G4int verboseLevel = 0;
118                                                   118 
119     G4DNACPA100IonisationStructure iStructure;    119     G4DNACPA100IonisationStructure iStructure;
120                                                   120 
121     G4double RandomizeEjectedElectronEnergy(Pa    121     G4double RandomizeEjectedElectronEnergy(PartKineticInMat info);
122                                                   122 
123     G4double RandomizeEjectedElectronEnergyFro    123     G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(PartKineticInMat info);
124                                                   124 
125     G4double RandomizeEjectedElectronEnergyFro    125     G4double RandomizeEjectedElectronEnergyFromanalytical(PartKineticInMat info);
126                                                   126 
127     G4double RandomTransferedEnergy(PartKineti    127     G4double RandomTransferedEnergy(PartKineticInMat info);
128                                                   128 
129     void RandomizeEjectedElectronDirection(G4P    129     void RandomizeEjectedElectronDirection(G4ParticleDefinition* aParticleDefinition,
130                                            G4d    130                                            G4double incomingParticleEnergy,
131                                            G4d    131                                            G4double outgoingParticleEnergy, G4double& cosTheta,
132                                            G4d    132                                            G4double& phi);
133                                                   133 
134     G4double Interpolate(G4double e1, G4double    134     G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
135                                                   135 
136     G4double QuadInterpolator(G4double e11, G4    136     G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double x11,
137                               G4double x12, G4    137                               G4double x12, G4double x21, G4double x22, G4double t1, G4double t2,
138                               G4double t, G4do    138                               G4double t, G4double e);
139                                                   139 
140     TriDimensionMap diffCrossSectionData, fEne    140     TriDimensionMap diffCrossSectionData, fEnergySecondaryData;
141     std::map<std::size_t, std::map<const G4Par    141     std::map<std::size_t, std::map<const G4ParticleDefinition*, std::vector<G4double>>>
142       fTMapWithVec;                               142       fTMapWithVec;
143     VecMap fEMapWithVector;                       143     VecMap fEMapWithVector;
144     VecMapWithShell fProbaShellMap;               144     VecMapWithShell fProbaShellMap;
145                                                   145 
146     const G4Material* fpGuanine = nullptr;        146     const G4Material* fpGuanine = nullptr;
147     const G4Material* fpG4_WATER = nullptr;       147     const G4Material* fpG4_WATER = nullptr;
148     const G4Material* fpDeoxyribose = nullptr;    148     const G4Material* fpDeoxyribose = nullptr;
149     const G4Material* fpCytosine = nullptr;       149     const G4Material* fpCytosine = nullptr;
150     const G4Material* fpThymine = nullptr;        150     const G4Material* fpThymine = nullptr;
151     const G4Material* fpAdenine = nullptr;        151     const G4Material* fpAdenine = nullptr;
152     const G4Material* fpPhosphate = nullptr;      152     const G4Material* fpPhosphate = nullptr;
153     const G4ParticleDefinition* fpParticle = n    153     const G4ParticleDefinition* fpParticle = nullptr;
154     G4DNACPA100IonisationModel* fpModelData =     154     G4DNACPA100IonisationModel* fpModelData = nullptr;
155 };                                                155 };
156                                                   156 
157 //....oooOO0OOooo........oooOO0OOooo........oo    157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
158                                                   158 
159 inline void G4DNACPA100IonisationModel::Select    159 inline void G4DNACPA100IonisationModel::SelectFasterComputation(G4bool input)
160 {                                                 160 {
161   fasterCode = input;                             161   fasterCode = input;
162 }                                                 162 }
163                                                   163 
164 //....oooOO0OOooo........oooOO0OOooo........oo    164 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
165                                                   165 
166 inline void G4DNACPA100IonisationModel::Select    166 inline void G4DNACPA100IonisationModel::SelectUseDcs(G4bool input)
167 {                                                 167 {
168   useDcs = input;                                 168   useDcs = input;
169 }                                                 169 }
170                                                   170 
171 //....oooOO0OOooo........oooOO0OOooo........oo    171 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
172                                                   172 
173 //....oooOO0OOooo........oooOO0OOooo........oo    173 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
174                                                   174 
175 inline void G4DNACPA100IonisationModel::Select    175 inline void G4DNACPA100IonisationModel::SelectStationary(G4bool input)
176 {                                                 176 {
177   statCode = input;                               177   statCode = input;
178 }                                                 178 }
179                                                   179 
180 //....oooOO0OOooo........oooOO0OOooo........oo    180 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
181                                                   181 
182 #endif                                            182 #endif
183                                                   183