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
|