Esempio n. 1
0
    def translate_query(self, q):
        if type(q) == str:
            q = literal_eval(q)
        assert type(q) == dict

        # be sure all params have a value in the new query
        query = {}
        for param in self.fs.parameter_list.keys():
            default = [self.fs.get_parameter(param)["default"]]
            query[param] = q.get(param, default)

        layers = self.qt.translateQuery(query)

        # convert layers to image data

        layer = layers[0]
        img = vtk.vtkImageData()
        dims = [0, 0, 0]
        if layer.hasColorArray():
            ncolors = layer.getColorArray()
            # now, the numpy array's shape matches the 2D image
            dims[0] = ncolors.shape[1]
            dims[1] = ncolors.shape[0]
            img.SetDimensions(dims[0], dims[1], 1)
            ncolors = ncolors.reshape((dims[0]*dims[1], -1))
            vcolors = dsa.numpyTovtkDataArray(ncolors, "Colors")
            img.GetPointData().SetScalars(vcolors)

        nluminance = layer.getLuminance()
        if nluminance is not None:
            nluminance = nluminance.reshape((dims[0]*dims[1], -1))
            vluminance = dsa.numpyTovtkDataArray(nluminance, "Luminance")
            img.GetPointData().AddArray(vluminance)

        return [img]
Esempio n. 2
0
def coprocess(time, timeStep, grid, attributes):
    global coProcessor
    import vtk
    from paraview.modules import vtkPVCatalyst as catalyst
    import paraview
    from paraview.vtk.util import numpy_support
    dataDescription = catalyst.vtkCPDataDescription()
    dataDescription.SetTimeData(time, timeStep)
    dataDescription.AddInput("input")

    if coProcessor.RequestDataDescription(dataDescription):
        import fedatastructures
        imageData = vtk.vtkImageData()
        imageData.SetExtent(grid.XStartPoint, grid.XEndPoint, 0,
                            grid.NumberOfYPoints - 1, 0,
                            grid.NumberOfZPoints - 1)
        imageData.SetSpacing(grid.Spacing)

        velocity = numpy_support.numpy_to_vtk(attributes.Velocity)
        velocity.SetName("velocity")
        imageData.GetPointData().AddArray(velocity)

        pressure = numpy_support.numpy_to_vtk(attributes.Pressure)
        pressure.SetName("pressure")
        imageData.GetCellData().AddArray(pressure)
        dataDescription.GetInputDescriptionByName("input").SetGrid(imageData)
        dataDescription.GetInputDescriptionByName("input").SetWholeExtent(
            0, grid.NumberOfGlobalXPoints - 1, 0, grid.NumberOfYPoints - 1, 0,
            grid.NumberOfZPoints - 1)
        coProcessor.CoProcess(dataDescription)
def computeAveragesAndBuildImgData():
    imgDims = [1440, 720, 10]

    imgData = vtk.vtkImageData()
    imgData.SetDimensions(imgDims[0] + 1, imgDims[1] + 1, imgDims[2] + 1)
    imgData.SetSpacing(1, 1, 1)
    imgData.SetOrigin(0, 0, 0)
    imgData.SetExtent(0, imgDims[0], 0, imgDims[1], 0, imgDims[2])
    imgData.AllocateScalars(vtk.VTK_FLOAT, 1)

    flattenedArrays = []

    for fileName in fileNames:
        fpath = os.path.join(basepath, fileName)
        print('processing %s' % fpath)

        year = fileName.split('_')[-1][:-4]

        dataset = gdal.Open(fpath)
    
        sumArray = ma.zeros((dataset.RasterYSize, dataset.RasterXSize))
        total = 0
        count = 0
        numBands = dataset.RasterCount
    
        for bandId in range(numBands):
            band = ma.masked_outside(dataset.GetRasterBand(bandId + 1).ReadAsArray(), VALUE_RANGE[0], VALUE_RANGE[1])
            sumArray += band
    
        sumArray /= numBands
        total = ma.sum(ma.sum(sumArray))
        count = sumArray.count()
        minCell = ma.min(sumArray)
        maxCell = ma.max(sumArray)
        imgDims = [dataset.RasterXSize, dataset.RasterYSize]

        # flattenedArrays.append(np.ndarray.flatten(sumArray[::-1,:], 0).astype(np.dtype(np.float32)))
        flattenedArrays.append(np.ndarray.flatten(sumArray[::-1,:], 0))

    allYearsAvgs = np.ma.concatenate(flattenedArrays)

    cellData = imgData.GetCellData()
    dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten(allYearsAvgs, 0), deep = 1)
    dataArray.SetName('Annual Avg Temp')
    cellData.SetScalars(dataArray)

    imgWriter = vtkIOXML.vtkXMLImageDataWriter()
    imgWriter.SetFileName('/data/scott/Documents/tasmax.vti')
    imgWriter.SetInputData(imgData)
    imgWriter.Write()

    print('\nFinished writing image data\n')
Esempio n. 4
0
def computeAveragesUsingNumpy():
    for fileName in fileNames:
        fpath = os.path.join(basepath, fileName)
        print('processing %s' % fpath)

        year = fileName.split('_')[-1][:-4]

        dataset = gdal.Open(fpath)

        sumArray = ma.zeros((dataset.RasterYSize, dataset.RasterXSize))
        total = 0
        count = 0
        numBands = dataset.RasterCount

        for bandId in range(numBands):
            band = ma.masked_outside(
                dataset.GetRasterBand(bandId + 1).ReadAsArray(),
                VALUE_RANGE[0], VALUE_RANGE[1])
            sumArray += band

        sumArray /= numBands
        total = ma.sum(ma.sum(sumArray))
        count = sumArray.count()
        minCell = ma.min(sumArray)
        maxCell = ma.max(sumArray)
        imgDims = [dataset.RasterXSize, dataset.RasterYSize]

        print('  finished computing averge for %s, writing image data' % year)

        imgData = vtk.vtkImageData()
        imgData.SetDimensions(imgDims[0], imgDims[1], 0)
        imgData.SetSpacing(1, 1, 1)
        imgData.SetOrigin(0, 0, 0)
        imgData.SetExtent(0, imgDims[0] - 1, 0, imgDims[1] - 1, 0, 0)
        imgData.AllocateScalars(vtk.VTK_FLOAT, 1)

        pointData = imgData.GetPointData()
        dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten(
            sumArray[::-1, :], 0).astype(np.dtype(np.int32)),
                                               deep=1)
        dataArray.SetName('Annual Avg Temp')
        pointData.SetScalars(dataArray)

        imgWriter = vtkIOXML.vtkXMLImageDataWriter()
        imgWriter.SetFileName('tasmax_%s.vti' % (year))
        imgWriter.SetInputData(imgData)
        imgWriter.Write()

        print('  finished writing image data for %s' % year)
Esempio n. 5
0
def layer2img(layer):
    """converts a layer to vtkImageData."""
    if not layer:
        return None

    img = vtk.vtkImageData()
    dims = [0, 0, 0]
    if layer.hasValueArray():
        nvalues = layer.getValueArray()
        # now, the numpy array's shape matches the 2D image
        dims[0] = nvalues.shape[1]
        dims[1] = nvalues.shape[0]
        img.SetDimensions(dims[0], dims[1], 1)

        nvalues = nvalues.reshape(dims[0]*dims[1])
        vvalues = dsa.numpyTovtkDataArray(nvalues, "Values")
        img.GetPointData().SetScalars(vvalues)

    elif layer.hasColorArray():
        ncolors = layer.getColorArray()
        # now, the numpy array's shape matches the 2D image
        dims[0] = ncolors.shape[1]
        dims[1] = ncolors.shape[0]
        img.SetDimensions(dims[0], dims[1], 1)
        ncolors = ncolors.reshape((dims[0]*dims[1],-1))
        vcolors = dsa.numpyTovtkDataArray(ncolors, "Colors")
        img.GetPointData().SetScalars(vcolors)

    ndepth = layer.getDepth()
    if ndepth is None:
        raise RuntimeError("Missing 'depth'")
    ndepth = ndepth.reshape(dims[0]*dims[1])
    vdepth = dsa.numpyTovtkDataArray(ndepth, "Depth");
    img.GetPointData().AddArray(vdepth)

    nluminance = layer.getLuminance()
    if nluminance is not None:
        nluminance = nluminance.reshape((dims[0]*dims[1], -1))
        vluminance = dsa.numpyTovtkDataArray(nluminance, "Luminance")
        img.GetPointData().AddArray(vluminance)

    #from paraview.vtk.vtkIOLegacy import vtkDataSetWriter
    #writer = vtkDataSetWriter()
    #writer.SetInputDataObject(img)
    #writer.SetFileName("/tmp/layer.vtk")
    #writer.Update()
    #del writer
    return img
Esempio n. 6
0
def layer2img(layer):
    """converts a layer to vtkImageData."""
    if not layer:
        return None

    img = vtk.vtkImageData()
    dims = [0, 0, 0]
    if layer.hasValueArray():
        nvalues = layer.getValueArray()
        # now, the numpy array's shape matches the 2D image
        dims[0] = nvalues.shape[1]
        dims[1] = nvalues.shape[0]
        img.SetDimensions(dims[0], dims[1], 1)

        nvalues = nvalues.reshape(dims[0]*dims[1])
        vvalues = dsa.numpyTovtkDataArray(nvalues, "Values")
        img.GetPointData().SetScalars(vvalues)

    elif layer.hasColorArray():
        ncolors = layer.getColorArray()
        # now, the numpy array's shape matches the 2D image
        dims[0] = ncolors.shape[1]
        dims[1] = ncolors.shape[0]
        img.SetDimensions(dims[0], dims[1], 1)
        ncolors = ncolors.reshape((dims[0]*dims[1], -1))
        vcolors = dsa.numpyTovtkDataArray(ncolors, "Colors")
        img.GetPointData().SetScalars(vcolors)

    ndepth = layer.getDepth()
    if ndepth is None:
        raise RuntimeError("Missing 'depth'")
    ndepth = ndepth.reshape(dims[0]*dims[1])
    vdepth = dsa.numpyTovtkDataArray(ndepth, "Depth")
    img.GetPointData().AddArray(vdepth)

    nluminance = layer.getLuminance()
    if nluminance is not None:
        nluminance = nluminance.reshape((dims[0]*dims[1], -1))
        vluminance = dsa.numpyTovtkDataArray(nluminance, "Luminance")
        img.GetPointData().AddArray(vluminance)

    # from paraview.vtk.vtkIOLegacy import vtkDataSetWriter
    # writer = vtkDataSetWriter()
    # writer.SetInputDataObject(img)
    # writer.SetFileName("/tmp/layer.vtk")
    # writer.Update()
    # del writer
    return img
Esempio n. 7
0
def numpy_to_image(numpy_array):
  """Convert a numpy 2D or 3D array to a vtkImageData object.

  numpy_array
    2D or 3D numpy array containing image data

  return
    vtkImageData with the numpy_array content
  """
  try:
    import numpy
  except:
    paraview.print_error("Error: Cannot import numpy")

  shape = numpy_array.shape
  if len(shape) < 2:
    raise Exception('numpy array must have dimensionality of at least 2')

  h, w = shape[0], shape[1]
  c = 1
  if len(shape) == 3:
    c = shape[2]

  # Reshape 2D image to 1D array suitable for conversion to a
  # vtkArray with numpy_support.numpy_to_vtk()
  linear_array = numpy.reshape(numpy_array, (w*h, c))

  try:
    from paraview.vtk.util import numpy_support
  except:
    paraview.print_error("Error: Cannot import vtk.util.numpy_support")

  vtk_array = numpy_support.numpy_to_vtk(linear_array)

  image = vtk.vtkImageData()
  image.SetDimensions(w, h, 1)
  image.AllocateScalars(vtk_array.GetDataType(), 4)
  image.GetPointData().GetScalars().DeepCopy(vtk_array)

  return image
Esempio n. 8
0
def processFile(directory, filename):
    # junk = raw_input('blah')

    fpath = os.path.join(directory, filename)

    print('Processing %s' % filename)

    year = filename.split('_')[-1][:-4]
    dataset = gdal.Open(fpath)
    numBands = dataset.RasterCount

    imgDims = [dataset.RasterXSize, dataset.RasterYSize]

    for bandId in range(numBands):
        # for bandId in [0, 89, 179, 269]:
        imgData = vtk.vtkImageData()
        imgData.SetDimensions(imgDims[0], imgDims[1], 0)
        imgData.SetSpacing(1, 1, 1)
        imgData.SetOrigin(0, 0, 0)
        imgData.SetExtent(0, imgDims[0] - 1, 0, imgDims[1] - 1, 0, 0)
        imgData.AllocateScalars(vtk.VTK_FLOAT, 1)

        band = dataset.GetRasterBand(bandId + 1).ReadAsArray()

        pointData = imgData.GetPointData()
        dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten(
            band[::-1, :], 0).astype(np.dtype(np.int32)),
                                               deep=1)
        dataArray.SetName('Daily Max')
        pointData.SetScalars(dataArray)

        imgWriter = vtkIOXML.vtkXMLImageDataWriter()
        outputFileName = '%s_%d.vti' % (filename, (bandId + 1))
        imgWriter.SetFileName(outputFileName)
        imgWriter.SetInputData(imgData)
        imgWriter.Write()

        print('    wrote to %s' % outputFileName)
Esempio n. 9
0
def processFile(fileName):
    # junk = raw_input('blah')

    print('Processing %s' % fileName)

    year = fileName.split('_')[-1][:-4]
    dataset = gdal.Open(fileName)
    numBands = dataset.RasterCount

    imgDims = [dataset.RasterXSize, dataset.RasterYSize]

    imgData = vtk.vtkImageData()
    imgData.SetDimensions(imgDims[0], imgDims[1], 0)
    imgData.SetSpacing(1, 1, 1)
    imgData.SetOrigin(0, 0, 0)
    imgData.SetExtent(0, imgDims[0] - 1, 0, imgDims[1] - 1, 0, 0)

    pointData = imgData.GetPointData()

    # for bandId in range(numBands):
    for bandId in [0, 89, 179, 269]:
        print('  band %d' % (bandId + 1))
        band = dataset.GetRasterBand(bandId + 1).ReadAsArray()

        dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten(
            band[::-1, :], 0).astype(np.dtype(np.int32)),
                                               deep=1)
        dataArray.SetName('Daily Max (%d)' % (bandId + 1))
        pointData.AddArray(dataArray)

    pointData.SetActiveScalars('Daily Max (0)')

    imgWriter = vtkIOXML.vtkXMLImageDataWriter()
    imgWriter.SetFileName('tasmax_%s.vti' % (year))
    imgWriter.SetInputData(imgData)
    imgWriter.Write()