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