Changeset 2598


Ignore:
Timestamp:
18/06/07 14:07:51 (12 years ago)
Author:
domlowe
Message:

nearest neighbour bug fixed

Location:
TI02-CSML/trunk/csml/API
Files:
2 edited

Legend:

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

    r2597 r2598  
    4040    return kwargs 
    4141                   
    42      
    43                          
    44 def nudgeSingleValuesToAxisValues(value, axisValues): 
     42def nudgeSingleValuesToAxisValues(value, axisValues, minBound=None, maxBound=None): 
    4543        """ 
    4644        Takes a value and checks if it is in the axisValues array. If not, it nudges the  
    4745        value to the nearest neighbour in axis. It returns the new value twice along  
    4846        with a message describing the change. 
     47         
     48        minBound and maxBound added as options. 
     49        If a value is outside of minBound or maxBound it is nudged so that it is within. 
     50         
     51        TODO - rewrite this so it is legible! 
     52         
    4953        """ 
    5054 
     55        bounds=False 
     56        reverseBounds=False 
     57         
     58        #determine if bounds have been provided and if they are of the form (-30,30)  or (330, 30) 
     59        if minBound!=None: 
     60            if maxBound!=None:                                
     61                bounds =True 
     62                if minBound > maxBound:            
     63                    reverseBounds = True 
    5164        rtMessage="" 
    5265        newValue=None 
    53          
    5466        def __fixTimes(value, axisValues): 
    5567            newValue = csml.csmllibs.csmltime.getTimeAsValue(value) 
     
    6375        else:             
    6476            if str(value).find('T') != -1: 
     77                minBound,minBound=None,None, 
     78                bounds,reverseBounds=False,False               
    6579                value, axisValues=__fixTimes(value,axisValues) 
    66             sortedAxis=[] 
    67             for i in axisValues: 
    68                 sortedAxis.append(i) 
    69             sortedAxis.sort()    
     80            sortedAxis=[]             
     81            if bounds == True: 
     82               if reverseBounds!=True: 
     83                    for i in axisValues: 
     84                        if i >= minBound: 
     85                            if i <= maxBound: 
     86                                sortedAxis.append(i) 
     87                          
     88               else: 
     89                   for i in axisValues: 
     90                       if i >= minBound: 
     91                           sortedAxis.append(i) 
     92                       elif i >= maxBound: 
     93                            sortedAxis.append(i)                                       
     94            else: 
     95                for i in axisValues: 
     96                    sortedAxis.append(i) 
     97            sortedAxis.sort()    
     98 
    7099            if value<sortedAxis[0]: 
    71                 newValue=sortedAxis[0] 
     100                if sortedAxis[0] < maxBound: 
     101                    newValue=sortedAxis[0] 
     102                else: 
     103                    newValue=sortedAxis[-1] 
    72104            elif value>sortedAxis[-1]: 
    73105                newValue=sortedAxis[-1] 
    74             else: 
     106            else: 
    75107                for i in range(len(axisValues)): 
    76108                    if i<(len(axisValues)-1): 
     
    97129            if len(str(int(newValue))) ==14: # it's a time 
    98130                newValue=csml.csmllibs.csmltime.convertValueToCSML(newValue)    
    99         return (newValue)                             
     131        return (newValue)    
     132                 
  • TI02-CSML/trunk/csml/API/genSubset.py

    r2597 r2598  
    2222                kwargs[key]=nearestNeighbour     
    2323        else: 
    24             #handle ranges 
    25             tmpkey=[] 
    26             for val in kwargs[key]: 
    27                 nearestNeighbour=csml.API.csmlutils.nudgeSingleValuesToAxisValues(val, domain[key]) 
    28                 if nearestNeighbour is not None: 
    29                     tmpkey.append(nearestNeighbour)    
    30                 kwargs[key]=tuple(tmpkey) 
     24            ##handle ranges 
     25            #tmpkey=[] 
     26            ##this finds the nearest neighbour without overstepping 0 (for longitude) 
     27            #if kwargs[key][0] > kwargs[key][1]:                                 
     28                #nearestNeighbour=csml.API.csmlutils.nudgeSingleValuesToAxisValues(val, domain[key], minBound=kwargs[key][0], maxBound=0) 
     29                #if nearestNeighbour is not None: 
     30                    #tmpkey.append(nearestNeighbour)    
     31                #nearestNeighbour=csml.API.csmlutils.nudgeSingleValuesToAxisValues(val, domain[key], minBound=0, maxBound=kwargs[key][1]) 
     32                #if nearestNeighbour is not None: 
     33                    #tmpkey.append(nearestNeighbour)    
     34                                  
     35            #else: 
     36                tmpkey=[] 
     37                for val in kwargs[key]: 
     38                    nearestNeighbour=csml.API.csmlutils.nudgeSingleValuesToAxisValues(val, domain[key], minBound=kwargs[key][0], maxBound=kwargs[key][1]) 
     39                    if nearestNeighbour is not None: 
     40                        tmpkey.append(nearestNeighbour)    
     41                kwargs[key]=tuple(tmpkey)             
    3142    return kwargs 
    3243 
Note: See TracChangeset for help on using the changeset viewer.