Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4OpticalSurface.cc
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// $Id$
27//
28//
29////////////////////////////////////////////////////////////////////////
30// Optical Surface Class Implementation
31////////////////////////////////////////////////////////////////////////
32//
33// File: G4OpticalSurface.cc
34// Description: An optical surface class for use in G4OpBoundaryProcess
35// Version: 2.0
36// Created: 1997-06-26
37// Author: Peter Gumplinger
38// mail: gum@triumf.ca
39//
40////////////////////////////////////////////////////////////////////////
41
42#include "G4ios.hh"
43#include "globals.hh"
44#include "G4OpticalSurface.hh"
45
46/////////////////////////
47// Class Implementation
48/////////////////////////
49
50 //////////////
51 // Operators
52 //////////////
53
55{
56 if (this != &right)
57 {
58 theName = right.theName;
59 theType = right.theType;
60 theModel = right.theModel;
61 theFinish = right.theFinish;
62 sigma_alpha = right.sigma_alpha;
63 polish = right.polish;
64 theMaterialPropertiesTable = right.theMaterialPropertiesTable;
65 AngularDistribution = right.AngularDistribution;
66 readFileHandle = right.readFileHandle;
67 }
68 return *this;
69}
70
71 /////////////////
72 // Constructors
73 /////////////////
74
78 G4SurfaceType type,
79 G4double value)
80 : G4SurfaceProperty(name,type),
81 theModel(model),
82 theFinish(finish),
83 theMaterialPropertiesTable(0)
84{
85 if (model == glisur ){
86 polish = value;
87 sigma_alpha = 0.0;
88 }
89 else if ( model == unified ) {
90 sigma_alpha = value;
91 polish = 0.0;
92 }
93 else if ( model == LUT ) {
94 sigma_alpha = value;
95 polish = 0.0;
96 }
97 else {
98 G4Exception("G4OpticalSurface::G4OpticalSurface()", "mat309",
100 "Constructor called with INVALID model.");
101 }
102
103 AngularDistribution = NULL;
104
105 if (type == dielectric_LUT) {
106 AngularDistribution =
107 new G4float[incidentIndexMax*thetaIndexMax*phiIndexMax];
108 ReadFile();
109 }
110}
111
113{
114 if (AngularDistribution) delete AngularDistribution;
115}
116
118 : G4SurfaceProperty(right.theName,right.theType)
119{
120 *this = right;
121 this->theMaterialPropertiesTable = right.theMaterialPropertiesTable;
122 this->AngularDistribution = right.AngularDistribution;
123 this->readFileHandle = right.readFileHandle;
124}
125
127{
128 return (this == (G4OpticalSurface *) &right);
129}
130
132{
133 return (this != (G4OpticalSurface *) &right);
134}
135 ////////////
136 // Methods
137 ////////////
138
140{
141
142 // Dump info for surface
143
144 G4cout <<
145 " Surface type = " << G4int(theType) << G4endl <<
146 " Surface finish = " << G4int(theFinish) << G4endl <<
147 " Surface model = " << G4int(theModel) << G4endl;
148
149 G4cout << G4endl;
150
151 G4cout << " Surface parameter " << G4endl;
152 G4cout << " ----------------- " << G4endl;
153 if (theModel == glisur ){
154 G4cout << polish << G4endl;
155 }
156 else if (theModel == LUT ){
157 G4cout << sigma_alpha << G4endl;
158 }
159 else {
160 G4cout << sigma_alpha << G4endl;
161 }
162 G4cout << G4endl;
163}
164
166{
167 theType = type;
168 if (type == dielectric_LUT) {
169 if (!AngularDistribution) AngularDistribution =
170 new G4float[incidentIndexMax*thetaIndexMax*phiIndexMax];
171 ReadFile();
172 }
173}
174
176{
177 theFinish = finish;
178 if (theType == dielectric_LUT) {
179 if (!AngularDistribution) AngularDistribution =
180 new G4float[incidentIndexMax*thetaIndexMax*phiIndexMax];
181 ReadFile();
182 }
183}
184
186{
187 G4String readFileName = " ";
188
189 if (theFinish == polishedlumirrorglue) {
190 readFileName = "PolishedLumirrorGlue.dat";
191 }
192 else if (theFinish == polishedlumirrorair) {
193 readFileName = "PolishedLumirror.dat";
194 }
195 else if (theFinish == polishedteflonair) {
196 readFileName = "PolishedTeflon.dat";
197 }
198 else if (theFinish == polishedtioair) {
199 readFileName = "PolishedTiO.dat";
200 }
201 else if (theFinish == polishedtyvekair) {
202 readFileName = "PolishedTyvek.dat";
203 }
204 else if (theFinish == polishedvm2000glue) {
205 readFileName = "PolishedVM2000Glue.dat";
206 }
207 else if (theFinish == polishedvm2000air) {
208 readFileName = "PolishedVM2000.dat";
209 }
210 else if (theFinish == etchedlumirrorglue) {
211 readFileName = "EtchedLumirrorGlue.dat";
212 }
213 else if (theFinish == etchedlumirrorair) {
214 readFileName = "EtchedLumirror.dat";
215 }
216 else if (theFinish == etchedteflonair) {
217 readFileName = "EtchedTeflon.dat";
218 }
219 else if (theFinish == etchedtioair) {
220 readFileName = "EtchedTiO.dat";
221 }
222 else if (theFinish == etchedtyvekair) {
223 readFileName = "EtchedTyvek.dat";
224 }
225 else if (theFinish == etchedvm2000glue) {
226 readFileName = "EtchedVM2000Glue.dat";
227 }
228 else if (theFinish == etchedvm2000air) {
229 readFileName = "EtchedVM2000.dat";
230 }
231 else if (theFinish == groundlumirrorglue) {
232 readFileName = "GroundLumirrorGlue.dat";
233 }
234 else if (theFinish == groundlumirrorair) {
235 readFileName = "GroundLumirror.dat";
236 }
237 else if (theFinish == groundteflonair) {
238 readFileName = "GroundTeflon.dat";
239 }
240 else if (theFinish == groundtioair) {
241 readFileName = "GroundTiO.dat";
242 }
243 else if (theFinish == groundtyvekair) {
244 readFileName = "GroundTyvek.dat";
245 }
246 else if (theFinish == groundvm2000glue) {
247 readFileName = "GroundVM2000Glue.dat";
248 }
249 else if (theFinish == groundvm2000air) {
250 readFileName = "GroundVM2000.dat";
251 }
252
253 if (readFileName == " ") return;
254
255 char* path = getenv("G4REALSURFACEDATA");
256 if (!path) {
257 G4String excep =
258 "G4OpBoundaryProcess - G4REALSURFACEDATA environment variable not set";
259 G4Exception("G4OpticalSurface::ReadFile()", "mat310",
260 FatalException, excep);
261 return;
262 }
263 G4String pathString(path);
264
265 readFileName = pathString + "/" + readFileName;
266
267 readFileHandle = fopen(readFileName,"r");
268
269 if (readFileHandle) {
270 G4int ncols;
271 G4int idxmax = incidentIndexMax*thetaIndexMax*phiIndexMax;
272 for (G4int i = 0; i<idxmax; i++) {
273 ncols = fscanf(readFileHandle,"%6f", &AngularDistribution[i]);
274 if (ncols < 0) break;
275 }
276 if (ncols >= 0) {
277 G4cout << "LUT - data file: " << readFileName << " read in! " << G4endl;
278 }
279 else {
280 G4String excep = "LUT - data file: "+ readFileName +" not read propery";
281 G4Exception("G4OpticalSurface::ReadFile()", "mat312",
282 FatalException, excep);
283 return;
284 }
285 }
286 else {
287 G4String excep = "LUT - data file: " + readFileName + " not found";
288 G4Exception("G4OpticalSurface::ReadFile()", "mat311",
289 FatalException, excep);
290 return;
291 }
292 fclose(readFileHandle);
293}
@ FatalException
G4OpticalSurfaceModel
@ unified
@ glisur
G4OpticalSurfaceFinish
@ polishedlumirrorair
@ groundtyvekair
@ groundtioair
@ groundvm2000glue
@ etchedteflonair
@ etchedtyvekair
@ etchedvm2000glue
@ etchedtioair
@ groundvm2000air
@ polishedlumirrorglue
@ polishedtyvekair
@ polishedteflonair
@ polishedvm2000air
@ etchedlumirrorglue
@ polishedvm2000glue
@ polishedtioair
@ groundlumirrorglue
@ etchedvm2000air
@ etchedlumirrorair
@ groundlumirrorair
@ groundteflonair
G4SurfaceType
@ dielectric_LUT
double G4double
Definition: G4Types.hh:64
float G4float
Definition: G4Types.hh:65
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
virtual ~G4OpticalSurface()
void DumpInfo() const
void SetType(const G4SurfaceType &type)
G4int operator!=(const G4OpticalSurface &right) const
G4OpticalSurface & operator=(const G4OpticalSurface &right)
G4OpticalSurface(const G4OpticalSurface &right)
void SetFinish(const G4OpticalSurfaceFinish)
G4int operator==(const G4OpticalSurface &right) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41