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 ////////////////////////////////////////////// << 27 // 26 // >> 27 // $Id: G4VXTRenergyLoss.hh,v 1.18 2006/06/29 19:55:55 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-08-03-patch-02 $ >> 29 // >> 30 // >> 31 /////////////////////////////////////////////////////////////////////////// >> 32 // 28 // base class for 'fast' parametrisation model 33 // base class for 'fast' parametrisation model describing X-ray transition 29 // created in some G4Envelope. Angular distrib << 34 // created in some G4Envelope. Anglur distribuiton is very rough !!! (see DoIt 30 // method 35 // method 31 // << 36 // 32 // History: 37 // History: 33 // 06.10.05 V. Grichine first step to discret << 38 // 06.10.05 V. Grichine first step to discrete process 34 // 15.01.02 V. Grichine first version << 39 // 15.01.02 V. Grichine first version 35 // 28.07.05, P.Gumplinger add G4ProcessType to 40 // 28.07.05, P.Gumplinger add G4ProcessType to constructor 36 // 28.09.07, V.Ivanchenko general cleanup with << 41 // 37 // 19.09.21, V. Grichine, set/get functions fo << 38 42 39 #ifndef G4VXTRenergyLoss_h << 40 #define G4VXTRenergyLoss_h 1 << 41 43 >> 44 #ifndef G4XTRenergyLoss_h >> 45 #define G4XTRenergyLoss_h 1 >> 46 >> 47 >> 48 #include <complex> 42 #include "globals.hh" 49 #include "globals.hh" 43 #include "G4Gamma.hh" << 50 #include "Randomize.hh" >> 51 44 #include "G4LogicalVolume.hh" 52 #include "G4LogicalVolume.hh" 45 #include "G4Material.hh" << 53 46 #include "G4ParticleChange.hh" << 47 #include "G4PhysicsTable.hh" 54 #include "G4PhysicsTable.hh" >> 55 #include "G4PhysicsLogVector.hh" >> 56 #include "G4Gamma.hh" >> 57 #include "G4ThreeVector.hh" >> 58 #include "G4ParticleMomentum.hh" 48 #include "G4Step.hh" 59 #include "G4Step.hh" 49 #include "G4Track.hh" 60 #include "G4Track.hh" >> 61 #include "G4VContinuousProcess.hh" 50 #include "G4VDiscreteProcess.hh" 62 #include "G4VDiscreteProcess.hh" >> 63 #include "G4DynamicParticle.hh" >> 64 #include "G4Material.hh" >> 65 #include "G4PhysicsTable.hh" >> 66 #include "G4MaterialPropertiesTable.hh" >> 67 #include "G4PhysicsOrderedFreeVector.hh" >> 68 #include "G4Integrator.hh" >> 69 #include "G4ParticleChange.hh" >> 70 >> 71 51 72 52 class G4SandiaTable; << 53 class G4VParticleChange; 73 class G4VParticleChange; 54 class G4PhysicsFreeVector; 74 class G4PhysicsFreeVector; 55 class G4PhysicsLinearVector; << 56 class G4PhysicsLogVector; << 57 75 58 class G4VXTRenergyLoss : public G4VDiscretePro << 76 class G4XTRenergyLoss : public G4VDiscreteProcess // G4VContinuousProcess 59 { 77 { 60 public: << 78 public: 61 explicit G4VXTRenergyLoss(G4LogicalVolume* a << 79 62 G4Material*, G4dou << 80 G4XTRenergyLoss (G4LogicalVolume *anEnvelope,G4Material*,G4Material*, 63 const G4String& pr << 81 G4double,G4double,G4int, 64 G4ProcessType type << 82 const G4String & processName = "XTRenergyLoss", 65 virtual ~G4VXTRenergyLoss(); << 83 G4ProcessType type = fElectromagnetic); >> 84 virtual ~G4XTRenergyLoss (); >> 85 >> 86 // These virtual has to be implemented in inherited particular TR radiators >> 87 >> 88 virtual G4double GetStackFactor( G4double energy, G4double gamma, >> 89 G4double varAngle ); >> 90 66 91 67 virtual void ProcessDescription(std::ostream << 92 G4bool IsApplicable(const G4ParticleDefinition&); 68 virtual void DumpInfo() const override { Pro << 69 93 70 G4VXTRenergyLoss(G4VXTRenergyLoss&) = delete << 94 G4double GetContinuousStepLimit(const G4Track& aTrack, 71 G4VXTRenergyLoss& operator=(const G4VXTRener << 95 G4double , >> 96 G4double , >> 97 G4double& ); >> 98 // Returns the continuous step limit defined by the XTR process. 72 99 73 // Virtual methods to be implemented in inhe << 100 G4VParticleChange* AlongStepDoIt(const G4Track& aTrack, 74 virtual G4double GetStackFactor(G4double ene << 101 const G4Step& aStep); 75 G4double var << 76 102 77 virtual G4bool IsApplicable(const G4Particle << 103 G4VParticleChange* PostStepDoIt(const G4Track& aTrack, >> 104 const G4Step& aStep); 78 105 79 virtual G4VParticleChange* PostStepDoIt(cons << 106 G4double GetMeanFreePath(const G4Track& aTrack, 80 cons << 107 G4double previousStepSize, >> 108 G4ForceCondition* condition); 81 109 82 virtual G4double GetMeanFreePath(const G4Tra << 110 void BuildPhysicsTable(const G4ParticleDefinition&); 83 G4double pr << 111 void BuildTable() ; 84 G4ForceCond << 112 void BuildEnergyTable() ; >> 113 void BuildAngleTable() ; >> 114 void BuildGlobalAngleTable() ; 85 115 86 virtual void BuildPhysicsTable(const G4Parti << 116 G4complex OneInterfaceXTRdEdx( G4double energy, 87 void BuildEnergyTable(); << 117 G4double gamma, 88 void BuildAngleForEnergyBank(); << 118 G4double varAngle ) ; 89 119 90 void BuildTable(){}; << 120 G4double SpectralAngleXTRdEdx(G4double varAngle) ; 91 void BuildAngleTable(); << 92 void BuildGlobalAngleTable(); << 93 121 94 G4complex OneInterfaceXTRdEdx(G4double energ << 122 virtual G4double SpectralXTRdEdx(G4double energy) ; 95 G4double varAn << 96 123 97 G4double SpectralAngleXTRdEdx(G4double varAn << 124 G4double AngleSpectralXTRdEdx(G4double energy) ; 98 125 99 virtual G4double SpectralXTRdEdx(G4double en << 126 G4double AngleXTRdEdx(G4double varAngle) ; 100 127 101 G4double AngleSpectralXTRdEdx(G4double energ << 102 128 103 G4double AngleXTRdEdx(G4double varAngle); << 129 ///////////////////////////////////////////////////////////// >> 130 >> 131 G4double OneBoundaryXTRNdensity( G4double energy, >> 132 G4double gamma, >> 133 G4double varAngle ) const ; 104 134 105 G4double OneBoundaryXTRNdensity(G4double ene << 106 G4double var << 107 135 108 // for photon energy distribution tables 136 // for photon energy distribution tables 109 G4double XTRNSpectralAngleDensity(G4double v << 110 G4double XTRNSpectralDensity(G4double energy << 111 137 >> 138 G4double XTRNSpectralAngleDensity(G4double varAngle) ; >> 139 G4double XTRNSpectralDensity(G4double energy) ; >> 140 112 // for photon angle distribution tables 141 // for photon angle distribution tables 113 G4double XTRNAngleSpectralDensity(G4double e << 114 G4double XTRNAngleDensity(G4double varAngle) << 115 142 116 void GetNumberOfPhotons(); << 143 G4double XTRNAngleSpectralDensity(G4double energy) ; >> 144 G4double XTRNAngleDensity(G4double varAngle) ; >> 145 >> 146 void GetNumberOfPhotons() ; 117 147 118 // Auxiliary functions for plate/gas materia 148 // Auxiliary functions for plate/gas material parameters 119 G4double GetPlateFormationZone(G4double, G4d << 149 120 G4complex GetPlateComplexFZ(G4double, G4doub << 150 G4double GetPlateFormationZone(G4double,G4double,G4double); 121 void ComputePlatePhotoAbsCof(); << 151 G4complex GetPlateComplexFZ(G4double,G4double,G4double); 122 G4double GetPlateLinearPhotoAbs(G4double); << 152 void ComputePlatePhotoAbsCof(); 123 void GetPlateZmuProduct(); << 153 G4double GetPlateLinearPhotoAbs(G4double); 124 G4double GetPlateZmuProduct(G4double, G4doub << 154 void GetPlateZmuProduct() ; 125 << 155 G4double GetPlateZmuProduct(G4double,G4double,G4double); 126 G4double GetGasFormationZone(G4double, G4dou << 156 127 G4complex GetGasComplexFZ(G4double, G4double << 157 G4double GetGasFormationZone(G4double,G4double,G4double); 128 void ComputeGasPhotoAbsCof(); << 158 G4complex GetGasComplexFZ(G4double,G4double,G4double); 129 G4double GetGasLinearPhotoAbs(G4double); << 159 void ComputeGasPhotoAbsCof(); 130 void GetGasZmuProduct(); << 160 G4double GetGasLinearPhotoAbs(G4double); 131 G4double GetGasZmuProduct(G4double, G4double << 161 void GetGasZmuProduct(); >> 162 G4double GetGasZmuProduct(G4double,G4double,G4double); 132 163 133 G4double GetPlateCompton(G4double); 164 G4double GetPlateCompton(G4double); 134 G4double GetGasCompton(G4double); 165 G4double GetGasCompton(G4double); 135 G4double GetComptonPerAtom(G4double, G4doubl << 166 G4double GetComptonPerAtom(G4double,G4double); 136 << 137 G4double GetXTRrandomEnergy(G4double scaledT << 138 G4double GetXTRenergy(G4int iPlace, G4double << 139 167 140 G4double GetRandomAngle(G4double energyXTR, << 168 G4double GetXTRrandomEnergy( G4double scaledTkin, G4int iTkin ); 141 G4double GetAngleXTR(G4int iTR, G4double pos << 169 G4double GetXTRenergy( G4int iPlace, G4double position, G4int iTransfer ); 142 170 143 // set/get methods for class fields << 171 G4double GetRandomAngle( G4double energyXTR, G4int iTkin ); 144 << 172 G4double GetAngleXTR(G4int iTR,G4double position,G4int iAngle); 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 173 183 // modes of XTR angle distribution << 174 G4double GetGamma() {return fGamma;}; 184 << 175 G4double GetEnergy() {return fEnergy;}; 185 void SetFastAngle(G4bool fatr){ fFastAngle << 176 G4double GetVarAngle(){return fVarAngle;}; 186 G4bool GetFastAngle() { return fFastAngle; } << 177 187 void SetAngleRadDistr(G4bool fatr){ fAngle << 178 void SetGamma(G4double gamma) {fGamma = gamma;}; 188 G4bool GetAngleRadDistr() { return fAngleRad << 179 void SetEnergy(G4double energy) {fEnergy = energy;}; 189 << 180 void SetVarAngle(G4double varAngle){fVarAngle = varAngle;}; >> 181 void SetAngleRadDistr(G4bool pAngleRadDistr){fAngleRadDistr=pAngleRadDistr;}; >> 182 void SetCompton(G4bool pC){fCompton=pC;}; >> 183 void SetVerboseLevel(G4int verbose){fVerbose=verbose;}; 190 184 191 << 192 185 193 G4PhysicsLogVector* GetProtonVector() { retu << 186 static G4PhysicsLogVector* GetProtonVector(){ return fProtonEnergyVector;}; 194 G4int GetTotBin() { return fTotBin; }; << 187 static G4int GetTotBin(){return fTotBin;}; 195 G4PhysicsFreeVector* GetAngleVector(G4double 188 G4PhysicsFreeVector* GetAngleVector(G4double energy, G4int n); >> 189 protected: 196 190 197 protected: << 191 G4ParticleDefinition* fPtrGamma ; // pointer to TR photon 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 192 205 // static const members << 193 G4double* fGammaCutInKineticEnergy ; // TR photon cut in energy array 206 << 194 G4double fGammaTkinCut ; // Tkin cut of TR photon in current mat. 207 // min Tkin of proton in tables << 195 G4LogicalVolume* fEnvelope ; 208 static constexpr G4double fMinProtonTkin = 1 << 196 G4PhysicsTable* fAngleDistrTable ; 209 // max Tkin of proton in tables << 197 G4PhysicsTable* fEnergyDistrTable ; 210 static constexpr G4double fMaxProtonTkin = 1 << 198 211 // physical constants for plasma energy << 199 static G4PhysicsLogVector* fProtonEnergyVector ; 212 static constexpr G4double fPlasmaCof = << 200 static G4PhysicsLogVector* fXTREnergyVector ; 213 4. * CLHEP::pi * CLHEP::fine_structure_con << 201 214 CLHEP::hbarc / CLHEP::electron_mass_c2; << 202 215 static constexpr G4double fCofTR = CLHEP::fi << 203 static G4double fTheMinEnergyTR; // static min TR energy 216 << 204 static G4double fTheMaxEnergyTR; // static max TR energy 217 G4int fTotBin; // number of bins in log-ga << 205 G4double fMinEnergyTR; // min TR energy in material 218 G4int fBinTR; // number of bins in TR ene << 206 G4double fMaxEnergyTR; // max TR energy in material 219 G4int fKrange; << 207 static G4double fTheMaxAngle; // max theta of TR quanta 220 G4ParticleDefinition* fPtrGamma; // pointer << 208 static G4double fTheMinAngle; // max theta of TR quanta 221 << 209 G4double fMaxThetaTR; // max theta of TR quanta 222 G4double* fGammaCutInKineticEnergy; // TR p << 210 static G4int fBinTR; // number of bins in TR vectors 223 G4LogicalVolume* fEnvelope; << 211 224 G4PhysicsTable* fAngleDistrTable; << 212 static G4double fMinProtonTkin; // min Tkin of proton in tables 225 G4PhysicsTable* fEnergyDistrTable; << 213 static G4double fMaxProtonTkin; // max Tkin of proton in tables 226 G4PhysicsTable* fAngleForEnergyTable; << 214 static G4int fTotBin; // number of bins in log scale 227 G4PhysicsLogVector* fProtonEnergyVector; << 215 G4double fGamma; // current Lorentz factor 228 G4PhysicsLogVector* fXTREnergyVector; << 216 G4double fEnergy; // energy and 229 G4SandiaTable* fPlatePhotoAbsCof; << 217 G4double fVarAngle; // angle squared 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; 218 G4double fLambda; 248 G4double fSigma1; << 249 G4double fSigma2; // plasma energy Sq of ma << 250 219 251 G4int fMatIndex1; << 220 static G4double fPlasmaCof ; // physical consts for plasma energy 252 G4int fMatIndex2; << 221 static G4double fCofTR ; 253 G4int fPlateNumber; << 222 254 223 255 G4bool fExitFlux; 224 G4bool fExitFlux; 256 G4bool fFastAngle, fAngleRadDistr; << 225 G4bool fAngleRadDistr; 257 G4bool fCompton; 226 G4bool fCompton; >> 227 G4double fSigma1, fSigma2 ; // plasma energy Sq of matter1/2 >> 228 >> 229 G4int fMatIndex1, fMatIndex2 ; 258 230 259 G4int secID = -1; // creator modelID << 231 G4int fPlateNumber ; >> 232 G4double fTotalDist ; >> 233 G4double** fPlatePhotoAbsCof ; >> 234 G4int fPlateIntervalNumber ; >> 235 G4double fPlateThick ; >> 236 >> 237 G4double** fGasPhotoAbsCof ; >> 238 G4int fGasIntervalNumber ; >> 239 G4double fGasThick ; >> 240 G4double fAlphaPlate, fAlphaGas ; >> 241 >> 242 G4ParticleChange fParticleChange; >> 243 >> 244 G4PhysicsTable* fAngleForEnergyTable; >> 245 std::vector<G4PhysicsTable*> fAngleBank; >> 246 G4int fVerbose; 260 }; 247 }; >> 248 >> 249 typedef G4XTRenergyLoss G4VXTRenergyLoss; 261 250 262 #endif 251 #endif 263 252