source: TI02-CSML/trunk/csml/API/ops_FileExtract.py @ 2220

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/csml/API/ops_FileExtract.py@2220
Revision 2220, 2.6 KB checked in by domlowe, 13 years ago (diff)

workaround for masked array bug

Line 
1''' ops_AbstractFileExtract  contains operations for AbstractFileExtracts'''
2import csml.csmllibs.csmldataiface
3import sys
4import Numeric
5import MA
6
7
8class DataContainer(object):
9    #dataArray needs to be the standards data container   
10    def __init__(self, data=None):
11        self.dataArray=None
12        if data is not None:
13            self.data=data
14            self.setup()
15   
16    def setup(self):
17        #print self.data
18        #print type(self.data)
19        #self.dataArray=Numeric.array(self.data)
20        try: 
21            self.dataArray=Numeric.array(self.data)
22        except MA.MA.MAError:
23            self.dataArray=self.data.tolist()
24            self.dataArray=Numeric.array(self.dataArray)
25     
26        print 
27       
28def testmethod(self):
29    print 'testmethod for AbstractFileExtract feature'
30    return 'testmethod AbstractFileExtract'
31
32
33def getAxisInfo(self, varName):
34    pass
35
36def getData(self,  fileposition=None,**kwargs):
37    #file position defines the position of the filename if a list of filenames exists
38    #**kwargs can hold subsetting request.
39    #get the right file  ##TO DO< check this is ok with FILE LIST
40    if fileposition is not None:
41        file =self.fileList.fileNames.CONTENT.split()[fileposition]
42        #file=self.fileName.CONTENT.split()[fileposition]
43    else:
44        file=self.fileName.CONTENT
45    #open the file
46    DI = csml.csmllibs.csmldataiface.DataInterface()
47    DI=DI.getUnknownInterfaceType(file)
48    DI.openFile(file)
49    DI.setAxis(self.variableName.CONTENT)
50    try:
51        DI.setAxis(self.variableName.CONTENT)
52        data=DI.getDataForAxis()
53        dataArray=data
54        fillvalue=None
55        axisorder=None
56        units=None
57    except:
58        DI.setVariable(self.variableName.CONTENT)
59        #get fill value (if there is one)   
60        fillvalue=DI.getVariableAttribute('_FillValue')
61        if kwargs:
62            print 'subsetting'
63            data = DI.getSubsetOfDataForVar(**kwargs)
64        else:
65            print 'non subsetting'
66            data = DI.getDataForVar()
67        DC=DataContainer(data)
68        dataArray=DC.dataArray
69        units=[]
70        axisorder=DI.getVariableAxes()
71        for axis in axisorder:   
72            DI.setAxis(axis)
73            units.append(DI.getAxisAttribute('units'))
74    DI.closeFile()
75    return dataArray, fillvalue, axisorder, units
76       
77def __calendar(file,timedim):
78    #open the file
79    DI = csmldataiface.DataInterface()
80    DI=DI.getUnknownInterfaceType(file)
81    DI.openFile(file)
82    DI.setAxis(timedim)
83    cal=DI.getAxisAttribute('calendar')
84    units=DI.getAxisAttribute('units')
85    return cal, units
86   
Note: See TracBrowser for help on using the repository browser.