--- /dev/null
+#
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+
+class HmmscanParser
+
+ def initialize file
+ @file = file
+ end
+
+ def parse
+ results = []
+ File.open( @file ).each do | line |
+ line.strip!
+ if !line.empty? && line[ 0 ] != "#"
+ results << parse_line( line )
+ end
+ end
+ results
+ end
+
+ def parse_line( line )
+ # tn acc tlen query acc qlen Evalue score bias # of c-E i-E score bias hf ht af at ef et acc desc
+ # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
+ 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+(.*)/
+
+ r = HmmscanResult.new
+
+ r.model = $1
+ r.tlen = $3.to_i
+ r.query = $4
+ r.qlen = $6.to_i
+
+ r.fs_e_value = $7.to_f
+ r.fs_score = $8.to_f
+
+ r.number = $10.to_i
+ r.out_of = $11.to_i
+
+ r.c_e_value = $12.to_f
+ r.i_e_value = $13.to_f
+ r.score = $14.to_f
+
+ r.hmm_from = $16.to_i
+ r.hmm_to = $17.to_i
+
+ r.ali_from = $18.to_i
+ r.ali_to = $19.to_i
+
+ r.env_from = $20.to_i
+ r.env_to = $21.to_i
+
+ if r.number > r.out_of || r.hmm_from > r.hmm_to || r.ali_from > r.ali_to || r.env_from > r.env_to
+ raise IOError, "illogical format: " + line
+ end
+
+ r
+ else
+ raise IOError, "illegal format: " + line
+ end
+ end
+end
+
+class HmmscanResult
+
+ attr_accessor :model
+ attr_accessor :tlen
+ attr_accessor :query
+ attr_accessor :qlen
+ attr_accessor :fs_e_value
+ attr_accessor :fs_score
+ attr_accessor :number
+ attr_accessor :out_of
+ attr_accessor :c_e_value
+ attr_accessor :i_e_value
+ attr_accessor :score
+ attr_accessor :hmm_from
+ attr_accessor :hmm_to
+ attr_accessor :ali_from
+ attr_accessor :ali_to
+ attr_accessor :env_from
+ attr_accessor :env_to
+
+end