source: qesdi/graphplotter/trunk/graphplotter/lib/data_reader.py @ 6313

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/graphplotter/trunk/graphplotter/lib/data_reader.py@6313
Revision 6313, 3.5 KB checked in by pnorton, 10 years ago (diff)

First attempt at getting the buildplot action to work.

Line 
1'''
2Created on 14 Jan 2010
3
4@author: pnorton
5'''
6
7import cdms2 as cdms
8import logging
9
10log = logging.getLogger(__name__)
11
12class DataReader(object):
13   
14    def __init__(self, file, axisLookup):
15       
16        self.file = file
17        self.axisLookup = axisLookup
18   
19    def getData(self, variable, axis, selection):
20       
21        fin = cdms.open(self.file)
22       
23        try:
24            var = fin(variable)
25           
26            selKW = self._buildSelectionKeywords(fin, var, axis, selection)
27           
28            xdata, ydata = self._getData(var, selKW, axis)
29           
30        finally:
31            fin.close()
32       
33        return xdata, ydata
34   
35    def getVariableNames(self):
36        fin = cdms.open(self.file)
37       
38        variableNames = None
39
40        try:
41            variableNames = fin.listvariables()
42        finally:
43            fin.close()
44       
45        return variableNames
46   
47    def getAxisNames(self, variable):
48        fin = cdms.open(self.file)
49       
50        axisNames = None
51        try:
52            var = fin(variable)
53            axisNames = var.getAxisIds()
54        finally:
55            fin.close()
56       
57        return axisNames
58   
59    def getAxisValues(self, variable, axis):
60        fin = cdms.open(self.file)
61       
62        axisValues = None
63        try:
64            var = fin(variable)
65           
66            if axis in self.axisLookup:
67                axisVar = fin(self.axisLookup[axis])
68                axisValues = axisVar[:]
69                if type(axisValues[0]) is not str:
70                    axisValues = [self._getString(n) for n in axisValues]               
71            else:
72                axis = var.getAxis(var.getAxisIndex(axis))
73                axisValues = axis[:]
74               
75        finally:
76            fin.close()
77       
78        return axisValues
79   
80    def getSelectionData(self, variable, axis):
81        """
82        Get the data require to build a selection control to set the values of
83        the other axis given that variable and axis have already been selected.
84        """
85        pass
86   
87    def _buildSelectionKeywords(self, fin, var, axis, selection):
88        selKW = {}
89       
90        for ax in var.getAxisList():
91            # we don't want to generate a selection for the axis
92            # that will be used for the xdata
93            if ax.id == axis:
94                continue
95       
96            value = selection[ax.id]
97   
98            if ax.id in self.axisLookup:
99                # get the name of the variable that maps the strings given to
100                # the index on the variable's axis.
101                lookupVarName = self.axisLookup[ax.id]
102       
103                lookupVar = fin(lookupVarName)
104                lookup = self._buildLookup(lookupVar)
105                   
106                selKW[ax.id] = lookup[value]
107            else:
108               
109                selKW[ax.id] = value
110                   
111        return selKW
112   
113    def _getData(self, var, selKW, axis):
114       
115        #get the y data by selecting from the variable
116        ydata = var(squeeze=1, **selKW)
117       
118        #get the x-data from the named axis
119        xdata = var.getAxis(var.getAxisIndex(axis))[:]
120       
121        return xdata, ydata
122   
123    def _getString(self, n):
124        if type(n) is str:
125            return n
126        else:
127            return ''.join([str(x) for x in n])
128
129    def _buildLookup(self, var):
130        lookup = {}
131        for i, n in enumerate(var):
132            lookup[self._getString(n)] = i
133   
134        return lookup   
Note: See TracBrowser for help on using the repository browser.