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 // 26 // 27 // ------------------------------------------- 27 // ------------------------------------------------------------------- 28 // 28 // 29 // GEANT4 Class header file 29 // GEANT4 Class header file 30 // 30 // 31 // 31 // 32 // File name: G4BraggModel 32 // File name: G4BraggModel 33 // 33 // 34 // Author: Vladimir Ivanchenko 34 // Author: Vladimir Ivanchenko 35 // 35 // 36 // Creation date: 03.01.2002 36 // Creation date: 03.01.2002 37 // 37 // 38 // Modifications: 38 // Modifications: 39 // 23-12-02 V.Ivanchenko change interface in o 39 // 23-12-02 V.Ivanchenko change interface in order to moveto cut per region 40 // 24-01-03 Make models region aware (V.Ivanch 40 // 24-01-03 Make models region aware (V.Ivanchenko) 41 // 13-02-03 Add name (V.Ivanchenko) 41 // 13-02-03 Add name (V.Ivanchenko) 42 // 12-11-03 Fix for GenericIons (V.Ivanchenko) 42 // 12-11-03 Fix for GenericIons (V.Ivanchenko) 43 // 11-04-05 Major optimisation of internal int 43 // 11-04-05 Major optimisation of internal interfaces (V.Ivantchenko) 44 // 15-02-06 ComputeCrossSectionPerElectron, Co 44 // 15-02-06 ComputeCrossSectionPerElectron, ComputeCrossSectionPerAtom (mma) 45 // 25-04-06 Added stopping data from PSTAR (V. 45 // 25-04-06 Added stopping data from PSTAR (V.Ivanchenko) 46 // 12-08-08 Added methods GetParticleCharge, G 46 // 12-08-08 Added methods GetParticleCharge, GetChargeSquareRatio, 47 // CorrectionsAlongStep needed for io 47 // CorrectionsAlongStep needed for ions(V.Ivanchenko) 48 48 49 // 49 // 50 // Class Description: 50 // Class Description: 51 // 51 // 52 // Implementation of energy loss and delta-ele 52 // Implementation of energy loss and delta-electron production 53 // by heavy slow charged particles using ICRU' 53 // by heavy slow charged particles using ICRU'49 and NIST evaluated data 54 // for protons 54 // for protons 55 55 56 // ------------------------------------------- 56 // ------------------------------------------------------------------- 57 // 57 // 58 58 59 #ifndef G4BraggModel_h 59 #ifndef G4BraggModel_h 60 #define G4BraggModel_h 1 60 #define G4BraggModel_h 1 61 61 >> 62 #include <CLHEP/Units/PhysicalConstants.h> >> 63 62 #include "G4VEmModel.hh" 64 #include "G4VEmModel.hh" 63 #include "G4PSTARStopping.hh" 65 #include "G4PSTARStopping.hh" 64 66 65 class G4ParticleChangeForLoss; 67 class G4ParticleChangeForLoss; 66 class G4EmCorrections; 68 class G4EmCorrections; 67 class G4ICRU90StoppingData; 69 class G4ICRU90StoppingData; 68 class G4PSTARStopping; << 69 70 70 class G4BraggModel : public G4VEmModel 71 class G4BraggModel : public G4VEmModel 71 { 72 { 72 73 73 public: 74 public: 74 75 75 explicit G4BraggModel(const G4ParticleDefini 76 explicit G4BraggModel(const G4ParticleDefinition* p = nullptr, 76 const G4String& nam = "Bragg"); 77 const G4String& nam = "Bragg"); 77 78 78 ~G4BraggModel() override; 79 ~G4BraggModel() override; 79 80 80 void Initialise(const G4ParticleDefinition*, 81 void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; 81 82 82 G4double MinEnergyCut(const G4ParticleDefini 83 G4double MinEnergyCut(const G4ParticleDefinition*, 83 const G4MaterialCutsCouple* couple) over 84 const G4MaterialCutsCouple* couple) override; 84 85 85 G4double ComputeCrossSectionPerElectron( 86 G4double ComputeCrossSectionPerElectron( 86 const G4ParticleDefinition*, 87 const G4ParticleDefinition*, 87 G4double kineticEnergy, 88 G4double kineticEnergy, 88 G4double cutEnergy, 89 G4double cutEnergy, 89 G4double maxEnergy); 90 G4double maxEnergy); 90 91 91 G4double ComputeCrossSectionPerAtom( 92 G4double ComputeCrossSectionPerAtom( 92 const G4ParticleDefinition*, 93 const G4ParticleDefinition*, 93 G4double kineticEnergy, 94 G4double kineticEnergy, 94 G4double Z, G4double A, 95 G4double Z, G4double A, 95 G4double cutEnergy, 96 G4double cutEnergy, 96 G4double maxEnergy) override; 97 G4double maxEnergy) override; 97 98 98 G4double CrossSectionPerVolume(const G4Mater 99 G4double CrossSectionPerVolume(const G4Material*, 99 const G4ParticleDefinition*, 100 const G4ParticleDefinition*, 100 G4double kineticEnergy, 101 G4double kineticEnergy, 101 G4double cutEnergy, 102 G4double cutEnergy, 102 G4double maxEnergy) override; 103 G4double maxEnergy) override; 103 104 104 G4double ComputeDEDXPerVolume(const G4Materi 105 G4double ComputeDEDXPerVolume(const G4Material*, 105 const G4ParticleDefinition*, 106 const G4ParticleDefinition*, 106 G4double kineticEnergy, 107 G4double kineticEnergy, 107 G4double cutEnergy) override; 108 G4double cutEnergy) override; 108 109 109 void SampleSecondaries(std::vector<G4Dynamic 110 void SampleSecondaries(std::vector<G4DynamicParticle*>*, 110 const G4MaterialCutsCouple*, 111 const G4MaterialCutsCouple*, 111 const G4DynamicParticle*, 112 const G4DynamicParticle*, 112 G4double tmin, 113 G4double tmin, 113 G4double maxEnergy) override; 114 G4double maxEnergy) override; 114 115 115 // Compute ion charge 116 // Compute ion charge 116 G4double GetChargeSquareRatio(const G4Partic 117 G4double GetChargeSquareRatio(const G4ParticleDefinition*, 117 const G4Material*, 118 const G4Material*, 118 G4double kineticEnergy) override; 119 G4double kineticEnergy) override; 119 120 120 G4double GetParticleCharge(const G4ParticleD 121 G4double GetParticleCharge(const G4ParticleDefinition* p, 121 const G4Material* mat, 122 const G4Material* mat, 122 G4double kineticEnergy) override; 123 G4double kineticEnergy) override; 123 124 124 // hide assignment operator 125 // hide assignment operator 125 G4BraggModel & operator=(const G4BraggModel 126 G4BraggModel & operator=(const G4BraggModel &right) = delete; 126 G4BraggModel(const G4BraggModel&) = delete; 127 G4BraggModel(const G4BraggModel&) = delete; 127 128 128 protected: 129 protected: 129 130 130 void SetParticle(const G4ParticleDefinition* << 131 << 132 G4double MaxSecondaryEnergy(const G4Particle 131 G4double MaxSecondaryEnergy(const G4ParticleDefinition*, 133 G4double kinEnergy) final; 132 G4double kinEnergy) final; 134 133 >> 134 inline G4double GetChargeSquareRatio() const; >> 135 135 inline void SetChargeSquareRatio(G4double va 136 inline void SetChargeSquareRatio(G4double val); 136 137 137 private: 138 private: 138 139 >> 140 inline void SetParticle(const G4ParticleDefinition* p); >> 141 139 void HasMaterial(const G4Material* material) 142 void HasMaterial(const G4Material* material); 140 143 141 G4double StoppingPower(const G4Material* mat 144 G4double StoppingPower(const G4Material* material, 142 G4double kineticEnergy); 145 G4double kineticEnergy); 143 146 144 G4double ElectronicStoppingPower(G4double z, 147 G4double ElectronicStoppingPower(G4double z, 145 G4double ki 148 G4double kineticEnergy) const; 146 149 147 G4double DEDX(const G4Material* material, G4 150 G4double DEDX(const G4Material* material, G4double kineticEnergy); 148 151 149 G4bool MolecIsInZiegler1988(const G4Material 152 G4bool MolecIsInZiegler1988(const G4Material* material); 150 153 151 G4double ChemicalFactor(G4double kineticEner 154 G4double ChemicalFactor(G4double kineticEnergy, G4double eloss125) const; 152 155 153 protected: << 156 G4EmCorrections* corr = nullptr; 154 << 157 const G4ParticleDefinition* particle = nullptr; 155 const G4ParticleDefinition* particle = nullp << 158 G4ParticleDefinition* theElectron = nullptr; 156 G4ParticleDefinition* theElectron = nullptr; << 159 G4ParticleChangeForLoss* fParticleChange = nullptr; 157 G4ParticleChangeForLoss* fParticleChange = n << 160 G4ICRU90StoppingData* fICRU90 = nullptr; 158 << 161 159 const G4Material* currentMaterial = nullptr; << 162 const G4Material* currentMaterial = nullptr; 160 const G4Material* baseMaterial = nullptr; << 163 const G4Material* baseMaterial = nullptr; 161 << 164 162 G4EmCorrections* corr = nullptr; << 165 static G4PSTARStopping* fPSTAR; 163 << 166 164 static G4ICRU90StoppingData* fICRU90; << 167 G4double mass; 165 static G4PSTARStopping* fPSTAR; << 168 G4double spin; 166 << 169 G4double chargeSquare; 167 G4double mass = 0.0; << 170 G4double massRate; 168 G4double spin = 0.0; << 171 G4double ratio; 169 G4double chargeSquare = 1.0; << 170 G4double massRate = 1.0; << 171 G4double ratio = 1.0; << 172 G4double protonMassAMU = 1.007276; << 173 G4double lowestKinEnergy; 172 G4double lowestKinEnergy; >> 173 G4double protonMassAMU; 174 G4double theZieglerFactor; 174 G4double theZieglerFactor; 175 G4double expStopPower125; // Experimental S 175 G4double expStopPower125; // Experimental Stopping power at 125keV 176 176 177 G4int iMolecula = -1; // index in the mole << 177 G4int iMolecula = -1; // index in the molecula's table 178 G4int iPSTAR = -1; // index in NIST PST << 178 G4int iPSTAR = -1; // index in PSTAR 179 G4int iICRU90 = -1; << 179 G4int iICRU90 = -1; >> 180 G4bool isIon = false; >> 181 }; 180 182 181 private: << 183 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 182 184 183 G4bool isIon = false; << 185 inline void G4BraggModel::SetParticle(const G4ParticleDefinition* p) 184 G4bool isFirst = false; << 186 { 185 }; << 187 particle = p; >> 188 mass = particle->GetPDGMass(); >> 189 spin = particle->GetPDGSpin(); >> 190 G4double q = particle->GetPDGCharge()/CLHEP::eplus; >> 191 chargeSquare = q*q; >> 192 massRate = mass/CLHEP::proton_mass_c2; >> 193 ratio = CLHEP::electron_mass_c2/mass; >> 194 } >> 195 >> 196 inline G4double G4BraggModel::GetChargeSquareRatio() const >> 197 { >> 198 return chargeSquare; >> 199 } 186 200 187 inline void G4BraggModel::SetChargeSquareRatio 201 inline void G4BraggModel::SetChargeSquareRatio(G4double val) 188 { 202 { 189 chargeSquare = val; 203 chargeSquare = val; 190 } 204 } 191 205 192 //....oooOO0OOooo........oooOO0OOooo........oo 206 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 193 207 194 #endif 208 #endif 195 209