Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4OpticalSurface.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: G4OpticalSurface.hh 67044 2013-01-30 08:50:06Z 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 // mail: gum@triumf.ca
41 //
43 
44 #ifndef G4OpticalSurface_h
45 #define G4OpticalSurface_h 1
46 
48 // Includes
50 
51 #include "G4Types.hh"
52 #include "G4SurfaceProperty.hh"
53 
54 // Class Description:
55 // A optical surface class for use in the G4OpBoundaryProcess class.
56 // Contains the enumerations: G4OpticalSurfaceFinish, G4OpticalSurfaceType,
57 // and G4OpticalSurfaceModel.
58 // Class Description - End:
59 
61 {
62  polished, // smooth perfectly polished surface
63  polishedfrontpainted, // smooth top-layer (front) paint
64  polishedbackpainted, // same is 'polished' but with a back-paint
65 
66  ground, // rough surface
67  groundfrontpainted, // rough top-layer (front) paint
68  groundbackpainted, // same as 'ground' but with a back-paint
69 
70  polishedlumirrorair, // mechanically polished surface, with lumirror
71  polishedlumirrorglue, // mechanically polished surface, with lumirror & meltmount
72  polishedair, // mechanically polished surface
73  polishedteflonair, // mechanically polished surface, with teflon
74  polishedtioair, // mechanically polished surface, with tio paint
75  polishedtyvekair, // mechanically polished surface, with tyvek
76  polishedvm2000air, // mechanically polished surface, with esr film
77  polishedvm2000glue, // mechanically polished surface, with esr film & meltmount
78 
79  etchedlumirrorair, // chemically etched surface, with lumirror
80  etchedlumirrorglue, // chemically etched surface, with lumirror & meltmount
81  etchedair, // chemically etched surface
82  etchedteflonair, // chemically etched surface, with teflon
83  etchedtioair, // chemically etched surface, with tio paint
84  etchedtyvekair, // chemically etched surface, with tyvek
85  etchedvm2000air, // chemically etched surface, with esr film
86  etchedvm2000glue, // chemically etched surface, with esr film & meltmount
87 
88  groundlumirrorair, // rough-cut surface, with lumirror
89  groundlumirrorglue, // rough-cut surface, with lumirror & meltmount
90  groundair, // rough-cut surface
91  groundteflonair, // rough-cut surface, with teflon
92  groundtioair, // rough-cut surface, with tio paint
93  groundtyvekair, // rough-cut surface, with tyvek
94  groundvm2000air, // rough-cut surface, with esr film
95  groundvm2000glue // rough-cut surface, with esr film & meltmount
96 };
97 
99 {
100  glisur, // original GEANT3 model
101  unified, // UNIFIED model
102  LUT // Look-Up-Table model
103 };
104 
106 
108 // Class Definition
110 
112 {
113 
114 public: // Without description
115 
117  // Operators
119 
122 
123  G4int operator==(const G4OpticalSurface &right) const;
124  G4int operator!=(const G4OpticalSurface &right) const;
125 
126 public: // With description
127 
129  // Constructors and Destructor
131 
136  G4double value = 1.0);
137  // Constructor of an optical surface object.
138 
139 public: // Without description
140 
141  virtual ~G4OpticalSurface();
142 
144  // Methods
146 
147  // public methods
148 
149 public: // With description
150 
151  void SetType(const G4SurfaceType& type);
152 
153  inline G4OpticalSurfaceFinish GetFinish() const { return theFinish; }
154  // Returns the optical surface finish.
155  void SetFinish(const G4OpticalSurfaceFinish );
156  // Sets the optical surface finish.
157 
158  inline G4OpticalSurfaceModel GetModel() const { return theModel; }
159  // Returns the optical surface model used.
161  { theModel = model; }
162  // Sets the optical surface model to be followed.
163 
164  inline G4double GetSigmaAlpha() const { return sigma_alpha; }
165  // Returns an unified model surface parameter.
166  inline void SetSigmaAlpha(const G4double s_a) { sigma_alpha = s_a; }
167  // Sets an unified model surface parameter.
168 
169  G4double GetPolish() const { return polish; }
170  // Returns the optical surface polish type.
171  inline void SetPolish(const G4double plsh) { polish=plsh; }
172  // Sets the optical surface polish type.
173 
175  { return theMaterialPropertiesTable; }
176  // Retrieves the pointer of the G4MaterialPropertiesTable
177  // attached to optical surface.
178 
180  { theMaterialPropertiesTable = anMPT; }
181  // Attaches a G4MaterialPropertiesTable to the optical surface.
182 
183  void DumpInfo() const;
184  // Prints information about the optical surface.
185 
186  void ReadFile(void);
187  // Method to read the Look-Up-Table into array AngularDistribution
188 
190 
191  inline G4int GetThetaIndexMax(void) const { return thetaIndexMax; }
192  inline G4int GetPhiIndexMax(void) const { return phiIndexMax; }
193 
194 private:
195 
196 // ------------------
197 // Basic data members ( To define an optical surface)
198 // ------------------
199 
200  G4OpticalSurfaceModel theModel; // Surface model
201  G4OpticalSurfaceFinish theFinish; // Surface finish
202 
203  G4double sigma_alpha; // The sigma of micro-facet polar angle
204  G4double polish; // Polish parameter in glisur model
205 
206  G4MaterialPropertiesTable* theMaterialPropertiesTable;
207 
208  static const G4int incidentIndexMax = 91;
209  static const G4int thetaIndexMax = 45;
210  static const G4int phiIndexMax = 37;
211 
212  G4float* AngularDistribution;
213 
214  // Open LUT with Material and Integer Angle
215  FILE* readFileHandle;
216 
217 };
218 
220 // Inline methods
222 
223 inline
225  G4int thetaIndex,
226  G4int phiIndex)
227 {
228  return AngularDistribution[angleIncident+
229  thetaIndex*incidentIndexMax+
230  phiIndex*thetaIndexMax*incidentIndexMax];
231 }
232 
233 #endif /* G4OpticalSurface_h */