File: demo_blast_report.rb

package info (click to toggle)
ruby-bio 2.0.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,108 kB
  • sloc: ruby: 68,331; perl: 13; makefile: 11; sh: 1
file content (285 lines) | stat: -rw-r--r-- 10,325 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
#
# = sample/demo_blast_report.rb - demonstration of Bio::Blast::Report, Bio::Blast::Default::Report, and Bio::Blast::WU::Report
# 
# Copyright::  Copyright (C) 2003 Toshiaki Katayama <k@bioruby.org>
# Copyright::  Copyright (C) 2003-2006,2008-2009 Naohisa Goto <ng@bioruby.org>
# License::    The Ruby License
#
#
# == Description
#
# Demonstration of Bio::Blast::Report (NCBI BLAST XML format parser),
# Bio::Blast::Default::Report (NCBI BLAST default (-m 0) format parser),
# and Bio::Blast::WU::Report (WU-BLAST default format parser).
#
# == Usage
#
# Specify files containing BLAST results.
#
#  $ ruby demo_blast_report.rb files...
#
# Example usage using test data:
#
#  $ ruby -Ilib sample/demo_blast_report.rb test/data/blast/b0002.faa.m7
#  $ ruby -Ilib sample/demo_blast_report.rb test/data/blast/b0002.faa.m0
#
# == Development information
#
# The code was moved from lib/bio/appl/blast/report.rb,
# lib/bio/appl/blast/format0.rb, and lib/bio/appl/blast/wublast.rb,
# and modified.
#

require 'bio'

# dummpy class to return specific object
class Dummy
  def initialize(obj)
    @obj = obj
  end
  def size
    @obj
  end
  def inspect
    @obj.inspect
  end
end #class Dummy

# wrapper class to ignore error
class Wrapper
  def initialize(obj)
    @obj = obj
  end
  def class
    @obj.class
  end
  def respond_to?(*arg)
    @obj.respond_to?(*arg)
  end
  def method_missing(meth, *arg, &block)
    begin
      @obj.__send__(meth, *arg, &block)
    rescue NoMethodError => evar
      Dummy.new(evar)
    end
  end
end #class Wrapper

def wrap(obj)
  Wrapper.new(obj)
end

# -m0: not defined in Bio::Blast::Default::Report ???
# +m0: newly added in Bio::Blast::Default::Report ???
# -WU: not defined in Bio::Blast::WU::Report ???
# +WU: newly added in Bio::Blast::WU::Report ???

Bio::FlatFile.open(ARGF) do |ff|
  puts "Detected file format: #{ff.dbclass}"
  unless ff.dbclass then
    ff.dbclass = Bio::Blast::Report
    puts "Input data may be tab-delimited format (-m 8)."
  end
  ff.each do |rep|
  rep = wrap(rep)

  #print "# === Bio::Blast::Default::Report\n"
  print "# === #{rep.class}\n"
  puts
  print "  rep.program           #=> "; p rep.program
  print "  rep.version           #=> "; p rep.version
  print "  rep.reference         #=> "; p rep.reference
  print "  rep.notice       [WU] #=> "; p rep.notice              #+WU
  print "  rep.db                #=> "; p rep.db
  print "  rep.query_id          #=> "; p rep.query_id        #-m0,-WU
  print "  rep.query_def         #=> "; p rep.query_def
  print "  rep.query_len         #=> "; p rep.query_len
  #puts
  print "  rep.version_number    #=> "; p rep.version_number  #+m0,+WU
  print "  rep.version_date      #=> "; p rep.version_date    #+m0,+WU
  puts

  print "# === Parameters\n"
  #puts
  print "  rep.parameters        #=> "; p rep.parameters      #-m0
  puts
  print "  rep.matrix            #=> "; p rep.matrix              #-WU
  print "  rep.expect            #=> "; p rep.expect
  print "  rep.inclusion         #=> "; p rep.inclusion       #-m0,-WU
  print "  rep.sc_match          #=> "; p rep.sc_match            #-WU
  print "  rep.sc_mismatch       #=> "; p rep.sc_mismatch         #-WU
  print "  rep.gap_open          #=> "; p rep.gap_open            #-WU
  print "  rep.gap_extend        #=> "; p rep.gap_extend          #-WU
  print "  rep.filter            #=> "; p rep.filter          #-m0,-WU
  print "  rep.pattern           #=> "; p rep.pattern             #-WU
  print "  rep.entrez_query      #=> "; p rep.entrez_query    #-m0
  #puts
  print "  rep.pattern_positions #=> "; p rep.pattern_positions #+m0
  puts

  print "# === Statistics (last iteration's)\n"
  #puts
  print "  rep.statistics        #=> "; p rep.statistics      #-m0,-WU
  puts
  print "  rep.db_num            #=> "; p rep.db_num
  print "  rep.db_len            #=> "; p rep.db_len
  print "  rep.hsp_len           #=> "; p rep.hsp_len         #-m0,-WU
  print "  rep.eff_space         #=> "; p rep.eff_space           #-WU
  print "  rep.kappa             #=> "; p rep.kappa               #-WU
  print "  rep.lambda            #=> "; p rep.lambda              #-WU
  print "  rep.entropy           #=> "; p rep.entropy             #-WU
  puts
  print "  rep.num_hits          #=> "; p rep.num_hits        #+m0
  print "  rep.gapped_kappa      #=> "; p rep.gapped_kappa    #+m0
  print "  rep.gapped_lambda     #=> "; p rep.gapped_lambda   #+m0
  print "  rep.gapped_entropy    #=> "; p rep.gapped_entropy  #+m0
  print "  rep.posted_date       #=> "; p rep.posted_date     #+m0
  puts

  print "# === Message (last iteration's)\n"
  puts
  print "  rep.message           #=> "; p rep.message             #-WU
  #puts
  print "  rep.converged?        #=> "; p rep.converged?      #+m0
  puts

  print "# === Warning messages\n"
  print "  rep.warnings     [WU] #=> "; p rep.warnings            #+WU

  print "# === Iterations\n"
  puts
  print "  rep.itrerations.each do |itr|\n"
  puts

  rep.iterations.each do |itr|
  itr = wrap(itr)
      
  #print "# --- Bio::Blast::Default::Report::Iteration\n"
  print "# --- #{itr.class}\n"
  puts

  print "    itr.num             #=> "; p itr.num
  print "    itr.statistics      #=> "; p itr.statistics      #-m0,-WU
  print "    itr.warnings   [WU] #=> "; p itr.warnings            #+WU
  print "    itr.message         #=> "; p itr.message
  print "    itr.hits.size       #=> "; p itr.hits.size
  #puts
  print "    itr.hits_newly_found.size    #=> "; p((itr.hits_newly_found.size rescue nil)); #+m0
  print "    itr.hits_found_again.size    #=> "; p((itr.hits_found_again.size rescue nil)); #+m0
  if itr.respond_to?(:hits_for_pattern) and itr.hits_for_pattern then #+m0
  itr.hits_for_pattern.each_with_index do |hp, hpi|
  print "    itr.hits_for_pattern[#{hpi}].size #=> "; p hp.size;
  end
  end
  print "    itr.converged?      #=> "; p itr.converged?      #+m0,+WU
  puts

  print "    itr.hits.each do |hit|\n"
  puts

  itr.hits.each_with_index do |hit, i|
  hit = wrap(hit)

  #print "# --- Bio::Blast::Default::Report::Hit"
  print "# --- #{hit.class}"
  print " ([#{i}])\n"
  puts

  print "      hit.num           #=> "; p hit.num             #-m0,-WU
  print "      hit.hit_id        #=> "; p hit.hit_id          #-m0,-WU
  print "      hit.len           #=> "; p hit.len
  print "      hit.definition    #=> "; p hit.definition
  print "      hit.accession     #=> "; p hit.accession       #-m0,-WU
  #puts
  print "      hit.found_again?  #=> "; p hit.found_again?    #+m0,+WU
  print "      hit.score    [WU] #=> "; p hit.score               #+WU
  print "      hit.pvalue   [WU] #=> "; p hit.pvalue              #+WU
  print "      hit.n_number [WU] #=> "; p hit.n_number            #+WU

  print "        --- compatible/shortcut ---\n"
  print "      hit.query_id      #=> "; p hit.query_id        #-m0,-WU
  print "      hit.query_def     #=> "; p hit.query_def       #-m0,-WU
  print "      hit.query_len     #=> "; p hit.query_len       #-m0,-WU
  print "      hit.target_id     #=> "; p hit.target_id       #-m0,-WU
  print "      hit.target_def    #=> "; p hit.target_def
  print "      hit.target_len    #=> "; p hit.target_len

  print "            --- first HSP's values (shortcut) ---\n"
  print "      hit.evalue        #=> "; p hit.evalue
  print "      hit.bit_score     #=> "; p hit.bit_score
  print "      hit.identity      #=> "; p hit.identity
  print "      hit.overlap       #=> "; p hit.overlap         #-m0,-WU

  print "      hit.query_seq     #=> "; p hit.query_seq
  print "      hit.midline       #=> "; p hit.midline
  print "      hit.target_seq    #=> "; p hit.target_seq

  print "      hit.query_start   #=> "; p hit.query_start
  print "      hit.query_end     #=> "; p hit.query_end
  print "      hit.target_start  #=> "; p hit.target_start
  print "      hit.target_end    #=> "; p hit.target_end
  print "      hit.lap_at        #=> "; p hit.lap_at
  print "            --- first HSP's vaules (shortcut) ---\n"
  print "        --- compatible/shortcut ---\n"

  puts
  print "      hit.hsps.size     #=> "; p hit.hsps.size
  if hit.hsps.size == 0 then
  puts  "          (HSP not found: please see blastall's -b and -v options)"
  puts
  else

  puts
  print "      hit.hsps.each do |hsp|\n"
  puts

  hit.hsps.each_with_index do |hsp, j|
  hsp = wrap(hsp)

  #print "# --- Bio::Blast::Default::Report::Hsp"
  print "# --- #{hsp.class}"
  print " ([#{j}])\n"
  puts
  print "        hsp.num         #=> "; p hsp.num             #-m0,-WU
  print "        hsp.bit_score   #=> "; p hsp.bit_score 
  print "        hsp.score       #=> "; p hsp.score
  print "        hsp.evalue      #=> "; p hsp.evalue
  print "        hsp.identity    #=> "; p hsp.identity
  print "        hsp.gaps        #=> "; p hsp.gaps
  print "        hsp.positive    #=> "; p hsp.positive
  print "        hsp.align_len   #=> "; p hsp.align_len
  print "        hsp.density     #=> "; p hsp.density         #-m0,-WU
  print "        hsp.pvalue  [WU]#=> "; p hsp.pvalue              #+WU
  print "        hsp.p_sum_n [WU]#=> "; p hsp.p_sum_n             #+WU

  print "        hsp.query_frame #=> "; p hsp.query_frame
  print "        hsp.query_from  #=> "; p hsp.query_from
  print "        hsp.query_to    #=> "; p hsp.query_to

  print "        hsp.hit_frame   #=> "; p hsp.hit_frame
  print "        hsp.hit_from    #=> "; p hsp.hit_from
  print "        hsp.hit_to      #=> "; p hsp.hit_to

  print "        hsp.pattern_from#=> "; p hsp.pattern_from    #-m0,-WU
  print "        hsp.pattern_to  #=> "; p hsp.pattern_to      #-m0,-WU

  print "        hsp.qseq        #=> "; p hsp.qseq
  print "        hsp.midline     #=> "; p hsp.midline
  print "        hsp.hseq        #=> "; p hsp.hseq
  puts
  print "        hsp.percent_identity  #=> "; p hsp.percent_identity
  print "        hsp.mismatch_count    #=> "; p hsp.mismatch_count   #-m0,-WU
  #
  print "        hsp.query_strand      #=> "; p hsp.query_strand     #+m0,+WU
  print "        hsp.hit_strand        #=> "; p hsp.hit_strand       #+m0,+WU
  print "        hsp.percent_positive  #=> "; p hsp.percent_positive #+m0,+WU
  print "        hsp.percent_gaps      #=> "; p hsp.percent_gaps     #+m0,+WU
  puts

  end #each
  end #if hit.hsps.size == 0
  end
  end
  end #ff.each
end #Bio::FlatFile.open