1
|
1 #!/usr/bin/perl -w
|
|
2 use strict;
|
|
3
|
|
4 #creats a BED file with central area of peaks
|
|
5
|
|
6
|
|
7 my $usage = qq{
|
|
8 $0
|
|
9
|
|
10 -----------------------------
|
|
11 mandatory parameters:
|
|
12
|
|
13 -f filename file with sites in BED format
|
|
14 -l value length of the cental regions
|
|
15
|
|
16 -----------------------------
|
|
17 optional parameters:
|
|
18 -v for verbose
|
|
19 -head 1/0 if there is a header
|
|
20 -o filename output file
|
|
21 };
|
|
22
|
|
23 if(scalar(@ARGV) <2){
|
|
24 print $usage;
|
|
25 exit(0);
|
|
26 }
|
|
27
|
|
28 my $flank = 0;
|
|
29 my $ResFilename = "";
|
|
30 my $file = "";
|
|
31 my $header = 0;
|
|
32 my $verbose = 0;
|
|
33
|
|
34 while(scalar(@ARGV) > 0){
|
|
35 my $this_arg = shift @ARGV;
|
|
36 if ( $this_arg eq '-h') {print "$usage\n"; exit; }
|
|
37 elsif ( $this_arg eq '-f') {$file = shift @ARGV;}
|
|
38 elsif ( $this_arg eq '-v') {$verbose = 1;}
|
|
39 elsif ( $this_arg eq '-head') {$header = shift @ARGV;}
|
|
40 elsif ( $this_arg eq '-o') {$ResFilename = shift @ARGV;}
|
|
41 elsif ( $this_arg eq '-l') {$flank = shift @ARGV;$flank /=2;}
|
|
42 elsif ( $this_arg =~ m/^-/ ) { print "unknown flag: $this_arg\n";}
|
|
43 }
|
|
44
|
|
45
|
|
46
|
|
47
|
|
48 my $count = 0;
|
|
49 my %hash;
|
|
50
|
|
51 open (FILE, "<$file") or die "Cannot open file $file!!!!: $!";
|
|
52 open (OUT, ">$ResFilename") or die "Cannot open file $ResFilename!!!!: $!";
|
|
53
|
|
54 if ($header) {
|
|
55 <FILE>;
|
|
56 }
|
|
57
|
|
58 while (<FILE>) {
|
|
59 s/\R//g;
|
|
60 next if (/^#/);
|
|
61 next if (/track/);
|
|
62 next if (/summit/);
|
|
63 my @a = split /\s/;
|
|
64 my $chr = $a[0];
|
|
65 my $maxPos = $a[3];
|
|
66 my $score = $a[4];
|
|
67 if ($maxPos=~/\D/) {
|
|
68 $maxPos = int(($a[1]+$a[2])/2);
|
|
69 } elsif ($maxPos < $a[1]){ #MACS intervals
|
|
70 $maxPos = $a[1]+$a[4];
|
|
71 $score = $a[5];
|
|
72 }
|
|
73 my $firstPos = $maxPos-$flank;
|
|
74 my $lastPos = $maxPos+$flank;
|
|
75
|
|
76 my $ID=$chr.":".$firstPos."_".$lastPos."_".$score ;
|
|
77 unless (exists($hash{$ID})) {
|
|
78 $hash{$ID}=1;
|
|
79 $count++;
|
|
80 print OUT "$chr\t$firstPos\t$lastPos\t$score\n";
|
|
81 }
|
|
82 }
|
|
83
|
|
84 #print "$file\t$count\n";
|
|
85 close FILE;
|
|
86 close OUT;
|
|
87
|