Changeset 2526


Ignore:
Timestamp:
30/05/07 13:28:45 (12 years ago)
Author:
domlowe
Message:

various fixes to profile subsetting

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

Legend:

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

    r2498 r2526  
    137137                numFiles= len( csmlutils.listify(feature.value.rangeSet.valueArray.valueComponent.insertedExtract.components)[0].fileList.fileNames.CONTENT.split()) 
    138138            except: 
    139                 numFiles= len(csmlutils.listify(feature.value.rangeSet.valueArray.valueComponent.insertedExtract.components)[0].fileName.CONTENT) 
     139                try: 
     140                    numFiles= len(csmlutils.listify(feature.value.rangeSet.valueArray.valueComponent.insertedExtract.components)[0].fileName.CONTENT) 
     141                except: 
     142                    numFiles= len(csmlutils.listify(feature.value.rangeSet.valueArray.valueComponent.insertedExtract.fileName.CONTENT)) 
    140143            timeToFileRatio= len(domain[timeName])/numFiles  
    141144            if timeToFileRatio==0: 
     
    184187    filesFetched=[] 
    185188       
    186     if hasattr(value.rangeSet, 'arrayDescriptor'): 
    187         #then just dealing with one file. 
    188         componentlist = csmlutils.listify(value.rangeSet.arrayDescriptor) 
    189     else: 
    190         #dealing with aggregated array 
    191          componentlist = csmlutils.listify(value.rangeSet.valueArray.valueComponent.insertedExtract.components) 
     189    #get list of file extracts 
     190    try: 
     191        componentlist = csmlutils.listify(value.rangeSet.valueArray.valueComponent.insertedExtract.components) 
     192    except: 
     193        componentlist = csmlutils.listify(value.rangeSet.valueArray.valueComponent.insertedExtract) 
     194    print domain 
     195    print times     
    192196    for time in times: 
    193197        listPosition=domain[timeName].index(time) 
     
    204208                files.append(comp.fileName.CONTENT) 
    205209            else: 
    206                 files.append(comp.fileList.fileNames.CONTENT[filePos]) #TODO, get the right file name 
     210                try: 
     211                    files.append(comp.fileList.fileNames.CONTENT[filePos]) #TODO, get the right file name 
     212                except: 
     213                    files.append(comp.fileName.CONTENT) 
     214                 
     215    #open the file 
     216             
    207217             
    208218            if fulldata is None: 
  • TI02-CSML/trunk/csml/API/ops_FileExtract.py

    r2288 r2526  
    3737     
    3838    if fileposition is not None: 
    39         file =self.fileList.fileNames.CONTENT.split()[fileposition] 
     39        try: 
     40            file =self.fileList.fileNames.CONTENT.split()[fileposition] 
     41        except: 
     42            file=self.fileName.CONTENT 
    4043    else: 
    4144        file=self.fileName.CONTENT 
  • TI02-CSML/trunk/csml/API/ops_GridSeriesFeature.py

    r2500 r2526  
    244244    vc.role="http://ndg.nerc.ac.uk/fileFormat/csmlStorageDescriptor" 
    245245    vc.show='embed' 
     246    vc.insertedExtract=descriptor 
    246247    try: 
    247248        vc.uom=self.value.rangeSet.valueArray.valueComponent.uom 
    248249    except: 
    249250        vc.uom = 'unknown'  #TODO, 
     251     
    250252    va.valueComponent=vc 
    251253    va.id=csml.csmllibs.csmlextra.getRandomID() 
  • TI02-CSML/trunk/csml/API/ops_ProfileSeriesFeature.py

    r2444 r2526  
    5353     
    5454    #non-feature specific setup code, mainly handles the time dimension/calendar 
    55     pathToSubsetNetCDF, kwargs, timeAxis, timeName,calunits, caltype, times=csml.API.genSubset.genericSubset(self, csmlpath, ncpath, self.domain, kwargs) 
     55    pathToSubsetNetCDF, kwargs, timeAxis, timeName, caltype, times=csml.API.genSubset.genericSubset(self, csmlpath, ncpath, self.domain, kwargs) 
     56       
    5657       
    5758    ##Get names of variables in file and relate them to the subset selection  
     
    6566            allValues=tuple(self.domain[gridOrd.coordAxisLabel.CONTENT]) 
    6667    strTimes, axisorder, units, fulldata, fillvalue =csml.API.genSubset.getTheData(self, selection, times, timeName) 
    67     return pathToSubsetNetCDF, crs, timeName, times, strTimes, calunits, caltype, axisorder,units, fulldata, fillvalue, kwargs 
     68    return pathToSubsetNetCDF, crs, timeName, times, strTimes, caltype, axisorder,units, fulldata, fillvalue, kwargs 
    6869             
    6970             
    7071def subsetToProfile(self, csmlpath=None, ncpath=None,**kwargs): 
    7172    #perform the subset  
    72     pathToSubsetNetCDF, crs, timeName, times, strTimes, calunits, caltype, axisorder,units, fulldata, fillvalue, kwargs=self._subsetProfileSeries(csmlpath, ncpath,**kwargs)  
    73      
    74     (time, lat, lon)=(crs.axes[crs.timeAxis],crs.axes[crs.latAxis], crs.axes[crs.lonAxis]) 
     73    pathToSubsetNetCDF, crs, timeName, times, strTimes,  caltype, axisorder,units, fulldata, fillvalue, kwargs=self._subsetProfileSeries(csmlpath, ncpath,**kwargs)  
     74     
     75    try: 
     76        lat=crs.axes[crs.latAxis] 
     77    except: 
     78        lat='latitude' 
     79    try: 
     80        lon=crs.axes[crs.lonAxis] 
     81    except: 
     82        lon='longitude' 
     83    time=crs.axes[crs.timeAxis] 
    7584     
    7685    for axis in axisorder: 
     
    8594     
    8695     
     96    #get the totalArraySize 
     97    domainSubset, totalArraySize=csml.API.genSubset.subsetDomain(timeName,strTimes,self.domain, **kwargs) 
     98 
    8799    #Okay, got the data now. Need to write CSML feature and NetCDF files. 
    88100    #Writing out the CSML feature 
     
    91103    newdomain=csml.parser.csString(prof) 
    92104     
    93     rangeSet=csml.parser.RangeSet() 
    94105    #rangeSet.arrayDescriptor=csml.parser.NetCDFExtract(id=self.id,fileName=csml.parser.csString(pathToSubsetNetCDF),variableName=csml.parser.csString(self.id),arraySize=csml.parser.csString(totalArraySize)) 
     106    descid=csml.csmllibs.csmlextra.getRandomID() 
     107    descriptor=csml.parser.NetCDFExtract(id=descid,fileName=csml.parser.csString(pathToSubsetNetCDF),variableName=csml.parser.csString(self.id),arraySize=csml.parser.csString(totalArraySize)) 
     108    rs=csml.parser.RangeSet() 
     109    va=csml.parser.ValueArray() 
     110    vc=csml.parser.MeasureOrNullList() 
     111    vc.href='#%s'%descid 
     112    vc.arcrole="http://ndg.nerc.ac.uk/xlinkUsage/insert#QuantityList" 
     113    vc.role="http://ndg.nerc.ac.uk/fileFormat/csmlStorageDescriptor" 
     114    vc.show='embed' 
     115    vc.insertedExtract=descriptor 
     116    try: 
     117        vc.uom=self.value.rangeSet.valueArray.valueComponent.uom 
     118    except: 
     119        vc.uom = 'unknown'  #TODO, 
     120     
     121    va.valueComponent=vc 
     122    va.id=csml.csmllibs.csmlextra.getRandomID() 
     123    rs.valueArray=va 
     124     
     125 
     126     
     127     
    95128     
    96129    #gridseries coverage 
    97130    cvg=csml.parser.ProfileSeriesCoverage() 
    98     cvg.rangeSet=rangeSet 
     131    cvg.rangeSet=rs 
    99132    cvg.profileSeriesDomain=newdomain     
    100133     
     
    130163    otherdims['latitude']=float(loc.CONTENT.split()[0]) 
    131164    otherdims['longitude']=float(loc.CONTENT.split()[1]) 
    132     nc.genWriteVar(self.id,ords, times, calunits, caltype, axislist, units, fulldata, fillvalue, **otherdims) 
     165    nc.genWriteVar(descid,ords, times, caltype, axislist, units, fulldata, fillvalue, **otherdims) 
    133166    nc.closeFinishedFile() 
    134167    print 'NetCDF file written to %s'%pathToSubsetNetCDF 
    135     return subsettedFeature, pathToSubsetNetCDF 
    136  
     168    return subsettedFeature, pathToSubsetNetCDF,descriptor 
    137169 
    138170def subsetToPointSeries(self, csmlpath=None, ncpath=None,**kwargs): 
  • TI02-CSML/trunk/csml/csmllibs/csmldataiface.py

    r2525 r2526  
    455455 
    456456    def getSubsetOfDataForVar(self, **kwargs):       
     457        #put any slicing indices aside for later and use names 
     458        try: 
     459            upper=kwargs['upper'] 
     460            del kwargs['upper'] 
     461        except: 
     462            pass 
     463        try: 
     464            lower=kwargs['lower'] 
     465            del kwargs['lower'] 
     466        except: 
     467            pass 
     468        try: 
     469            #takes keyword args defining subset eg 
     470            #subset=getSubsetOfDataForVar(latitude=(0.,10.0), longitude=(90, 100.0)) 
     471            subset=None 
     472            lonkey='longitude' 
     473            if lonkey=='longitude' in kwargs.keys():   #this test needs to be much more robust...! 
     474                if  type(kwargs[lonkey]) is tuple: 
     475                    if kwargs[lonkey][0] > kwargs[lonkey][1]: 
     476                        #subsetting greenwich meridian around 0 
     477                        lonMin = kwargs[lonkey][0] 
     478                        lonMax =kwargs[lonkey][1] 
     479                        kwargs[lonkey]=(0.0, lonMax) 
     480                        subset1=self.file(self.varobj.id,**kwargs) 
     481                        kwargs[lonkey]=(lonMin,359.9999) 
     482                        print 'kwargs: %s'%kwargs 
     483                        try: 
     484                            subset2=self.file(self.varobj.id,**kwargs) 
     485                            longitudeAxis=subset1.getAxisIndex(lonkey) 
     486                            #concatenate arrays along longitude               
     487                            subset = cdms.MV.concatenate([subset1,subset2],axis=longitudeAxis) 
     488                        except: 
     489                            subset=subset1 
     490            if type(subset) is not cdms.tvariable.TransientVariable: 
     491                subset=self.file(self.varobj.id,**kwargs) 
     492        except:               
     493                return None 
     494                #try and slice with indices instead 
     495        return subset 
     496     
     497    def getSubsetOfDataForVarOLD(self, **kwargs):       
    457498        #delete any slicing indices and use names 
    458499        try: 
     
    490531        return subset 
    491532 
     533     
    492534    def getArraySizeOfVar(self): 
    493535    #iterates through all dimensions in variable to get array size i.e a 3x3x3 array would have a size of 27 
  • TI02-CSML/trunk/csml/parser.py

    r2513 r2526  
    412412        csElement.__init__(self,**kwargs) 
    413413         
     414    def toXML(self,csmlfrag,**kwargs): 
     415        temp=None 
     416        if hasattr(self, 'insertedExtract'):          
     417            temp=self.insertedExtract 
     418            del self.insertedExtract  #don't want to expose this in XML         
     419        csmlfrag=csElement.toXML(self,csmlfrag, **kwargs) 
     420        if temp is not None: 
     421            self.insertedExtract=temp 
     422        return csmlfrag 
     423         
    414424         
    415425class CompositeValue(AbstractGML,csElement): 
     
    570580     
    571581    def toXML(self,csmlfrag,**kwargs): 
     582        temp=None 
     583        if hasattr(self, 'insertedExtract'): 
     584            temp=self.insertedExtract 
     585            del self.insertedExtract  #don't want to expose this in XML         
    572586        csmlfrag=csElement.toXML(self,csmlfrag, **kwargs) 
    573587        #This is mandatory even if empty when using xlink         
     
    579593                    elif csmlfrag.get(XLINK('arcrole')).split('#')[1] =='coordinateList': 
    580594                        ET.SubElement(csmlfrag, CSML('coordinateList'))                         
     595        if temp !=None: 
     596            self.insertedExtract=temp 
    581597        return csmlfrag 
    582598 
  • TI02-CSML/trunk/csml/parser_extra.py

    r2444 r2526  
    9494 
    9595class ParserPostProcessor: 
    96     def __init__(self,dataset):    
     96    def __init__(self,dataset):  
    9797         
    9898        self.dataset=dataset 
     
    157157 
    158158        return self.dataset 
     159                                             
Note: See TracChangeset for help on using the changeset viewer.