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