Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:37

0001 #!/usr/bin/env python
0002 
0003 import os, numpy as np
0004 from opticks.ana.fold import Fold
0005 
0006 class fold(object):
0007     pass
0008 
0009 class sfreq(object):
0010     @classmethod
0011     def CreateFromArray(cls, a):
0012         usub, nsub = np.unique(a, return_counts=True )
0013         f = fold()
0014         f.key = usub
0015         f.val = nsub 
0016         return cls(f, sort=True) 
0017 
0018     @classmethod
0019     def ArrayFromFile(cls, base=None, name="subs.txt"):
0020         if base is None:
0021             base = os.environ.get("FOLD", None)
0022         pass
0023         path = os.path.join(base, name)
0024         a = np.loadtxt(path, dtype="|S32" )  
0025         return a 
0026 
0027     @classmethod
0028     def CreateFromFile(cls, base=None, name="subs.txt"):
0029         a = cls.ArrayFromFile(base=base, name=name)
0030         return cls.CreateFromArray(a)
0031 
0032     def __init__(self, f, sort=True):
0033         order = np.argsort(f.val)[::-1] if sort else slice(None)
0034         okey = f.key[order]  
0035         oval = f.val[order]
0036         subs = list(map(lambda _:_.decode("utf-8"), okey.view("|S32").ravel() ))  
0037         vals = list(map(int, oval)) 
0038 
0039         self.f = f   # without the sort 
0040         self.okey = okey 
0041         self.oval = oval 
0042         self.subs = subs
0043         self.vals = vals
0044         self.order = order
0045 
0046 
0047     def find_index(self, key):
0048         key = key.encode() if type(key) is str else key
0049         assert type(key) is bytes
0050         ii = np.where( self.okey.view("|S32") == key )[0]     ## hmm must use okey to feel the sort
0051         assert len(ii) == 1
0052         return int(ii[0])
0053 
0054     def desc_key(self, key):
0055         idx = self.find_index(key)
0056         return self.desc_idx(idx)
0057 
0058     def desc_idx(self, idx):
0059         return "sf %3d : %7d : %s." % (idx, self.vals[idx], self.subs[idx]) 
0060 
0061     def __repr__(self):
0062         return "\n".join(self.desc_idx(idx) for idx in range(len(self.subs))) 
0063 
0064     def __str__(self):
0065         return str(self.f)
0066 
0067 
0068 if __name__ == '__main__':
0069     sf = sfreq.CreateFromFile()
0070     print(repr(sf))
0071 
0072 
0073 
0074 
0075