Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #!/usr/bin/env python
0002 
0003 import os, numpy as np
0004 
0005 string2float_ = lambda s:float(s.replace("k","000")) 
0006 efloat_ = lambda ekey, fallback:string2float_(os.environ.get(ekey,fallback))
0007 efloatlist_ = lambda ekey,fallback="":list(map(string2float_, filter(None, os.environ.get(ekey,fallback).split(","))))
0008 efloatarray_ = lambda ekey,fallback="":np.array( efloatlist_(ekey, fallback)) 
0009 
0010 def eint_(ekey, fallback):
0011     """
0012     A blank value is special cased to return zero 
0013     """
0014     val = os.environ.get(ekey, fallback)
0015     if val == "":
0016         val = "0"
0017     pass
0018     return int(val)
0019 
0020 
0021 def eintlist_(ekey, fallback, delim=","):
0022     """ 
0023     empty string envvar yields None
0024     """
0025     slis = os.environ.get(ekey,fallback)
0026     if slis is None or len(slis) == 0: return None
0027     slis = slis.split(delim)
0028     return list(map(int, filter(None, slis)))
0029 
0030 def eslice_(ekey, fallback):
0031     ii = eintlist_(ekey, fallback, delim=":")
0032     if ii is None: return slice(None)
0033     return slice(*ii)
0034 
0035 
0036 def intlist_(s):
0037     """
0038     :param s: string of form 10:21,30,31,32,40:51
0039     :return ii: list of integers 
0040 
0041     Uses np.arange one past the end convention, so "10:20" would not include 20::
0042 
0043         In [10]: np.arange(10,20)
0044         Out[10]: array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
0045 
0046     """
0047     ii = []
0048     if not s is None and len(s) > 0:
0049         ee = s.split(",")
0050         for e in ee:
0051             if ":" in e:
0052                 ab = e.split(":")
0053                 assert len(ab) == 2 
0054                 a, b = list(map(int,ab))
0055                 for i in range(a,b):
0056                     ii.append(i)
0057                 pass
0058             else:
0059                 ii.append(int(e))
0060             pass
0061         pass 
0062     pass
0063     return ii
0064 
0065 def intarray_(s):
0066     ii = intlist_(s)
0067     return np.array(ii, dtype=np.int32 )
0068 
0069 def eintarray_(ekey, fallback=None):
0070     s = os.environ.get(ekey,fallback)
0071     return intarray_(s) 
0072 
0073 
0074 def elook_epsilon_(epsilon, ekey="LOOK"):
0075     if not ekey in os.environ:
0076          return None
0077     pass
0078     look = efloatlist_(ekey, "0,0,0")
0079     ce = np.zeros( (4,), dtype=np.float32 )     
0080     ce[:3] = look 
0081     ce[3] = epsilon
0082     return ce 
0083 
0084 def elookce_(extent="10.", ekey="LOOK"):
0085     """
0086     :param extent: float, is overridden by LOOKCE envvar
0087     :param ekey: typically "LOOK" specifting envvar that contains look coordinates eg "10.5,10.5,10.5" 
0088     """
0089     if not ekey in os.environ:
0090          return None
0091     pass
0092     look = efloatlist_(ekey, "0,0,0")
0093     extents = efloatlist_("LOOKCE", extent)
0094     ce = np.zeros( (len(extents), 4,), dtype=np.float32 )     
0095     for i in range(len(extents)):
0096         ce[i,:3] = look 
0097         ce[i, 3] = extents[i]
0098     pass 
0099     return ce 
0100 
0101 
0102 def test_efloat():
0103     tmin0 = efloat_("TMIN",0.5)
0104     tmin1 = efloat_("TMIN","0.5")
0105     assert tmin0 == tmin1
0106 
0107 def test_efloatlist():
0108     eye0 = efloatlist_("EYE", "1,-1,1")
0109     print("%10.4f %10.4f %10.4f " % tuple(eye0) )
0110 
0111 
0112 
0113 
0114 if __name__ == '__main__':
0115 
0116     sli = eslice_("QLIM", "0:10:1" ) 
0117     a = np.arange(100)
0118     print("a[sli] %s " % str(a[sli]))
0119