Changeset 5683


Ignore:
Timestamp:
03/09/09 13:44:06 (10 years ago)
Author:
pnorton
Message:

Fixed a bug with the grid_builder_lat_lon that was causing the midpoints and bounds to be generated the wron way round.

Also added the make_test_data, that creates a dummy data variable with the mask from another extenral vairable. This allowed the code to be tested with a propper mask and other properties of the data changed.

Location:
qesdi/geoplot/trunk/lib/geoplot
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • qesdi/geoplot/trunk/lib/geoplot/config.ini

    r5646 r5683  
    5252drawValuesFile=False 
    5353valueFormat=%.2f 
     54forcePcolor=False 
    5455 
    5556[PlotProperties] 
  • qesdi/geoplot/trunk/lib/geoplot/grid_builder_lat_lon.py

    r5605 r5683  
    103103        lonBoundsMerged = GridBuilderBase._getBoundsFromAxis(lon)  
    104104 
    105         if self._isAxisOrderLonLat(cdmsVar): 
    106             gridBoundsY, gridBoundsX = N.meshgrid(latBoundsMerged, lonBoundsMerged,) 
    107         else: 
    108             gridBoundsX, gridBoundsY = N.meshgrid(lonBoundsMerged, latBoundsMerged,) 
     105        gridBoundsX, gridBoundsY = N.meshgrid(lonBoundsMerged, latBoundsMerged,) 
    109106         
    110107        return (gridBoundsX, gridBoundsY) 
     
    126123 
    127124        #need to create two arays of the one dimensional array repeated that have the same size 
    128         if self._isAxisOrderLonLat(cdmsVar): 
    129             gridMidpointY, gridMidpointX = N.meshgrid(lat.getValue(), lon.getValue()) 
    130         else: 
    131             gridMidpointX, gridMidpointY = N.meshgrid(lon.getValue(), lat.getValue()) 
     125        gridMidpointX, gridMidpointY = N.meshgrid(lon.getValue(), lat.getValue()) 
    132126         
    133127        return (gridMidpointX, gridMidpointY) 
  • qesdi/geoplot/trunk/lib/geoplot/grid_drawer.py

    r5636 r5683  
    4141    def __init__(self, drawValues=False, drawValuesFile=False,  
    4242                 valueFormat="%.2f", showGridLines=False, 
    43                  outline=False): 
     43                 outline=False, forcePcolor=False): 
    4444        """ 
    4545        Constructs a GridDrawer object               
     
    5050        self.showGridLines = showGridLines 
    5151        self.outline = outline 
     52        self.forcePcolor = forcePcolor 
    5253 
    5354    def draw(self, axes, grid, limits=None, basemap=None, norm=None, 
     
    171172 
    172173            #if the bounds are parralel then use imshow, otherwise stick with pcolormesh 
    173             if self._areBoundsParralel(grid_mapUnits.boundsX, grid_mapUnits.boundsY): 
     174            if self.forcePcolor == False and \ 
     175               self._areBoundsParralel(grid_mapUnits.boundsX, grid_mapUnits.boundsY): 
    174176                 
    175177                self._drawImshow(axes,  
     
    186188                                     values,  
    187189                                     kwargs) 
    188                 log.debug("drawn mesh in %s" % (time.time() - st ,)) 
     190                 
     191                log.debug("drawn pcolormesh in %s" % (time.time() - st ,)) 
    189192             
    190193             
     
    206209        else: 
    207210            extent=(X.min(), X.max(),Y.min(), Y.max()) 
     211 
     212#        extent=(X.min(), X.max(),Y.min(), Y.max()) 
    208213         
    209214        kwargs.pop('edgecolors') 
     
    211216        kwargs.pop('linewidth') 
    212217        kwargs.pop('antialiased') 
     218        #kwargs['origin'] = 'lower' 
    213219         
    214220        log.debug("extent = %s" % (extent,)) 
     
    238244             
    239245            if not equal: 
     246                log.debug("X[0,0:5] = %s" % (X[0,0:5],)) 
     247                log.debug("X[i,0:5] = %s" % (X[i,0:5],)) 
    240248                break 
    241249 
  • qesdi/geoplot/trunk/lib/geoplot/map_base.py

    r5612 r5683  
    6060 
    6161        startTime = time.time() 
    62         log.info("Drawing map") 
    6362 
    6463        log.debug("limits:" + str(self.xLimits) + ", " + str(self.yLimits)) 
  • qesdi/geoplot/trunk/lib/geoplot/tests/make_data_functions.py

    r5605 r5683  
    88random.seed() 
    99 
    10 def fnSinXAddCosY(shape=(10,10), missing_value=N.float32(1e20), xMax=5.0, yMax=7.0): 
     10def fnSinXAddCosY(shape=(10,10), missing_value=N.float32(1e20), xMax=7.0, yMax=5.0): 
    1111     
    1212    data = N.zeros(shape, dtype=float) 
     
    1414    xvals = N.linspace(0, xMax, shape[0]) 
    1515    yvals = N.linspace(0, yMax, shape[1]) 
    16  
     16     
    1717    for i in range(shape[0]): 
    1818        for j in range(shape[1]): 
     
    2121            y = yvals[j] 
    2222             
    23             data[i,j] =  sin(x) + cos(y) 
     23            data[i,j] = sin(x) + cos(y) 
    2424             
    2525    return data 
  • qesdi/geoplot/trunk/lib/geoplot/tests/make_ll_grid_data.py

    r5605 r5683  
    2020              functionArgs={}, 
    2121              variableProperties = {}, 
     22              mask=None, 
     23              axisOrder='xy', 
    2224              missing_value = N.float32(1e+20)): 
    2325     
     
    4244    latAxis.units = "degrees_north" 
    4345     
    44     data = function(shape=(nx,ny), missing_value=missing_value, **functionArgs) 
     46    if axisOrder == 'xy': 
     47        shape=(nx,ny) 
     48        axes = [lonAxis, latAxis] 
     49    elif axisOrder == 'yx': 
     50        shape=(ny,nx) 
     51        axes = [latAxis, lonAxis] 
     52    else: 
     53        raise Exception("Unknown axis order.") 
    4554     
    46     var = cdms.createVariable(data, axes=[lonAxis, latAxis], id=id) 
    47     var.missing_value = missing_value 
     55    log.debug("[x.id for x in axes] = %s" % ([x.id for x in axes],)) 
     56    log.debug("nx = %s, ny = %s, shape = %s" % (nx, ny, shape,)) 
     57    data = function(shape=shape, missing_value=missing_value, **functionArgs) 
     58    log.debug("data.shape = %s" % (data.shape,)) 
     59     
     60     
     61    if mask != None: 
     62        data = MA.array(data, mask=mask) 
     63        var = cdms.createVariable(data, axes=axes, id=id, 
     64                                  mask=data.mask, 
     65                                  fill_value=missing_value) 
     66    else: 
     67        var = cdms.createVariable(data, axes=axes, id=id, 
     68                                  fill_value=missing_value) 
     69     
     70#    log.debug("missing_value = %s" % (missing_value,)) 
     71#    log.debug("var.fill_value() = %s" % (var.fill_value(),)) 
     72#    log.debug("var.mask = %s" % (var.mask,)) 
    4873     
    4974    for k,v in variableProperties.items(): 
    5075        setattr(var, k, v) 
    5176     
     77         
    5278    return var 
    5379 
  • qesdi/geoplot/trunk/lib/geoplot/tests/unit/test_grid_builder_lat_lon.py

    r5605 r5683  
    1010import numpy.ma as MA 
    1111 
     12import nose.tools as nt 
     13 
    1214import geoplot.grid_builder_base 
    1315from geoplot.grid_builder_lat_lon import GridBuilderLatLon 
    1416from geoplot.grid import Grid 
    1517 
    16 class Test_GridBuidlerLatLon(object): 
    1718 
    18     def setUp(self): 
    19         self.buildAxes() 
    20         self.buildCdmsVar() 
    21         self.builder = GridBuilderLatLon(self.tempVar) 
    22      
    23     def buildAxes(self): 
    24         self.axisX = cdms.createAxis(N.array([10,20,30,40,50])) 
    25         self.axisX.axis = 'X' 
    26         self.axisX.id = 'X' 
    27         self.axisY = cdms.createAxis(N.array([4,5,6,7,8,9])) 
    28         self.axisY.axis = 'Y' 
    29         self.axisY.id = 'Y' 
    30          
    31         self.xLimits = (self.axisX[0],self.axisX[-1]) 
    32         self.yLimits = (self.axisY[0], self.axisY[-1]) 
    33              
    34     def buildCdmsVar(self): 
    35         self.a = N.array([[1,2,3,4,5], 
    36                      [6,7,8,9,10], 
    37                      [11,12,13,14,15], 
    38                      [16,17,18,19,20], 
    39                      [21,22,23,24,25], 
    40                      [26,27,28,29,30]]) 
    41          
    42         self.tempVar = cdms.createVariable(self.a,id='temp') 
    43         self.tempVar.setAxisList([self.axisY, self.axisX]) 
    44         self.tempVar.setMissing(5) 
    45      
    46     def tearDown(self): 
    47         pass 
     19# need to do the same tests for different input variabels 
     20# so storing the tests in a base class and just changing 
     21# the setup methods 
     22 
     23class Test_GridBuidlerLatLonBase(object): 
     24 
     25    # hide from nose.  Override in subclasses to make it visible 
     26    __test__ = False 
    4827     
    4928    def test_001_resizeVar(self): 
     
    7251    def test_003_buildMidpoints(self): 
    7352        midpointsX, midpointsY = self.builder._buildGridMidpoints(self.tempVar) 
    74         for row in midpointsX: 
    75             nose.tools.assert_equal(row.tolist(), 
    76                     [10.0, 20.0 , 30.0, 40.0, 50.0]) 
    77  
    78         for row in zip(*midpointsY.tolist()): 
    79             print row 
    80             nose.tools.assert_equal(list(row),  
    81                     [4.0, 5.0, 6.0, 7.0, 8.0, 9.0]) 
    82  
    83      
     53         
     54        for i in range(len(self.axisX)): 
     55            for j in range(len(self.axisY)): 
     56                 
     57                # note the j,i not i,j this is a result of meshgrid and 
     58                # is needed to get imshow to behave like pcolor 
     59                print "i,j = ", i, j 
     60                print self.axisX[:], self.axisX[i] 
     61                print midpointsX, midpointsX[j,i] 
     62                nt.assert_equal( midpointsX[j,i], self.axisX[i]) 
     63                nt.assert_equal( midpointsY[j,i], self.axisY[j]) 
     64             
    8465    def test_004_buildValues(self): 
    8566        missingPointX = 2 
     
    9576        nose.tools.assert_equal(missingArr.tolist(9999), valArr.tolist(9999)) 
    9677     
     78     
     79class Test_GridBuidlerLatLonWithLonLat(Test_GridBuidlerLatLonBase): 
     80    __test__ = True 
     81     
     82    def setUp(self): 
     83        self.buildAxes() 
     84        self.buildCdmsVar() 
     85        self.builder = GridBuilderLatLon(self.tempVar) 
     86     
     87    def buildAxes(self): 
     88        self.axisX = cdms.createAxis(N.array([10,20,30,40,50])) 
     89        self.axisX.axis = 'X' 
     90        self.axisX.id = 'X' 
     91        self.axisY = cdms.createAxis(N.array([4,5,6,7,8,9])) 
     92        self.axisY.axis = 'Y' 
     93        self.axisY.id = 'Y' 
     94         
     95        self.xLimits = (self.axisX[0],self.axisX[-1]) 
     96        self.yLimits = (self.axisY[0], self.axisY[-1]) 
     97             
     98    def buildCdmsVar(self): 
     99         
     100        self.a = N.arange(len(self.axisX) * len(self.axisY)) 
     101        self.a = self.a.reshape(len(self.axisY), len(self.axisX)) 
     102 
     103        self.tempVar = cdms.createVariable(self.a,id='temp') 
     104        self.tempVar.setAxisList([self.axisY, self.axisX]) 
     105        self.tempVar.setMissing(5) 
     106         
     107     
     108class Test_GridBuidlerLatLonWithLatLon(Test_GridBuidlerLatLonBase): 
     109     
     110    #Make sure it can cope with the axis reversed 
     111     
     112    __test__ = True 
     113     
     114    def setUp(self): 
     115        self.buildAxes() 
     116        self.buildCdmsVar() 
     117        self.builder = GridBuilderLatLon(self.tempVar) 
     118     
     119    def buildAxes(self): 
     120        self.axisX = cdms.createAxis(N.array([10,20,30,40,50])) 
     121        self.axisX.axis = 'X' 
     122        self.axisX.id = 'X' 
     123        self.axisY = cdms.createAxis(N.array([4,5,6,7,8,9])) 
     124        self.axisY.axis = 'Y' 
     125        self.axisY.id = 'Y' 
     126         
     127        self.xLimits = (self.axisX[0],self.axisX[-1]) 
     128        self.yLimits = (self.axisY[0], self.axisY[-1]) 
     129             
     130    def buildCdmsVar(self): 
     131         
     132        self.a = N.arange(len(self.axisX) * len(self.axisY)) 
     133        self.a = self.a.reshape(len(self.axisX), len(self.axisY)) 
     134 
     135        self.tempVar = cdms.createVariable(self.a,id='temp') 
     136        self.tempVar.setAxisList([self.axisX, self.axisY]) 
     137        self.tempVar.setMissing(5) 
     138 
     139class Test_GridBuidlerLatLonWithLonHightLow(Test_GridBuidlerLatLonBase): 
     140     
     141    #Make sure it can cope with the axis reversed 
     142     
     143    __test__ = True 
     144     
     145    def setUp(self): 
     146        self.buildAxes() 
     147        self.buildCdmsVar() 
     148        self.builder = GridBuilderLatLon(self.tempVar) 
     149     
     150    def buildAxes(self): 
     151        self.axisX = cdms.createAxis(N.array([10,20,30,40,50])) 
     152        self.axisX.axis = 'X' 
     153        self.axisX.id = 'X' 
     154        self.axisY = cdms.createAxis(N.array([4,5,6,7,8,9])) 
     155        self.axisY.axis = 'Y' 
     156        self.axisY.id = 'Y' 
     157         
     158        self.xLimits = (self.axisX[0],self.axisX[-1]) 
     159        self.yLimits = (self.axisY[0], self.axisY[-1]) 
     160             
     161    def buildCdmsVar(self): 
     162         
     163        self.a = N.arange(len(self.axisX) * len(self.axisY)) 
     164        self.a = self.a.reshape(len(self.axisX), len(self.axisY)) 
     165 
     166        self.tempVar = cdms.createVariable(self.a,id='temp') 
     167        self.tempVar.setAxisList([self.axisX, self.axisY]) 
     168        self.tempVar.setMissing(5) 
    97169 
    98170if __name__ == '__main__': 
    99171 
    100     import geoplot.log_util 
    101     geoplot.log_util.setGeoplotHandlerToStdOut() 
    102  
    103172    nose.runmodule() 
  • qesdi/geoplot/trunk/lib/geoplot/utils.py

    r5636 r5683  
    6767    st = time.time() 
    6868     
     69    log.debug("started converting figure to image") 
    6970    canvas = FigureCanvas(fig) 
    7071     
Note: See TracChangeset for help on using the changeset viewer.