0
|
1 #!/usr/bin/perl
|
7
|
2 #V1.0.1 added log, option parameters
|
0
|
3 use strict;
|
|
4 use warnings;
|
7
|
5 use Getopt::Long;
|
0
|
6
|
7
|
7 my $input_sam_file;
|
|
8 my $output_sam_file;
|
|
9 my $log_file;
|
|
10
|
|
11 my %bitscore_all;
|
|
12 my %bitscore_selected;
|
|
13
|
|
14 GetOptions (
|
|
15 "input_sam_file=s" => \$input_sam_file,
|
|
16 "output_sam_file=s" => \$output_sam_file,
|
|
17 "log_file=s" => \$log_file
|
|
18 ) or die("Error in command line arguments\n");
|
|
19
|
|
20 open(IN, $input_sam_file) or die ("Can't open $input_sam_file\n");
|
0
|
21 while (my $line=<IN>){
|
7
|
22 if (($line =~ /^\@SQ/)||($line =~ /^\@PG/)){
|
0
|
23 #Header conservation
|
|
24 print $line;
|
|
25 }
|
|
26 else {
|
|
27 #Optionnal flag verification
|
7
|
28 my @fields_all = split (/\s+/,$line);
|
|
29 my $bit = $fields_all[1];
|
|
30 if ($bitscore_all{$bit}){
|
|
31 $bitscore_all{$bit}++;
|
|
32 }
|
|
33 else {
|
|
34 $bitscore_all{$bit}=1;
|
|
35 }
|
0
|
36 if (($line =~ /XT\:A\:U/)&&($line =~ /X0\:i\:1/)&&($line =~ /X1\:i\:0\s/)){
|
7
|
37 my @fields_selected = split (/\s+/,$line);
|
|
38 if (($fields_selected[1]==83)||($fields_selected[1]==163)||($fields_selected[1]==147)||($fields_selected[1]==99)){
|
0
|
39 print $line;
|
7
|
40 my $bit = $fields_selected[1];
|
|
41 if ($bitscore_selected{$bit}){
|
|
42 $bitscore_selected{$bit}++;
|
|
43 }
|
|
44 else {
|
|
45 $bitscore_selected{$bit}=1;
|
|
46 }
|
0
|
47 }
|
|
48 }
|
|
49 }
|
|
50 }
|
|
51
|
7
|
52 close (IN);
|
0
|
53
|
7
|
54 open (LF,">$log_file") or die("Can't open $log_file\n");
|
|
55 print LF "\n####\t Sam filtering \n";
|
|
56 print LF "## Before filtering\n";
|
|
57 print LF "bitscore\t:\t";
|
|
58 foreach my $key (sort {$bitscore_all{$b} <=> $bitscore_all{$a}} keys %bitscore_all) {
|
|
59 print LF $key,"\t*\t";
|
|
60 }
|
|
61 print LF "\n number \t:\t";
|
|
62 foreach my $key (sort {$bitscore_all{$b} <=> $bitscore_all{$a}} keys %bitscore_all) {
|
|
63 print LF $bitscore_all{$key},"\t*\t";
|
|
64 }
|
|
65 print LF "\n";
|
|
66 print LF "## After filtering\n";
|
|
67 print LF "bitscore\t:\t";
|
|
68 foreach my $key (sort {$bitscore_selected{$b} <=> $bitscore_selected{$a}} keys %bitscore_selected) {
|
|
69 print LF $key,"\t*\t";
|
|
70 }
|
|
71 print LF "\n number \t:\t";
|
|
72 foreach my $key (sort {$bitscore_selected{$b} <=> $bitscore_selected{$a}} keys %bitscore_selected) {
|
|
73 print LF $bitscore_selected{$key},"\t*\t";
|
|
74 }
|
|
75 print LF "\n";
|
|
76 close (LF);
|
|
77
|
|
78
|
|
79
|
|
80
|
|
81
|
|
82
|
|
83
|