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

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

unravelled grid/axis name confusion

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        try: 
18            self.dataArray=Numeric.array(self.data)
19        except MA.MA.MAError:
20            self.dataArray=self.data.tolist()
21            self.dataArray=Numeric.array(self.dataArray)
22         
23def testmethod(self):
24    print 'testmethod for AbstractFileExtract feature'
25    return 'testmethod AbstractFileExtract'
26
27
28def getAxisInfo(self, varName):
29    pass
30
31def getData(self,  fileposition=None,**kwargs):
32    #file position defines the position of the filename if a list of filenames exists
33    #**kwargs can hold subsetting request.
34    #get the right file  ##TO DO< check this is ok with FILE LIST
35       
36    # TODO - cannot subset times within an individual file - no way to determine the original time crs..
37   
38    if fileposition is not None:
39        file =self.fileList.fileNames.CONTENT.split()[fileposition]
40        #file=self.fileName.CONTENT.split()[fileposition]
41    else:
42        file=self.fileName.CONTENT
43    #open the file
44    DI = csml.csmllibs.csmldataiface.DataInterface()
45    DI=DI.getUnknownInterfaceType(file)
46    DI.openFile(file)
47    DI.setAxis(self.variableName.CONTENT)
48    try:
49        DI.setAxis(self.variableName.CONTENT)
50        data=DI.getDataForAxis()
51        dataArray=data
52        fillvalue=None
53        axisorder=None
54        units=None
55    except:
56        DI.setVariable(self.variableName.CONTENT)
57        #get fill value (if there is one)   
58        fillvalue=DI.getVariableAttribute('_FillValue')
59        if kwargs:
60            print 'subsetting'
61            data = DI.getSubsetOfDataForVar(**kwargs)
62        else:
63            print 'non subsetting'
64            data = DI.getDataForVar()
65        DC=DataContainer(data)
66        dataArray=DC.dataArray
67        units=[]
68        axisorder=DI.getVariableAxes()
69        for axis in axisorder:   
70            DI.setAxis(axis)
71            units.append(DI.getAxisAttribute('units'))
72    DI.closeFile()
73    return dataArray, fillvalue, axisorder, units
74       
75def __calendar(file,timedim):
76    #open the file
77    DI = csmldataiface.DataInterface()
78    DI=DI.getUnknownInterfaceType(file)
79    DI.openFile(file)
80    DI.setAxis(timedim)
81    cal=DI.getAxisAttribute('calendar')
82    units=DI.getAxisAttribute('units')
83    return cal, units
84   
Note: See TracBrowser for help on using the repository browser.