source: TI02-CSML/trunk/csml/API/csmlutils.py @ 2156

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/csml/API/csmlutils.py@2156
Revision 2156, 2.5 KB checked in by domlowe, 14 years ago (diff)

minor bug introduced and fixed

Line 
1'''csml utils contains useful  utility functions'''
2
3
4def listify(item):
5    ''' listify checks if an item is a list, if it isn't it puts it inside a list and returns it. Always returns a list object'''
6    if type(item) is list:
7        return item
8    else:
9        return [item]
10   
11   
12   
13#deal with longitude requests
14#if the request is in -ve,+ve eg (-30,30) but the data is in (0,360) need to handle this by changing the args.
15def fixLongitude(request, kwargs):
16    for key in request.keys():
17        if kwargs.has_key(key):
18            if type(kwargs[key]) is not tuple:
19                continue
20            elif key == 'longitude': #how do we test if it is longitude properly?
21                for val in request[key]:
22                    if val < 0:
23                        pass
24                    else:
25                        if kwargs[key][0] < 0:
26                            kwargs[key]=(kwargs[key][0]+360,kwargs[key][1])
27                        if kwargs[key][1] < 0:
28                            kwargs[key]=(kwargs[key][0],kwargs[key][1]+360)
29    return kwargs
30                       
31                       
32                       
33def nudgeSingleValuesToAxisValues(value, axisValues):
34        """
35        Takes a value and checks if it is in the axisValues array. If not, it nudges the
36        value to the nearest neighbour in axis. It returns the new value twice along
37        with a message describing the change.
38        """
39        #import cdms
40        rtMessage=""
41        newValue=None
42       
43        if value in axisValues:
44            newValue=value
45        else:
46            sortedAxis=[]
47            for i in axisValues:
48                sortedAxis.append(i)
49            sortedAxis.sort()
50           
51            if value<sortedAxis[0]:
52                newValue=sortedAxis[0]
53            elif value>sortedAxis[-1]:
54                newValue=sortedAxis[-1]
55            else:
56                for i in range(len(axisValues)):
57                    if i<(len(axisValues)-1):
58                        (current, nextone)=(axisValues[i], axisValues[i+1])
59                        if current>nextone:
60                            tempc=nextone
61                            nextone=current
62                            current=tempc
63                   
64                        if value>current and value<nextone:
65                            lowergap=value-current
66                            uppergap=nextone-value
67                            if uppergap==lowergap:
68                                newValue=nextone
69                            elif uppergap>lowergap:
70                                newValue=current
71                            elif uppergap<lowergap:
72                                newValue=nextone                       
73                            break
74            if newValue==None:
75                rtMessage="%s axis selected value '%s' nudged to nearest value in real axis '%s' ;" % (axisType, value, newValue)       
76                print rtMessage         
77                   
78        return (newValue)                           
Note: See TracBrowser for help on using the repository browser.