Changeset 2144 for TI02-CSML/trunk/csml


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

more fixes to do with various subsetting options

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

Legend:

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

    r2095 r2144  
    2020                    pass 
    2121                else: 
    22                     if kwargs[key][0] < 0: 
    23                         kwargs[key]=(kwargs[key][0]+360,kwargs[key][1]) 
    24                     if kwargs[key][1] < 0: 
    25                         kwargs[key]=(kwargs[key][0],kwargs[key][1]+360) 
     22                    if kwargs.has_key(key): 
     23                        if kwargs[key][0] < 0: 
     24                            kwargs[key]=(kwargs[key][0]+360,kwargs[key][1]) 
     25                        if kwargs[key][1] < 0: 
     26                            kwargs[key]=(kwargs[key][0],kwargs[key][1]+360) 
    2627    return kwargs 
  • TI02-CSML/trunk/csml/API/genSubset.py

    r2141 r2144  
    4949            arraySize=len(subsetDomain[key].split()) 
    5050        totalArraySize = totalArraySize * arraySize 
    51     print 'SUBSET DOMAIN: %s'%subsetDomain 
    5251    return subsetDomain, totalArraySize 
    5352     
     
    7574 
    7675def _getTimes(timeSelection, timeName, domain): 
    77  
    7876    #currently supporting domain subsetting only by CRS name  
    7977    #(but should be easy to extend later) 
    80     times=csml.csmllibs.csmlextra.listify(timeSelection) 
    81  
     78    if type(timeSelection) is str: 
     79        times=(timeSelection,) 
     80    else: 
     81        times=timeSelection 
     82     
     83    
     84    #times=timeSelection 
     85     
     86    print times 
     87    print len(times) 
     88    if len(times)==0: 
     89        #no time specified, select all. 
     90        times= domain[timeName] 
    8291    tone=csml.csmllibs.csmltime.getCDtime(times[0]) 
    8392    if len(times) == 2: 
     
    138147        listPosition=domain[timeName].index(time) 
    139148        strTimes= strTimes + ' ' + time 
    140         print value.rangeSet.valueArray.valueComponent.href 
    141149        for comp in csmlutils.listify(value.rangeSet.valueArray.valueComponent.quantityList.__insertedExtract.components):  
    142150            filePos=int(float(listPosition)/timeToFileRatio) 
    143151            if filePos in filesFetched: 
    144152                continue #already got data from this file, try next time 
    145             data, fillvalue=comp.getData(fileposition=filePos, **selection) 
     153            data, fillvalue, axisorder, units=comp.getData(fileposition=filePos, **selection) 
     154            print 'hello' 
    146155            files.append(comp.fileList.fileNames.CONTENT[filePos]) #TODO, get the right file name 
    147156            if fulldata ==[]: 
    148                 fulldata = data.tolist() 
     157                fulldata = data 
    149158            else: 
    150                 for item in data.tolist(): 
     159                for item in data: 
    151160                    fulldata.append(item) 
    152161            filesFetched.append(filePos) 
    153         axisorder = data.getAxisIds()  
    154         units=[] 
    155         for axis in axisorder: 
    156             ax=data.getAxis(data.getAxisIndex(axis)) 
    157             if hasattr(ax, 'units'): 
    158                 units.append(ax.units) 
    159             else: 
    160                 units.append(None)                  
    161         units.append(value.rangeSet.valueArray.valueComponent.quantityList.uom) # final unit is that of the variable itself 
     162    units.append(value.rangeSet.valueArray.valueComponent.quantityList.uom) # final unit is that of the 
    162163    return strTimes, axisorder, units, fulldata, fillvalue 
    163164 
     
    181182     
    182183    #selection by time - get explcit time values, not just a range mint, maxt 
    183     timeSelection=kwargs[timeName] 
     184    try: 
     185        timeSelection=kwargs[timeName] 
     186    except KeyError: 
     187        timeSelection=[] 
    184188    times=_getTimes(timeSelection, timeName,domain) 
    185189     
  • TI02-CSML/trunk/csml/API/ops_FileExtract.py

    r2128 r2144  
    11''' ops_AbstractFileExtract  contains operations for AbstractFileExtracts''' 
    22import csml.csmllibs.csmldataiface 
     3import sys 
    34 
     5class DataContainer(object): 
     6    #dataArray needs to be the standards data container     
     7    def __init__(self, data=None): 
     8        self.dataArray=None 
     9        if data is not None: 
     10            self.data=data 
     11            self.setup() 
     12     
     13    def setup(self): 
     14        try:  
     15            self.dataArray=self.data.tolist() 
     16        except: 
     17            self.dataArray=self.data 
     18       
     19 
     20         
    421def testmethod(self): 
    522    print 'testmethod for AbstractFileExtract feature' 
    623    return 'testmethod AbstractFileExtract' 
    724 
     25 
     26def getAxisInfo(self, varName): 
     27    pass 
    828 
    929def getData(self,  fileposition=None,**kwargs): 
     
    2545    DI.openFile(file) 
    2646    DI.setAxis(self.variableName.CONTENT) 
    27      
    2847    try: 
    2948        DI.setAxis(self.variableName.CONTENT) 
    3049        data=DI.getDataForAxis() 
    3150        fillvalue=None 
     51        dataArray=data 
     52        fillvalue=None 
     53        axisorder=None 
     54        units=None 
    3255    except: 
    3356        DI.setVariable(self.variableName.CONTENT) 
     
    3558        fillvalue=DI.getVariableAttribute('_FillValue') 
    3659        if kwargs: 
    37             print 'getting data for %s'%kwargs 
     60            print 'subsetting' 
    3861            data = DI.getSubsetOfDataForVar(**kwargs) 
    3962        else: 
     63            print 'non subsetting' 
    4064            data = DI.getDataForVar() 
     65        DC=DataContainer(data) 
     66        dataArray=DC.dataArray 
     67        units=[] 
     68        axisorder=DI.getVariableAxes() 
     69        for axis in axisorder: 
     70            units.append(DI.getVariableAttribute('units')) 
    4171    DI.closeFile() 
    42     return data, fillvalue 
     72    return dataArray, fillvalue, axisorder, units 
    4373         
    4474def __calendar(file,timedim): 
  • TI02-CSML/trunk/csml/API/ops_GridSeriesFeature.py

    r2112 r2144  
    2525        name=gridOrd.coordAxisLabel.CONTENT 
    2626        if hasattr(gridOrd.coordAxisValues, '__insertedExtract'): 
    27             self.domain[name], fill=gridOrd.coordAxisValues.__insertedExtract.getData() 
     27            self.domain[name], fill, axisorder, units=gridOrd.coordAxisValues.__insertedExtract.getData() 
    2828        else: 
    2929            vals=gridOrd.coordAxisValues.coordinateList.CONTENT 
     
    5656    selection={} 
    5757    for gridOrd in self.value.gridSeriesDomain.coordTransformTable.gridOrdinates: 
    58         selection[gridOrd.gridAxesSpanned.CONTENT]=kwargs[gridOrd.coordAxisLabel.CONTENT] 
    59     
     58        try: 
     59            selection[gridOrd.gridAxesSpanned.CONTENT]=kwargs[gridOrd.coordAxisLabel.CONTENT] 
     60        except KeyError: 
     61            allValues=tuple(self.domain[gridOrd.coordAxisLabel.CONTENT]) 
     62    strTimes, axisorder, units, fulldata, fillvalue =csml.API.genSubset.getTheData(self, selection, times, timeName) 
    6063     
    61     strTimes, axisorder, units, fulldata, fillvalue =csml.API.genSubset.getTheData(self, selection, times, timeName) 
    62     
    6364     
    6465    #Okay, got the data now. Need to write CSML feature and NetCDF files. 
     
    8687    nc=csml.csmllibs.netCDFWriter.NCwriter(pathToSubsetNetCDF) 
    8788    ords=cTT.gridOrdinates 
     89     
    8890    nc.genWriteVar(self.id,ords, times, calunits, caltype, axisorder, units, fulldata, fillvalue) 
    8991    nc.closeFinishedFile() 
  • TI02-CSML/trunk/csml/DDC/obs/clim10subset.py

    r2141 r2144  
    3838#define a selection (based on the domain) 
    3939subsetDictionary={} 
    40 #subsetDictionary['time']=('1985-1-15T0:0:0.0','1985-4-15T0:0:0.0') 
    41 #subsetDictionary['time']=('1985-1-15T0:0:0.0') 
    42 #subsetDictionary['time']=('1985-1-15T0:0:0.0') 
     40subsetDictionary['time']=('1985-1-15T0:0:0.0','1985-4-15T0:0:0.0') 
    4341subsetDictionary['latitude']=(40, 41) 
    4442subsetDictionary['longitude']=(0,4) 
     
    4644#subset a feature 
    4745csmlContainer.add(feature.subsetToGridSeries(ncpath='DDC/obs/subsClim10_1.nc',**subsetDictionary)) 
    48 subsetDictionary['longitude']=(-1,4) 
    49 csmlContainer.add(feature.subsetToGridSeries(ncpath='DDC/obs/subsClim10_2.nc',**subsetDictionary)) 
     46#subsetDictionary['longitude']=(-1,4) 
     47#csmlContainer.add(feature.subsetToGridSeries(ncpath='DDC/obs/subsClim10_2.nc',**subsetDictionary)) 
    5048 
    5149 
  • TI02-CSML/trunk/csml/csmllibs/csmldataiface.py

    r2128 r2144  
    410410    def getDataForVar(self): 
    411411        data = self.varobj.getValue() 
     412        print type(data) 
    412413        return data 
    413414 
  • TI02-CSML/trunk/csml/csmllibs/netCDFWriter.py

    r2112 r2144  
    7676            else: 
    7777                name=ord.coordAxisLabel.CONTENT    
     78            print axisorder 
     79            print unitlist 
    7880            self.addAxis(name,vals,isLon=lon,isLat=lat,units=unitlist[axisorder.index(name)])#to do, units attribute for CF compliance 
    7981        self.addVariable(fulldata,varid, axisorder, fillvalue, units=unitlist[-1] ) #to do, units attribute for CF compliance 
Note: See TracChangeset for help on using the changeset viewer.