Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // ------------------------------------------- 27 // 28 // GEANT4 Class header file 29 // 30 // 31 // File name: G4LindhardSorensenIonModel 32 // 33 // Author: Alexander Bagulya & Vladimir 34 // 35 // Creation date: 16.04.2018 36 // 37 // 38 // Class Description: 39 // 40 // Implementation of ion ionisation energy los 41 // production by heavy charged particles accor 42 // J. Lindhard & A.H. Sorensen, Phys. Rev. A 5 43 44 // ------------------------------------------- 45 // 46 47 #ifndef G4LindhardSorensenIonModel_h 48 #define G4LindhardSorensenIonModel_h 1 49 50 #include <vector> 51 52 #include "G4VEmModel.hh" 53 #include "G4NistManager.hh" 54 55 class G4EmCorrections; 56 class G4ParticleChangeForLoss; 57 class G4LindhardSorensenData; 58 class G4BraggModel; 59 class G4BetheBlochModel; 60 class G4IonICRU73Data; 61 62 class G4LindhardSorensenIonModel : public G4VE 63 { 64 public: 65 66 explicit G4LindhardSorensenIonModel(const G4 67 const G4String& nam = "LindhardS 68 69 ~G4LindhardSorensenIonModel() override; 70 71 void Initialise(const G4ParticleDefinition*, 72 73 G4double MinEnergyCut(const G4ParticleDefini 74 const G4MaterialCutsCo 75 76 G4double ComputeCrossSectionPerElectron( 77 const G4ParticleDefinitio 78 G4double kineticEnergy, 79 G4double cutEnergy, 80 G4double maxEnergy); 81 82 G4double ComputeCrossSectionPerAtom( 83 const G4ParticleDefinition*, 84 G4double kineticEnergy, 85 G4double Z, G4double A, 86 G4double cutEnergy, 87 G4double maxEnergy) override; 88 89 G4double CrossSectionPerVolume(const G4Mater 90 const G4ParticleDefinition*, 91 G4double kineticEnergy, 92 G4double cutEnergy, 93 G4double maxEnergy) override; 94 95 G4double ComputeDEDXPerVolume(const G4Materi 96 const G4Partic 97 G4double kinet 98 G4double cutEn 99 100 G4double GetChargeSquareRatio(const G4Partic 101 const G4Materi 102 G4double kinet 103 104 G4double GetParticleCharge(const G4ParticleD 105 const G4Material* mat, 106 G4double kineticE 107 108 void CorrectionsAlongStep(const G4MaterialCu 109 const G4DynamicPar 110 const G4double& le 111 G4double& eloss) o 112 113 void SampleSecondaries(std::vector<G4Dynamic 114 const G4MaterialCutsC 115 const G4DynamicParticle*, 116 G4double tmin, 117 G4double maxEnergy) overrid 118 119 // hide assignment operator 120 G4LindhardSorensenIonModel & operator= 121 (const G4LindhardSorensenIonModel &right) = 122 G4LindhardSorensenIonModel(const G4Lindhard 123 124 protected: 125 126 G4double MaxSecondaryEnergy(const G4Particle 127 G4double kinEner 128 129 inline void SetChargeSquareRatio(G4double va 130 131 private: 132 133 void SetupParameters(); 134 135 void InitialiseLS(); 136 137 G4double ComputeDEDXPerVolumeLS(const G4Mate 138 const G4Part 139 G4double kinEnergy, G4double cutEner 140 141 inline void SetParticle(const G4ParticleDefi 142 143 // static const G4int MAXZION = 93; 144 145 static G4IonICRU73Data* fIonData; 146 static G4LindhardSorensenData* lsdata; 147 148 const G4ParticleDefinition* particle = nullp 149 G4ParticleDefinition* theElectron; 150 G4EmCorrections* corr; 151 G4ParticleChangeForLoss* fParticleChange = n 152 G4NistManager* nist; 153 G4BraggModel* fBraggModel; 154 G4BetheBlochModel* fBBModel; 155 156 G4int Zin = 1; 157 G4double mass = 0.0; 158 G4double tlimit = DBL_MAX; 159 G4double spin = 0.0; 160 G4double magMoment2 = 0.0; 161 G4double chargeSquare = 1.0; 162 G4double charge = 1.0; 163 G4double eRatio = 0.0; 164 G4double pRatio = 1.0; 165 G4double formfact = 0.0; 166 G4double twoln10; 167 G4double fElimit; 168 G4bool isFirst = false; 169 }; 170 171 //....oooOO0OOooo........oooOO0OOooo........oo 172 173 inline void 174 G4LindhardSorensenIonModel::SetParticle(const 175 { 176 if(particle != p) { 177 particle = p; 178 SetupParameters(); 179 } 180 } 181 182 //....oooOO0OOooo........oooOO0OOooo........oo 183 184 inline void G4LindhardSorensenIonModel::SetCha 185 { 186 chargeSquare = val; 187 } 188 189 //....oooOO0OOooo........oooOO0OOooo........oo 190 191 #endif 192