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
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()
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)
#!/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)