Exemplo n.º 1
0
    def compute(self):
        # TODO: this will at some point have to be a state machine

        running = True
        paused = False
        while running:

            # TODO: figure out what to do with framerates
            self.clock.tick(60)

            # TODO: unfuck calculation, draw, and update

            # react to user input
            single_frame = False

            for e in pygame.event.get():
                if e.type == pygame.QUIT:
                    running = False
                if e.type == pygame.KEYDOWN:
                    if e.key == pygame.K_ESCAPE:
                        running = False
                    elif e.key == pygame.K_SPACE:
                        self.players[0].act()
                    elif e.key == pygame.K_LEFT:
                        paused = not paused
                    elif e.key == pygame.K_RIGHT:
                        single_frame = True

            if paused:
                if single_frame:
                    single_frame = False
                else:
                    continue

            # check collisions
            for player in self.players:
                player.check_wall_collisions()
                player.update()

            pairs = combinations(range(len(self.players)), 2)
            for i, j in pairs:
                if utils.overlaps(self.players[i], self.players[j]):
                    utils.change_velocities(self.players[i], self.players[j])

            # move players and Orbs
            for orb in chain(self.players, self.orbs):
                orb.move()

            # Draw the scene
            self.screen.fill((0, 0, 0))
            for game_object in chain(self.walls, self.orbits, self.orbs,
                                     self.players):
                game_object.draw(self.screen)

            pygame.display.flip()
Exemplo n.º 2
0
def parse_head_row(head_row, gene_group, outfile):
    parse_head_row.last_args = head_row, gene_group, outfile

    for _, gene_row in gene_group.iterrows():
        if overlaps((gene_row.start, gene_row.end),
                    (head_row.start, head_row.end)):
            flag = 'olap'
            chosen_gene_id = gene_row.id
            distance = 0
            break

    # if none overlaps
    else:
        # b f de forward ou backfill
        distance = 9e99  # create Inf() class for that?
        for meth in ['b', 'f']:
            fill_back = meth == 'b'
            gene_pos = ['end', 'start'][fill_back]
            head_pos = ['end', 'start'][not fill_back]

            if gene_group[gene_pos].duplicated().sum():
                raise pd.core.indexes.base.InvalidIndexError(
                    'You appear to have duplicated gene positions. '
                    'Indexes won\'t work properly.')

            indexed_group = gene_group.sort_values(gene_pos).set_index(
                gene_pos)

            try:
                near_gene_index = indexed_group.index.get_loc(
                    head_row[head_pos], meth + 'fill')
                gene_row = gene_group.iloc[near_gene_index]
                new_distance = abs(gene_row[gene_pos] - head_row[head_pos])

                if new_distance < distance:
                    chosen_gene_id = gene_row.id
                    flag = ["gh", "hg"][fill_back]
                    distance = new_distance

            except KeyError as e:
                prinf(
                    f'\nNão há gene {meth.upper()} de {head_row.id}. (B=atrás, F=à frente)\n'
                )

    outfile.write('\t'.join([head_row.id, chosen_gene_id, flag,
                             str(distance)]) + '\n')
Exemplo n.º 3
0
                    near_gene_index = indexed_group.index.get_loc(
                        head_row.start, meth + 'fill')
                    gene_row = gene_group.iloc[near_gene_index]
                    relation_dic[head_row.id] = dict({flag: gene_row.id},
                                                     **relation_dic.get(
                                                         head_row.id, {}))

                    outfile.write('\t'.join([head_row.id, gene_row.id, flag]) +
                                  '\n')

                except KeyError:
                    if verbose:
                        print(f'Não há gene à {flag} de {head_row.id}.')

                for _, gene_row in gene_group.iterrows():
                    if overlaps((gene_row.start, gene_row.end),
                                (head_row.start, head_row.end)):
                        flag = 'olap'
                        relation_dic[head_row.id] = dict({flag: gene_row.id},
                                                         **relation_dic.get(
                                                             head_row.id, {}))
                        outfile.write(
                            '\t'.join([head_row.id, gene_row.id, flag]) + '\n')

    print(relation_dic)
    print(f"Guardando dicionário em '{str(outpath)}'...")

    with outdicpath.open('wb') as outdicfile:
        dump(relation_dic, outdicfile)

    print('Concluído.')
Exemplo n.º 4
0
def test_overlap():
    x1, x2 = 2005, 2008
    y1, y2 = 2003, 2007
    assert overlaps(x1, x2, y1, y2) == True
Exemplo n.º 5
0
def test_no_overlap():
    x1, x2 = 2005, 2008
    y1, y2 = 2003, 2004
    assert overlaps(x1, x2, y1, y2) == False
Exemplo n.º 6
0
sr3_scaffold_groups = sr3_vs_genoma.groupby(['saccver'])
start_time = time()
count = 0
discarded = []
pos = 0

for i, p in tqdm(list(perere3_vs_genoma.iterrows())):

    count += 1

    if p['saccver'] in sr3_scaffold_groups.groups:
        for j, s in sr3_scaffold_groups.get_group(
                p['saccver']).loc[pos:].iterrows():

            if overlaps((p['sstart'], p['send']), (s['sstart'], s['send'])):

                # print('Alinhamentos coincidentes encontrados:')
                # print(f"{p['sstart']}-{p['send']}\n{s['sstart']}-{s['send']}")

                if s['bitscore'] > p['bitscore']:

                    # print('SR3 tem mais bitscore:')
                    # print(f"SR3 = {s['bitscore']}\nPer = {p['bitscore']}")
                    pos = j

                    filtered_perere3_vs_genoma.drop(i, inplace=True)
                    # print(f'Alinhamento {i} descartado.\n')
                    discarded.append(str(i))

                    break
Exemplo n.º 7
0
            sam_row = sam_row.iloc[0, :]

            if sam_row.chrom == '*':
                continue

            try:
                head_group = head_groups.get_group(sam_row.chrom)

            except KeyError:
                if verbose:
                    print(f'\nNão há heads no cromossomo {sam_row.chrom}.')
                continue

            for _, head_row in head_group.iterrows():

                if overlaps((sam_row.start,
                             sam_row.start + len_from_cigar(sam_row.cigar)),
                            (head_row.start, head_row.end)):

                    outfile.write('\t'.join([
                        head_row.chrom, head_row.id,
                        str(head_row.start),
                        str(head_row.end),
                        str(sam_row.start), sam_row.cigar
                    ]) + '\n')

        outfile.close()
        log(f"O SAM '{sam_path.stem}' acabou de ser filtrado.", __file__)
        print('Concluído.')
Exemplo n.º 8
0
def main():
    heads = pd.read_table(head_annotations_path,
                          names=GFF3_COLUMNS,
                          usecols=GFF_COLS_SUBSET)
    genes = pd.read_table(gene_annotations_path,
                          names=GFF3_COLUMNS,
                          usecols=GFF_COLS_SUBSET)
    heads['id'] = parse_gff_attributes(heads.attributes).index
    genes['id'] = parse_gff_attributes(genes.attributes).index
    head_groups = heads.groupby(COLS_TO_GROUP)
    gene_groups = genes.groupby(COLS_TO_GROUP)

    outfile = safe_open(outpath, exist_ok=False)
    # write header
    outfile.write('\t'.join(['head_id', 'gene_id', 'flag', 'distance']) + '\n')
    print('Iterate for each contig and for each head in contig.')

    for head_group_name, head_group in tqdm(head_groups):
        try:
            gene_group = gene_groups.get_group(head_group_name)

        except KeyError:
            prinf(
                'Não há nenhum gene no cromossomo. As heads abaixo são "desgenadas".'
            )
            prinf(head_group)
            continue

        for _, head_row in tqdm(list(head_group.iterrows())):

            for _, gene_row in gene_group.iterrows():
                if overlaps((gene_row.start, gene_row.end),
                            (head_row.start, head_row.end)):
                    flag = 'olap'
                    chosen_gene_id = gene_row.id
                    distance = 0
                    break

            # if none overlaps
            else:
                # b f de forward ou backfill
                distance = 9e99  # create Inf() class for that?
                for meth in ['b', 'f']:
                    fill_back = meth == 'b'
                    gene_pos = ['end', 'start'][fill_back]
                    head_pos = ['end', 'start'][not fill_back]

                    if gene_group[gene_pos].duplicated().sum():
                        raise pd.core.indexes.base.InvalidIndexError(
                            'You appear to have duplicated gene positions.'
                            'Indexes won\'t work properly.')

                    indexed_group = gene_group.sort_values(gene_pos).set_index(
                        gene_pos)

                    try:
                        near_gene_index = indexed_group.index.get_loc(
                            head_row[head_pos], meth + 'fill')
                        gene_row = gene_group.iloc[near_gene_index]
                        new_distance = abs(gene_row[gene_pos] -
                                           head_row[head_pos])

                        if new_distance < distance:
                            chosen_gene_id = gene_row.id
                            flag = ["gh", "hg"][fill_back]
                            distance = new_distance

                    except KeyError:
                        prinf(f'Não há gene à {flag} de {head_row.id}.')

            outfile.write(
                '\t'.join([head_row.id, chosen_gene_id, flag,
                           str(distance)]) + '\n')

    print(f'\nConcluído. Relações salvas em {str(outpath)}.')

    outfile.close()