Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VXTRenergyLoss.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29//
30///////////////////////////////////////////////////////////////////////////
31//
32// base class for 'fast' parametrisation model describing X-ray transition
33// created in some G4Envelope. Anglur distribuiton is very rough !!! (see DoIt
34// method
35//
36// History:
37// 06.10.05 V. Grichine first step to discrete process
38// 15.01.02 V. Grichine first version
39// 28.07.05, P.Gumplinger add G4ProcessType to constructor
40// 28.09.07, V.Ivanchenko general cleanup without change of algorithms
41//
42
43#ifndef G4VXTRenergyLoss_h
44#define G4VXTRenergyLoss_h 1
45
46#include <complex>
47#include "globals.hh"
48#include "Randomize.hh"
49
50#include "G4LogicalVolume.hh"
51
52#include "G4PhysicsTable.hh"
53#include "G4PhysicsLogVector.hh"
54#include "G4Gamma.hh"
55#include "G4ThreeVector.hh"
56#include "G4ParticleMomentum.hh"
57#include "G4Step.hh"
58#include "G4Track.hh"
60#include "G4VDiscreteProcess.hh"
61#include "G4DynamicParticle.hh"
62#include "G4Material.hh"
63#include "G4PhysicsTable.hh"
66#include "G4Integrator.hh"
67#include "G4ParticleChange.hh"
68
69class G4SandiaTable;
73
74class G4VXTRenergyLoss : public G4VDiscreteProcess // G4VContinuousProcess
75{
76public:
77
80 const G4String & processName = "XTRenergyLoss",
82 virtual ~G4VXTRenergyLoss ();
83
84 // These virtual has to be implemented in inherited particular TR radiators
85
86 virtual G4double GetStackFactor( G4double energy, G4double gamma,
87 G4double varAngle );
88
90
92 const G4Step& aStep);
93
94 G4double GetMeanFreePath(const G4Track& aTrack,
95 G4double previousStepSize,
97
99 void BuildEnergyTable() ;
101
102 void BuildTable(){} ;
103 void BuildAngleTable() ;
104 void BuildGlobalAngleTable() ;
105
107 G4double gamma,
108 G4double varAngle ) ;
109
111
112 virtual G4double SpectralXTRdEdx(G4double energy) ;
113
115
116 G4double AngleXTRdEdx(G4double varAngle) ;
117
118
119 /////////////////////////////////////////////////////////////
120
122 G4double gamma,
123 G4double varAngle ) const ;
124
125
126 // for photon energy distribution tables
127
130
131 // for photon angle distribution tables
132
135
136 void GetNumberOfPhotons() ;
137
138 // Auxiliary functions for plate/gas material parameters
139
144 void GetPlateZmuProduct() ;
146
151 void GetGasZmuProduct();
153
157
158 G4double GetXTRrandomEnergy( G4double scaledTkin, G4int iTkin );
159 G4double GetXTRenergy( G4int iPlace, G4double position, G4int iTransfer );
160
161 G4double GetRandomAngle( G4double energyXTR, G4int iTkin );
163
167
168 void SetGamma(G4double gamma) {fGamma = gamma;};
169 void SetEnergy(G4double energy) {fEnergy = energy;};
170 void SetVarAngle(G4double varAngle){fVarAngle = varAngle;};
171 void SetAngleRadDistr(G4bool pAngleRadDistr){fAngleRadDistr=pAngleRadDistr;};
172 void SetCompton(G4bool pC){fCompton=pC;};
173
177
178protected:
179
180 G4ParticleDefinition* fPtrGamma ; // pointer to TR photon
181
182 G4double* fGammaCutInKineticEnergy ; // TR photon cut in energy array
183
184 G4double fGammaTkinCut ; // Tkin cut of TR photon in current mat.
188
191
192 G4double fTheMinEnergyTR; // min TR energy
193 G4double fTheMaxEnergyTR; // max TR energy
194 G4double fMinEnergyTR; // min TR energy in material
195 G4double fMaxEnergyTR; // max TR energy in material
196 G4double fTheMaxAngle; // max theta of TR quanta
197 G4double fTheMinAngle; // max theta of TR quanta
198 G4double fMaxThetaTR; // max theta of TR quanta
199 G4int fBinTR; // number of bins in TR vectors
200
201 G4double fMinProtonTkin; // min Tkin of proton in tables
202 G4double fMaxProtonTkin; // max Tkin of proton in tables
203 G4int fTotBin; // number of bins in log scale
204 G4double fGamma; // current Lorentz factor
205 G4double fEnergy; // energy and
206 G4double fVarAngle; // angle squared
208
209 G4double fPlasmaCof ; // physical consts for plasma energy
211
216 G4double fSigma2; // plasma energy Sq of matter1/2
217
221
227
229
231
233
234 // G4double fEnergyForAngle;
235 // G4PhysicsLinearVector* fAngleVector;
237 std::vector<G4PhysicsTable*> fAngleBank;
238
239};
240
241#endif
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
G4ProcessType
@ fElectromagnetic
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
std::complex< G4double > G4complex
Definition: G4Types.hh:69
bool G4bool
Definition: G4Types.hh:67
Definition: G4Step.hh:78
G4double GetPlateLinearPhotoAbs(G4double)
G4double AngleSpectralXTRdEdx(G4double energy)
void SetEnergy(G4double energy)
G4double XTRNAngleDensity(G4double varAngle)
G4PhysicsTable * fEnergyDistrTable
G4double GetAngleXTR(G4int iTR, G4double position, G4int iAngle)
G4PhysicsTable * fAngleForEnergyTable
G4PhysicsLogVector * fProtonEnergyVector
G4PhysicsLogVector * fXTREnergyVector
G4double GetGasFormationZone(G4double, G4double, G4double)
G4SandiaTable * fPlatePhotoAbsCof
G4double OneBoundaryXTRNdensity(G4double energy, G4double gamma, G4double varAngle) const
G4PhysicsFreeVector * GetAngleVector(G4double energy, G4int n)
G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition)
G4PhysicsTable * fAngleDistrTable
G4double GetRandomAngle(G4double energyXTR, G4int iTkin)
G4complex GetPlateComplexFZ(G4double, G4double, G4double)
G4complex OneInterfaceXTRdEdx(G4double energy, G4double gamma, G4double varAngle)
G4double GetXTRenergy(G4int iPlace, G4double position, G4int iTransfer)
G4double XTRNAngleSpectralDensity(G4double energy)
void SetGamma(G4double gamma)
G4double SpectralAngleXTRdEdx(G4double varAngle)
G4double GetXTRrandomEnergy(G4double scaledTkin, G4int iTkin)
void SetAngleRadDistr(G4bool pAngleRadDistr)
G4SandiaTable * fGasPhotoAbsCof
void SetCompton(G4bool pC)
void BuildPhysicsTable(const G4ParticleDefinition &)
G4LogicalVolume * fEnvelope
std::vector< G4PhysicsTable * > fAngleBank
G4PhysicsLogVector * GetProtonVector()
virtual ~G4VXTRenergyLoss()
virtual G4double SpectralXTRdEdx(G4double energy)
void SetVarAngle(G4double varAngle)
G4double GetComptonPerAtom(G4double, G4double)
G4double GetGasCompton(G4double)
G4double XTRNSpectralAngleDensity(G4double varAngle)
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
G4double GetPlateFormationZone(G4double, G4double, G4double)
G4double GetGasLinearPhotoAbs(G4double)
G4double XTRNSpectralDensity(G4double energy)
virtual G4double GetStackFactor(G4double energy, G4double gamma, G4double varAngle)
G4ParticleDefinition * fPtrGamma
G4ParticleChange fParticleChange
G4double * fGammaCutInKineticEnergy
G4complex GetGasComplexFZ(G4double, G4double, G4double)
G4double GetPlateCompton(G4double)
G4bool IsApplicable(const G4ParticleDefinition &)
G4double AngleXTRdEdx(G4double varAngle)