Changeset 2073


Ignore:
Timestamp:
29/01/07 14:22:18 (13 years ago)
Author:
domlowe
Message:

more subsetting code

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

Legend:

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

    r2071 r2073  
    114114        if hasattr(self.value.rangeSet.valueArray.valueComponent.quantityList, '__insertedExtract'): 
    115115            numFiles= len( csmlutils.listify(self.value.rangeSet.valueArray.valueComponent.quantityList.__insertedExtract.components)[0].fileList.fileNames.CONTENT.split()) 
     116            timeToFileRatio=len(self.domain[timeName])/numFiles 
    116117             
    117             timeToFileRatio=len(self.domain[timeName])/numFiles 
    118118            #to keep track of files that have already been fetched. eg. if multiple times are in a single file only need to get data from that file once... 
    119119            filesFetched=[] 
     
    124124                            selection[kw]=kwargs[kw] 
    125125            for time in self.times: 
    126                 print time 
    127126                listPosition=self.domain[timeName].index(time) 
    128127                strTimes= strTimes + ' ' + time 
    129128                for comp in csmlutils.listify(self.value.rangeSet.valueArray.valueComponent.quantityList.__insertedExtract.components):  
    130                     filePos=(listPosition)/timeToFileRatio 
     129                    filePos=int(float(listPosition)/timeToFileRatio) 
    131130                    if filePos in filesFetched: 
    132131                        continue #already got data from this file, try next time 
    133                     
    134132                    data=comp.getData(fileposition=filePos, **selection) 
    135133                    print comp.fileList.fileNames.CONTENT 
     
    142140                    filesFetched.append(filePos) 
    143141                axisorder = data.getAxisIds()  #will need later! 
    144                 for comp in csmlutils.listify(self.value.rangeSet.aggregatedArray.components): 
    145                     filePos=(listPosition)/timeToFileRatio 
    146                     if filePos in filesFetched: 
    147                         continue #already got data from this file, try next time 
    148                     data=comp.getData(fileposition=filePos, **selection) 
    149                     self.files.append(comp.fileName.CONTENT.split()[filePos]) 
    150                     if fulldata ==[]: 
    151                         fulldata = data.tolist() 
    152                     else: 
    153                         for item in data.tolist(): 
    154                             fulldata.append(item) 
    155                     filesFetched.append(filePos) 
    156                 axisorder = data.getAxisIds()  #will need later! 
    157  
    158142    elif hasattr(self.value.rangeSet, 'datablock'): #not tested 
    159143        pass 
     
    161145  
    162146 
    163     ### define domain and rangeSet to use for feature in csml document#### 
    164     #TODO - rewrite this section for version 2 parser ### 
    165      
    166     #domain=csml.parser.GridSeriesDomain() 
    167     #domain.domainReference=csml.parser.TimePositionList(timePositions=strTimes) 
    168     #grid=csml.parser.Grid() 
    169     ##dc = self.getDomainComplement() 
     147    # define domain  to use in 'value' attribute of feature in csml document# 
     148     
     149     
     150    domain=csml.parser.GridSeriesDomain() 
     151    grid=csml.parser.GridCoordinatesTable() 
     152    #dc = self.getDomainComplement() 
    170153    ordinates= [] 
    171154    i=0 
     
    185168        if key in kwargs: 
    186169            if key ==timeName: 
    187                 continue #dealt with time earlier             
     170                straxisValues=strTimes 
    188171            elif kwargs[key][0] < kwargs[key][1]:    
    189172                for val in self.domain[key]: 
     
    212195        god.axisValues=straxisValues[:-2] 
    213196        ordinates.append(god) 
    214     #totalArraySize=totalArraySize*len(self.times) 
    215     #grid.ordinates=ordinates 
    216     #domain.domainComplement=grid 
    217     #rangeSet=csml.parser.RangeSet() 
    218     #rangeSet.arrayDescriptor=csml.parser.NetCDFExtract(id=self.id,fileName=pathToSubsetNetCDF,variableName=self.id,arraySize=[arraySize]) 
    219  
    220     #csmlWrap=csml.csmllibs.csmlfeaturewrap.CSMLWrapper() 
    221     #subsettedFeature=csmlWrap.createGridSeriesFeature(domain,rangeSet,datasetID="A",featureID="B",description="C") 
    222     ##container.appendFeature(subsettedFeature) 
    223  
     197    totalArraySize=totalArraySize*len(self.times) 
     198    grid.ordinates=ordinates 
     199    domain.domainComplement=grid 
     200    rangeSet=csml.parser.RangeSet() 
     201    rangeSet.arrayDescriptor=csml.parser.NetCDFExtract(id=self.id,fileName=csml.parser.csString(pathToSubsetNetCDF),variableName=csml.parser.csString(self.id),arraySize=csml.parser.csString(arraySize)) 
     202    cvg=csml.parser.GridSeriesCoverage() 
     203    cvg.rangeSet=rangeSet 
     204    cvg.gridSeriesDomain=domain     
     205    csmlWrap=csml.csmllibs.csmlfeaturewrap.CSMLWrapper() 
     206    subsettedFeature=csmlWrap.createGridSeriesFeature(value=cvg,datasetID="A",featureID="B",description="C") 
     207     
     208     
     209     
    224210    ### write netcdf using NCWriter class (wraps cdms) ### 
    225211    nc=csml.csmllibs.netCDFWriter.NCwriter(pathToSubsetNetCDF) 
     
    231217    #USE CRS!     
    232218    for ordinate in ordinates: 
     219        if ordinate.definesAxis=='Time': 
     220            continue 
    233221        lon,lat=None,None 
    234         if ordinate.definesAxis=='longitude': 
     222        if ordinate.definesAxis=='Lon': 
    235223            lon=1 
    236         if ordinate.definesAxis=='latitude': 
     224        if ordinate.definesAxis=='Lat': 
    237225            lat=1 
    238226        #convert to list 
     
    242230        nc.addAxis(ordinate.definesAxis,vals,isLon=lon,isLat=lat,units='')#to do, units attribute for CF compliance 
    243231    if len(ordinates)==3: 
    244         axes=['t',axisorder[1],axisorder[2],axisorder[3]] 
     232        axes=['t',axisorder[0],axisorder[1],axisorder[2]] 
    245233    elif len(ordinates)==2: 
    246         axes=['t',axisorder[1],axisorder[2]] 
     234        axes=['t',axisorder[0],axisorder[1]] 
    247235    nc.addVariable(fulldata,self.id, axes,units='') #to do, units attribute for CF compliance 
    248236    nc.closeFinishedFile() 
    249237    return subsettedFeature, pathToSubsetNetCDF 
    250     #container.attachNetCDFFile(nc) 
    251     #MUST be supplied with a CSMLContainer object to store the subsetted feature in 
    252     return subsettedFeature, pathToSubsetNetCDF 
     238     
  • TI02-CSML/trunk/csml/csmllibs/csmlfeaturewrap.py

    r1521 r2073  
    5151        pass 
    5252 
    53     def createGridSeriesFeature(self,domain,rangeSet,datasetID=None,featureID=None,description=None): 
     53    def createGridSeriesFeature(self,value, parameter=None,datasetID=None,featureID=None,description=None): 
    5454        feat=csml.parser.GridSeriesFeature() 
    5555        if featureID: 
     
    5858            feat.id='No ID' 
    5959        if description: 
    60             feat.description=csml.parser.Description(description) 
     60            feat.description=csml.parser.csString(description) 
    6161        else: 
    62             feat.description=csml.parser.Description('No Description') 
    63         feat.domain=domain 
    64         feat.rangeSet=rangeSet 
     62            feat.description=csml.parser.csString('No Description') 
     63        feat.value=value 
     64        #feat.parameter=parameter 
    6565        return feat 
    6666                         
  • TI02-CSML/trunk/csml/parser.py

    r2071 r2073  
    162162            if att not in ['ATTRIBUTES', 'CHILDREN', 'CONTENT']: 
    163163                for child in self.CHILDREN: 
     164                    appendLater=False 
    164165                    if child == att: 
    165166                        parserobjects=[] 
     
    582583    def __init__(self, **kwargs): 
    583584        AbstractGML.__init__(self,**kwargs) 
    584         children={'time':[CSML('time'), 'csString']} 
     585        children={'timePositionList':[CSML('timePositionList'), 'csString']} 
    585586        addchildren(self,children) 
    586587        csElement.__init__(self,**kwargs) 
Note: See TracChangeset for help on using the changeset viewer.