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

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

Numeric.array is now the standard data container

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