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