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

more subsetting code

File:
1 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     
Note: See TracChangeset for help on using the changeset viewer.