Ejemplo n.º 1
0
    def parsimony(self, score=False):
        """
        Return ancestral state inferred by maximum parsimony method for each site

        @param score: bool, return state + score or only return state without score, default: False
        @return: tuple, in the form of (state, score) or list, contains states (ancestral state for each site)
        """

        state = self.top2bottom()
        scores = []
        states = []

        for s in state:
            stating = {}
            scoring = []
            for ss in s:
                cost = ss.pop('cost')
                stating[cost] = ss
                scoring.append(cost)
            min_score = min(scoring)
            scores.append(min_score)
            states.append(stating[min_score])

        if self.save:
            nodes = self.nodes(ids=True)
            ancestral_state = {}
            for n in nodes:
                ns = []
                for c in states:
                    ns.append(c[n])
                ancestral_state[n] = ''.join(ns)
            relationship = ['\t'.join([str(k), str(v[0]), str(v[1]), str(v[2])]) for k, v in self.tree.items()]

            state_base_name = os.path.basename(self.mp)
            nodes_base_name = os.path.basename(self.mp)
            state_filename = state_base_name.replace('.fasta', '') + '_AncestralStates_MP.fasta'
            nodes_relationship = nodes_base_name.replace('.fasta', '') + '_NodesRelationship_MP.txt'

            state_filename = os.path.join(self.outdir, state_filename)
            nodes_relationship = os.path.join(self.outdir, nodes_relationship)

            fasta.write(ancestral_state, state_filename)
            with open(nodes_relationship, 'wb') as f:
                f.write('#ID\tParent\tName\tOffsprings\n')
                f.write('\n'.join(relationship))

        if score:
            return (states, scores)
        else:
            return states
Ejemplo n.º 2
0
                        type=int, help='Maximum read length')
    parser.add_argument('--coverage', type=float, action='store', default=11,
                        help='Desired coverage of given RefSeq')
    parser.add_argument('--error', type=float, action='store', default=0,
                        help='Error rate, in %')
    parser.add_argument('--rev', type=float, action='store', default=0,
                        help='Reverse strip rate, in %')
    args = parser.parse_args()

    if args.RefSeq == '-':
        f = sys.stdin
    else:
        f = open(args.RefSeq, 'rb')

    if args.output == '-':
        g = sys.stdout
    else:
        g = open(args.output, 'wb')

    seqs = [s for _, s in parse(f)]

    for i, fragment in enumerate(split_reads(seqs, args.min_size,
                                             args.max_size, args.coverage,
                                             args.error, args.rev)):
        write(fragment, 'fragment_%d' % i, g)

    if args.RefSeq != '-':
        f.close()
    if args.output != '-':
        g.close()
Ejemplo n.º 3
0
    Generator: Generates random genomes for experiments
    Author: Paulo Viadanna
"""
from fasta import write
from random import choice
import argparse
import sys


def generate_sequence(size, alphabet='ACGT'):
    return "".join([choice(alphabet) for _ in xrange(size)])


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Generate random sequence')
    parser.add_argument('Size',
                        type=int,
                        nargs='?',
                        default=1000,
                        help='Size of generated sequence')
    parser.add_argument('Alphabet',
                        type=str,
                        nargs='?',
                        default='ACGT',
                        help='Alphabet used to generate sequence')
    args = parser.parse_args()

    g = sys.stdout
    write(generate_sequence(args.Size, args.Alphabet),
          'random_genome_size_%d' % args.Size, g)
Ejemplo n.º 4
0
#!/usr/bin/python
"""
    Generator: Generates random genomes for experiments
    Author: Paulo Viadanna
"""
from fasta import write
from random import choice
import argparse
import sys


def generate_sequence(size, alphabet='ACGT'):
    return "".join([choice(alphabet) for _ in xrange(size)])


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Generate random sequence')
    parser.add_argument('Size', type=int, nargs='?', default=1000,
                        help='Size of generated sequence')
    parser.add_argument('Alphabet', type=str, nargs='?', default='ACGT',
                        help='Alphabet used to generate sequence')
    args = parser.parse_args()

    g = sys.stdout
    write(generate_sequence(args.Size, args.Alphabet),
          'random_genome_size_%d' % args.Size, g)