pdb
[jalview.git] / forester / ruby / evoruby / lib / evo / io / parser / hmmscan_parser.rb
1 #
2 # To change this template, choose Tools | Templates
3 # and open the template in the editor.
4
5
6 class HmmscanParser
7
8   def initialize file
9     @file = file
10   end
11
12   def parse
13     results = []
14     File.open( @file ).each do | line |
15       line.strip!
16       if !line.empty? && line[ 0 ] != "#"
17         results << parse_line( line )
18       end
19     end
20     results
21   end
22
23   def parse_line( line )
24     #         tn      acc     tlen    query   acc     qlen    Evalue  score   bias    #       of      c-E     i-E     score   bias    hf      ht      af      at      ef      et      acc     desc
25     #         1       2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17      18      19      20      21      22      23
26     if line =~ /^(\S+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(.*)/
27
28       r = HmmscanResult.new
29
30       r.model      = $1
31       r.tlen       = $3.to_i
32       r.query      = $4
33       r.qlen       = $6.to_i
34
35       r.fs_e_value = $7.to_f
36       r.fs_score   = $8.to_f
37
38       r.number     = $10.to_i
39       r.out_of     = $11.to_i
40
41       r.c_e_value  = $12.to_f
42       r.i_e_value  = $13.to_f
43       r.score      = $14.to_f
44
45       r.hmm_from   = $16.to_i
46       r.hmm_to     = $17.to_i
47
48       r.ali_from   = $18.to_i
49       r.ali_to     = $19.to_i
50
51       r.env_from   = $20.to_i
52       r.env_to     = $21.to_i
53
54       if r.number > r.out_of || r.hmm_from > r.hmm_to || r.ali_from > r.ali_to || r.env_from > r.env_to
55         raise IOError, "illogical format: " + line
56       end
57
58       r
59     else
60       raise IOError, "illegal format: " + line
61     end
62   end
63 end
64
65 class HmmscanResult
66
67   attr_accessor :model
68   attr_accessor :tlen
69   attr_accessor :query
70   attr_accessor :qlen
71   attr_accessor :fs_e_value
72   attr_accessor :fs_score
73   attr_accessor :number
74   attr_accessor :out_of
75   attr_accessor :c_e_value
76   attr_accessor :i_e_value
77   attr_accessor :score
78   attr_accessor :hmm_from
79   attr_accessor :hmm_to
80   attr_accessor :ali_from
81   attr_accessor :ali_to
82   attr_accessor :env_from
83   attr_accessor :env_to
84
85 end