]> git.donarmstrong.com Git - biopieces.git/blob - bp_bin/indel_seq
8dd606dd3681e4a8b2a5c1792866c857be71cc0d
[biopieces.git] / bp_bin / indel_seq
1 #!/usr/bin/env perl -w
2
3 # Copyright (C) 2007-2009 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 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DESCRIPTION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
23
24 # Introduce indels into sequences in the stream.
25
26 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
27
28
29 use strict;
30 use Maasha::Common;
31 use Maasha::Biopieces;
32 use Maasha::Seq;
33
34
35 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
36
37
38 my ( $options, $in, $out, $insertions, $deletions, $seq_len, $record );
39
40 $options = Maasha::Biopieces::parse_options(
41     [
42         { long => 'insertions',         short => 'i', type => 'uint',  mandatory => 'no', default => 0, allowed => undef, disallowed => undef },
43         { long => 'insertions_percent', short => 'P', type => 'float', mandatory => 'no', default => 0, allowed => undef, disallowed => undef },
44         { long => 'deletions',          short => 'd', type => 'uint',  mandatory => 'no', default => 0, allowed => undef, disallowed => undef },
45         { long => 'deletions_percent',  short => 'D', type => 'float', mandatory => 'no', default => 0, allowed => undef, disallowed => undef },
46     ]   
47 );
48
49 $in  = Maasha::Biopieces::read_stream( $options->{ "stream_in" } );
50 $out = Maasha::Biopieces::write_stream( $options->{ "stream_out" } );
51
52 while ( $record = Maasha::Biopieces::get_record( $in ) ) 
53 {
54     if ( $record->{ "SEQ" } )
55     {
56         $seq_len     = length $record->{ "SEQ" };
57
58         $insertions  = $options->{ "insertions" } || int( $seq_len * ( $options->{ "insertions_percent" } / 100 ) );
59         $deletions   = $options->{ "deletions" }  || int( $seq_len * ( $options->{ "deletions_percent" } / 100 ) );
60
61         Maasha::Common::error( qq(insertions > sequence length: $insertions > $seq_len)  ) if $insertions > $seq_len;
62         Maasha::Common::error( qq(deletions > sequence length: $deletions > $seq_len)  )   if $deletions > $seq_len;
63
64         $record->{ "SEQ" } = Maasha::Seq::seq_insert( $record->{ "SEQ" }, $insertions );
65         $record->{ "SEQ" } = Maasha::Seq::seq_delete( $record->{ "SEQ" }, $deletions );
66
67         $record->{ "SEQ_LEN" } = length $record->{ "SEQ" };
68     }
69
70     Maasha::Biopieces::put_record( $record, $out );
71 }
72
73 Maasha::Biopieces::close_stream( $in );
74 Maasha::Biopieces::close_stream( $out );
75
76
77 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
78
79
80 BEGIN
81 {
82     Maasha::Biopieces::status_set();
83 }
84
85
86 END
87 {
88     Maasha::Biopieces::status_log();
89 }
90
91
92 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
93
94
95 __END__