File indexing completed on 2026-04-09 07:48:50
0001
0002 """
0003 surface.py : optical properties access
0004 ==================================================
0005
0006 """
0007 import os, logging, numpy as np
0008 log = logging.getLogger(__name__)
0009
0010 from opticks.ana.main import opticks_main
0011 from opticks.ana.proplib import PropLib
0012
0013 slib = PropLib("GSurfaceLib")
0014
0015
0016 class Surface(object):
0017 def __init__(self, name):
0018 self.name = name
0019 self.slib = slib
0020
0021 def lookup(self, prop, wavelength):
0022 return self.slib.interp(self.name,wavelength,prop)
0023
0024 def data(self):
0025 return self.slib(self.name)
0026
0027 def detect(self, wavelength):
0028 return self.lookup(PropLib.S_DETECT, wavelength)
0029
0030 def absorb(self, wavelength):
0031 return self.lookup(PropLib.S_ABSORB, wavelength)
0032
0033 def rspecular(self, wavelength):
0034 return self.lookup(PropLib.S_REFLECT_SPECULAR, wavelength)
0035
0036 def rdiffuse(self, wavelength):
0037 return self.lookup(PropLib.S_REFLECT_DIFFUSE, wavelength)
0038
0039 def table(self, wl):
0040 sd = self.detect(wl)
0041 sa = self.absorb(wl)
0042 sr = self.rspecular(wl)
0043 dr = self.rdiffuse(wl)
0044 tab = np.dstack([wl,sd,sa,sr,dr])
0045 return tab
0046
0047 def dump(self):
0048 w = self.mlib.domain
0049 a = self.data()
0050 aa = np.dstack([w, a[0,:,0], a[0,:,1],a[0,:,2],a[0,:,3],a[1,:,0]])
0051 print("aa")
0052 print(aa)
0053
0054 @classmethod
0055 def Hdr(cls):
0056 labels = "wl sd sa sr dr"
0057 hdr = "".join(list(map(lambda _:"%8s" % _, labels.split())))
0058 return hdr
0059
0060 def hdr(self):
0061 return self.Hdr() + " " + self.name
0062
0063
0064
0065 if __name__ == '__main__':
0066
0067 logging.basicConfig(level=logging.INFO)
0068
0069 args = opticks_main()
0070
0071 wl = np.linspace(300.,600.,4)
0072 for name in slib._names:
0073 surf = Surface(name)
0074 tab = surf.table(wl)
0075 print(surf.hdr())
0076 print(tab)
0077 pass
0078
0079
0080 if 0:
0081 import matplotlib.pyplot as plt
0082 plt.ion()
0083 plt.plot( wl, al, "*", label="Absorption Length")
0084 plt.plot( wl, sl, "+", label="Scattering Length")
0085 plt.show()
0086
0087
0088
0089