source: TI02-CSML/trunk/csml/API/ops_PointSeriesFeature.py @ 2548

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

netcdf output of subsetted qxf point series

Line 
1''' ops_PointSeriesFeature  contains operations for PointSeriesFeatures'''
2import csml,sys
3import cdms, MV, MA
4
5def testmethod(self):
6    print 'testmethod for pointSeries feature'
7    return 'testmethod pointSeries'
8
9def getAllowedSubsettings(self):
10    return ['subsetToPointSeries']
11   
12def getDomain(self):
13    #returns domain as a dictionary of ordinates {name: [values], ...}
14    self.domain={}
15    self.gridnames={}
16    print dir(self.value.pointSeriesDomain)
17    for val in self.value.pointSeriesDomain.timePositionList.CONTENT.split():
18        print val
19    for gridOrd in self.value.pointSeriesDomain.coordTransformTable.gridOrdinates:
20        name=gridOrd.coordAxisLabel.CONTENT
21        self.gridnames[gridOrd.gridAxesSpanned.CONTENT]=name
22        if hasattr(gridOrd.coordAxisValues, 'insertedExtract'):
23            self.domain[name], fill, axisorder, units=gridOrd.coordAxisValues.insertedExtract.getData()
24        else:           
25            valList=[]
26            try:
27                vals=gridOrd.coordAxisValues.coordinateList.CONTENT
28                for val in vals.split(): 
29                    valList.append(eval(val))
30            except:
31                vals=gridOrd.coordAxisValues.timePositionList.CONTENT
32                for val in vals.split(): 
33                    valList.append(val)           
34            self.domain[name]=valList   
35    return self.domain   
36
37
38
39   
40def subsetToPointSeries(self, csmlpath=None, ncpath=None,times=None):
41    pathToSubsetNetCDF=ncpath
42    if type(times) is str:
43        selection = csml.csmllibs.csmlextra.listify(times)
44    else:
45        selection = times
46   
47    tlist=[]   
48    for val in self.value.pointSeriesDomain.timePositionList.CONTENT.split():
49        tlist.append(val)
50       
51   
52    indices=[]
53    if  len(selection) ==2:       
54        selectedTimes=[]
55        for domaintime in tlist:
56            if selection[0] == domaintime:
57                minIndex=tlist.index(domaintime)
58                selectedTimes.append(domaintime)
59            if domaintime > selection[0]:
60                if domaintime < selection[1]:
61                    selectedTimes.append(domaintime)         
62            if selection[1] == domaintime:
63                maxIndex=tlist.index(domaintime)
64                selectedTimes.append(domaintime)         
65                break   
66                   
67    elif len(selection)==1:   #point only
68        for domaintime in tlist:
69            if selection[0] == domaintime:
70                minIndex=tlist.index(domaintime)
71                maxIndex=minIndex
72                selectedTimes=selection[0]
73                break
74   
75   
76   
77    fileList=[]
78    for f in self.value.rangeSet.arrayDescriptor.components.fileList.fileNames.CONTENT.split():
79        fileList.append(f)
80   
81    fextract=self.value.rangeSet.arrayDescriptor.components
82    data, fillvalue, units=fextract.getDataFromChunks(minIndex, maxIndex)
83   
84   
85    #Now write out the CSML Feature
86   
87    #Now write out the NetCDF File:   
88    nc=cdms.open(pathToSubsetNetCDF,'w')
89    var=MV.array(data)
90    var.id=self.name.CONTENT
91    var.name=self.name.CONTENT
92    var.units=units[0] # hopefully there is just one unit in this list..
93    setattr(var, 'missing_value' ,fillvalue)
94   
95    floatTimes=[]
96    #determine base units for times:
97    tOne=csml.csmllibs.csmltime.getCDtime(times[0])
98    tbase=csml.csmllibs.csmltime.getBaseUnits(tOne)
99    for time in selectedTimes:
100        time=csml.csmllibs.csmltime.getCDtime(time).torel(tbase)
101        floatTimes.append(time.value)
102    timeAx=cdms.createAxis(floatTimes)
103    timeAx.designateTime()
104    timeAx.id='time'
105    timeAx.units=tbase 
106    var.setAxis(0,timeAx)     
107    nc.write(var)
108    nc.close()
109    sys.exit()
110    print 'NetCDF file written to %s'%pathToSubsetNetCDF
111    return subsettedFeature, pathToSubsetNetCDF, descriptor
112   
113   
114   
115   
116   
117   
Note: See TracBrowser for help on using the repository browser.