3e403479d379b8eaffd5ea05d909260ed9e2e5b0
[jalview.git] / wiki / PhyloBioRuby.wiki
1 #summary Tutorial for multiple sequence alignments and phylogenetic methods in BioRuby -- under development!
2
3
4
5 = Introduction =
6
7 Under development!
8
9 Tutorial for multiple sequence alignments and phylogenetic methods in [http://bioruby.open-bio.org/ BioRuby].
10
11 Eventually, this is expected to be placed on the official !BioRuby page.
12
13 Author: [http://www.cmzmasek.net/ Christian M Zmasek], Sanford-Burnham Medical Research Institute
14
15  
16 Copyright (C) 2011 Christian M Zmasek
17
18
19 = Multiple Sequence Alignments =
20
21
22 == Multiple Sequence Alignment Input and Output ==
23
24 === Reading in a Multiple Sequence Alignment from a File ===
25
26 The follow example shows how to read in a *ClustalW*-formatted multiple sequence alignment.
27
28 {{{
29 #!/usr/bin/env ruby
30 require 'bio'
31
32 # Reads in a ClustalW-formatted multiple sequence alignment
33 # from a file named "infile_clustalw.aln" and stores it in 'report'.
34 report = Bio::ClustalW::Report.new(File.read('infile_clustalw.aln'))
35
36 # Accesses the actual alignment.
37 align = report.alignment
38
39 # Goes through all sequences in 'align' and prints the
40 # actual molecular sequence.
41 align.each do |entry|
42   puts entry.seq
43 end
44 }}}
45
46  
47
48 === Writing a Multiple Sequence Alignment to a File ===
49
50
51 The follow example shows how to writing a multiple sequence alignment in *FASTA*-format:
52
53 {{{
54 #!/usr/bin/env ruby
55 require 'bio'
56
57 # Creates a new file named "outfile.fasta" and writes
58 # multiple sequence alignment 'align' to it in fasta format.
59 File.open('outfile.fasta', 'w') do |f|
60   f.write(align.output(:fasta))
61 end
62 }}}
63
64 The following constants determine the output format
65
66   * ClustalW: `:clustal`
67   * FASTA:    `:fasta`
68   * PHYLIP interleaved: `:phylip` (will truncate sequence names to no more than 10 characters)
69   * PHYLIP non-interleaved: `:phylipnon` (will truncate sequence names to no more than 10 characters)
70   * MSF: `:msf`
71   * Molphy: `:molphy`
72
73
74 For example, the following writes iPHYLIP's non-interleaved format:
75
76 {{{
77 f.write(align.output(:phylipnon))
78 }}}
79
80
81
82 == Calculating Multiple Sequence Alignments ==
83
84 !BioRuby can be used to execute a variety of multiple sequence alignment
85 programs (such as [http://mafft.cbrc.jp/alignment/software/ MAFFT], [http://probcons.stanford.edu/ Probcons], [http://www.clustal.org/ ClustalW], [http://www.drive5.com/muscle/ Muscle], and [http://www.tcoffee.org/Projects_home_page/t_coffee_home_page.html T-Coffee]). 
86 In the following, examples for using the MAFFT and Muscle are shown.
87
88
89 === MAFFT ===
90
91 The following example uses the MAFFT program to align four sequences
92 and then prints the result to the screen.
93 Please note that if the path to the MAFFT executable is properly set `mafft=Bio::MAFFT.new(options)` can be used instead of explicitly indicating the path as in the example. 
94
95 {{{
96 #!/usr/bin/env ruby
97 require 'bio'
98
99 # 'seqs' is either an array of sequences or a multiple sequence 
100 # alignment. In general this is read in from a file as described in ?.
101 # For the purpose of this tutorial, it is generated in code.
102 seqs = ["KMLFGVVFFFGG",
103         "LMGGHHF",
104         "GKKKKGHHHGHRRRGR",
105         "KKKKGHHHGHRRRGR"] 
106
107
108 # Calculates the alignment using the MAFFT program on the local
109 # machine with options '--maxiterate 1000 --localpair'
110 # and stores the result in 'report'.
111 options = ['--maxiterate', '1000', '--localpair']
112 mafft = Bio::MAFFT.new('path/to/mafft', options)
113 report = mafft.query_align(seqs)
114
115 # Accesses the actual alignment.
116 align = report.alignment
117
118 # Prints each sequence to the console.
119 align.each { |s| puts s.to_s }
120
121 }}}
122
123 References:
124
125  * Katoh, Toh (2008) "Recent developments in the MAFFT multiple sequence alignment program" Briefings in Bioinformatics 9:286-298 
126
127  * Katoh, Toh 2010 (2010) "Parallelization of the MAFFT multiple sequence alignment program" Bioinformatics 26:1899-1900 
128
129
130
131 === Muscle ===
132
133 {{{
134 #!/usr/bin/env ruby
135 require 'bio'
136
137 # 'seqs' is either an array of sequences or a multiple sequence 
138 # alignment. In general this is read in from a file as described in ?.
139 # For the purpose of this tutorial, it is generated in code.
140 seqs = ["KMLFGVVFFFGG",
141         "LMGGHHF",
142         "GKKKKGHHHGHRRRGR",
143         "KKKKGHHHGHRRRGR"] 
144
145 # Calculates the alignment using the Muscle program on the local
146 # machine with options '-quiet -maxiters 64'
147 # and stores the result in 'report'.
148 options = ['-quiet', '-maxiters', '64']
149 muscle = Bio::Muscle.new('path/to/muscle', options)
150 report = muscle.query_align(seqs)
151
152 # Accesses the actual alignment.
153 align = report.alignment
154
155 # Prints each sequence to the console.
156 align.each { |s| puts s.to_s }
157
158 }}}
159
160 References:
161
162  * Edgar, R.C. (2004) "MUSCLE: multiple sequence alignment with high accuracy and high throughput" Nucleic Acids Res 32(5):1792-1797
163
164 === Other Programs ===
165
166 [http://probcons.stanford.edu/ Probcons], [http://www.clustal.org/ ClustalW], and [http://www.tcoffee.org/Projects_home_page/t_coffee_home_page.html T-Coffee] can be used in the same manner as the programs above. 
167
168
169 == Manipulating Multiple Sequence Alignments ==
170
171 Oftentimes, multiple sequence to be used for phylogenetic inference are 'cleaned up' in some manner. For instance, some researchers prefer to delete columns with more than 50% gaps. The following code is an example of how to do that in !BioRuby.
172
173
174 _... to be done_
175
176 {{{
177 #!/usr/bin/env ruby
178 require 'bio'
179
180 }}}
181
182
183 ----
184
185 = Phylogenetic Trees =
186
187 == Phylogenetic Tree Input and Output ==
188
189 === Reading in of Phylogenetic Trees ===
190
191 _... to be done_
192
193 {{{
194 #!/usr/bin/env ruby
195 require 'bio'
196
197 }}}
198
199 Also, see: https://www.nescent.org/wg_phyloinformatics/BioRuby_PhyloXML_HowTo_documentation
200
201
202
203 === Writing of Phylogenetic Trees ===
204
205 _... to be done_
206
207 {{{
208 #!/usr/bin/env ruby
209 require 'bio'
210
211 }}}
212
213 Also, see: https://www.nescent.org/wg_phyloinformatics/BioRuby_PhyloXML_HowTo_documentation
214
215
216
217 == Phylogenetic Inference ==
218
219 _Currently !BioRuby does not contain wrappers for phylogenetic inference programs, thus I am progress of writing a RAxML wrapper followed by a wrapper for FastME..._
220
221 _What about pairwise distance calculation?_
222
223
224
225 == Maximum Likelihood ==
226
227 === RAxML ===
228
229 _... to be done_
230
231 {{{
232 #!/usr/bin/env ruby
233 require 'bio'
234
235 }}}
236
237
238 === PhyML ===
239
240 _... to be done_
241
242 {{{
243 #!/usr/bin/env ruby
244 require 'bio'
245
246 }}}
247
248 == Pairwise Distance Based Methods ==
249
250 === FastME ===
251
252 _... to be done_
253
254 {{{
255 #!/usr/bin/env ruby
256 require 'bio'
257
258 }}}
259
260
261
262 === PHYLIP? ===
263
264
265
266 == Support Calculation? ==
267
268 === Bootstrap Resampling? ===
269
270
271 ----
272
273 = Analyzing Phylogenetic Trees =
274
275 == PAML ==
276
277
278 == Gene Duplication Inference ==
279
280 _need to further test and then import GSoC 'SDI' work..._
281
282
283 == Others? ==
284
285
286 ----
287
288 = Putting It All Together =
289
290 Example of a small "pipeline"-type program running a mininal phyogenetic analysis: starting with a set of sequences and ending with a phylogenetic tree.
291