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 // base class for 'fast' parametrisation model 29 // created in some G4Envelope. Angular distrib 30 // method 31 // 32 // History: 33 // 06.10.05 V. Grichine first step to discret 34 // 15.01.02 V. Grichine first version 35 // 28.07.05, P.Gumplinger add G4ProcessType to 36 // 28.09.07, V.Ivanchenko general cleanup with 37 // 19.09.21, V. Grichine, set/get functions fo 38 39 #ifndef G4VXTRenergyLoss_h 40 #define G4VXTRenergyLoss_h 1 41 42 #include "globals.hh" 43 #include "G4Gamma.hh" 44 #include "G4LogicalVolume.hh" 45 #include "G4Material.hh" 46 #include "G4ParticleChange.hh" 47 #include "G4PhysicsTable.hh" 48 #include "G4Step.hh" 49 #include "G4Track.hh" 50 #include "G4VDiscreteProcess.hh" 51 52 class G4SandiaTable; 53 class G4VParticleChange; 54 class G4PhysicsFreeVector; 55 class G4PhysicsLinearVector; 56 class G4PhysicsLogVector; 57 58 class G4VXTRenergyLoss : public G4VDiscretePro 59 { 60 public: 61 explicit G4VXTRenergyLoss(G4LogicalVolume* a 62 G4Material*, G4dou 63 const G4String& pr 64 G4ProcessType type 65 virtual ~G4VXTRenergyLoss(); 66 67 virtual void ProcessDescription(std::ostream 68 virtual void DumpInfo() const override { Pro 69 70 G4VXTRenergyLoss(G4VXTRenergyLoss&) = delete 71 G4VXTRenergyLoss& operator=(const G4VXTRener 72 73 // Virtual methods to be implemented in inhe 74 virtual G4double GetStackFactor(G4double ene 75 G4double var 76 77 virtual G4bool IsApplicable(const G4Particle 78 79 virtual G4VParticleChange* PostStepDoIt(cons 80 cons 81 82 virtual G4double GetMeanFreePath(const G4Tra 83 G4double pr 84 G4ForceCond 85 86 virtual void BuildPhysicsTable(const G4Parti 87 void BuildEnergyTable(); 88 void BuildAngleForEnergyBank(); 89 90 void BuildTable(){}; 91 void BuildAngleTable(); 92 void BuildGlobalAngleTable(); 93 94 G4complex OneInterfaceXTRdEdx(G4double energ 95 G4double varAn 96 97 G4double SpectralAngleXTRdEdx(G4double varAn 98 99 virtual G4double SpectralXTRdEdx(G4double en 100 101 G4double AngleSpectralXTRdEdx(G4double energ 102 103 G4double AngleXTRdEdx(G4double varAngle); 104 105 G4double OneBoundaryXTRNdensity(G4double ene 106 G4double var 107 108 // for photon energy distribution tables 109 G4double XTRNSpectralAngleDensity(G4double v 110 G4double XTRNSpectralDensity(G4double energy 111 112 // for photon angle distribution tables 113 G4double XTRNAngleSpectralDensity(G4double e 114 G4double XTRNAngleDensity(G4double varAngle) 115 116 void GetNumberOfPhotons(); 117 118 // Auxiliary functions for plate/gas materia 119 G4double GetPlateFormationZone(G4double, G4d 120 G4complex GetPlateComplexFZ(G4double, G4doub 121 void ComputePlatePhotoAbsCof(); 122 G4double GetPlateLinearPhotoAbs(G4double); 123 void GetPlateZmuProduct(); 124 G4double GetPlateZmuProduct(G4double, G4doub 125 126 G4double GetGasFormationZone(G4double, G4dou 127 G4complex GetGasComplexFZ(G4double, G4double 128 void ComputeGasPhotoAbsCof(); 129 G4double GetGasLinearPhotoAbs(G4double); 130 void GetGasZmuProduct(); 131 G4double GetGasZmuProduct(G4double, G4double 132 133 G4double GetPlateCompton(G4double); 134 G4double GetGasCompton(G4double); 135 G4double GetComptonPerAtom(G4double, G4doubl 136 137 G4double GetXTRrandomEnergy(G4double scaledT 138 G4double GetXTRenergy(G4int iPlace, G4double 139 140 G4double GetRandomAngle(G4double energyXTR, 141 G4double GetAngleXTR(G4int iTR, G4double pos 142 143 // set/get methods for class fields 144 145 void SetGamma(G4double gamma) { fGamma = 146 G4double GetGamma() { return fGamma; }; 147 void SetEnergy(G4double energy) { fEnerg 148 G4double GetEnergy() { return fEnergy; }; 149 void SetVarAngle(G4double varAngle) { fV 150 G4double GetVarAngle() { return fVarAngle; } 151 void SetCompton(G4bool pC) { fCompton = pC 152 G4bool GetCompton() { return fCompton; }; 153 154 G4int GetKrange(){ return fKrange;}; 155 void SetKrange( G4int kk ){ fKrange = kk;}; 156 157 158 void SetAlphaGas(G4double ag){ fAlphaGas 159 G4double GetAlphaGas() { return fAlphaGas; } 160 void SetAlphaPlate(G4double ap){ fAlphaP 161 G4double GetAlphaPlate() { return fAlphaPlat 162 163 void SetTheMinEnergyTR(G4double minetr){ 164 G4double GetTheMinEnergyTR() { return fTheMi 165 void SetTheMaxEnergyTR(G4double maxetr){ 166 G4double GetTheMaxEnergyTR() { return fTheMa 167 168 void SetMinEnergyTR(G4double minetr){ fM 169 G4double GetMinEnergyTR() { return fMinEnerg 170 void SetMaxEnergyTR(G4double maxetr){ fM 171 G4double GetMaxEnergyTR() { return fMaxEnerg 172 173 void SetTheMinAngle(G4double minang){ fT 174 G4double GetTheMinAngle() { return fTheMinAn 175 void SetTheMaxAngle(G4double maxang){ fT 176 G4double GetTheMaxAngle() { return fTheMaxAn 177 178 void SetMinThetaTR(G4double minatr){ fMi 179 G4double GetMinThetaTR() { return fMinThetaT 180 void SetMaxThetaTR(G4double maxatr){ fMa 181 G4double GetMaxThetaTR() { return fMaxThetaT 182 183 // modes of XTR angle distribution 184 185 void SetFastAngle(G4bool fatr){ fFastAngle 186 G4bool GetFastAngle() { return fFastAngle; } 187 void SetAngleRadDistr(G4bool fatr){ fAngle 188 G4bool GetAngleRadDistr() { return fAngleRad 189 190 191 192 193 G4PhysicsLogVector* GetProtonVector() { retu 194 G4int GetTotBin() { return fTotBin; }; 195 G4PhysicsFreeVector* GetAngleVector(G4double 196 197 protected: 198 // min TR energy 199 G4double fTheMinEnergyTR; 200 // max TR energy 201 G4double fTheMaxEnergyTR; 202 G4double fTheMinAngle; // min theta of TR 203 G4double fTheMaxAngle; // 1.e-4; // max 204 205 // static const members 206 207 // min Tkin of proton in tables 208 static constexpr G4double fMinProtonTkin = 1 209 // max Tkin of proton in tables 210 static constexpr G4double fMaxProtonTkin = 1 211 // physical constants for plasma energy 212 static constexpr G4double fPlasmaCof = 213 4. * CLHEP::pi * CLHEP::fine_structure_con 214 CLHEP::hbarc / CLHEP::electron_mass_c2; 215 static constexpr G4double fCofTR = CLHEP::fi 216 217 G4int fTotBin; // number of bins in log-ga 218 G4int fBinTR; // number of bins in TR ene 219 G4int fKrange; 220 G4ParticleDefinition* fPtrGamma; // pointer 221 222 G4double* fGammaCutInKineticEnergy; // TR p 223 G4LogicalVolume* fEnvelope; 224 G4PhysicsTable* fAngleDistrTable; 225 G4PhysicsTable* fEnergyDistrTable; 226 G4PhysicsTable* fAngleForEnergyTable; 227 G4PhysicsLogVector* fProtonEnergyVector; 228 G4PhysicsLogVector* fXTREnergyVector; 229 G4SandiaTable* fPlatePhotoAbsCof; 230 G4SandiaTable* fGasPhotoAbsCof; 231 232 G4ParticleChange fParticleChange; 233 std::vector<G4PhysicsTable*> fAngleBank; 234 235 G4double fGammaTkinCut; // Tkin cut of TR p 236 G4double fMinEnergyTR; // min TR energy i 237 G4double fMaxEnergyTR; // max TR energy i 238 G4double fMinThetaTR, fMaxThetaTR; // mi 239 G4double fTotalDist; 240 G4double fPlateThick; 241 G4double fGasThick; 242 G4double fAlphaPlate; 243 G4double fAlphaGas; 244 G4double fGamma; // current Lorentz fact 245 G4double fEnergy; // energy and 246 G4double fVarAngle; // angle squared! 247 G4double fLambda; 248 G4double fSigma1; 249 G4double fSigma2; // plasma energy Sq of ma 250 251 G4int fMatIndex1; 252 G4int fMatIndex2; 253 G4int fPlateNumber; 254 255 G4bool fExitFlux; 256 G4bool fFastAngle, fAngleRadDistr; 257 G4bool fCompton; 258 259 G4int secID = -1; // creator modelID 260 }; 261 262 #endif 263