Пример #1
0
def getAge(start,end,species,mytree,margin=50):
	from StringIO import StringIO
	from Bio import Phylo,AlignIO
	from treetime import TreeAnc
	myfasta=''
	for spec in species.keys():
		myfasta=myfasta+'>'+spec+'\nA'+str(''.join(species[spec][(start-margin-analysis_start):(end+margin-analysis_start)]))+'A\n'
	my_aln = AlignIO.read(StringIO(myfasta), 'fasta')
	ta = TreeAnc(tree=mytree, aln=my_aln, gtr='JC69')
	ta.infer_ancestral_sequences(method = 'ml', infer_gtr=True, marginal=False)
	seq=ta.get_reconstructed_alignment()
	print 'ancestral seq inferred'
	# 	for i in range(len(seq)):
	# 		print seq[i].id+' '+seq[i].seq[(margin+1):(margin+1+end-start)]
	Phylo.write(ta.tree, home+'/Annotation/Conservation/SEqAlign/test_'+id+'.nwk', 'newick')
	mytreeAnnot=Phylo.read(home+'/Annotation/Conservation/SEqAlign/test_'+id+'.nwk', "newick")
	AncestralSeq={}
	for y in seq:
		AncestralSeq[y.id]=str(y.seq[(margin+1):(margin+1+end-start)])
	    AppearedInCommonAncestor=['human','chimp','gorilla','orangutan','macaque','marmoset','tarsier','lemur','treeShrew','mouse','cow','elephant','opossum','platypus','chicken','frog','zebrafish','lamprey']
    	AppearedInCommonAncestorScientific=['hg19','panTro2','gorGor1','ponAbe2','rheMac2','calJac1','tarSyr1','micMur1','tupBel1','mm9','bosTau4','loxAfr3','monDom5','ornAna1','galGal3','xenTro2','danRer6','petMar1']
    	CommonAncestor=['hg19','NODE_0000044','NODE_0000043','NODE_0000042','NODE_0000040','NODE_0000039','NODE_0000038','NODE_0000036','NODE_0000035','NODE_0000028','NODE_0000018','NODE_0000013','NODE_0000011','NODE_0000010','NODE_0000007','NODE_0000006','NODE_0000001','NODE_0000000']
	    CommonAncestorName=['Humans','Chimpanzees','Gorillas','Orangutans','Gibbons','Monkeys','Tarsiers','Lemurs','Shrews','Rodents','Boroeutheria','Afroeutheria','Marsupials','Monotremes','Sauropsids','Amphibians','Vertebrates','Chordates']
	    PhyloGeneticDistance=[ mytreeAnnot.distance('hg19', CommonAncestor[i]) for i in range(0,len(CommonAncestor))]
                      verbose=4,
                      fill_overhangs=not params.keep_overhangs)
    treeanc.infer_ancestral_sequences('ml',
                                      infer_gtr=params.infer_gtr,
                                      marginal=params.marginal)

    ###########################################################################
    ### OUTPUT and saving of results
    ###########################################################################
    if params.infer_gtr:
        print('\nInferred GTR model:')
        print(treeanc.gtr)

    outaln_name = '.'.join(
        params.aln.split('/')[-1].split('.')[:-1]) + '_ancestral.fasta'
    AlignIO.write(treeanc.get_reconstructed_alignment(), outaln_name, 'fasta')

    # decorate tree with inferred mutations
    terminal_count = 0
    for n in treeanc.tree.find_clades():
        if n.up is None:
            continue
        n.confidence = None
        if n.is_terminal() and len(n.name) > 40:
            n.name = n.name[:35] + '_%03d' % terminal_count
            terminal_count += 1
        if len(n.mutations):
            n.comment = '&mutations="' + '_'.join(
                [a + str(pos) + d for (a, pos, d) in n.mutations]) + '"'

    # write tree to file