source: DataExtractor/trunk/dx-0.1.0/test.py @ 70

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/DataExtractor/trunk/dx-0.1.0/test.py@70
Revision 70, 2.2 KB checked in by astephen, 16 years ago (diff)

Beta-release of dx: version 0.1.0

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2def getValuesInRange(start, end, array):
3    """
4    getValuesInRange function - takes a start and end value and returns the
5    values in the array that are between them.
6    """
7    print array.id
8    # check all are floats
9    array=map(lambda x: float(x), list(array))
10    if array[0]>array[-1]: array.reverse()
11    if start>end:  (start, end)=(end, start)
12    print start, end
13    (start, end)=(float(start), float(end))
14    rtarray=[]
15    for i in array:
16        if i>=start and i<=end:
17            rtarray.append(i)
18    print rtarray
19    return rtarray
20
21
22
23def ev(var_metadata,north,west,south,east,timestep_count, levels=None):
24                # Also estimate volume here
25                npoints=1
26                axis_list=var_metadata.getAxisList()
27
28                for axis in axis_list:
29                    print axis
30                    if axis.isTime(): 
31                        npoints=npoints*timestep_count
32                    else:
33                        low=None
34                        high=None
35                        if axis.isLongitude(): (low, high)=(west, east)
36                        if axis.isLatitude():  (low, high)=(south, north) 
37                        if axis.isLevel():     
38                            if type(levels)!=type([]) and type(levels)!=type((0,)):
39                                templevels=[levels]
40                            else:
41                                templevels=levels
42                            (low, high)=(templevels[0], templevels[-1])
43                        print low,high
44                        if low!=None and low!=high:
45                            npoints=npoints*len(getValuesInRange(low, high, axis))
46
47                                # Now we have the number of points we can multiply that by 4 bytes per float
48                size=4.*npoints
49                return size
50
51
52# try it
53import cdms
54f=cdms.open('/badc/ecmwf-e40/metadata/e40-1.0-as-1958-2001.xml')
55var_metadata=f["tcc"]
56(north,west,south,east)=(50,40,40,50)
57print ev(var_metadata, north,west, south,east,1)
58print "-=--------------------------"
59f=cdms.open('/badc/ecmwf-e40/metadata/e40-1.0-ap-1958-2001.xml')
60var_metadata=f["u"]
61(north,west,south,east)=(90,0,-90,359)
62print ev(var_metadata, north,west, south,east,4, levels=[100,1000])
63
Note: See TracBrowser for help on using the repository browser.