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
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 # '''
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()
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]))])
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),
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