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