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