source: trunk/source/materials/include/G4OpticalSurface.hh @ 1202

Last change on this file since 1202 was 1196, checked in by garnier, 15 years ago

update CVS release candidate geant4.9.3.01

File size: 9.0 KB
Line 
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,v 1.15 2009/11/20 00:57:34 gum Exp $
28// GEANT4 tag $Name: geant4-09-03-cand-01 $
29//
30//
31////////////////////////////////////////////////////////////////////////
32// G4OpticalSurface Definition
33////////////////////////////////////////////////////////////////////////
34//
35// File:        G4OpticalSurface.hh
36// Description: A optical surface class for use in G4OpBoundaryProcess
37// Version:     2.0
38// Created:     1997-06-26
39// Author:      Peter Gumplinger
40// Updated:     1999-10-29 add method and class descriptors
41// mail:        gum@triumf.ca
42//
43////////////////////////////////////////////////////////////////////////
44
45#ifndef G4OpticalSurface_h
46#define G4OpticalSurface_h 1
47
48/////////////
49// Includes
50/////////////
51
52#include "G4Types.hh"
53#include "G4SurfaceProperty.hh"
54
55// Class Description:
56// A optical surface class for use in the G4OpBoundaryProcess class.
57// Contains the enumerations: G4OpticalSurfaceFinish, G4OpticalSurfaceType,
58// and G4OpticalSurfaceModel.
59// Class Description - End:
60
61enum G4OpticalSurfaceFinish
62{
63   polished,                    // smooth perfectly polished surface
64   polishedfrontpainted,        // smooth top-layer (front) paint
65   polishedbackpainted,         // same is 'polished' but with a back-paint
66
67   ground,                      // rough surface
68   groundfrontpainted,          // rough top-layer (front) paint
69   groundbackpainted,           // same as 'ground' but with a back-paint
70
71   polishedlumirrorair,         // mechanically polished surface, with lumirror
72   polishedlumirrorglue,        // mechanically polished surface, with lumirror & meltmount
73   polishedair,                 // mechanically polished surface
74   polishedteflonair,           // mechanically polished surface, with teflon
75   polishedtioair,              // mechanically polished surface, with tio paint
76   polishedtyvekair,            // mechanically polished surface, with tyvek
77   polishedvm2000air,           // mechanically polished surface, with esr film
78   polishedvm2000glue,          // mechanically polished surface, with esr film & meltmount
79
80   etchedlumirrorair,           // chemically etched surface, with lumirror
81   etchedlumirrorglue,          // chemically etched surface, with lumirror & meltmount
82   etchedair,                   // chemically etched surface
83   etchedteflonair,             // chemically etched surface, with teflon
84   etchedtioair,                // chemically etched surface, with tio paint
85   etchedtyvekair,              // chemically etched surface, with tyvek
86   etchedvm2000air,             // chemically etched surface, with esr film
87   etchedvm2000glue,            // chemically etched surface, with esr film & meltmount
88
89   groundlumirrorair,           // rough-cut surface, with lumirror
90   groundlumirrorglue,          // rough-cut surface, with lumirror & meltmount
91   groundair,                   // rough-cut surface
92   groundteflonair,             // rough-cut surface, with teflon
93   groundtioair,                // rough-cut surface, with tio paint
94   groundtyvekair,              // rough-cut surface, with tyvek
95   groundvm2000air,             // rough-cut surface, with esr film
96   groundvm2000glue             // rough-cut surface, with esr film & meltmount
97};
98
99enum G4OpticalSurfaceModel
100{
101   glisur,                      // original GEANT3 model
102   unified,                     // UNIFIED model
103   LUT                          // Look-Up-Table model
104};
105
106class G4MaterialPropertiesTable;
107
108/////////////////////
109// Class Definition
110/////////////////////
111
112class G4OpticalSurface : public G4SurfaceProperty
113{
114
115public: // Without description
116 
117        //////////////
118        // Operators
119        //////////////
120 
121        G4OpticalSurface(const G4OpticalSurface &right);
122        const G4OpticalSurface & operator=(const G4OpticalSurface &right);
123 
124        G4int operator==(const G4OpticalSurface &right) const;
125        G4int operator!=(const G4OpticalSurface &right) const;
126
127public: // With description
128
129        ////////////////////////////////
130        // Constructors and Destructor
131        ////////////////////////////////
132
133        G4OpticalSurface(const G4String& name,
134                         G4OpticalSurfaceModel model = glisur,
135                         G4OpticalSurfaceFinish finish = polished,
136                         G4SurfaceType type = dielectric_dielectric,
137                         G4double value = 1.0);
138        // Constructor of an optical surface object.
139
140public: // Without description
141
142        virtual ~G4OpticalSurface();
143
144        ////////////
145        // Methods
146        ////////////
147
148        // public methods
149
150public: // With description
151
152        virtual void Overwrite() {G4cout << "G4OpticalSurface" << G4endl;};
153
154        void         SetType(const G4SurfaceType& type);
155
156        G4OpticalSurfaceFinish GetFinish() const {return theFinish;};
157        // Returns the optical surface finish.
158        void         SetFinish(const G4OpticalSurfaceFinish );
159        // Sets the optical surface finish.
160
161        G4OpticalSurfaceModel GetModel() const {return theModel;};
162        // Returns the optical surface model used.
163        void           SetModel(const G4OpticalSurfaceModel model)
164                                                   {theModel = model;};
165        // Sets the optical surface model to be followed.
166
167        G4double GetSigmaAlpha() const {return sigma_alpha;};
168        // Returns an unified model surface parameter.
169        void     SetSigmaAlpha(const G4double s_a)
170                                        {sigma_alpha = s_a;};
171        // Sets an unified model surface parameter.
172
173        G4double GetPolish() const {return polish;};
174        // Returns the optical surface polish type.
175        void     SetPolish(const G4double plsh) {polish=plsh;};
176        // Sets the optical surface polish type.
177
178        G4MaterialPropertiesTable* GetMaterialPropertiesTable() const
179                                       { return theMaterialPropertiesTable;};
180        // Retrieves the pointer of the G4MaterialPropertiesTable
181        // attached to optical surface.
182
183        void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
184                                    { theMaterialPropertiesTable = anMPT;};
185        // Attaches a G4MaterialPropertiesTable to the optical surface.
186
187        void DumpInfo() const;
188        // Prints information about the optical surface.
189
190        void ReadFile(void);
191        // Method to read the Look-Up-Table into array AngularDistribution
192
193        G4double GetAngularDistributionValue(G4int, G4int, G4int);
194
195        inline G4int GetThetaIndexMax(void) const { return thetaIndexMax; }
196        inline G4int GetPhiIndexMax(void) const { return phiIndexMax; } 
197
198private:
199
200// ------------------
201// Basic data members ( To define an optical surface)
202// ------------------
203
204        G4OpticalSurfaceModel theModel;         // Surface model
205        G4OpticalSurfaceFinish theFinish;       // Surface finish
206
207        G4double sigma_alpha;           // The sigma of micro-facet polar angle
208        G4double polish;                // Polish parameter in glisur model
209
210        G4MaterialPropertiesTable* theMaterialPropertiesTable;
211
212        static const G4int incidentIndexMax = 91;
213        static const G4int thetaIndexMax = 45;
214        static const G4int phiIndexMax = 37;
215
216        G4float* AngularDistribution;
217
218};
219
220////////////////////
221// Inline methods
222////////////////////
223
224inline
225 G4double G4OpticalSurface::GetAngularDistributionValue(G4int angleIncident,
226                                                        G4int thetaIndex,
227                                                        G4int phiIndex)
228{
229  return *(AngularDistribution+angleIncident+
230                               thetaIndex*incidentIndexMax+
231                               phiIndex*thetaIndexMax*incidentIndexMax);
232}
233
234#endif /* G4OpticalSurface_h */
Note: See TracBrowser for help on using the repository browser.