f0e9f737dc951707446bf9c99a7de8784e18cfb1
[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`
69   * Phylip non-interleaved: `:phylipnon`
70   * MSF: `:msf`
71   * Molphy: `:molphy`
72
73
74 For example, the following writes in Phylip's non-interleaved format:
75
76 {{{
77 f.write(align.output(:phylipnon))
78 }}}
79
80
81 == Calculating Multiple Sequence Alignments ==
82
83 !BioRuby can be used to execute a variety of multiple sequence alignment
84 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]). 
85 In the following, examples for using the MAFFT and Muscle are shown.
86
87
88 === MAFFT ===
89
90 The following example uses the MAFFT program to align four sequences
91 and then prints the result to the screen.
92 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. 
93
94 {{{
95 #!/usr/bin/env ruby
96 require 'bio'
97
98 # 'seqs' is either an array of sequences or a multiple sequence 
99 # alignment. In general this is read in from a file as described in ?.
100 # For the purpose of this tutorial, it is generated in code.
101 seqs = ["KMLFGVVFFFGG",
102         "LMGGHHF",
103         "GKKKKGHHHGHRRRGR",
104         "KKKKGHHHGHRRRGR"] 
105
106
107 # Calculates the alignment using the MAFFT program on the local
108 # machine with options '--maxiterate 1000 --localpair'
109 # and stores the result in 'report'.
110 options = ['--maxiterate', '1000', '--localpair']
111 mafft = Bio::MAFFT.new('path/to/mafft', options)
112 report = mafft.query_align(seqs)
113
114 # Accesses the actual alignment.
115 align = report.alignment
116
117 # Prints each sequence to the console.
118 align.each { |s| puts s.to_s }
119
120 }}}
121
122 References:
123
124  * Katoh, Toh (2008) "Recent developments in the MAFFT multiple sequence alignment program" Briefings in Bioinformatics 9:286-298 
125
126  * Katoh, Toh 2010 (2010) "Parallelization of the MAFFT multiple sequence alignment program" Bioinformatics 26:1899-1900 
127
128
129
130 === Muscle ===
131
132 {{{
133 #!/usr/bin/env ruby
134 require 'bio'
135
136 # 'seqs' is either an array of sequences or a multiple sequence 
137 # alignment. In general this is read in from a file as described in ?.
138 # For the purpose of this tutorial, it is generated in code.
139 seqs = ["KMLFGVVFFFGG",
140         "LMGGHHF",
141         "GKKKKGHHHGHRRRGR",
142         "KKKKGHHHGHRRRGR"] 
143
144 # Calculates the alignment using the Muscle program on the local
145 # machine with options '-quiet -maxiters 64'
146 # and stores the result in 'report'.
147 options = ['-quiet', '-maxiters', '64']
148 muscle = Bio::Muscle.new('path/to/muscle', options)
149 report = muscle.query_align(seqs)
150
151 # Accesses the actual alignment.
152 align = report.alignment
153
154 # Prints each sequence to the console.
155 align.each { |s| puts s.to_s }
156
157 }}}
158
159 References:
160
161  * Edgar, R.C. (2004) "MUSCLE: multiple sequence alignment with high accuracy and high throughput" Nucleic Acids Res 32(5):1792-1797
162
163 === Other Programs ===
164
165 [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. 
166
167
168 == Manipulating Multiple Sequence Alignments ==
169
170 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.
171
172
173 _... to be done_
174
175 {{{
176 #!/usr/bin/env ruby
177 require 'bio'
178
179 }}}
180
181
182 ----
183
184 = Phylogenetic Trees =
185
186 == Phylogenetic Tree Input and Output ==
187
188 === Reading in of Phylogenetic Trees ===
189
190 _... to be done_
191
192 {{{
193 #!/usr/bin/env ruby
194 require 'bio'
195
196 }}}
197
198 Also, see: https://www.nescent.org/wg_phyloinformatics/BioRuby_PhyloXML_HowTo_documentation
199
200
201
202 === Writing of Phylogenetic Trees ===
203
204 _... to be done_
205
206 {{{
207 #!/usr/bin/env ruby
208 require 'bio'
209
210 }}}
211
212 Also, see: https://www.nescent.org/wg_phyloinformatics/BioRuby_PhyloXML_HowTo_documentation
213
214
215
216 == Phylogenetic Inference ==
217
218 _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..._
219
220 _What about pairwise distance calculation?_
221
222
223
224 == Maximum Likelihood ==
225
226 === RAxML ===
227
228 _... to be done_
229
230 {{{
231 #!/usr/bin/env ruby
232 require 'bio'
233
234 }}}
235
236
237 === PhyML ===
238
239 _... to be done_
240
241 {{{
242 #!/usr/bin/env ruby
243 require 'bio'
244
245 }}}
246
247 == Pairwise Distance Based Methods ==
248
249 === FastME ===
250
251 _... to be done_
252
253 {{{
254 #!/usr/bin/env ruby
255 require 'bio'
256
257 }}}
258
259
260
261 === PHYLIP? ===
262
263
264
265 == Support Calculation? ==
266
267 === Bootstrap Resampling? ===
268
269
270 ----
271
272 = Analyzing Phylogenetic Trees =
273
274 == PAML ==
275
276
277 == Gene Duplication Inference ==
278
279 _need to further test and then import GSoC 'SDI' work..._
280
281
282 == Others? ==
283
284
285 ----
286
287 = Putting It All Together =
288
289 Example of a small "pipeline"-type program running a mininal phyogenetic analysis: starting with a set of sequences and ending with a phylogenetic tree.
290