From 02e8f83b85fcb96f476bf188cfd84c33f7454180 Mon Sep 17 00:00:00 2001
From: "(no author)" <(no author)@8a9318a1-56ba-4d59-b755-99d26321be01>
Date: Sat, 9 Oct 2010 19:07:18 +0000
Subject: [PATCH] AERI data file support

git-svn-id: https://svn.ssec.wisc.edu/repos/glance/trunk@135 8a9318a1-56ba-4d59-b755-99d26321be01
---
 pyglance/glance/io.py | 98 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 97 insertions(+), 1 deletion(-)

diff --git a/pyglance/glance/io.py b/pyglance/glance/io.py
index d027f11..73601aa 100644
--- a/pyglance/glance/io.py
+++ b/pyglance/glance/io.py
@@ -21,6 +21,14 @@ import numpy as np
 
 LOG = logging.getLogger(__name__)
 
+try:
+    import dmv as dmvlib
+    LOG.info('loaded dmv module for AERI data file access')
+except ImportError:
+    LOG.info('no AERI dmv data file format module')
+    dmvlib = None
+
+
 fillValConst1 = '_FillValue'
 fillValConst2 = 'missing_value'
 
@@ -422,8 +430,96 @@ class h5(object):
         
         return
 
+
+
+
+class aeri(object):
+    """wrapper for AERI RNC/SUM/CXS/etc datasets
+    """
+    _dmv = None
+    _vectors = { }
+    _scalars = { }
+    
+    @staticmethod
+    def _meta_mapping(fp):
+        ids = fp.metaIDs()
+        names = [fp.queryMetaDescString(1, id_, fp.SHORTNAME) for id_ in ids]
+        assert len(ids) == len(names)
+        return (dict((n, i) for n, i in zip(names, ids)))
+    
+    def _inventory(self):
+        fp = self._dmv
+        assert(fp is not None)
+        # get list of vectors and scalars
+        self._vectors = dict( (fp.queryVectorDescString(n,fp.SHORTNAME), n) for n in fp.vectorIDs() )
+        self._scalars = self._meta_mapping(fp)
+
+    def __init__(self, filename, allowWrite=False):
+        assert(allowWrite==False)
+        if dmvlib is None:
+            LOG.error('cannot open AERI files without dmv module being available')
+            return
+        self._dmv = dmvlib.dmv()
+        rc = self._dmv.openFile(filename)
+        if rc!=0:
+            LOG.error("unable to open file, rc=%d" % rc)
+            self._dmv = None        
+        else:
+            self._inventory()
+    
+    def __call__(self):
+        return list(self._vectors.keys()) + list(self._scalars.keys())
+        
+    def __getitem__(self, name):
+        fp = self._dmv
+        assert(fp is not None)
+        if 'DMV_RECORDS' in os.environ:
+            nrecs = int(os.environ['DMV_RECORDS'])
+            LOG.warning('overriding dmv record count to %d' % nrecs)
+        else:
+            nrecs = self._dmv.recordCount()
+        recrange = range(1, nrecs+1)
+        if name in self._vectors:
+            vid = self._vectors[name]
+            vdata = [ fp.vectorDepValues(rec, vid) for rec in recrange ]
+            return np.array(vdata)
+        elif name in self._scalars:
+            vdata = fp.metaValueMatrix(recrange, [self._scalars[name]])
+            return np.array(vdata)
+        else:
+            raise LookupError('cannot find variable %s' % name)
+       
+    def get_variable_object(self,name):
+        return None
+    
+    def missing_value(self, name):
+        return float('nan')
+    
+    def create_new_variable(self, variablename, missingvalue=None, data=None, variabletocopyattributesfrom=None):
+        """
+        create a new variable with the given name
+        optionally set the missing value (fill value) and data to those given
+        
+        the created variable will be returned, or None if a variable could not
+        be created
+        """                
+        return None
+    
+    def add_attribute_data_to_variable(self, variableName, newAttributeName, newAttributeValue) :
+        """
+        if the attribute exists for the given variable, set it to the new value
+        if the attribute does not exist for the given variable, create it and set it to the new value
+        """
+        
+        return
+
+# handle the variety of file suffixes by building aliases to aeri class
+cxs = rnc = cxv = csv = spc = sum = uvs = aeri
+
+
+
 def open(pathname, allowWrite=False):
-    cls = globals()[os.path.splitext(pathname)[1][1:]]
+    cls = globals()[os.path.splitext(pathname)[1][1:].lower()]
     return cls(pathname, allowWrite=allowWrite)
 
 
-- 
GitLab