Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4OpticalSurface.hh
이 파일의 문서화 페이지로 가기
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: G4OpticalSurface.hh 108421 2018-02-13 11:16:20Z gcosmo $
28 //
29 //
31 // G4OpticalSurface Definition
33 //
34 // File: G4OpticalSurface.hh
35 // Description: A optical surface class for use in G4OpBoundaryProcess
36 // Version: 2.0
37 // Created: 1997-06-26
38 // Author: Peter Gumplinger
39 // Updated: 1999-10-29 add method and class descriptors
40 // 2017-02-24 Mariele Stockhoff add DAVIS model
41 // mail: gum@triumf.ca
42 //
44 
45 #ifndef G4OpticalSurface_h
46 #define G4OpticalSurface_h 1
47 
49 // Includes
51 
52 #include "G4Types.hh"
53 #include "G4Physics2DVector.hh"
54 #include "G4SurfaceProperty.hh"
55 
56 // Class Description:
57 // A optical surface class for use in the G4OpBoundaryProcess class.
58 // Contains the enumerations: G4OpticalSurfaceFinish, G4OpticalSurfaceType,
59 // and G4OpticalSurfaceModel.
60 // Class Description - End:
61 
63 {
64  polished, // smooth perfectly polished surface
65  polishedfrontpainted, // smooth top-layer (front) paint
66  polishedbackpainted, // same is 'polished' but with a back-paint
67 
68  ground, // rough surface
69  groundfrontpainted, // rough top-layer (front) paint
70  groundbackpainted, // same as 'ground' but with a back-paint
71 
72  polishedlumirrorair, // mechanically polished surface, with lumirror
73  polishedlumirrorglue, // mechanically polished surface, with lumirror & meltmount
74  polishedair, // mechanically polished surface
75  polishedteflonair, // mechanically polished surface, with teflon
76  polishedtioair, // mechanically polished surface, with tio paint
77  polishedtyvekair, // mechanically polished surface, with tyvek
78  polishedvm2000air, // mechanically polished surface, with esr film
79  polishedvm2000glue, // mechanically polished surface, with esr film & meltmount
80 
81  etchedlumirrorair, // chemically etched surface, with lumirror
82  etchedlumirrorglue, // chemically etched surface, with lumirror & meltmount
83  etchedair, // chemically etched surface
84  etchedteflonair, // chemically etched surface, with teflon
85  etchedtioair, // chemically etched surface, with tio paint
86  etchedtyvekair, // chemically etched surface, with tyvek
87  etchedvm2000air, // chemically etched surface, with esr film
88  etchedvm2000glue, // chemically etched surface, with esr film & meltmount
89 
90  groundlumirrorair, // rough-cut surface, with lumirror
91  groundlumirrorglue, // rough-cut surface, with lumirror & meltmount
92  groundair, // rough-cut surface
93  groundteflonair, // rough-cut surface, with teflon
94  groundtioair, // rough-cut surface, with tio paint
95  groundtyvekair, // rough-cut surface, with tyvek
96  groundvm2000air, // rough-cut surface, with esr film
97  groundvm2000glue, // rough-cut surface, with esr film & meltmount
98 
99  // for DAVIS model
100  Rough_LUT, //rough surface
101  RoughTeflon_LUT, //rough surface wrapped in Teflon tape
102  RoughESR_LUT, //rough surface wrapped with ESR
103  RoughESRGrease_LUT, //rough surface wrapped with ESR
104  //and coupled with opical grease
105  Polished_LUT, //polished surface
106  PolishedTeflon_LUT, //polished surface wrapped in Teflon tape
107  PolishedESR_LUT, //polished surface wrapped with ESR
108  PolishedESRGrease_LUT, //polished surface wrapped with ESR
109  //and coupled with opical grease
110  Detector_LUT //polished surface with optical grease
111 };
112 
114 {
115  glisur, // original GEANT3 model
116  unified, // UNIFIED model
117  LUT, // Look-Up-Table model
118  DAVIS, // DAVIS model
119  dichroic // dichroic filter
120 };
121 
123 
125 // Class Definition
127 
129 {
130 
131 public: // Without description
132 
134  // Operators
136 
139 
140  G4int operator==(const G4OpticalSurface &right) const;
141  G4int operator!=(const G4OpticalSurface &right) const;
142 
143 public: // With description
144 
146  // Constructors and Destructor
148 
153  G4double value = 1.0);
154  // Constructor of an optical surface object.
155 
156 public: // Without description
157 
158  virtual ~G4OpticalSurface();
159 
161  // Methods
163 
164  // public methods
165 
166 public: // With description
167 
168  void SetType(const G4SurfaceType& type);
169 
170  inline G4OpticalSurfaceFinish GetFinish() const { return theFinish; }
171  // Returns the optical surface finish.
172  void SetFinish(const G4OpticalSurfaceFinish );
173  // Sets the optical surface finish.
174 
175  inline G4OpticalSurfaceModel GetModel() const { return theModel; }
176  // Returns the optical surface model used.
178  { theModel = model; }
179  // Sets the optical surface model to be followed.
180 
181  inline G4double GetSigmaAlpha() const { return sigma_alpha; }
182  // Returns an unified model surface parameter.
183  inline void SetSigmaAlpha(const G4double s_a) { sigma_alpha = s_a; }
184  // Sets an unified model surface parameter.
185 
186  G4double GetPolish() const { return polish; }
187  // Returns the optical surface polish type.
188  inline void SetPolish(const G4double plsh) { polish=plsh; }
189  // Sets the optical surface polish type.
190 
192  { return theMaterialPropertiesTable; }
193  // Retrieves the pointer of the G4MaterialPropertiesTable
194  // attached to optical surface.
195 
197  { theMaterialPropertiesTable = anMPT; }
198  // Attaches a G4MaterialPropertiesTable to the optical surface.
199 
200  void DumpInfo() const;
201  // Prints information about the optical surface.
202 
203  void ReadLUTFile(void);
204  // Method to read the Look-Up-Table into array AngularDistribution
205 
207 
208  // for DAVIS model
209 
211  // Returns the AngularDistributionValue
212 
213  void ReadLUTDAVISFile(void);
214  // Method to read the Davis Look-Up-Table into array AngularDistribution
215 
216  void ReadReflectivityLUTFile(void);
217  // Method to read the Look-Up-Table for reflectivity
218 
220  // Returns the reflectivity value from the Davis Look-Up-Table
221 
222  G4int GetInmax(void) const;
223  // Returns the number of lines in the Davis Look-Up-Table
224 
225  G4int GetLUTbins(void) const;
226  // Returns the number of probability values per incidentangle
227 
228  G4int GetRefMax(void) const;
229  // Returns the number of reflectivity values per angle
230 
231  G4int GetThetaIndexMax(void) const;
232  G4int GetPhiIndexMax(void) const;
233 
234  void ReadDichroicFile(void);
235  // Method to read the dichroic surface data file into Dichroic
236 
238 
239 private:
240 
241 // ------------------
242 // Basic data members ( To define an optical surface)
243 // ------------------
244 
245  G4OpticalSurfaceModel theModel; // Surface model
247 
248  G4double sigma_alpha; // The sigma of micro-facet polar angle
249  G4double polish; // Polish parameter in glisur model
250 
252 
253  static const G4int incidentIndexMax = 91;
254  static const G4int thetaIndexMax = 45;
255  static const G4int phiIndexMax = 37;
256 
259 
260  // for DAVIS model
261  static const G4int indexmax = 7280001; // 3640001;
262  static const G4int RefMax = 90;
263  static const G4int LUTbins =20000;
266 };
267 
269 // Inline methods
271 
272 inline
274  G4int thetaIndex,
275  G4int phiIndex)
276 {
277  return AngularDistribution[angleIncident+
278  thetaIndex*incidentIndexMax+
280 }
281 
282 inline
284 {
285  return AngularDistributionLUT[i];
286 }
287 
288 inline
290 {
291  return Reflectivity[i];
292 }
293 
294 inline
296 {
297  return DichroicVector;
298 }
299 
300 #endif /* G4OpticalSurface_h */
void SetPolish(const G4double plsh)
const XML_Char * name
Definition: expat.h:151
static const G4int LUTbins
G4int GetPhiIndexMax(void) const
virtual ~G4OpticalSurface()
G4int GetThetaIndexMax(void) const
G4double GetPolish() const
float G4float
Definition: G4Types.hh:77
void ReadLUTDAVISFile(void)
G4double GetReflectivityLUTValue(G4int)
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
G4SurfaceType
G4OpticalSurfaceFinish theFinish
void ReadReflectivityLUTFile(void)
G4MaterialPropertiesTable * theMaterialPropertiesTable
static const G4int thetaIndexMax
G4OpticalSurfaceModel theModel
double G4double
Definition: G4Types.hh:76
G4Physics2DVector * GetDichroicVector()
const XML_Char int const XML_Char * value
Definition: expat.h:331
G4OpticalSurfaceModel GetModel() const
void SetType(const G4SurfaceType &type)
static const G4int RefMax
void ReadDichroicFile(void)
void SetSigmaAlpha(const G4double s_a)
G4Physics2DVector * DichroicVector
G4OpticalSurfaceFinish
G4float * AngularDistributionLUT
static const G4int incidentIndexMax
G4OpticalSurface & operator=(const G4OpticalSurface &right)
G4double GetSigmaAlpha() const
int G4int
Definition: G4Types.hh:78
G4double GetAngularDistributionValue(G4int, G4int, G4int)
G4int GetRefMax(void) const
G4int operator==(const G4OpticalSurface &right) const
G4float * AngularDistribution
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
G4int GetInmax(void) const
G4OpticalSurface(const G4OpticalSurface &right)
void DumpInfo() const
G4OpticalSurfaceFinish GetFinish() const
static const G4int phiIndexMax
G4double GetAngularDistributionValueLUT(G4int)
G4int operator!=(const G4OpticalSurface &right) const
const XML_Char XML_Content * model
Definition: expat.h:151
void SetModel(const G4OpticalSurfaceModel model)
G4OpticalSurfaceModel
G4int GetLUTbins(void) const
static const G4int indexmax
void SetFinish(const G4OpticalSurfaceFinish)