Changeset 1956 for TI02-CSML


Ignore:
Timestamp:
05/01/07 09:50:25 (13 years ago)
Author:
domlowe
Message:

added stub methods to AbstractDI class

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

Legend:

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

    r1939 r1956  
    77 
    88 
    9 def getData(self,  fileposition=None, times=None, **kwargs): 
     9def getData(self,  fileposition=None,**kwargs): 
    1010    #should handle setAxis or setVariable as cdms netcdf model 
    1111    #file position defines the position of the filename if a list of filenames exists 
  • TI02-CSML/trunk/csml/API/ops_GridSeriesFeature.py

    r1939 r1956  
    4040        pathToSubsetNetCDF='temp.nc' 
    4141     
    42     dom = self.getDomain() 
     42    self.getDomain() 
    4343    #deal with longitude requests 
    4444    #if the request is in -ve,+ve eg (-30,30) but the data is in (0,360) need to handle this by changing the args. 
    45     kwargs=csmlutils.fixLongitude(dom,kwargs) 
     45    kwargs=csmlutils.fixLongitude(self.domain,kwargs) 
    4646    #deal with times 
    47     timeAxis=self._identifyTimeAxis(dom.keys()) 
     47    timeAxis=self._identifyTimeAxis(self.domain.keys()) 
    4848    self.times=kwargs[timeAxis] 
    4949    self.files=[] 
    5050    strTimes='' 
    5151    fulldata=[] 
     52     
     53    #set the reference system for the time axis 
     54     
     55    for gridOrd in self.value.gridSeriesDomain.coordTransformTable.gridOrdinates: 
     56        if gridOrd.coordAxisLabel.CONTENT==timeAxis: 
     57            try: 
     58                caltype=gridOrd.coordAxisValues.frame.split(':',1)[0] 
     59                calunits=gridOrd.coordAxisValues.frame.split(':',1)[1] 
     60                csml.csmllibs.csmltime.setcdtimeCalendar(caltype) 
     61                calset=True 
     62            except:pass 
     63    if calset!=True: 
     64        csml.csmllibs.csmltime.setcdtimeCalendar(csml.csmllibs.csmltime.cdtime.DefaultCalendar)     
     65    try: 
     66        caltype=self.domain.domainReference.frame.split(':',1)[0] 
     67        calunits=self.domain.domainReference.frame.split(':',1)[1] 
     68        csml.csmllibs.csmltime.setcdtimeCalendar(caltype) 
     69    except: 
     70        csml.csmllibs.csmltime.setcdtimeCalendar(csml.csmllibs.csmltime.cdtime.DefaultCalendar) 
     71     
     72     
    5273    if len(self.times) == 2: 
    5374        #then this is a range of times (t1, tn) 
     
    7697        filesFetched=[] 
    7798        #get data: 
     99        selection={} 
     100        for kw in kwargs: 
     101                    if kw != timeAxis: 
     102                        selection[kw]=kwargs[kw] 
    78103        for time in self.times: 
    79104            listPosition=self.domain[timeAxis][0].split().index(time) 
     
    85110                print comp 
    86111                print dir(comp) 
    87                 data=comp.getData(fileposition=filePos, times=self.times, **kwargs) 
    88                 self.files.append(comp.fileName.split()[filePos]) 
     112                data=comp.getData(fileposition=filePos, **selection) 
     113                self.files.append(comp.fileName.CONTENT.split()[filePos]) 
    89114                if fulldata ==[]: 
    90115                    fulldata = data.tolist() 
     
    94119                filesFetched.append(filePos) 
    95120            axisorder = data.getAxisIds()  #will need later! 
    96             sys.exit() 
    97121            for comp in csmlutils.listify(self.value.rangeSet.aggregatedArray.components): 
    98122                filePos=(listPosition)/timeToFileRatio 
    99123                if filePos in filesFetched: 
    100124                    continue #already got data from this file, try next time 
    101                 data=comp.getData(fileposition=filePos, times=self.times, **kwargs) 
    102                 self.files.append(comp.fileName.split()[filePos]) 
     125                data=comp.getData(fileposition=filePos, **selection) 
     126                self.files.append(comp.fileName.CONTENT.split()[filePos]) 
    103127                if fulldata ==[]: 
    104128                    fulldata = data.tolist() 
     
    108132                filesFetched.append(filePos) 
    109133            axisorder = data.getAxisIds()  #will need later! 
    110         try: 
    111             caltype=self.domain.domainReference.frame.split(':',1)[0] 
    112             calunits=self.domain.domainReference.frame.split(':',1)[1] 
    113             csml.csmllibs.csmltime.setcdtimeCalendar(caltype) 
    114         except: 
    115             csml.csmllibs.csmltime.setcdtimeCalendar(csml.csmllibs.csmltime.cdtime.DefaultCalendar) 
     134 
    116135    elif hasattr(self.value.rangeSet, 'datablock'): #not tested 
    117136        pass 
    118137 
     138  
    119139 
    120140    ### define domain and rangeSet to use for feature in csml document#### 
    121     domain=csml.parser.GridSeriesDomain() 
    122     domain.domainReference=csml.parser.TimePositionList(timePositions=strTimes) 
    123     grid=csml.parser.Grid() 
    124     #dc = self.getDomainComplement() 
     141    #TODO - rewrite this section for version 2 parser ### 
     142     
     143    #domain=csml.parser.GridSeriesDomain() 
     144    #domain.domainReference=csml.parser.TimePositionList(timePositions=strTimes) 
     145    #grid=csml.parser.Grid() 
     146    ##dc = self.getDomainComplement() 
    125147    ordinates= [] 
    126148    i=0 
     
    128150    arraySize=0 
    129151    totalArraySize=1 
    130     for key in dc.keys(): 
     152    for key in self.domain.keys(): 
    131153        arraySize=0 
    132154        i=i+1 
     
    137159        straxisValues='' 
    138160        #now deal with each argument: 
    139  
     161             
     162        print "KWARGS" 
     163        print kwargs 
     164        print  "DOM" 
     165        print self.domain 
    140166        if key in kwargs: 
    141167            if kwargs[key][0] < kwargs[key][1]:    
    142                 for val in dc[key]: 
     168                for val in self.domain[key]: 
    143169                    if val is not '': 
    144170                        if float(val) >= kwargs[key][0]: 
     
    147173                                straxisValues=straxisValues+ str(val) + ', ' 
    148174            else:#this if deals with selections such as longitude (330,30) where the lower limit is 'greater' than the upper limit in a mathematical sense. 
    149                     for val in dc[key]: 
     175                    for val in self.domain[key]: 
    150176                        if val is not '': 
    151177                            if val >= kwargs[key][0]: 
    152178                                arraySize=arraySize+1 
    153179                                straxisValues=straxisValues+ str(val) + ', ' 
    154                     for val in dc[key]: 
     180                    for val in self.domain[key]: 
    155181                        if val is not '': 
    156182                            if val <= kwargs[key] [1]: 
     
    158184                                straxisValues=straxisValues+ str(val) + ', ' 
    159185        else: # this dimension has not been subsetted at all 
    160             for val in dc[key]: 
     186            for val in self.domain[key]: 
    161187                if val is not '': 
    162188                    arraySize=arraySize+1 
     
    165191        god.axisValues=straxisValues[:-2] 
    166192        ordinates.append(god) 
    167     totalArraySize=totalArraySize*len(self.times) 
    168     grid.ordinates=ordinates 
    169     domain.domainComplement=grid 
    170     rangeSet=csml.parser.RangeSet() 
    171     rangeSet.arrayDescriptor=csml.parser.NetCDFExtract(id=self.id,fileName=pathToSubsetNetCDF,variableName=self.id,arraySize=[arraySize]) 
    172  
    173     csmlWrap=csml.csmllibs.csmlfeaturewrap.CSMLWrapper() 
    174     subsettedFeature=csmlWrap.createGridSeriesFeature(domain,rangeSet,datasetID="A",featureID="B",description="C") 
    175     #container.appendFeature(subsettedFeature) 
     193    #totalArraySize=totalArraySize*len(self.times) 
     194    #grid.ordinates=ordinates 
     195    #domain.domainComplement=grid 
     196    #rangeSet=csml.parser.RangeSet() 
     197    #rangeSet.arrayDescriptor=csml.parser.NetCDFExtract(id=self.id,fileName=pathToSubsetNetCDF,variableName=self.id,arraySize=[arraySize]) 
     198 
     199    #csmlWrap=csml.csmllibs.csmlfeaturewrap.CSMLWrapper() 
     200    #subsettedFeature=csmlWrap.createGridSeriesFeature(domain,rangeSet,datasetID="A",featureID="B",description="C") 
     201    ##container.appendFeature(subsettedFeature) 
    176202 
    177203    ### write netcdf using NCWriter class (wraps cdms) ### 
  • TI02-CSML/trunk/csml/csmllibs/csmldataiface.py

    r1939 r1956  
    1818import string 
    1919import sys 
     20import csml.csmllibs.csmltime 
    2021 
    2122class DataInterface(object): 
     
    7071                                         
    7172        def openFile(self, filename): 
    72                 #opens file 
    73                 self.file='' 
     73           #opens file, must be overwritten by subclass 
     74            raise NotImplementedError  
    7475                 
    7576        def closeFile(self): 
    76                 #closes file 
    77                 self.file.close() 
     77           #closes file, probably needs to be overwritten by subclass 
     78            try: 
     79                self.file.close() 
     80            except: 
     81                raise NotImplementedError 
     82          
     83        def setAxis(self,axis): 
     84           #'set' the name of the current axis , must be overwritten by subclass 
     85           #this may just involve a stub (see NASAAmes interface) or may involve 
     86           #calling a real set method of the underlying api (see cdunif Interface) 
     87           raise NotImplementedError  
    7888                         
    79                  
    80                  
     89        def getDataForAxis(self): 
     90            #return all data for axis, must be overwritten by subclass 
     91           raise NotImplementedError     
     92         
     93        def setVariable(self,varname): 
     94             #As for setAxis, 'set' the name of the current axis , must be overwritten by subclass 
     95             raise NotImplementedError 
     96         
     97        def getDataForVar(self): 
     98            #return all data for variable, must be overwritten by subclass 
     99           raise NotImplementedError     
     100         
     101        def getSubsetOfDataForVar(self,**kwargs): 
     102            #return subset of data for variable, must be overwritten by subclass 
     103            raise NotImplementedError 
     104         
     105         
    81106class NappyInterface(AbstractDI):        
    82107        # Data Interface for Nappy (NASA Ames Processing in Python) 
     
    380405        #takes keyword args defining subset eg 
    381406        #subset=getSubsetOfDataForVar(latitude=(0.,10.0), longitude=(90, 100.0)) 
    382         for key in kwargs: 
    383             if key == 'longitude':   #this test needs to be much more robust... 
    384                 if kwargs[key][0] > kwargs[key][1]: 
    385                     #subsetting greenwich meridian around 0 
    386                     lonMin = kwargs[key][0] 
    387                     lonMax =kwargs[key][1] 
    388                     kwargs[key]=(0.0, lonMax) 
    389                     sel=cdms.selectors.Selector(**kwargs) 
    390                     subset1=self.file(self.varobj.name,sel) 
    391                     kwargs[key]=(lonMin,359.9999) 
    392                     sel=cdms.selectors.Selector(**kwargs) 
    393                     subset2=self.file(self.varobj.name,sel) 
    394                     #concatenate arrays along longitude 
    395                     longitudeAxis=subset1.getAxisIndex('longitude') # this needs to be more robust test. 
    396                     subset = cdms.MV.concatenate([subset1,subset2],axis=longitudeAxis) 
    397                 else: 
    398                     sel=cdms.selectors.Selector(**kwargs) 
    399                     print sel 
    400                     subset=self.file(self.varobj.name,sel) 
     407         
     408        subset=None 
     409        lonkey='longitude' 
     410        if lonkey=='longitude' in kwargs.keys():   #this test needs to be much more robust...! 
     411            if kwargs[lonkey][0] > kwargs[lonkey][1]: 
     412                #subsetting greenwich meridian around 0 
     413                lonMin = kwargs[lonkey][0] 
     414                lonMax =kwargs[lonkey][1] 
     415                kwargs[lonkey]=(0.0, lonMax) 
     416                sel=cdms.selectors.Selector(**kwargs) 
     417                subset1=self.file(self.varobj.name,sel) 
     418                kwargs[key]=(lonMin,359.9999) 
     419                sel=cdms.selectors.Selector(**kwargs) 
     420                subset2=self.file(self.varobj.name,sel) 
     421                #concatenate arrays along longitude 
     422                longitudeAxis=subset1.getAxisIndex(lonkey) 
     423                subset = cdms.MV.concatenate([subset1,subset2],axis=longitudeAxis) 
     424        if subset==None: 
     425            sel=cdms.selectors.Selector(**kwargs) 
     426            subset=self.file(self.varobj.name,sel) 
    401427        data = subset 
    402428        return data 
Note: See TracChangeset for help on using the changeset viewer.