Geant4
9.6.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
geant4_9_6_p02
source
materials
include
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
60
enum
G4OpticalSurfaceFinish
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
98
enum
G4OpticalSurfaceModel
99
{
100
glisur
,
// original GEANT3 model
101
unified
,
// UNIFIED model
102
LUT
// Look-Up-Table model
103
};
104
105
class
G4MaterialPropertiesTable
;
106
108
// Class Definition
110
111
class
G4OpticalSurface
:
public
G4SurfaceProperty
112
{
113
114
public
:
// Without description
115
117
// Operators
119
120
G4OpticalSurface
(
const
G4OpticalSurface
&
right
);
121
G4OpticalSurface
&
operator=
(
const
G4OpticalSurface
&right);
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
132
G4OpticalSurface
(
const
G4String
&
name
,
133
G4OpticalSurfaceModel
model
=
glisur
,
134
G4OpticalSurfaceFinish
finish =
polished
,
135
G4SurfaceType
type =
dielectric_dielectric
,
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.
160
inline
void
SetModel
(
const
G4OpticalSurfaceModel
model
)
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
174
inline
G4MaterialPropertiesTable
*
GetMaterialPropertiesTable
()
const
175
{
return
theMaterialPropertiesTable; }
176
// Retrieves the pointer of the G4MaterialPropertiesTable
177
// attached to optical surface.
178
179
inline
void
SetMaterialPropertiesTable
(
G4MaterialPropertiesTable
*anMPT)
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
189
inline
G4double
GetAngularDistributionValue
(
G4int
,
G4int
,
G4int
);
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
224
G4double
G4OpticalSurface::GetAngularDistributionValue
(
G4int
angleIncident,
225
G4int
thetaIndex,
226
G4int
phiIndex)
227
{
228
return
AngularDistribution[angleIncident+
229
thetaIndex*incidentIndexMax+
230
phiIndex*thetaIndexMax*incidentIndexMax];
231
}
232
233
#endif
/* G4OpticalSurface_h */
Generated on Sat May 25 2013 14:33:20 for Geant4 by
1.8.4