Example #1
0
    def __call__(self, _var, region):
        var = _var.clone()
        if not region in self.regions.keys():
            return None
        
        val = self.regions[region]
        # reading mask data
        regions_data = self.file['mask']
        regions_var  = cdms2.createVariable(
                         ones(regions_data.shape),
                         grid = cdms2.createUniformGrid(89.75, 360, -0.5, -180, 720, 0.5),
                         mask = where(equal(regions_data, val), 0, 1))
        lats = cdms2.createUniformLatitudeAxis(89.75, 360, -0.5)
        lons = cdms2.createUniformLongitudeAxis(-180, 720, 0.5)
        regions_var.setAxisList((lats,lons))
        
        new_mask_var = regions_var.regrid(var.getGrid(), regridTool='regrid2', regridMethod='linear')
        new_mask = getmask(new_mask_var)
 
        if var.mask <> None:
            var.mask = logical_or(var.mask, new_mask)
        else:
            var.mask = new_mask;
            
        return var
Example #2
0
    def buildOutlineMap(self):
        # This function load a binary image (black and white)
        # and create a default grid for it. Then it uses re-gridding algorithms
        # to scale in the correct domain.
        from pylab import imread
        import vtk.util.vtkImageImportFromArray as vtkUtil

        # read outline image and convert to gray scale
        try:
            data = imread(defaultOutlineMapFile)
            data = data.mean(axis=2)

            #        # create a variable using the data loaded in the image and an uniform grid
            dims = data.shape
            reso = [180.0 / dims[0], 360.0 / dims[1]]
            var = cdms2.createVariable(data)
            lat = cdms2.createUniformLatitudeAxis(90, dims[0], -reso[0])
            lon = cdms2.createUniformLongitudeAxis(-180, dims[1], reso[1])
            var.setAxis(0, lat)
            var.setAxis(1, lon)

            # create the final map using the ROI
            ROI = self.roi[:]
            if ROI[2] < -90.0: ROI[2] = -90.0
            if ROI[3] > 90.0: ROI[3] = 90.0
            odims = [(ROI[3] - ROI[2]) / reso[0], (ROI[1] - ROI[0]) / reso[1]]
            ogrid = cdms2.createUniformGrid(ROI[2], odims[0], reso[0], ROI[0],
                                            odims[1], reso[1])
            ovar = var.regrid(ogrid, regridTool='regrid2')

            # replace outlier numbers
            d = ovar.data
            d[d == 1e+20] = d[d <> 1e+20].max()

            img = vtkUtil.vtkImageImportFromArray()
            img.SetArray(ovar.data)
            img.Update()

        except Exception:
            print >> sys.stderr, "Error building Outline Map"
            traceback.print_exc()
            return None

        # convert to vtkImageData
        return img.GetOutput()
	def createEqualIntervalLatitude(self,latitude,delta):
		''' return generated bounds according to passed latitudes. return as Axis object 
			eg input latitude = [-90,-80,-70,...80,90]
		'''
		lat_start = latitude[0]
		lat_end = latitude[-1]
		length = len(np.asarray(np.arange(lat_start,lat_end+delta,delta))) # we cant call xrange here, since xrange takes only int arg not float. delta may have float. so we are calling here numpy arange
		
		eq_interval_lat = cdms2.createUniformLatitudeAxis(startLat = lat_start, nlat = length, deltaLat = delta)
		
		#print eq_interval_lat[:]
		#print eq_interval_lat.getBounds()
		return eq_interval_lat
		
		#
		# commenting the following my own code, since we are going to use cdat inbuild methods
		#
		'''
Example #4
0
    def buildOutlineMap(self):
        # This function load a binary image (black and white)
        # and create a default grid for it. Then it uses re-gridding algorithms 
        # to scale in the correct domain.
        from pylab import imread
        import vtk.util.vtkImageImportFromArray as vtkUtil

        # read outline image and convert to gray scale
        try:
            data = imread(defaultOutlineMapFile)
            data = data.mean(axis=2)
    
    #        # create a variable using the data loaded in the image and an uniform grid
            dims = data.shape
            reso = [180.0/dims[0], 360.0/dims[1]]
            var = cdms2.createVariable(data)
            lat = cdms2.createUniformLatitudeAxis(90, dims[0], -reso[0])
            lon = cdms2.createUniformLongitudeAxis(-180, dims[1], reso[1])
            var.setAxis(0, lat)
            var.setAxis(1, lon)
    
            # create the final map using the ROI
            ROI = self.roi[:]
            if ROI[2] < -90.0: ROI[2] = -90.0
            if ROI[3] >  90.0: ROI[3] =  90.0
            odims = [ (ROI[3]-ROI[2])/reso[0] , (ROI[1]-ROI[0])/reso[1] ]
            ogrid = cdms2.createUniformGrid( ROI[2], odims[0], reso[0], ROI[0], odims[1], reso[1] )
            ovar = var.regrid(ogrid, regridTool='regrid2')
            
            # replace outlier numbers
            d = ovar.data
            d[d==1e+20] = d[d<>1e+20].max()
            
            img = vtkUtil.vtkImageImportFromArray()
            img.SetArray(ovar.data)
            img.Update()
            
        except Exception:
            print>>sys.stderr, "Error building Outline Map"
            traceback.print_exc()
            return None
        
        # convert to vtkImageData       
        return img.GetOutput()
Example #5
0
from OpenSSL import crypto
from OpenSSL import SSL
from socket import gethostname


def random_str(count):
    return ''.join(
        random.choice(string.ascii_letters + string.digits)
        for _ in xrange(count))


random.seed(1987)

longitude = cdms2.createUniformLongitudeAxis(-180.0, 360.0, 1.0)

latitude = cdms2.createUniformLatitudeAxis(-90.0, 180.0, 1.0)


def write_file(file_path, axes, var_name):
    with cdms2.open(file_path, 'w') as outfile:
        outfile.write(np.array(
            [[[random.random() for _ in xrange(len(axes[2]))]
              for _ in xrange(len(axes[1]))] for _ in xrange(len(axes[0]))]),
                      axes=axes,
                      id=var_name)


def generate_variable(axes, var_name):
    data = np.array([[[random.random() for _ in xrange(len(axes[2]))]
                      for _ in xrange(len(axes[1]))]
                     for _ in xrange(len(axes[0]))])
Example #6
0
        raise ValueError

    d1 = numpy.ravel(data1)
    d2 = numpy.ravel(data2)

    sq = (d1 - d2) * (d1 - d2)
    error = numpy.sum(sq) / len(d1)
    rmserror = numpy.sqrt(error)

    return rmserror


if __name__ == '__main__':
    import math

    latIn = cdms2.createUniformLatitudeAxis(90.0, 46, -4.0)
    levList = [10., 40., 75., 100., 150., 250., 350., 500., 650., 850.,
               1000.]  # pick some levels
    levIn = cdms2.createAxis(numpy.array(levList, numpy.float64), id='level')
    latOut = cdms2.createGaussianAxis(64)
    levList = [
        10., 30., 50., 70., 100., 200., 300., 400., 500., 700., 850., 1000.
    ]  # pick some levels
    levOut = cdms2.createAxis(numpy.array(levList, numpy.float64), id='level')

    xregridf = CrossSectionRegridder(latIn, latOut, levIn, levOut)

    # make some artificial data
    dataIn = section(latIn[:], levIn[:])
    var = cdms2.createVariable(dataIn,
                               axes=(levIn, latIn),
Example #7
0
        print 'data2 shape = ', data2.shape
        raise ValueError

    d1 = numpy.ravel(data1)
    d2 = numpy.ravel(data2)

    sq = (d1 - d2)*(d1 - d2)
    error = numpy.sum(sq)/len(d1)
    rmserror =  numpy.sqrt(error)

    return  rmserror

if __name__=='__main__':
    import cdms2, math

    latIn = cdms2.createUniformLatitudeAxis(90.0, 46, -4.0)
    levList = [10., 40., 75., 100., 150., 250., 350.,   500., 650.,  850., 1000.]                  # pick some levels
    levIn = cdms2.createAxis(numpy.array(levList, numpy.float64), id='level')
    latOut = cdms2.createGaussianAxis(64)
    levList = [10., 30., 50., 70., 100., 200., 300., 400., 500., 700.,850., 1000.]         # pick some levels
    levOut = cdms2.createAxis(numpy.array(levList, numpy.float64), id='level')

    xregridf = CrossSectionRegridder(latIn, latOut, levIn, levOut)

    dataIn = section(latIn[:], levIn[:])                                              # make some artificial data
    var = cdms2.createVariable(dataIn, axes=(levIn, latIn), attributes={'units':'N/A'}, id='test')

    dataOut = xregridf(dataIn)

    dataCheck = section(latOut[:], levOut[:])                                         # make the exact answer
    error = rmserror(dataOut, dataCheck)                                        # find the rms error