]> git.donarmstrong.com Git - biopieces.git/blob - bp_bin/find_SNPs
2b40f32d408d55abcea7b436015ec9b5c2ec6e9c
[biopieces.git] / bp_bin / find_SNPs
1 #!/usr/bin/env ruby
2
3 # Copyright (C) 2007-2011 Martin A. Hansen.
4
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
19 # http://www.gnu.org/copyleft/gpl.html
20
21 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
22
23 # This program is part of the Biopieces framework (www.biopieces.org).
24
25 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DESCRIPTION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
26
27 # Find SNPs in records of SAM type in the stream.
28
29 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
30
31
32 require 'maasha/biopieces'
33 require 'pp'
34
35 options = Biopieces.options_parse(ARGV)
36
37 snp_hash = Hash.new { |h,k| h[k] = Hash.new { |h,k| h[k] = Hash.new(0) } }
38
39 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
40   input.each_record do |record|
41     output.puts record
42
43     if record.has_key? :ALIGN  and
44        record.has_key? :S_ID   and
45        record.has_key? :S_BEG  and
46        record[:ALIGN] != '.'
47
48        record[:ALIGN].split(',').each do |snp|
49          pos, event = snp.split(':')
50
51          pos = pos.to_i + record[:S_BEG].to_i
52
53          snp_hash[record[:S_ID].to_sym][pos][event.to_sym] += 1
54        end
55     end
56   end
57
58   snp_hash.each_pair do |s_id, pos_hash|
59     new_record = {}
60     new_record[:REC_TYPE] = 'SNP'
61     new_record[:S_ID]     = s_id
62
63     pos_hash.each_pair do |pos, event_hash|
64       new_record[:POS] = pos
65
66       event_hash.each_pair do |event, count|
67         new_record[:EVENT]     = event
68         new_record[:SNP_COUNT] = count
69
70         before, after = event.to_s.split('>')
71
72         if before == '-'
73           type = 'INSERTION'
74         elsif after == '-'
75           type = 'DELETION'
76         else
77           type = 'MISMATCH'
78         end
79          new_record[:TYPE] = type
80       end
81
82       output.puts new_record
83     end
84   end
85 end
86
87
88 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
89
90
91 __END__