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: G4PAIModel 33 // 34 // Author: V. Grichine based on Vladimi 35 // 36 // Creation date: 05.10.2003 37 // 38 // Modifications: 39 // 08-04-05 Major optimisation of internal int 40 // 26-09-07 Fixed tmax computation (V.Ivantche 41 // 19.08.13 V.Ivanchenko extract data handling 42 // added sharing of internal data bet 43 // 44 // 45 // Class Description: 46 // 47 // Implementation of PAI model of energy loss 48 // delta-electron production by heavy charged 49 50 // ------------------------------------------- 51 // 52 53 #ifndef G4PAIModel_h 54 #define G4PAIModel_h 1 55 56 #include <CLHEP/Units/PhysicalConstants.h> 57 58 #include "G4VEmModel.hh" 59 #include "G4VEmFluctuationModel.hh" 60 #include "globals.hh" 61 #include <vector> 62 63 class G4Region; 64 class G4MaterialCutsCouple; 65 class G4ParticleChangeForLoss; 66 class G4PAIModelData; 67 68 class G4PAIModel final : public G4VEmModel, pu 69 { 70 71 public: 72 73 explicit G4PAIModel(const G4ParticleDefiniti 74 const G4String& nam = "PAI"); 75 76 ~G4PAIModel() final; 77 78 void Initialise(const G4ParticleDefinition*, 79 80 void InitialiseLocal(const G4ParticleDefinit 81 G4VEmModel* masterModel 82 83 G4double MinEnergyCut(const G4ParticleDefini 84 const G4MaterialCutsCo 85 86 G4double ComputeDEDXPerVolume(const G4Materi 87 const G4ParticleDefinition*, 88 G4double kineticEnergy, 89 G4double cutEnergy) final; 90 91 G4double CrossSectionPerVolume(const G4Mater 92 const G4ParticleDefinition*, 93 G4double kineticEnergy, 94 G4double cutEnergy, 95 G4double maxEnergy) final; 96 97 void SampleSecondaries(std::vector<G4Dynamic 98 const G4MaterialCutsCouple*, 99 const G4DynamicParticle*, 100 G4double tmin, 101 G4double maxEnergy) final; 102 103 G4double SampleFluctuations(const G4Material 104 const G4DynamicParticle*, 105 const G4double, const G4double, 106 const G4double, 107 108 G4double Dispersion(const G4Material*, const 109 const G4double, const G4double, 110 const G4double) final; 111 112 void DefineForRegion(const G4Region* r) fina 113 114 inline G4PAIModelData* GetPAIModelData(); 115 116 inline const std::vector<const G4MaterialCut 117 118 inline G4double ComputeMaxEnergy(G4double sc 119 120 inline void SetVerboseLevel(G4int verbose); 121 122 // hide assignment operator 123 G4PAIModel & operator=(const G4PAIModel &ri 124 G4PAIModel(const G4PAIModel&) = delete; 125 126 protected: 127 128 G4double MaxSecondaryEnergy(const G4Particle 129 G4double kinEner 130 131 private: 132 133 inline G4int FindCoupleIndex(const G4Materia 134 135 inline void SetParticle(const G4ParticleDefi 136 137 G4int fVerbose; 138 139 G4PAIModelData* fModelData; 140 141 std::vector<const G4MaterialCutsCouple*> fMa 142 std::vector<const G4Region*> fPAIRegion 143 144 const G4ParticleDefinition* fParticle; 145 const G4ParticleDefinition* fElectron; 146 const G4ParticleDefinition* fPositron; 147 G4ParticleChangeForLoss* fParticleChange; 148 149 G4double fMass; 150 G4double fRatio; 151 G4double fChargeSquare; 152 G4double fLowestTcut; 153 }; 154 155 inline G4PAIModelData* G4PAIModel::GetPAIModel 156 { 157 return fModelData; 158 } 159 160 inline const std::vector<const G4MaterialCutsC 161 G4PAIModel::GetVectorOfCouples() 162 { 163 return fMaterialCutsCoupleVector; 164 } 165 166 inline G4double G4PAIModel::ComputeMaxEnergy(G 167 { 168 return MaxSecondaryEnergy(fParticle, scaledE 169 } 170 171 inline void G4PAIModel::SetVerboseLevel(G4int 172 { 173 fVerbose=verbose; 174 } 175 176 inline G4int G4PAIModel::FindCoupleIndex(const 177 { 178 G4int idx = -1; 179 G4int jMatMax = (G4int)fMaterialCutsCoupleVe 180 for(G4int jMat = 0;jMat < jMatMax; ++jMat) { 181 if(couple == fMaterialCutsCoupleVector[jMa 182 idx = jMat; 183 break; 184 } 185 } 186 return idx; 187 } 188 189 inline void G4PAIModel::SetParticle(const G4Pa 190 { 191 if(fParticle != p) { 192 fParticle = p; 193 fMass = fParticle->GetPDGMass(); 194 fRatio = CLHEP::proton_mass_c2/fMass; 195 G4double q = fParticle->GetPDGCharge()/CLH 196 fChargeSquare = q*q; 197 } 198 } 199 200 #endif 201