Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #!/usr/bin/env python
0002 """
0003 OpticksFlags.py
0004 =================
0005 
0006 Used from optickscore/CMakeLists.txt
0007 
0008 """
0009 import os, re, logging, argparse, json
0010 
0011 ## json_save_ duplicates opticks.ana.base 
0012 ## to make this script self contained 
0013 ## as this is used from the okc- build 
0014 
0015 def makedirs_(path):
0016     pdir = os.path.dirname(path)
0017     if not os.path.exists(pdir):
0018         os.makedirs(pdir)
0019     pass
0020     return path 
0021 
0022 expand_ = lambda path:os.path.expandvars(os.path.expanduser(path))
0023 json_load_ = lambda path:json.load(open(expand_(path), "r"))
0024 json_save_ = lambda path, d:json.dump(d, open(makedirs_(expand_(path)),"w"))
0025 
0026 
0027 
0028 log = logging.getLogger(__name__) 
0029 
0030 class OpticksFlags(object):
0031     """
0032     """  
0033     pfx = "const char* OpticksFlags::_" 
0034     ptn = re.compile("^(?P<key>\S*)\s*=\s*\"(?P<val>\S{2})\"\s*;\s*$")
0035 
0036     @classmethod
0037     def Flag2Abbrev(cls, lines):
0038         """ 
0039         Apply pattern to lines starting with the prefix
0040         and match to extract the flag name and abbreviation.
0041  
0042             BULK_SCATTER      = "SC" ; 
0043 
0044         """  
0045         d = dict()  
0046         for line in lines:
0047             if not line.startswith(cls.pfx): continue
0048             line = line[len(cls.pfx):]
0049             m = cls.ptn.match(line)
0050             if not m: 
0051                log.debug("failed to match %s " % line )
0052                continue   
0053             pass
0054             g = m.groupdict()
0055             k, v = g["key"], g["val"]
0056             d[k] = v  
0057         pass
0058         return d
0059 
0060     def __repr__(self):
0061         return "\n".join([" %2s : %s " % (kv[1], kv[0]) for kv in self.flag2abbrev.items()])
0062  
0063     def __init__(self, path):
0064         path = os.path.expandvars(path)
0065         lines = open(path, "r").readlines() 
0066         self.flag2abbrev = self.Flag2Abbrev(lines)
0067 
0068 if __name__ == '__main__':
0069 
0070     default_path = "$OPTICKS_HOME/optickscore/OpticksFlags.cc"
0071     parser = argparse.ArgumentParser(__doc__)
0072     parser.add_argument(     "path",  nargs="?", help="Path to input OpticksFlags.cc", default=default_path )
0073     parser.add_argument(     "--jsonpath", default=None, help="When a path is provided an json file will be written to it." ) 
0074     parser.add_argument(     "--quiet", action="store_true", default=False, help="Skip dumping" ) 
0075     parser.add_argument(     "--level", default="info", help="logging level" ) 
0076     args = parser.parse_args()
0077 
0078     fmt = '[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s'
0079     logging.basicConfig(level=getattr(logging,args.level.upper()), format=fmt)
0080 
0081     if args.path == default_path:
0082         log.info("using default input path %s " % args.path)
0083     else:
0084         log.info("using argument input path %s " % args.path)
0085     pass  
0086 
0087     flags = OpticksFlags(args.path)
0088 
0089     if not args.quiet:  
0090         print(flags)
0091     pass 
0092     if not args.jsonpath is None:
0093         log.info("writing flag2abbrev to jsonpath %s " % args.jsonpath)
0094         json_save_(args.jsonpath, flags.flag2abbrev )  
0095     pass
0096 
0097 
0098