Пример #1
0
    def __init__(self,
                 screen,
                 sprite_sheet,
                 sheet_offsets,
                 pos=(0, 0),
                 resize=None,
                 detail=None,
                 frame_delay=None):
        super().__init__()
        self.screen = screen
        if not resize:
            resize = (self.screen.get_height() // 10,
                      self.screen.get_height() // 10)
        self.image_manager = ImageManager(sprite_sheet,
                                          sheet=True,
                                          pos_offsets=sheet_offsets,
                                          resize=resize,
                                          animation_delay=frame_delay)

        self.image, self.rect = self.image_manager.get_image()
        if detail:
            self.detail_piece = ImageManager(detail,
                                             sheet=True,
                                             pos_offsets=sheet_offsets,
                                             resize=resize).all_images()[0]

            self.image.blit(self.detail_piece, (0, 0))
        else:
            self.detail_piece = None
        self.rect.centerx, self.rect.centery = pos
Пример #2
0
 def __init__(self, cell_data=False):
     self.parameters = ParametersManager()
     self.image_manager = ImageManager()
     self.segments_manager = None
     self.cell_manager = None
     self.linescan_manager = None
     self.report_manager = None
     self.working_dir = None
     self.base_path = None
     self.fluor_path = None
     self.get_cell_images = cell_data
Пример #3
0
 def __init__(self, cell_data=True):
     self.parameters = ParametersManager()
     self.image_manager = ImageManager()
     self.cellcycleclassifier = CellCycleClassifier()
     self.segments_manager = None
     self.cell_manager = None
     self.linescan_manager = None
     self.coloc_manager = None
     self.report_manager = None
     self.working_dir = None
     self.base_path = None
     self.fluor_path = None
     self.get_cell_images = cell_data
Пример #4
0
def go():

    # get random city
    city = Geo().get_location()

    # get 4 images (urls)
    urls = Google().search(city)

    # save images
    image_names = ImageManager().save(urls)

    # tweet 'em
    TwitterAPI().compose(city, image_names)

    # clean image directory
    ImageManager().delete()

    # done
    print('Done.')
Пример #5
0
 def __init__(self, cell_data=False):
     self.parameters = ParametersManager()
     self.image_manager = ImageManager()
     self.segments_manager = None
     self.cell_manager = None
     self.linescan_manager = None
     self.report_manager = None
     self.base_path = None
     self.fluor_path = None
     self.get_cell_images = cell_data
Пример #6
0
    def __init__(self, screen, maze):
        super().__init__()
        self.screen = screen
        self.maze = maze
        self.push = 3
        self.death = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 16, 32, 32),
                                                                          (0, 32 * 17, 32, 32),
                                                                          (0, 32*18, 32, 32),
                                                                          (0, 32*19, 32, 32),
                                                                          (0, 32*20, 32, 32),
                                                                          (0, 32*21, 32, 32)],
                                  resize=(self.maze.block_size - 4, self.maze.block_size - 4),
                                  animation_delay=150, repeat=False)
        self.up = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 4, 32, 32),
                                                                       (0, 32 * 5, 32, 32),
                                                                       (0, 32 * 6, 32, 32),
                                                                       (0, 32 * 7, 32, 32)],
                               resize=(self.maze.block_size-4, self.maze.block_size-4))
        self.down = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 12, 32, 32),
                                                                         (0, 32 * 13, 32, 32),
                                                                         (0, 32 * 14, 32, 32),
                                                                         (0, 32 * 15, 32, 32)],
                                 resize=(self.maze.block_size-4, self.maze.block_size-4))
        self.left = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 8, 32, 32),
                                                                         (0, 32 * 9, 32, 32),
                                                                         (0, 32 * 10, 32, 32),
                                                                         (0, 32 * 11, 32, 32)],
                                 resize=(self.maze.block_size-4, self.maze.block_size-4))
        self.right = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 0, 32, 32),
                                                                          (0, 32 * 1, 32, 32),
                                                                          (0, 32 * 2, 32, 32),
                                                                          (0, 32 * 3, 32, 32)],
                                  resize=(self.maze.block_size-4, self.maze.block_size-4))

        self.spawn_info = self.maze.player_spawn[1]
        self.tile = self.maze.player_spawn[0]
        self.direction = None
        self.moving = False
        self.image, self.rect = self.right.get_image()
        self.rect.centerx, self.rect.centery = self.spawn_info   # screen coordinates for spawn
        self.dead = False
        self.event_map = {pygame.KEYDOWN: self.action, pygame.KEYUP: self.reset_direction}
Пример #7
0
 def __init__(self, screen, initial_count=2, ct_pos=(0, 0), images_size=(32, 32)):
     self.screen = screen
     self.max_lives = initial_count
     self.lives = initial_count
     sheet_images = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 0, 32, 32),
                                                                         (0, 32 * 1, 32, 32),
                                                                         (0, 32 * 2, 32, 32),
                                                                         (0, 32 * 3, 32, 32)],
                                 resize=images_size).all_images()
     life_image = sheet_images[-1]
     self.life_display = ImageRow(screen, life_image, initial_count, 'Lives', ct_pos)
Пример #8
0
    def __init__(self, screen):
        self.screen = screen

        tilesheet = TileSheet(ImageManager().load("tiles"), (32, 32))
        self.level = Level("test_level", tilesheet)
        self.player = Player(self.level.bounds)
        self.coins = CoinGroup(self.level.bounds)

        self.hud = screen.subsurface((0, 0, screen.get_width(), 40))
        self.game_area = screen.subsurface(
            (0, 40, screen.get_width(), screen.get_height() - 40))

        self.cam = Camera(self.player, self.level.bounds,
                          self.game_area.get_size())

        self.font = pygame.font.Font(None, 36)

        self.score = 0

        # create initial coins
        for i in range(COIN_N_STARTING):
            self.coins.spawn()
Пример #9
0
class PacMan(pygame.sprite.Sprite):
    def __init__(self, screen, maze):
        super().__init__()
        self.screen = screen
        self.maze = maze
        self.push = 3
        self.death = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 16, 32, 32),
                                                                          (0, 32 * 17, 32, 32),
                                                                          (0, 32*18, 32, 32),
                                                                          (0, 32*19, 32, 32),
                                                                          (0, 32*20, 32, 32),
                                                                          (0, 32*21, 32, 32)],
                                  resize=(self.maze.block_size - 4, self.maze.block_size - 4),
                                  animation_delay=150, repeat=False)
        self.up = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 4, 32, 32),
                                                                       (0, 32 * 5, 32, 32),
                                                                       (0, 32 * 6, 32, 32),
                                                                       (0, 32 * 7, 32, 32)],
                               resize=(self.maze.block_size-4, self.maze.block_size-4))
        self.down = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 12, 32, 32),
                                                                         (0, 32 * 13, 32, 32),
                                                                         (0, 32 * 14, 32, 32),
                                                                         (0, 32 * 15, 32, 32)],
                                 resize=(self.maze.block_size-4, self.maze.block_size-4))
        self.left = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 32 * 8, 32, 32),
                                                                         (0, 32 * 9, 32, 32),
                                                                         (0, 32 * 10, 32, 32),
                                                                         (0, 32 * 11, 32, 32)],
                                 resize=(self.maze.block_size-4, self.maze.block_size-4))
        self.right = ImageManager('img/Pac.png', sheet=True, pos_offsets=[(0, 0, 32, 32),
                                                                          (0, 32 * 1, 32, 32),
                                                                          (0, 32 * 2, 32, 32),
                                                                          (0, 32 * 3, 32, 32)],
                                  resize=(self.maze.block_size-4, self.maze.block_size-4))

        self.spawn_info = self.maze.player_spawn[1]
        self.tile = self.maze.player_spawn[0]
        self.direction = None
        self.moving = False
        self.image, self.rect = self.right.get_image()
        self.rect.centerx, self.rect.centery = self.spawn_info   # screen coordinates for spawn
        self.dead = False
        self.event_map = {pygame.KEYDOWN: self.action, pygame.KEYUP: self.reset_direction}

    def set_death(self):
        self.dead = True
        self.image, _ = self.death.get_image()

    def revive(self):
        self.dead = False
        self.image, _ = self.right.get_image()
        self.death.image_index = 0

    def reset_position(self):
        self.rect.centerx, self.rect.centery = self.spawn_info  # screen coordinates for spawn

    def reset_direction(self, event):
        if event.key in (pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT):
            self.moving = False

    def action(self, event):
        if event.key == pygame.K_UP:
            self.set_move_up()
        if event.key == pygame.K_DOWN:
            self.set_move_down()
        if event.key == pygame.K_LEFT:
            self.set_move_left()
        if event.key == pygame.K_RIGHT:
            self.set_move_right()

    def set_move_up(self):
        if self.direction != 'u':
            self.direction = 'u'
        self.moving = True

    def set_move_left(self):
        if self.direction != 'l':
            self.direction = 'l'
        self.moving = True

    def set_move_down(self):
        if self.direction != 'd':
            self.direction = 'd'
        self.moving = True

    def set_move_right(self):
        if self.direction != 'r':
            self.direction = 'r'
        self.moving = True

    def push_back(self):
        if self.direction == 'l':
            self.rect.x += self.push
        elif self.direction == 'r':
            self.rect.x -= self.push
        if self.direction == 'u':
            self.rect.y += self.push
        elif self.direction == 'd':
            self.rect.y -= self.push

    def pos_test(self):
        test = self.rect
        if self.direction == 'l':

            test = self.rect.move((-1, 0))
        elif self.direction == 'r':

            test = self.rect.move((+1, 0))
        if self.direction == 'u':

            self.rect.move((0, -1))
        elif self.direction == 'd':

            self.rect.move((0, +1))
        return test

    def is_blocked(self):
        while pygame.sprite.spritecollideany(self, self.maze.maze_blocks):
                self.push_back()

    def collide(self):
        score = 0
        fruit_count = 0
        power = None
        if pygame.sprite.spritecollideany(self, self.maze.pellets):
            pygame.sprite.spritecollideany(self, self.maze.pellets).kill()
            score += 10
        elif pygame.sprite.spritecollideany(self, self.maze.fruits):
            pygame.sprite.spritecollideany(self, self.maze.fruits).kill()
            score += 20
            fruit_count += 1

        elif pygame.sprite.spritecollideany(self, self.maze.power_pellets):
            pygame.sprite.spritecollideany(self, self.maze.power_pellets).kill()
            score += 20
            power = True
        return score, fruit_count, power

    def update(self):
        if not self.dead:
            self.is_blocked()
            if self.direction and self.moving:
                if self.direction == 'u':
                    self.image = self.up.next_image()
                elif self.direction == 'd':
                    self.image = self.down.next_image()
                elif self.direction == 'l':
                    self.image = self.left.next_image()
                elif self.direction == 'r':
                    self.image = self.right.next_image()

                if not self.is_blocked():
                    if self.direction == 'u':
                        self.rect.centery -= 1
                    elif self.direction == 'l':
                        self.rect.centerx -= 1
                    elif self.direction == 'd':
                        self.rect.centery += 1
                    elif self.direction == 'r':
                        self.rect.centerx += 1
        else:
            self.image = self.death.next_image()

    def blit(self):
        self.screen.blit(self.image, self.rect)
Пример #10
0
class EHooke(object):
    """Main class of the software.
    Starts with an instance of the Parameters and Image class.
    Contains the methods needed to perform the analysis"""

    def __init__(self, cell_data=False):
        self.parameters = ParametersManager()
        self.image_manager = ImageManager()
        self.segments_manager = None
        self.cell_manager = None
        self.linescan_manager = None
        self.report_manager = None
        self.base_path = None
        self.fluor_path = None
        self.get_cell_images = cell_data

    def load_base_image(self, filename=None):
        """Calls the load_base_image method from the ImageManager
        Can be called without a filename or by passing one as an arg
        (filename=...)"""
        if filename is None:
            filename = tkFileDialog.askopenfilename()

        self.base_path = filename

        self.image_manager.load_base_image(filename,
                                           self.parameters.imageloaderparams)

        print "Base Image Loaded"

    def compute_mask(self):
        """Calls the compute_mask method from image_manager."""

        self.image_manager.compute_mask(self.parameters.imageloaderparams)

        print "Mask Computation Finished"

    def load_fluor_image(self, filename=None):
        """Calls the load_fluor_image method from the ImageManager
        Can be called without a filename or by passing one as an arg
        (filename=...)"""
        if filename is None:
            filename = tkFileDialog.askopenfilename()

        self.fluor_path = filename

        self.image_manager.load_fluor_image(self.fluor_path,
                                            self.parameters.imageloaderparams)

        print "Fluor Image Loaded"

    def load_option_image(self, filename=None):
        """Calls the load_optional_image method from the ImageManager
        Can be called without a filename or by passing on as an arg"""

        if filename is None:
            filename = tkFileDialog.askopenfilename()

        self.image_manager.load_option_image(filename)

    def compute_segments(self):
        """Calls the compute_segments method from Segments.
        Requires the prior loading of both the phase and fluor images and
        the computation of the mask"""

        self.segments_manager = SegmentsManager()
        self.segments_manager.compute_segments(self.parameters.
                                               imageprocessingparams,
                                               self.image_manager)

        print "Segments Computation Finished"

    def compute_cells(self):
        """Creates an instance of the CellManager class and uses the
        compute_cells_method to create a list of cells based on the labels
        computed by the SegmentsManager instance."""
        self.cell_manager = CellManager(self.parameters)
        self.cell_manager.compute_cells(self.parameters.cellprocessingparams,
                                        self.image_manager,
                                        self.segments_manager)

        print "Cells Computation Finished"

    def merge_cells(self, label_c1, label_c2):
        """Merges two cells using the merge_cells method from the cell_manager
        instance and the compute_merged_cells to create a new list of cells,
        containing a cell corresponding to the merge of the previous two."""
        self.cell_manager.merge_cells(label_c1, label_c2,
                                      self.parameters.cellprocessingparams,
                                      self.segments_manager,
                                      self.image_manager)
        self.cell_manager.overlay_cells(self.image_manager)

        print "Merge Finished"

    def split_cells(self, label_c1):
        """Splits a previously merged cell, requires the label of cell to be
        splitted.
        Calls the split_cells method from the cell_manager instance"""
        self.cell_manager.split_cells(int(label_c1),
                                      self.parameters.cellprocessingparams,
                                      self.segments_manager,
                                      self.image_manager)
        self.cell_manager.overlay_cells(self.image_manager)

        print "Split Finished"

    def define_as_noise(self, label_c1, noise):
        """Method used to change the state of a cell to noise or to undo it"""
        self.cell_manager.mark_cell_as_noise(label_c1, self.image_manager,
                                             noise)

    def process_cells(self):
        """Process the list of computed cells to identify the different regions
        of each cell and computes the stats related to the fluorescence"""
        self.cell_manager.process_cells(self.parameters.cellprocessingparams,
                                        self.image_manager)
        self.linescan_manager = LineScanManager()

        print "Processing Cells Finished"

    def add_line_linescan(self, point_1, point_2, point_3):
        self.linescan_manager.add_line(point_1, point_2, point_3)

    def remove_line_linescan(self, line_id):
        self.linescan_manager.remove_line(line_id)

    def select_all_cells(self):
        """Method used to mark all the cells as selected"""
        for k in self.cell_manager.cells.keys():
            if self.cell_manager.cells[k].selection_state != 0:
                self.cell_manager.cells[k].selection_state = 1

        self.cell_manager.overlay_cells(self.image_manager)

    def reject_all_cells(self):
        """Method used to mark all the cells as rejected"""
        for k in self.cell_manager.cells.keys():
            if self.cell_manager.cells[k].selection_state != 0:
                self.cell_manager.cells[k].selection_state = -1

        self.cell_manager.overlay_cells(self.image_manager)

    def select_from_file(self, filename=None):
        if filename is None:
            filename = tkFileDialog.askopenfilename()
        o_file = open(filename)
        data = o_file.readlines()
        o_file.close()

        data = data[0].split(";")[:len(data[0].split(";")) - 1]

        for key in data:
            self.cell_manager.cells[key].selection_state = 1

        self.cell_manager.overlay_cells(self.image_manager)

    def filter_cells(self):
        """Filters the cell based on the filters defined in the
        params.cellprocessingparams. Calls the filter_cells method from the
        cell_manager instance"""
        self.cell_manager.filter_cells(self.parameters.cellprocessingparams,
                                       self.image_manager)

        print "Finished Filtering Cells"

    def generate_reports(self, filename=None, label=None):
        """Generates the report files by calling the generate_report method
        from Reports"""

        if filename is None:
            filename = tkFileDialog.askdirectory()
        if label is None:
            label = self.fluor_path.split("/")
            label = label[len(label) - 1].split(".")[0]

        if len(self.linescan_manager.lines.keys()) > 0:
            self.linescan_manager.measure_fluorescence(
                self.image_manager.fluor_image)

        self.report_manager = ReportManager(self.parameters)
        self.report_manager.generate_report(filename, label,
                                            self.cell_manager,
                                            self.linescan_manager,
                                            self.parameters)
        if self.get_cell_images:
            self.report_manager.get_cell_images(filename, label,
                                                self.image_manager,
                                                self.cell_manager,
                                                self.parameters)

        print "Reports Generated"
Пример #11
0
class EHooke(object):
    """Main class of the software.
    Starts with an instance of the Parameters and Image class.
    Contains the methods needed to perform the analysis"""
    def __init__(self, cell_data=False):
        self.parameters = ParametersManager()
        self.image_manager = ImageManager()
        self.segments_manager = None
        self.cell_manager = None
        self.linescan_manager = None
        self.report_manager = None
        self.working_dir = None
        self.base_path = None
        self.fluor_path = None
        self.get_cell_images = cell_data

    def load_base_image(self, filename=None):
        """Calls the load_base_image method from the ImageManager
        Can be called without a filename or by passing one as an arg
        (filename=...)"""
        if filename is None:
            filename = tkFileDialog.askopenfilename(
                initialdir=self.working_dir)

        self.working_dir = "/".join(
            filename.split("/")[:len(filename.split("/")) - 1])

        self.base_path = filename

        self.image_manager.load_base_image(filename,
                                           self.parameters.imageloaderparams)

        print "Base Image Loaded"

    def compute_mask(self):
        """Calls the compute_mask method from image_manager."""

        self.image_manager.compute_mask(self.parameters.imageloaderparams)

        if self.image_manager.fluor_image is not None:
            self.load_fluor_image(self.fluor_path)

        print "Mask Computation Finished"

    def load_fluor_image(self, filename=None):
        """Calls the load_fluor_image method from the ImageManager
        Can be called without a filename or by passing one as an arg
        (filename=...)"""
        if filename is None:
            filename = tkFileDialog.askopenfilename(
                initialdir=self.working_dir)

        self.fluor_path = filename

        self.image_manager.load_fluor_image(self.fluor_path,
                                            self.parameters.imageloaderparams)

        print "Fluor Image Loaded"

    def load_option_image(self, filename=None):
        """Calls the load_optional_image method from the ImageManager
        Can be called without a filename or by passing on as an arg"""

        if filename is None:
            filename = tkFileDialog.askopenfilename()

        self.image_manager.load_option_image(filename)

    def compute_segments(self):
        """Calls the compute_segments method from Segments.
        Requires the prior loading of both the phase and fluor images and
        the computation of the mask"""

        self.segments_manager = SegmentsManager()
        self.segments_manager.compute_segments(
            self.parameters.imageprocessingparams, self.image_manager)

        print "Segments Computation Finished"

    def compute_cells(self):
        """Creates an instance of the CellManager class and uses the
        compute_cells_method to create a list of cells based on the labels
        computed by the SegmentsManager instance."""
        self.cell_manager = CellManager(self.parameters)
        self.cell_manager.compute_cells(self.parameters.cellprocessingparams,
                                        self.image_manager,
                                        self.segments_manager)

        print "Cells Computation Finished"

    def merge_cells(self, label_c1, label_c2):
        """Merges two cells using the merge_cells method from the cell_manager
        instance and the compute_merged_cells to create a new list of cells,
        containing a cell corresponding to the merge of the previous two."""
        self.cell_manager.merge_cells(label_c1, label_c2,
                                      self.parameters.cellprocessingparams,
                                      self.segments_manager,
                                      self.image_manager)
        self.cell_manager.overlay_cells(self.image_manager)

        print "Merge Finished"

    def split_cells(self, label_c1):
        """Splits a previously merged cell, requires the label of cell to be
        splitted.
        Calls the split_cells method from the cell_manager instance"""
        self.cell_manager.split_cells(int(label_c1),
                                      self.parameters.cellprocessingparams,
                                      self.segments_manager,
                                      self.image_manager)
        self.cell_manager.overlay_cells(self.image_manager)

        print "Split Finished"

    def define_as_noise(self, label_c1, noise):
        """Method used to change the state of a cell to noise or to undo it"""
        self.cell_manager.mark_cell_as_noise(label_c1, self.image_manager,
                                             noise)

    def process_cells(self):
        """Process the list of computed cells to identify the different regions
        of each cell and computes the stats related to the fluorescence"""
        self.cell_manager.process_cells(self.parameters.cellprocessingparams,
                                        self.image_manager)
        self.linescan_manager = LineScanManager()

        print "Processing Cells Finished"

    def add_line_linescan(self, point_1, point_2, point_3):
        self.linescan_manager.add_line(point_1, point_2, point_3)

    def remove_line_linescan(self, line_id):
        self.linescan_manager.remove_line(line_id)

    def select_all_cells(self):
        """Method used to mark all the cells as selected"""
        for k in self.cell_manager.cells.keys():
            if self.cell_manager.cells[k].selection_state != 0:
                self.cell_manager.cells[k].selection_state = 1

        self.cell_manager.overlay_cells(self.image_manager)

    def reject_all_cells(self):
        """Method used to mark all the cells as rejected"""
        for k in self.cell_manager.cells.keys():
            if self.cell_manager.cells[k].selection_state != 0:
                self.cell_manager.cells[k].selection_state = -1

        self.cell_manager.overlay_cells(self.image_manager)

    def select_from_file(self, filename=None):
        if filename is None:
            filename = tkFileDialog.askopenfilename()
        o_file = open(filename)
        data = o_file.readlines()
        o_file.close()

        data = data[0].split(";")[:len(data[0].split(";")) - 1]

        for key in data:
            self.cell_manager.cells[key].selection_state = 1

        self.cell_manager.overlay_cells(self.image_manager)

    def filter_cells(self):
        """Filters the cell based on the filters defined in the
        params.cellprocessingparams. Calls the filter_cells method from the
        cell_manager instance"""
        self.cell_manager.filter_cells(self.parameters.cellprocessingparams,
                                       self.image_manager)

        print "Finished Filtering Cells"

    def generate_reports(self, filename=None, label=None):
        """Generates the report files by calling the generate_report method
        from Reports"""

        if filename is None:
            filename = tkFileDialog.askdirectory()
        if label is None:
            label = self.fluor_path.split("/")
            label = label[len(label) - 1].split(".")
            if len(label) > 2:
                label = label[len(label) - 3] + "." + label[len(label) - 2]
            else:
                label = label[len(label) - 2]

        if len(self.linescan_manager.lines.keys()) > 0:
            self.linescan_manager.measure_fluorescence(
                self.image_manager.fluor_image)

        self.report_manager = ReportManager(self.parameters)
        self.report_manager.generate_report(filename, label, self.cell_manager,
                                            self.linescan_manager,
                                            self.parameters)
        if self.get_cell_images:
            self.report_manager.get_cell_images(filename, label,
                                                self.image_manager,
                                                self.cell_manager,
                                                self.parameters)

        print "Reports Generated"
Пример #12
0
 def __init__(self, w, h, pos):
     img, _ = ImageManager('img/berry.png',
                           resize=(w // 2, h // 2)).get_image()
     super(Berry, self).__init__(w, h, pos, img)
Пример #13
0
class EHooke(object):
    """Main class of the software.
    Starts with an instance of the Parameters and Image class.
    Contains the methods needed to perform the analysis
    """
    def __init__(self, cell_data=True):
        self.parameters = ParametersManager()
        self.image_manager = ImageManager()
        self.cellcycleclassifier = CellCycleClassifier()
        self.segments_manager = None
        self.cell_manager = None
        self.linescan_manager = None
        self.coloc_manager = None
        self.report_manager = None
        self.working_dir = None
        self.base_path = None
        self.fluor_path = None
        self.get_cell_images = cell_data

    def load_base_image(self, filename=None):
        """Calls the load_base_image method from the ImageManager
        Can be called without a filename or by passing one as an arg
        (filename=...)
        """
        if filename is None:
            filename = tkFileDialog.askopenfilename(
                initialdir=self.working_dir)

        self.working_dir = "/".join(
            filename.split("/")[:len(filename.split("/")) - 1])

        self.base_path = filename

        self.image_manager.load_base_image(filename,
                                           self.parameters.imageloaderparams)

        print("Base Image Loaded")

    def compute_mask(self):
        """Calls the compute_mask method from image_manager."""

        self.image_manager.compute_mask(self.parameters.imageloaderparams)

        if self.image_manager.fluor_image is not None:
            self.load_fluor_image(self.fluor_path)

        print("Mask Computation Finished")

    def load_fluor_image(self, filename=None):
        """Calls the load_fluor_image method from the ImageManager
        Can be called without a filename or by passing one as an arg
        (filename=...)
        """
        if filename is None:
            filename = tkFileDialog.askopenfilename(
                initialdir=self.working_dir)

        self.fluor_path = filename

        self.image_manager.load_fluor_image(filename,
                                            self.parameters.imageloaderparams)

        print("Fluor Image Loaded")

    def load_option_image(self, filename=None):
        """Calls the load_optional_image method from the ImageManager
        Can be called without a filename or by passing on as an arg
        """

        if filename is None:
            filename = tkFileDialog.askopenfilename(
                initialdir=self.working_dir)

        self.image_manager.load_option_image(filename,
                                             self.parameters.imageloaderparams)

    def compute_segments(self):
        """Calls the compute_segments method from Segments.
        Requires the prior loading of both the phase and fluor images and
        the computation of the mask
        """

        self.segments_manager = SegmentsManager()
        self.segments_manager.compute_segments(
            self.parameters.imageprocessingparams, self.image_manager)

        print("Segments Computation Finished")

    def compute_cells(self):
        """Creates an instance of the CellManager class and uses the
        compute_cells_method to create a list of cells based on the labels
        computed by the SegmentsManager instance.
        """
        self.cell_manager = CellManager(self.parameters)
        self.cell_manager.compute_cells(self.parameters, self.image_manager,
                                        self.segments_manager)

        print("Cells Computation Finished")

    def merge_cells(self, label_c1, label_c2):
        """Merges two cells using the merge_cells method from the cell_manager
        instance and the compute_merged_cells to create a new list of cells,
        containing a cell corresponding to the merge of the previous two.
        """
        self.cell_manager.merge_cells(label_c1, label_c2, self.parameters,
                                      self.segments_manager,
                                      self.image_manager)
        self.cell_manager.overlay_cells(self.image_manager)

        print("Merge Finished")

    def split_cells(self, label_c1):
        """Splits a previously merged cell, requires the label of cell to be
        splitted.
        Calls the split_cells method from the cell_manager instance
        """
        self.cell_manager.split_cells(int(label_c1), self.parameters,
                                      self.segments_manager,
                                      self.image_manager)
        self.cell_manager.overlay_cells(self.image_manager)

        print("Split Finished")

    def define_as_noise(self, label_c1, noise):
        """Method used to change the state of a cell to noise or to undo it"""
        self.cell_manager.mark_cell_as_noise(label_c1, self.image_manager,
                                             noise)

    def process_cells(self):
        """Process the list of computed cells to identify the different regions
        of each cell and computes the stats related to the fluorescence
        """
        self.cell_manager.process_cells(self.parameters.cellprocessingparams,
                                        self.image_manager)
        self.linescan_manager = LineScanManager()

        if self.parameters.cellprocessingparams.classify_cells:
            self.compute_cellcyclephases()
        else:
            for k in self.cell_manager.cells.keys():
                self.cell_manager.cells[k].stats["Cell Cycle Phase"] = 0

        print("Processing Cells Finished")

    def select_cells_phase(self, phase):
        """Helper function for GUI. For each cell in a specific (user defined) cell phase,
        sets the selection flag to a boolean True (1)
        """
        for k in self.cell_manager.cells.keys():
            if self.cell_manager.cells[k].stats["Cell Cycle Phase"] == phase:
                self.cell_manager.cells[k].selection_state = 1

        self.cell_manager.overlay_cells(self.image_manager)

    def add_line_linescan(self, point_1, point_2, point_3):
        """ Helper function for GUI. Adds a line given three user defined points."""
        self.linescan_manager.add_line(point_1, point_2, point_3)

    def remove_line_linescan(self, line_id):
        """ Helper function for GUI. Removes a user specified line."""
        self.linescan_manager.remove_line(line_id)

    def select_all_cells(self):
        """Method used to mark all the cells as selected"""
        for k in self.cell_manager.cells.keys():
            if self.cell_manager.cells[k].selection_state != 0:
                self.cell_manager.cells[k].selection_state = 1

        self.cell_manager.overlay_cells(self.image_manager)

    def reject_all_cells(self):
        """Method used to mark all the cells as rejected"""
        for k in self.cell_manager.cells.keys():
            if self.cell_manager.cells[k].selection_state != 0:
                self.cell_manager.cells[k].selection_state = -1

        self.cell_manager.overlay_cells(self.image_manager)

    def invert_selection(self):
        for k in self.cell_manager.cells.keys():
            self.cell_manager.cells[k].selection_state *= -1

        self.cell_manager.overlay_cells(self.image_manager)

    def select_from_file(self, filename=None):
        """Selects cells based upon a user fed txt file. Assumes correct formatting of said file"""
        if filename is None:
            filename = tkFileDialog.askopenfilename()
        o_file = open(filename)
        data = o_file.readlines()
        o_file.close()

        data = data[0].split(";")[:len(data[0].split(";")) - 1]

        for key in data:
            self.cell_manager.cells[key].selection_state = 1

        self.cell_manager.overlay_cells(self.image_manager)

    def filter_cells(self):
        """Filters the cell based on the filters defined in the
        params.cellprocessingparams. Calls the filter_cells method from the
        cell_manager instance
        """

        self.cell_manager.filter_cells(self.parameters.cellprocessingparams,
                                       self.image_manager)

        print("Finished Filtering Cells")

    def compute_coloc(self, label=None):
        """Calls the necessary method to calculate colocalization (through PCC) of two proteins.
        REQUIRES an additional optional fluorescent image
        """
        if label is None:
            label = self.fluor_path.split("/")
            label = label[len(label) - 1].split(".")
            if len(label) > 2:
                label = label[len(label) - 3] + "." + label[len(label) - 2]
            else:
                label = label[len(label) - 2]

        # TODO facilitate user experience by separating the different optional images (PCC, DNA, etc)
        if self.image_manager.optional_image is not None:
            self.coloc_manager = ColocManager()
            self.coloc_manager.compute_pcc(self.cell_manager,
                                           self.image_manager, self.parameters,
                                           label)

        else:
            print("Optional Image not loaded")

    def compute_cellcyclephases(self):
        self.cellcycleclassifier.classify_cells(
            self.image_manager, self.cell_manager,
            self.parameters.cellprocessingparams.microscope)

    def select_cells_optional(self, signal_ratio):
        if self.image_manager.optional_image is not None:
            self.cell_manager.select_cells_optional(signal_ratio,
                                                    self.image_manager)
            self.cell_manager.overlay_cells(self.image_manager)
        else:
            print("No optional image loaded")

    def assign_cell_cycle_phase(self, key, phase):
        self.cell_manager.cells[key].stats["Cell Cycle Phase"] = int(phase)

    def generate_reports(self, filename=None, label=None):
        """Generates the report files by calling the generate_report method
        from Reports
        """

        if filename is None:
            filename = tkFileDialog.askdirectory(initialdir=self.working_dir)
        if label is None:
            label = self.fluor_path.split("/")
            label = label[len(label) - 1].split(".")
            if len(label) > 2:
                label = label[len(label) - 3] + "." + label[len(label) - 2]
            else:
                label = label[len(label) - 2]

        if len(self.linescan_manager.lines.keys()) > 0:
            self.linescan_manager.measure_fluorescence(
                self.image_manager.fluor_image)

        self.report_manager = ReportManager(self.parameters)
        self.report_manager.generate_report(filename, label, self.cell_manager,
                                            self.linescan_manager,
                                            self.parameters)
        if self.get_cell_images:
            self.report_manager.get_cell_images(filename, label,
                                                self.image_manager,
                                                self.cell_manager,
                                                self.parameters)

        print("Reports Generated")

    def save_mask(self):
        self.image_manager.save_mask()

    def save_labels(self):
        self.segments_manager.save_labels()
Пример #14
0
    def __init__(self, screen, maze, info, file):
        super().__init__()
        self.screen = screen
        self.maze = maze

        self.kill_able = ImageManager('img/Gos.png',
                                      sheet=True,
                                      pos_offsets=[(0, 32 * 8, 32, 32),
                                                   (0, 32 * 9, 32, 32)],
                                      resize=(self.maze.block_size,
                                              self.maze.block_size),
                                      animation_delay=150)

        self.orange = ImageManager('img/Gos.png',
                                   sheet=True,
                                   pos_offsets=[(0, 32 * 0, 32, 32),
                                                (0, 32 * 1, 32, 32)],
                                   resize=(self.maze.block_size,
                                           self.maze.block_size),
                                   animation_delay=250)
        self.red = ImageManager('img/Gos.png',
                                sheet=True,
                                pos_offsets=[(0, 32 * 2, 32, 32),
                                             (0, 32 * 3, 32, 32)],
                                resize=(self.maze.block_size,
                                        self.maze.block_size),
                                animation_delay=250)
        self.cyan = ImageManager('img/Gos.png',
                                 sheet=True,
                                 pos_offsets=[(0, 32 * 4, 32, 32),
                                              (0, 32 * 5, 32, 32)],
                                 resize=(self.maze.block_size,
                                         self.maze.block_size),
                                 animation_delay=250)
        self.pink = ImageManager('img/Gos.png',
                                 sheet=True,
                                 pos_offsets=[(0, 32 * 6, 32, 32),
                                              (0, 32 * 7, 32, 32)],
                                 resize=(self.maze.block_size,
                                         self.maze.block_size),
                                 animation_delay=250)

        self.images = self.red
        if file == 'orange':
            self.images = self.orange
        elif file == 'cyan':
            self.images = self.cyan
        elif file == 'pink':
            self.images = self.pink

        self.score_font = pygame.font.Font('fonts/Lumberjack-Regular.ttf', 18)
        self.score_image = None
        self.image, self.rect = self.images.get_image()
        self.return_tile = info[0]
        self.eaten_time = None
        self.start_pos = info[1]
        self.reset_position()

        self.on = False
        self.kill = False
        self.ret = False
Пример #15
0
class Ghost(Sprite):
    def __init__(self, screen, maze, info, file):
        super().__init__()
        self.screen = screen
        self.maze = maze

        self.kill_able = ImageManager('img/Gos.png',
                                      sheet=True,
                                      pos_offsets=[(0, 32 * 8, 32, 32),
                                                   (0, 32 * 9, 32, 32)],
                                      resize=(self.maze.block_size,
                                              self.maze.block_size),
                                      animation_delay=150)

        self.orange = ImageManager('img/Gos.png',
                                   sheet=True,
                                   pos_offsets=[(0, 32 * 0, 32, 32),
                                                (0, 32 * 1, 32, 32)],
                                   resize=(self.maze.block_size,
                                           self.maze.block_size),
                                   animation_delay=250)
        self.red = ImageManager('img/Gos.png',
                                sheet=True,
                                pos_offsets=[(0, 32 * 2, 32, 32),
                                             (0, 32 * 3, 32, 32)],
                                resize=(self.maze.block_size,
                                        self.maze.block_size),
                                animation_delay=250)
        self.cyan = ImageManager('img/Gos.png',
                                 sheet=True,
                                 pos_offsets=[(0, 32 * 4, 32, 32),
                                              (0, 32 * 5, 32, 32)],
                                 resize=(self.maze.block_size,
                                         self.maze.block_size),
                                 animation_delay=250)
        self.pink = ImageManager('img/Gos.png',
                                 sheet=True,
                                 pos_offsets=[(0, 32 * 6, 32, 32),
                                              (0, 32 * 7, 32, 32)],
                                 resize=(self.maze.block_size,
                                         self.maze.block_size),
                                 animation_delay=250)

        self.images = self.red
        if file == 'orange':
            self.images = self.orange
        elif file == 'cyan':
            self.images = self.cyan
        elif file == 'pink':
            self.images = self.pink

        self.score_font = pygame.font.Font('fonts/Lumberjack-Regular.ttf', 18)
        self.score_image = None
        self.image, self.rect = self.images.get_image()
        self.return_tile = info[0]
        self.eaten_time = None
        self.start_pos = info[1]
        self.reset_position()

        self.on = False
        self.kill = False
        self.ret = False

    def reset_position(self):
        self.rect.left, self.rect.top = self.start_pos

    def set_eaten(self):
        self.ret = True
        self.kill = False
        self.image = self.score_font.render('200', True, Colors().white)

    def trigger(self):
        if not self.ret:
            self.kill = True
            self.image, _ = self.kill_able.get_image()

    def enable(self):
        self.on = True

    def update_normal(self):
        self.image = self.images.next_image()

    def update_blue(self):
        self.image = self.kill_able.next_image()

    def update(self):
        if self.on:
            if not self.kill:
                self.update_normal()
            else:
                self.update_blue()

    def blit(self):
        self.screen.blit(self.image, self.rect)