[Bio] / FigKernelScripts / align_with_clustal_2.pl Repository:
ViewVC logotype

Annotation of /FigKernelScripts/align_with_clustal_2.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (view) (download) (as text)

1 : golsen 1.1 # -*- perl -*-
2 : olson 1.3 #
3 :     # Copyright (c) 2003-2006 University of Chicago and Fellowship
4 :     # for Interpretations of Genomes. All Rights Reserved.
5 :     #
6 :     # This file is part of the SEED Toolkit.
7 :     #
8 :     # The SEED Toolkit is free software. You can redistribute
9 :     # it and/or modify it under the terms of the SEED Toolkit
10 :     # Public License.
11 :     #
12 :     # You should have received a copy of the SEED Toolkit Public License
13 :     # along with this program; if not write to the University of Chicago
14 :     # at info@ci.uchicago.edu or the Fellowship for Interpretation of
15 :     # Genomes at veronika@thefig.info or download a copy from
16 :     # http://www.theseed.org/LICENSE.TXT.
17 :     #
18 :    
19 : golsen 1.1
20 :     use strict;
21 :     use Carp;
22 :     use Data::Dumper;
23 :     use gjonewicklib qw(
24 :     parse_newick_tree_str
25 :     reroot_newick_to_approx_midpoint
26 :     aesthetic_newick_tree
27 :     newick_relabel_tips
28 :     text_plot_newick
29 :     dump_tree
30 :     );
31 :     use FIG;
32 :    
33 :     my $fig = new FIG;
34 :    
35 :     $| = 1;
36 :    
37 :     my $usage = "align_with_clustal_2 [-org] [-func[=user]] [-tree] [-UniProt] [-save=Dir] Id1 Id2 ... ";
38 :    
39 :     (@ARGV > 1) || die "usage: $usage";
40 :    
41 :     my $temp_dir = $FIG_Config::temp;
42 :     my $file = "$temp_dir/tmp$$";
43 :     my $relabel = {};
44 :     my $add_org = "";
45 :     my $save = "";
46 :     my $add_func = "";
47 :     my $tree = "";
48 :     my $uni_prot = "";
49 :     my $trouble = 0;
50 :     my $user = undef;
51 :    
52 :     while ($ARGV[0] =~ m/^-/)
53 :     {
54 :     if ($ARGV[0] =~ /-org/)
55 :     {
56 :     $add_org = shift @ARGV;
57 :     }
58 :     elsif ($ARGV[0] =~ /-save=(\S+)/)
59 :     {
60 :     $save = $1;
61 :     shift @ARGV;
62 :     }
63 :     elsif ($ARGV[0] =~ /-func/)
64 :     {
65 :     $add_func = shift @ARGV;
66 :     if ($add_func =~ m/=(\S+)/) { $user = $1; }
67 :     }
68 :     elsif ($ARGV[0] =~ /-tree/)
69 :     {
70 :     $tree = shift @ARGV;
71 :     }
72 :     elsif ($ARGV[0] =~ /-UniProt/i)
73 :     {
74 :     $uni_prot = 1;
75 :     shift @ARGV;
76 :     }
77 :     else
78 :     {
79 :     $trouble = 1;
80 :     print STDERR "Invalid flag $ARGV[0]\n";
81 :     shift @ARGV;
82 :     }
83 :     }
84 :     die "\nusage: $usage\n\n" if $trouble;
85 :    
86 :     my %seen;
87 :     open(TMP,">$file.fasta") || die "could not open $file";
88 :     foreach my $id (@ARGV)
89 :     {
90 :     next if ($seen{$id});
91 :     $seen{$id} = 1;
92 :    
93 :     if (my $seq = $fig->get_translation($id))
94 :     {
95 :     print TMP ">$id\n$seq\n";
96 :     }
97 :     else
98 :     {
99 :     print STDERR "could not find translation for $id\n";
100 :     }
101 :    
102 :     my $label = $id;
103 :     if ($uni_prot && ($_ = $fig->to_alias($id,"uni")) ) { $label .= " [$_]" }
104 :     if ($add_org && ($_ = $fig->org_of($id)) ) { $label .= " [$_]"; }
105 :     if ($add_func && ($_ = $fig->function_of($id, $user)) ) { $label .= " $_"; }
106 :    
107 :     $relabel->{$id} = $label;
108 :     }
109 :     close(TMP);
110 :     # print STDERR "$0;\n", Dumper($relabel);
111 :    
112 : golsen 1.2 system "$FIG_Config::ext_bin/clustalw -infile=$file.fasta -align -outorder=aligned > /dev/null";
113 : golsen 1.1 if ( -s "$file.aln" && open( ALIGN, "<$file.aln" ) )
114 :     {
115 :     print <ALIGN>;
116 :     close( ALIGN );
117 :     }
118 :    
119 : golsen 1.2 if ( $tree && -s "$file.aln" )
120 : golsen 1.1 {
121 : golsen 1.4 system "$FIG_Config::ext_bin/clustalw -infile=$file.aln -tree > /dev/null";
122 : golsen 1.1 my $treetext = "";
123 :     my $tree1;
124 :     if ( ( -s "$file.ph" && open( TREE, "<$file.ph" ) )
125 :     || ( -s "$file.dnd" && open( TREE, "<$file.dnd" ) ) )
126 :     {
127 :     if ( $tree1 = &parse_newick_tree_str( join( "", <TREE> ) ) )
128 :     {
129 :     # dump_tree( $tree1 );
130 :     my $tree1b = reroot_newick_to_approx_midpoint( $tree1 );
131 :     my $tree2 = aesthetic_newick_tree( $tree1b );
132 :     # my $tree2 = aesthetic_newick_tree( $tree1 );
133 :     my $tree3 = newick_relabel_tips( $tree2, $relabel );
134 :     # @textlines = text_plot_newick( $node, $width, $min_dx, $dy )
135 :     $treetext = join( "\n", text_plot_newick( $tree3, 80, 2, 2 ) );
136 :     }
137 :     close( TREE );
138 :     }
139 :     print "=======================================================================\n\n\n";
140 :     print "$treetext\n";
141 :     }
142 :    
143 :     if ($save)
144 :     {
145 :     system "cp $file.fasta \"$save/seqs\"";
146 :     system "cp $file.aln \"$save/aln\"";
147 :     system "cp $file.dnd \"$save/tree\"";
148 :     ( $tree && -s "$file.ph" ) and system "cp $file.ph \"$save/tree2\"";
149 :     }
150 :    
151 :     unlink("$file.fasta","$file.aln","$file.dnd");
152 : golsen 1.2 # -s "$file.ph" and unlink("$file.ph");
153 : golsen 1.1
154 :     1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3