Changeset 2547 for TI02-CSML


Ignore:
Timestamp:
05/06/07 14:42:15 (12 years ago)
Author:
domlowe
Message:

basics of QXF subsetting working

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

Legend:

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

    r2498 r2547  
    3737 
    3838##AbstractFeature methods: 
    39 addMethods(csml.parser.AbstractFeature, [ops_AbstractFeature.testmethod, ops_AbstractFeature.getAllowedSubsettings]) 
     39addMethods(csml.parser.AbstractFeature, [ops_AbstractFeature.testmethod, ops_AbstractFeature.getAllowedSubsettings, ops_AbstractFeature.getDataFromChunks]) 
    4040 
    4141##PointFeature methods: 
     
    4343 
    4444##PointSeriesFeature methods: 
    45 #addMethods(csml.parser.PointSeriesFeature, [ops_PointSeriesFeature.testmethod,ops_PointSeriesFeature.getDomainReference, ops_PointSeriesFeature.getAllowedSubsettings]) 
     45addMethods(csml.parser.PointSeriesFeature, [ops_PointSeriesFeature.testmethod,ops_PointSeriesFeature.getDomain, ops_PointSeriesFeature.subsetToPointSeries, ops_PointSeriesFeature.getAllowedSubsettings]) 
    4646 
    4747##ProfileFeature methods: 
  • TI02-CSML/trunk/csml/API/ops_AbstractFeature.py

    r2215 r2547  
    44import csml 
    55import csmlutils 
     6import MA 
    67 
    78def testmethod(self): 
     
    1314 
    1415 
    15  
     16def getDataFromChunks(self, fileList, minIdx, maxIdx): 
     17    minIndex=minIdx 
     18    maxIndex=maxIdx 
     19    data=[] 
     20    totalarraylength = 0     
     21    for file in fileList: 
     22        DI=csml.csmllibs.csmldataiface.DataInterface() 
     23        DI=DI.getUnknownInterfaceType(file)  
     24        DI.openFile(file) 
     25        DI.setVariable(self.name.CONTENT) 
     26        datachunk=DI.getDataForVar()        
     27        chunklength=len(datachunk) 
     28        startpoint=totalarraylength 
     29        totalarraylength=totalarraylength +chunklength 
     30                 
     31        if minIndex >= totalarraylength: 
     32            #print 'before selection, skipping %s'%file 
     33            continue 
     34         
     35        elif minIndex < totalarraylength: 
     36            if minIndex >= startpoint: 
     37                sliceMin=minIndex-startpoint 
     38                #print 'selection starts in %s at index %s'%(file, sliceMin) 
     39                if maxIndex < totalarraylength: 
     40                    #print 'selection self contained in %s'%file 
     41                    sliceMax=sliceMin + (maxIndex-minIndex) +1 
     42                    data=datachunk[sliceMin:sliceMax] 
     43                    continue 
     44                else: 
     45                    #print 'selection goes beyond this file' 
     46                    data.append(datachunk[sliceMin: len(datachunk)]) 
     47                    continue 
     48         
     49        if maxIndex  < startpoint: 
     50            #print 'gone past end of selection, skipping %s'%file 
     51            continue 
     52        elif maxIndex >= totalarraylength: 
     53            #get the whole chunk 
     54            data.append(datachunk) 
     55            continue 
     56         
     57        elif maxIndex <= totalarraylength:      
     58            sliceMax=(maxIndex-startpoint) +1 
     59            data.append(datachunk[0:sliceMax]) 
     60            continue     
     61    try: 
     62        result=MA.concatenate(data) 
     63    except: 
     64        result =data 
     65    return result 
    1666     
    1767 
  • TI02-CSML/trunk/csml/API/ops_PointSeriesFeature.py

    r1596 r2547  
    11''' ops_PointSeriesFeature  contains operations for PointSeriesFeatures''' 
    2 import csml 
     2import csml,sys 
    33 
    44def testmethod(self): 
     
    88def getAllowedSubsettings(self): 
    99    return ['subsetToPointSeries'] 
     10     
     11def getDomain(self): 
     12    #returns domain as a dictionary of ordinates {name: [values], ...} 
     13    self.domain={} 
     14    self.gridnames={} 
     15    print dir(self.value.pointSeriesDomain) 
     16    for val in self.value.pointSeriesDomain.timePositionList.CONTENT.split(): 
     17        print val 
     18    for gridOrd in self.value.pointSeriesDomain.coordTransformTable.gridOrdinates: 
     19        name=gridOrd.coordAxisLabel.CONTENT 
     20        self.gridnames[gridOrd.gridAxesSpanned.CONTENT]=name 
     21        if hasattr(gridOrd.coordAxisValues, 'insertedExtract'): 
     22            self.domain[name], fill, axisorder, units=gridOrd.coordAxisValues.insertedExtract.getData() 
     23        else:             
     24            valList=[] 
     25            try: 
     26                vals=gridOrd.coordAxisValues.coordinateList.CONTENT 
     27                for val in vals.split():   
     28                    valList.append(eval(val)) 
     29            except: 
     30                vals=gridOrd.coordAxisValues.timePositionList.CONTENT 
     31                for val in vals.split():   
     32                    valList.append(val)             
     33            self.domain[name]=valList     
     34    return self.domain     
    1035 
    11 def getDomainReference(self): 
    12     #Inspects a time position list for the domain reference. 
    13     #Also handles an ArrayGenerator. 
    14     print self.domain.domainReference 
    15     if isinstance(self.domain.domainReference,csml.parser.Trajectory): 
    16         print dir(self.domain.domainReference) 
    17         if isinstance(self.domain.domainReference.times.timePositions,csml.parser.ArrayGenerator): 
    18             time = {} 
    19             timeframe=self.domain.domainReference.times.frame 
    20             time['t'] = self.domain.domainReference.times.timePositions.getGeneratedValues(timeframe, summary=1) 
    21             domainref  = time 
    22         else: 
    23             time = {} 
    24             time['t'] = self.domain.domainReference.times.timePositions 
    25             domainref  = time 
    26               
    27             pass 
    28     else: domainref='blah2' 
    29     return domainref 
     36 
     37 
     38     
     39def subsetToPointSeries(self, csmlpath=None, ncpath=None,times=None): 
     40    if type(times) is str: 
     41        selection = csml.csmllibs.csmlextra.listify(times) 
     42    else: 
     43        selection = times 
     44     
     45    tlist=[]     
     46    for val in self.value.pointSeriesDomain.timePositionList.CONTENT.split(): 
     47        tlist.append(val) 
     48    
     49    indices=[] 
     50    if  len(selection) ==2: 
     51        for domaintime in tlist: 
     52            if selection[0] == domaintime: 
     53                minIndex=tlist.index(domaintime) 
     54            if selection[1] == domaintime: 
     55                maxIndex=tlist.index(domaintime) 
     56                break    
     57    elif len(selection)==1:   #point only 
     58        for domaintime in tlist: 
     59            if selection[0] == domaintime: 
     60                minIndex=tlist.index(domaintime) 
     61                maxIndex=minIndex 
     62                break 
     63     
     64    fileList=[] 
     65    for f in self.value.rangeSet.arrayDescriptor.components.fileList.fileNames.CONTENT.split(): 
     66        fileList.append(f) 
     67     
     68     
     69    data=self.getDataFromChunks(fileList, minIndex, maxIndex) 
     70 
     71    print data 
     72    sys.exit() 
     73    #Now write out the CSML Feature 
     74     
     75    #Now write out the NetCDF File 
     76 
     77     
     78     
     79     
     80     
     81     
  • TI02-CSML/trunk/csml/csmllibs/csmldataiface.py

    r2544 r2547  
    7171                if fileExtension == '.nc': 
    7272                        return cdunifInterface() 
    73                 if fileExtension == '.qxf': 
     73                if fileExtension == 'qxf': 
    7474                        return cdunifInterface() 
    7575                elif fileExtension == '.pp': 
  • TI02-CSML/trunk/csml/csmllibs/csmltime.py

    r2395 r2547  
    3535        elif len(item)==3: 
    3636            item='0'+item 
     37        else: 
     38            item=item + ':' 
    3739        newtime=newtime + item 
    38     csmlt=newdate[:-1]+'T'+newtime 
     40    if newtime[-1] == ':': 
     41        csmlt=newdate[:-1]+'T'+newtime[:-1] 
     42    else: 
     43        csmlt=newdate[:-1]+'T'+newtime 
    3944    return str(csmlt) 
    4045                 
Note: See TracChangeset for help on using the changeset viewer.