in progress
[jalview.git] / forester / ruby / evoruby / exe / select_same_gn.rb
1 #!/usr/local/bin/ruby -w
2
3
4 require 'lib/evo/sequence/sequence'
5 require 'lib/evo/msa/msa'
6 require 'lib/evo/msa/msa_factory'
7 require 'lib/evo/io/writer/fasta_writer'
8 require 'lib/evo/io/parser/fasta_parser'
9
10
11 module Evoruby
12
13   input = ARGV[ 0 ]
14   f = MsaFactory.new()
15
16   msa = nil
17
18   begin
19     msa = f.create_msa_from_file( input, FastaParser.new() )
20   rescue Exception => e
21     puts "error: " + e.to_s
22     exit
23   end
24
25   gn_to_seqs = Hash.new
26   unique_genes_msa = Msa.new
27   longest_non_unique_genes_msa = Msa.new
28   gn_re = /GN=(\S+)/
29   fragment_re = /fragment/i
30
31   frag_counter = 0
32
33   for i in 0 ... msa.get_number_of_seqs()
34     seq = msa.get_sequence( i )
35     name = seq.get_name
36
37     if fragment_re.match( name )
38       frag_counter += 1
39       next
40     end
41     gn_match = gn_re.match( name )
42     unless gn_match
43       puts "no match in " + name
44       exit
45     end
46     gn = gn_match[1]
47     unless gn_to_seqs.has_key?(gn)
48       gn_to_seqs[gn] = Msa.new
49     end
50     gn_to_seqs[gn].add_sequence(seq)
51   end
52
53   puts "Sequeunces ignored because \"fragment\" in desc: " + frag_counter.to_s
54   puts
55   puts
56
57   counter = 1
58   gn_to_seqs.each_pair do |gene,seqs|
59     if seqs.get_number_of_seqs > 1
60       puts counter.to_s + ": " + gene
61       puts seqs.to_fasta
62       puts
63       puts
64       counter += 1
65       longest = 0
66       longest_seq = nil
67       for j in 0 ... seqs.get_number_of_seqs()
68         current = seqs.get_sequence( j )
69         if current.get_length > longest
70           longest =  current.get_length
71           longest_seq = current
72         end
73       end
74       longest_non_unique_genes_msa.add_sequence(longest_seq)
75     else
76       unique_genes_msa.add_sequence( seqs.get_sequence( 0 ) )
77     end
78   end
79   w = FastaWriter.new
80   w.write(unique_genes_msa, "uniques.fasta")
81   w.write(longest_non_unique_genes_msa, "non_uniques_longest.fasta")
82 end