in progress
[jalview.git] / forester / ruby / evoruby / lib / evo / io / parser / uniprot_parser.rb
1 #
2 # = lib/evo/io/parser/uniprot_parser - UniprotParser class
3 #
4 # Copyright::  Copyright (C) 2012 Christian M. Zmasek
5 # License::    GNU Lesser General Public License (LGPL)
6 #
7 # $Id:  Exp $
8 #
9 # last modified: 121003
10
11
12 #require 'iconv'
13
14
15 require 'lib/evo/util/util'
16
17 module Evoruby
18
19   class UniprotParser
20
21     ID = "ID"
22     DE = "DE"
23     DR = "DR"
24     LAST = '//'
25
26     def initialize file
27       Util.check_file_for_readability file
28       @file = file
29     end
30
31
32     def parse( ids )
33       entries = Hash.new
34       de = []
35       dr = []
36       id = nil
37       File.open( @file ).each do | line |
38         if line.index( ID ) == 0
39           #   puts line
40           ids.each do | i |
41             #puts " " + i
42             if line.include?( i ) && line.split[ 1 ] == i
43               id = i
44               break
45             end
46           end
47         end
48         if id != nil
49           if line.include?( LAST ) && line.index( LAST ) == 0
50             e = UniprotEntry.new
51             e.de = de
52             e.dr = dr
53             entries[ id ] = e
54             puts id
55             id = nil
56             de = []
57             dr = []
58           else
59             if line.include?( DE ) && line.index( DE ) == 0
60               add( line, de )
61             elsif line.include?( DR ) && line.index( DR ) == 0
62               add( line, dr )
63             end
64           end
65         end
66       end
67       entries
68     end
69
70     private
71
72     def add( line, ary )
73       line =~/[A-Z]{2}\s+(.+)/
74       ary << $1
75     end
76
77
78   end # class UniprotParser
79
80   class UniprotEntry
81
82     attr_accessor :id
83     attr_accessor :ac
84     attr_accessor :de
85     attr_accessor :gn
86     attr_accessor :os
87     attr_accessor :ox
88     attr_accessor :dr
89     attr_accessor :pe
90     attr_accessor :kw
91
92   end
93
94
95 end # module Evoruby