Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:48:50

0001 #!/usr/bin/env python
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