Logo ROOT  
Reference Guide
TGeoOpticalSurface.h
Go to the documentation of this file.
1// @(#)root/geom:$Id$
2// Author: Andrei Gheata 05/12/18
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TGeoOpticalSurface
13#define ROOT_TGeoOpticalSurface
14
15#include <TNamed.h>
16#include <TList.h>
17
18////////////////////////////////////////////////////////////////////////////
19// //
20// TGeoOpticalSurface - class describing surface properties for //
21// compatibility with Geant4 //
22// //
23////////////////////////////////////////////////////////////////////////////
24
25class TGDMLMatrix;
26
27class TGeoOpticalSurface : public TNamed {
28public:
30 kFpolished, // smooth perfectly polished surface
31 kFpolishedfrontpainted, // smooth top-layer (front) paint
32 kFpolishedbackpainted, // same is 'polished' but with a back-paint
33
34 kFground, // rough surface
35 kFgroundfrontpainted, // rough top-layer (front) paint
36 kFgroundbackpainted, // same as 'ground' but with a back-paint
37
38 kFpolishedlumirrorair, // mechanically polished surface, with lumirror
39 kFpolishedlumirrorglue, // mechanically polished surface, with lumirror & meltmount
40 kFpolishedair, // mechanically polished surface
41 kFpolishedteflonair, // mechanically polished surface, with teflon
42 kFpolishedtioair, // mechanically polished surface, with tio paint
43 kFpolishedtyvekair, // mechanically polished surface, with tyvek
44 kFpolishedvm2000air, // mechanically polished surface, with esr film
45 kFpolishedvm2000glue, // mechanically polished surface, with esr film & meltmount
46
47 kFetchedlumirrorair, // chemically etched surface, with lumirror
48 kFetchedlumirrorglue, // chemically etched surface, with lumirror & meltmount
49 kFetchedair, // chemically etched surface
50 kFetchedteflonair, // chemically etched surface, with teflon
51 kFetchedtioair, // chemically etched surface, with tio paint
52 kFetchedtyvekair, // chemically etched surface, with tyvek
53 kFetchedvm2000air, // chemically etched surface, with esr film
54 kFetchedvm2000glue, // chemically etched surface, with esr film & meltmount
55
56 kFgroundlumirrorair, // rough-cut surface, with lumirror
57 kFgroundlumirrorglue, // rough-cut surface, with lumirror & meltmount
58 kFgroundair, // rough-cut surface
59 kFgroundteflonair, // rough-cut surface, with teflon
60 kFgroundtioair, // rough-cut surface, with tio paint
61 kFgroundtyvekair, // rough-cut surface, with tyvek
62 kFgroundvm2000air, // rough-cut surface, with esr film
63 kFgroundvm2000glue, // rough-cut surface, with esr film & meltmount
64
65 // for DAVIS model
66 kFRough_LUT, // rough surface
67 kFRoughTeflon_LUT, // rough surface wrapped in Teflon tape
68 kFRoughESR_LUT, // rough surface wrapped with ESR
69 kFRoughESRGrease_LUT, // rough surface wrapped with ESR and coupled with opical grease
70 kFPolished_LUT, // polished surface
71 kFPolishedTeflon_LUT, // polished surface wrapped in Teflon tape
72 kFPolishedESR_LUT, // polished surface wrapped with ESR
73 kFPolishedESRGrease_LUT, // polished surface wrapped with ESR and coupled with opical grease
74 kFDetector_LUT // polished surface with optical grease
75 };
76
78 kMglisur, // original GEANT3 model
79 kMunified, // UNIFIED model
80 kMLUT, // Look-Up-Table model
81 kMDAVIS, // DAVIS model
82 kMdichroic // dichroic filter
83 };
84
86 kTdielectric_metal, // dielectric-metal interface
87 kTdielectric_dielectric, // dielectric-dielectric interface
88 kTdielectric_LUT, // dielectric-Look-Up-Table interface
89 kTdielectric_LUTDAVIS, // dielectric-Look-Up-Table DAVIS interface
90 kTdielectric_dichroic, // dichroic filter interface
91 kTfirsov, // for Firsov Process
92 kTx_ray // for x-ray mirror process
93 };
94
95private:
96 std::string fName = ""; // Surface name
98 ESurfaceModel fModel = kMglisur; // Surface model
99 ESurfaceFinish fFinish = kFpolished; // Surface finish
100
101 Double_t fValue = 0.0; // The value used to determine sigmaalpha and polish
102 Double_t fSigmaAlpha = 0.0; // The sigma of micro-facet polar angle
103 Double_t fPolish = 0.0; // Polish parameter in glisur model
104
105 TList fProperties; // List of surface properties
106
107 // No copy
110
111public:
112 // constructors
114
117
119
120 // Accessors
121 bool AddProperty(const char *property, const char *ref);
122 const char *GetPropertyRef(const char *property);
123 TList const &GetProperties() const { return fProperties; }
125 TGDMLMatrix* GetProperty(const char* name) const;
126 TGDMLMatrix* GetProperty(Int_t i) const;
127 ESurfaceType GetType() const { return fType; }
128 ESurfaceModel GetModel() const { return fModel; }
129 ESurfaceFinish GetFinish() const { return fFinish; }
130 Double_t GetPolish() const { return fPolish; }
131 Double_t GetValue() const { return fValue; }
133
135 void SetModel(ESurfaceModel model) { fModel = model; }
136 void SetFinish(ESurfaceFinish finish) { fFinish = finish; }
137 void SetPolish(Double_t polish) { fPolish = polish; }
138 void SetValue(Double_t value) { fValue = value; }
139 void SetSigmaAlpha(Double_t sigmaalpha) { fSigmaAlpha = sigmaalpha; }
140
141 void Print(Option_t *option = "") const;
142
143 static ESurfaceType StringToType(const char *type);
144 static const char *TypeToString(ESurfaceType type);
145 static ESurfaceModel StringToModel(const char *model);
146 static const char *ModelToString(ESurfaceModel model);
147 static ESurfaceFinish StringToFinish(const char *finish);
148 static const char *FinishToString(ESurfaceFinish finish);
149
150 ClassDef(TGeoOpticalSurface, 1) // Class representing an optical surface
151};
152
153////////////////////////////////////////////////////////////////////////////
154// //
155// TGeoSkinSurface - class describing a surface having optical properties //
156// surrounding a volume //
157// //
158////////////////////////////////////////////////////////////////////////////
159
160class TGeoVolume;
161
162class TGeoSkinSurface : public TNamed {
163private:
164 TGeoOpticalSurface const *fSurface = nullptr; // Referenced optical surface
165 TGeoVolume const *fVolume = nullptr; // Referenced volume
166public:
168 TGeoSkinSurface(const char *name, const char *ref, TGeoOpticalSurface const *surf, TGeoVolume const *vol)
169 : TNamed(name, ref), fSurface(surf), fVolume(vol)
170 {
171 }
172 virtual ~TGeoSkinSurface() {}
173
174 TGeoOpticalSurface const *GetSurface() const { return fSurface; }
175 TGeoVolume const *GetVolume() const { return fVolume; }
176
177 void Print(Option_t *option = "") const;
178
179 ClassDef(TGeoSkinSurface, 1) // A surface with optical properties surrounding a volume
180};
181
182////////////////////////////////////////////////////////////////////////////
183// //
184// TGeoBorderSurface - class describing a surface having optical //
185// properties between 2 touching volumes //
186// //
187////////////////////////////////////////////////////////////////////////////
188
189class TGeoNode;
190
191class TGeoBorderSurface : public TNamed {
192private:
193 TGeoOpticalSurface const *fSurface = nullptr; // Referenced optical surface
194 TGeoNode const *fNode1 = nullptr; // Referenced node 1
195 TGeoNode const *fNode2 = nullptr; // Referenced node 2
196public:
198 TGeoBorderSurface(const char *name, const char *ref, TGeoOpticalSurface const *surf, TGeoNode const *node1,
199 TGeoNode const *node2)
200 : TNamed(name, ref), fSurface(surf), fNode1(node1), fNode2(node2)
201 {
202 }
204
205 TGeoOpticalSurface const *GetSurface() const { return fSurface; }
206 TGeoNode const *GetNode1() const { return fNode1; }
207 TGeoNode const *GetNode2() const { return fNode2; }
208
209 void Print(Option_t *option = "") const;
210
211 ClassDef(TGeoBorderSurface, 1) // A surface with optical properties betwqeen 2 touching volumes
212};
213
214#endif // ROOT_TGeoOpticalSurface
int Int_t
Definition: RtypesCore.h:45
double Double_t
Definition: RtypesCore.h:59
const char Option_t
Definition: RtypesCore.h:66
#define ClassDef(name, id)
Definition: Rtypes.h:325
char name[80]
Definition: TGX11.cxx:110
int type
Definition: TGX11.cxx:121
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Definition: TCollection.h:184
This class is used in the process of reading and writing the GDML "matrix" tag.
Definition: TGDMLMatrix.h:34
TGeoNode const * fNode2
TGeoBorderSurface(const char *name, const char *ref, TGeoOpticalSurface const *surf, TGeoNode const *node1, TGeoNode const *node2)
TGeoNode const * GetNode2() const
TGeoNode const * fNode1
TGeoOpticalSurface const * GetSurface() const
TGeoNode const * GetNode1() const
void Print(Option_t *option="") const
Print TNamed name and title.
TGeoOpticalSurface const * fSurface
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
Definition: TGeoNode.h:41
This is a wrapper class to G4OpticalSurface.
Int_t GetNproperties() const
TList const & GetProperties() const
static ESurfaceType StringToType(const char *type)
Double_t GetPolish() const
bool AddProperty(const char *property, const char *ref)
static const char * ModelToString(ESurfaceModel model)
void SetSigmaAlpha(Double_t sigmaalpha)
static const char * TypeToString(ESurfaceType type)
ESurfaceModel GetModel() const
void SetPolish(Double_t polish)
void SetModel(ESurfaceModel model)
static ESurfaceFinish StringToFinish(const char *finish)
ESurfaceFinish GetFinish() const
TGeoOpticalSurface & operator=(const TGeoOpticalSurface &)=delete
TGDMLMatrix * GetProperty(const char *name) const
static const char * FinishToString(ESurfaceFinish finish)
Double_t GetSigmaAlpha() const
void SetValue(Double_t value)
void SetFinish(ESurfaceFinish finish)
void Print(Option_t *option="") const
Print TNamed name and title.
void SetType(ESurfaceType type)
static ESurfaceModel StringToModel(const char *model)
TGeoOpticalSurface(const TGeoOpticalSurface &)=delete
ESurfaceFinish fFinish
const char * GetPropertyRef(const char *property)
Double_t GetValue() const
ESurfaceType GetType() const
TGeoSkinSurface(const char *name, const char *ref, TGeoOpticalSurface const *surf, TGeoVolume const *vol)
TGeoVolume const * fVolume
TGeoVolume const * GetVolume() const
virtual ~TGeoSkinSurface()
void Print(Option_t *option="") const
Print TNamed name and title.
TGeoOpticalSurface const * fSurface
TGeoOpticalSurface const * GetSurface() const
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition: TGeoVolume.h:49
A doubly linked list.
Definition: TList.h:44
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29