Changeset 3013


Ignore:
Timestamp:
13/11/07 11:50:45 (12 years ago)
Author:
domlowe
Message:

ragged section methods - under development

Location:
TI02-CSML/trunk/csml
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/csml/API/__init__.py

    r2758 r3013  
    2626import ops_GridSeriesFeature 
    2727import ops_TrajectoryFeature 
     28import ops_RaggedSectionFeature 
    2829import csmlContainer 
    2930import types 
     
    4243 
    4344 
    44 operationsMap={csml.parser.Dataset:ops_Dataset, csml.parser.FileExtract:ops_FileExtract, csml.parser.RawFileExtract: ops_RawFileExtract, csml.parser.AbstractFeature:ops_AbstractFeature, csml.parser.GridSeriesFeature:ops_GridSeriesFeature, csml.parser.GridFeature:ops_GridFeature, csml.parser.PointSeriesFeature:ops_PointSeriesFeature, csml.parser.PointSeriesFeature:ops_PointSeriesFeature,csml.parser.ProfileSeriesFeature:ops_ProfileSeriesFeature,csml.parser.TrajectoryFeature:ops_TrajectoryFeature} 
     45operationsMap={csml.parser.Dataset:ops_Dataset, csml.parser.FileExtract:ops_FileExtract, csml.parser.RawFileExtract: ops_RawFileExtract, csml.parser.AbstractFeature:ops_AbstractFeature, csml.parser.GridSeriesFeature:ops_GridSeriesFeature, csml.parser.GridFeature:ops_GridFeature, csml.parser.PointSeriesFeature:ops_PointSeriesFeature, csml.parser.PointSeriesFeature:ops_PointSeriesFeature,csml.parser.ProfileSeriesFeature:ops_ProfileSeriesFeature,csml.parser.TrajectoryFeature:ops_TrajectoryFeature, csml.parser.RaggedSectionFeature:ops_RaggedSectionFeature} 
    4546 
    4647 
  • TI02-CSML/trunk/csml/API/ops_PointSeriesFeature.py

    r3002 r3013  
    1313    #returns domain as a dictionary of ordinates {name: [values], ...} 
    1414    self.domain={} 
    15     self.gridnames={} 
    1615    valList=[] 
    1716    for val in self.value.pointSeriesDomain.timePositionList.CONTENT.split(): 
     
    2120    self.domain['longitude']=lon 
    2221    self.domain['latitude']=lat 
    23      
    24     #for gridOrd in self.value.pointSeriesDomain.coordTransformTable.gridOrdinates: 
    25         #name=gridOrd.coordAxisLabel.CONTENT 
    26         #self.gridnames[gridOrd.gridAxesSpanned.CONTENT]=name 
    27         #if hasattr(gridOrd.coordAxisValues, 'insertedExtract'): 
    28             #self.domain[name], fill, axisorder, units=gridOrd.coordAxisValues.insertedExtract.getData() 
    29         #else:             
    30             #valList=[] 
    31             #try: 
    32                 #vals=gridOrd.coordAxisValues.coordinateList.CONTENT 
    33                 #for val in vals.split():   
    34                     #valList.append(eval(val)) 
    35             #except: 
    36                 #vals=gridOrd.coordAxisValues.timePositionList.CONTENT 
    37                 #for val in vals.split():   
    38                     #valList.append(val)             
    39             #self.domain[name]=valList     
     22 
    4023    return self.domain     
    4124 
  • TI02-CSML/trunk/csml/API/ops_RaggedSectionFeature.py

    r1686 r3013  
    11''' ops_RaggedSectionFeature  contains operations for RaggedSectionFeatures''' 
     2import csml 
     3import MA,MV,Numeric 
     4import cdms 
     5 
    26 
    37def testmethod(self): 
    48    print 'testmethod for ragged section feature' 
    59    return 'testmethod 2' 
     10 
     11def getDomain(self): 
     12    #returns domain as a dictionary of ordinates {name: [values], ...} 
     13    self.domain={} 
     14     
     15    #get lat lon station locations 
     16    locations= self.stationLocations.CONTENT.split() 
     17    latitude=[] 
     18    longitude=[] 
     19    for i in range(0, len(locations)-1,2): 
     20        latitude.append(locations[i]) 
     21        longitude.append(locations[i+1]) 
     22         
     23    self.domain['latitude']=latitude 
     24    self.domain['longitude']=longitude 
     25     
     26    #get station times 
     27    times=[] 
     28    for t in self.stationTimes.CONTENT.split(): 
     29        times.append(t) 
     30    self.domain['time']=times 
     31 
     32    #get vertical dimension 
     33    gridOrd= self.value.sectionDomain.coordTransformTable.gridOrdinates 
     34    name=gridOrd.coordAxisLabel.CONTENT 
     35    if hasattr(gridOrd.coordAxisValues, 'insertedExtract'): 
     36        self.domain[name], fill, axisorder, units=gridOrd.coordAxisValues.insertedExtract.getData() 
     37    else:             
     38        valList=[] 
     39        vals=gridOrd.coordAxisValues.coordinateList.CONTENT 
     40        for val in vals.split():   
     41            valList.append(eval(val))             
     42        self.domain[name]=valList     
     43        self._depths=valList 
     44        self._depthname=name 
     45             
     46    return self.domain 
     47         
     48 
     49def subsetByTime(self, outputdir=None, ncname='pointseries.nc' ,times=None): 
     50    if outputdir is not None: 
     51        self.outputdir=outputdir 
     52    elif csml.API.csmlContainer.globalContainer.OUTPUTDIR is not None: 
     53        self.outputdir=csml.API.csmlContainer.globalContainer.OUTPUTDIR 
     54       
     55    if self.outputdir is not None: 
     56        pathToSubsetNetCDF=self.outputdir + '/' +ncname 
     57    else:  
     58        pathToSubsetNetCDF=ncname 
     59    if self.outputdir is not None: 
     60        csml.csmllibs.csmlextra.checkDirExists(self.outputdir) 
     61    if type(times) is str: 
     62        selection = tuple(csml.csmllibs.csmlextra.listify(times)) 
     63    else: 
     64        selection = times   
     65    tlist=[]     
     66    for val in self.stationTimes.CONTENT.split(): 
     67        tlist.append(val) 
     68    
     69    indices=[] 
     70    if  len(selection) ==2:        
     71        selectedTimes=[] 
     72        for domaintime in tlist: 
     73            if selection[0] == domaintime: 
     74                minIndex=tlist.index(domaintime) 
     75                selectedTimes.append(domaintime) 
     76            if domaintime > selection[0]: 
     77                if domaintime < selection[1]: 
     78                    selectedTimes.append(domaintime)           
     79            if selection[1] == domaintime: 
     80                maxIndex=tlist.index(domaintime) 
     81                selectedTimes.append(domaintime)           
     82                break    
     83                     
     84    elif len(selection)==1:   #point only 
     85        for domaintime in tlist: 
     86            if selection[0] == domaintime:               
     87                minIndex=tlist.index(domaintime) 
     88                maxIndex=minIndex 
     89                selectedTimes=selection 
     90                break 
     91     
     92    #get maximum profile length: 
     93    lengths=self.profileLength.CONTENT.split() 
     94    maxlen=0 
     95    for l in lengths: 
     96        testlen=eval(l) 
     97        if testlen > maxlen: 
     98            maxlen =testlen 
     99 
     100    #assuming each timestep is in a separate file, minIndex and maxIndex refer to the position of files in the series.         
     101    fulldata=[] 
     102    fileList=[] 
     103    filenames=self.value.rangeSet.arrayDescriptor.components.fileList.fileNames.CONTENT.split()   
     104    for i in range(minIndex, maxIndex+1): 
     105        fileList.append(filenames[i]) 
     106        data,fillvalue, axisorder, units=self.value.rangeSet.arrayDescriptor.components.getData(fileposition=i)         
     107        if len(data)<maxlen: 
     108            data.resize(maxlen) 
     109        fulldata.append(data) 
     110             
     111     
     112    #Write out CSML feature 
     113         
     114    #Write out NetCDF file 
     115        #Now write out the NetCDF File:    
     116    nc=cdms.open(pathToSubsetNetCDF,'w') 
     117    var=MV.array(fulldata) 
     118    var.id=self.name.CONTENT 
     119    var.name=self.name.CONTENT 
     120    var.units=units[0] # hopefully there is just one unit in this list.. 
     121    setattr(var, 'missing_value' ,fillvalue) 
     122     
     123    floatTimes=[] 
     124     
     125    tOne=csml.csmllibs.csmltime.getCDtime(selection[0]) 
     126    tbase=csml.csmllibs.csmltime.getBaseUnits(tOne) 
     127    for time in selectedTimes: 
     128        time=csml.csmllibs.csmltime.getCDtime(time).torel(tbase) 
     129        floatTimes.append(time.value) 
     130    timeAx=cdms.createAxis(floatTimes) 
     131    timeAx.designateTime() 
     132    timeAx.id='time' 
     133    timeAx.units=tbase   
     134    var.setAxis(0,timeAx)       
     135     
     136    depthAx=cdms.createAxis(Numeric.arrayrange(maxlen)) 
     137    depthAx.id='depth' 
     138    #timeAx.units=tbase   
     139    var.setAxis(1,depthAx)       
     140     
     141    nc.write(var) 
     142    nc.close()    
     143    print 'NetCDF file written to %s'%pathToSubsetNetCDF 
     144    return None,None,None 
     145    #return subsettedFeature, pathToSubsetNetCDF, descriptor 
     146     
     147     
     148    #fextract=self.value.rangeSet.arrayDescriptor.components 
     149    #uom = self.value.rangeSet.arrayDescriptor.uom 
     150    #print minIndex 
     151    #print maxIndex 
     152    #data, fillvalue=fextract.getDataFromChunks(minIndex, maxIndex) 
     153    #print data 
     154     
     155    #return subsettedFeature, pathToSubsetNetCDF, descriptor 
  • TI02-CSML/trunk/csml/parser_extra.py

    r2758 r3013  
    99import csml 
    1010import csml.parser 
     11from csml.csmllibs.csmlextra import listify 
    1112import sys 
    1213 
     
    153154        for feature in csml.csmllibs.csmlextra.listify(self.dataset.featureCollection.featureMembers): 
    154155            cvg = feature.value 
    155             for att in ['gridSeriesDomain', 'pointDomain', 'profileSeriesDomain','trajectoryDomain','blah blah']: 
     156            for att in ['gridSeriesDomain', 'pointDomain', 'profileSeriesDomain','sectionDomain','trajectoryDomain','blah blah']: 
    156157                if hasattr(cvg, att): 
    157158                    domain=getattr(cvg,att) 
    158                     for ordinate in domain.coordTransformTable.gridOrdinates: 
     159                    for ordinate in listify(domain.coordTransformTable.gridOrdinates): 
    159160                        if hasattr(ordinate.coordAxisValues,'href'): 
    160161                            if ordinate.coordAxisValues.arcrole.split('#')[1] in ['coordinateList', 'timePositionList']: 
Note: See TracChangeset for help on using the changeset viewer.