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