Mercurial > repos > ucsb-phylogenetics > osiris_phylogenetics
comparison phylogenies/makeNJst.pl @ 0:5b9a38ec4a39 draft default tip
First commit of old repositories
author | osiris_phylogenetics <ucsb_phylogenetics@lifesci.ucsb.edu> |
---|---|
date | Tue, 11 Mar 2014 12:19:13 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:5b9a38ec4a39 |
---|---|
1 #!/usr/bin/perl | |
2 | |
3 #This script generates an R script to call NJst | |
4 #input is a table with treename<tab>newick tree | |
5 use strict; | |
6 use Bio::TreeIO; | |
7 | |
8 my $filename = $ARGV[0]; | |
9 my $outfile = $ARGV[1]; | |
10 open FILE, $filename or die $!; | |
11 | |
12 | |
13 my @splitline; | |
14 | |
15 print "require(phybase);\n"; | |
16 print "genetrees<-c("; | |
17 my $counter=0; | |
18 my $tree; | |
19 while (<FILE>) { | |
20 chomp; | |
21 #get a line from the data file | |
22 my $currentinput = "$_"; | |
23 @splitline = split(/\t/); | |
24 my $treename= $splitline[0]; | |
25 $tree = $splitline[1]; | |
26 unless($counter==0){ | |
27 print ", "; | |
28 } | |
29 $counter++; | |
30 print "'$tree'"; | |
31 } | |
32 print ")\n"; #close genetree vector | |
33 print "taxaname<-c("; | |
34 my $spnum = tree2spList($tree); | |
35 print ")\nspname<-taxaname\n"; | |
36 print "species.structure<-matrix(0,$spnum,$spnum)\n"; | |
37 print "diag(species.structure)<-1\n"; | |
38 print "\n"; | |
39 print "result<-NJst(genetrees,taxaname,spname,species.structure)\n"; | |
40 print "write(result, file='$outfile')\n"; | |
41 close FILE; | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 #This script requires phybase R package | |
48 #NJst is a function used as follows | |
49 # genetrees<-c("(A:0.004,(B:0.003,(C:0.002,(D:0.001,E:0.001) | |
50 # :0.001):0.001):0.001);","(A:0.004,(B:0.003,(E:0.002,(D:0.001,C:0.001):0.001):0.001):0.001);","(A:0.004,(B:0.003,(C:0.002,(D:0.001,E:0.001):0.001):0.001):0.001);") | |
51 # taxaname<-c("A","B","C","D","E") | |
52 # spname<-taxaname | |
53 # species.structure<-matrix(0, 5, 5) | |
54 # diag(species.structure)<-1 | |
55 # | |
56 # NJst(genetrees,taxaname, spname, species.structure) | |
57 | |
58 | |
59 | |
60 sub tree2spList { | |
61 my $treefile=shift; | |
62 | |
63 my ($charactername, $characterstate); | |
64 my ($call, $sp_id, $char_id); | |
65 | |
66 #Open treefile and get taxon names from tree | |
67 my $stringfh; | |
68 open($stringfh, "<", \$treefile); | |
69 | |
70 my $input = Bio::TreeIO->new(-format => 'newick', -fh => $stringfh); | |
71 my $tree = $input->next_tree; | |
72 | |
73 my @taxa = $tree->get_leaf_nodes; | |
74 my @names = map { $_->id } @taxa; | |
75 | |
76 my $count=0; | |
77 foreach(@names){ | |
78 my $treespecies = $_; | |
79 $treespecies =~ s/^\s+|\s+$//g ; #Trim leading and trailing whitespace | |
80 unless($count==0){ | |
81 print ","; | |
82 } | |
83 print "'$treespecies'"; | |
84 $count++ | |
85 } | |
86 return $count; | |
87 } #end of tree2spList subroutine |