Пример #1
0
 def display(self, workspace, figure):
     if self.show_window:
         figure.set_subplots((1, 1))
         figure.clf()
         ax = figure.subplot(0, 0)
         gridding = cpg.CPGridInfo()
         gridding.deserialize(workspace.display_data.gridding)
         self.display_grid(workspace.display_data.background_image,
                           gridding,
                           workspace.display_data.image_set_number, ax)
Пример #2
0
 def decoder(dct, buffers=buffers):
     if '__ndarray__' in dct:
         buf = buffer(buffers[dct['idx']])
         return np.frombuffer(buf, dtype=dct['dtype']).reshape(
             dct['shape']).copy()
     if '__buffer__' in dct:
         return buffer(buffers[dct['idx']])
     if '__CPGridInfo__' in dct:
         grid = cpg.CPGridInfo()
         grid.deserialize(dct)
         return grid
     return dct
Пример #3
0
    def build_grid_info(self,
                        first_x,
                        first_y,
                        first_row,
                        first_col,
                        second_x,
                        second_y,
                        second_row,
                        second_col,
                        image_shape=None):
        '''Populate and return a CPGridInfo based on two cell locations'''
        first_row, first_col =\
                  self.canonical_row_and_column(first_row, first_col)
        second_row, second_col =\
                  self.canonical_row_and_column(second_row, second_col)
        gridding = cpg.CPGridInfo()
        gridding.x_spacing = (float(first_x - second_x) /
                              float(first_col - second_col))
        gridding.y_spacing = (float(first_y - second_y) /
                              float(first_row - second_row))
        gridding.x_location_of_lowest_x_spot = int(first_x - first_col *
                                                   gridding.x_spacing)
        gridding.y_location_of_lowest_y_spot = int(first_y - first_row *
                                                   gridding.y_spacing)
        gridding.rows = self.grid_rows.value
        gridding.columns = self.grid_columns.value
        gridding.left_to_right = (self.origin
                                  in (NUM_TOP_LEFT, NUM_BOTTOM_LEFT))
        gridding.top_to_bottom = (self.origin in (NUM_TOP_LEFT, NUM_TOP_RIGHT))
        gridding.total_width = int(gridding.x_spacing * gridding.columns)
        gridding.total_height = int(gridding.y_spacing * gridding.rows)

        line_left_x = int(gridding.x_location_of_lowest_x_spot -
                          gridding.x_spacing / 2)
        line_top_y = int(gridding.y_location_of_lowest_y_spot -
                         gridding.y_spacing / 2)
        #
        # Make a 2 x columns array of x-coordinates of vertical lines (x0=x1)
        #
        gridding.vert_lines_x = np.tile(
            (np.arange(gridding.columns + 1) * gridding.x_spacing +
             line_left_x), (2, 1)).astype(int)
        #
        # Make a 2 x rows array of y-coordinates of horizontal lines (y0=y1)
        #
        gridding.horiz_lines_y = np.tile(
            (np.arange(gridding.rows + 1) * gridding.y_spacing + line_top_y),
            (2, 1)).astype(int)
        #
        # Make a 2x columns array of y-coordinates of vertical lines
        # all of which are from line_top_y to the bottom
        #
        gridding.vert_lines_y = np.transpose(
            np.tile((line_top_y, line_top_y + gridding.total_height),
                    (gridding.columns + 1, 1))).astype(int)
        gridding.horiz_lines_x = np.transpose(
            np.tile((line_left_x, line_left_x + gridding.total_width),
                    (gridding.rows + 1, 1))).astype(int)
        gridding.x_locations = (
            gridding.x_location_of_lowest_x_spot +
            np.arange(gridding.columns) * gridding.x_spacing).astype(int)
        gridding.y_locations = (
            gridding.y_location_of_lowest_y_spot +
            np.arange(gridding.rows) * gridding.y_spacing).astype(int)
        #
        # The spot table has the numbering for each spot in the grid
        #
        gridding.spot_table = np.arange(gridding.rows * gridding.columns) + 1
        if self.ordering == NUM_BY_COLUMNS:
            gridding.spot_table.shape = (gridding.rows, gridding.columns)
        else:
            gridding.spot_table.shape = (gridding.columns, gridding.rows)
            gridding.spot_table = np.transpose(gridding.spot_table)
        if self.origin in (NUM_BOTTOM_LEFT, NUM_BOTTOM_RIGHT):
            # Flip top and bottom
            gridding.spot_table = gridding.spot_table[::-1, :]
        if self.origin in (NUM_TOP_RIGHT, NUM_BOTTOM_RIGHT):
            # Flip left and right
            gridding.spot_table = gridding.spot_table[:, ::-1]
        if image_shape is not None:
            gridding.image_height = image_shape[0]
            gridding.image_width = image_shape[1]
        else:
            # guess the image shape by adding the same border to the right
            # and bottom that we have on the left and top
            top_edge = int(gridding.y_location_of_lowest_y_spot -
                           gridding.y_spacing / 2)
            right_edge = int(gridding.x_location_of_lowest_x_spot +
                             gridding.x_spacing / 2)
            gridding.image_height = \
                top_edge * 2 + gridding.y_spacing * gridding.rows
            gridding.image_width = \
                right_edge * 2 + gridding.x_spacing * gridding.columns
        return gridding