annotate SVDetect_r0.8b_galaxy/svdetect/SVDetect_compare.pl @ 28:091714bd75a0 draft default tip

new release r0.8b
author bzeitouni
date Tue, 22 Jan 2013 06:20:22 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
1 #!/usr/bin/perl -w
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
2
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
3 =pod
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
4
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
5 =head1 NAME
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
6
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
7 SVDetect Compare for Galaxy
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
8
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
9 Version: 0.8b for Galaxy
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
10
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
11 =head1 SYNOPSIS
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
12
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
13 SVDetect_compare.pl links2compare -conf <configuration_file> [-help] [-man]
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
14
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
15 =cut
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
16
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
17 # -------------------------------------------------------------------
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
18
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
19 use strict;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
20 use warnings;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
21
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
22 use Pod::Usage;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
23 use Getopt::Long;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
24
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
25 use Config::General;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
26 use Tie::IxHash;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
27
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
28 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
29 #PARSE THE COMMAND LINE
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
30 my %OPT;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
31 GetOptions(\%OPT,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
32 'conf=s',
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
33 'out1=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
34 'out2=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
35 'out3=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
36 'out4=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
37 'out5=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
38 'out6=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
39 'out7=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
40 'out8=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
41 'out9=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
42 'l=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
43 'N=s', #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
44 'help',
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
45 'man'
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
46 );
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
47
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
48 pod2usage() if $OPT{help};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
49 pod2usage(-verbose=>2) if $OPT{man};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
50 pod2usage(-message=> "$!", -exitval => 2) if (!defined $OPT{conf});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
51
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
52
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
53 pod2usage() if(@ARGV<1);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
54
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
55 tie (my %func, 'Tie::IxHash',links2compare=>\&links2compare);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
56
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
57 foreach my $command (@ARGV){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
58 pod2usage(-message=> "Unknown command \"$command\"", -exitval => 2) if (!defined($func{$command}));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
59 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
60 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
61
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
62 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
63 #READ THE CONFIGURATION FILE
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
64 my $conf=Config::General->new( -ConfigFile => $OPT{conf},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
65 -Tie => "Tie::IxHash",
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
66 -AllowMultiOptions => 1,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
67 -LowerCaseNames => 1,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
68 -AutoTrue => 1);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
69 my %CONF= $conf->getall;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
70 validateconfiguration(\%CONF); #validation of the configuration parameters
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
71
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
72
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
73 my $SAMTOOLS_BIN_DIR="/bioinfo/local/samtools"; #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
74 my $BEDTOOLS_BIN_DIR="/bioinfo/local/BEDTools/bin"; #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
75
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
76 my $pt_log_file=$OPT{l}; #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
77 my $log_file=$CONF{general}{output_dir}.$OPT{N}.".svdetect_compare.log"; #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
78 open LOG,">$log_file" or die "$0: can't open ".$log_file.":$!\n";#GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
79
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
80 my @pt_sv_file=($OPT{out1},$OPT{out2},$OPT{out3}) if($OPT{out1}); #GALAXY common,sample,reference
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
81 my @pt_circos_file=($OPT{out4},$OPT{out5},$OPT{out6}) if($OPT{out4}); #GALAXY common,sample,reference
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
82 my @pt_bed_file=($OPT{out7},$OPT{out8},$OPT{out9}) if($OPT{out7}); #GALAXY common,sample,reference
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
83
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
84 $CONF{compare}{sample_link_file}=readlink($CONF{compare}{sample_link_file});#GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
85 $CONF{compare}{sample_link_file}=~s/.sv.txt//; #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
86
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
87 $CONF{compare}{reference_link_file}=readlink($CONF{compare}{reference_link_file});#GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
88 $CONF{compare}{reference_link_file}=~s/.sv.txt//; #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
89
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
90 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
91
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
92 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
93 #COMMAND EXECUTION
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
94 foreach my $command (@ARGV){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
95 &{$func{$command}}();
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
96 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
97 print LOG "-- end\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
98
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
99 close LOG;#GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
100 system "rm $pt_log_file ; ln -s $log_file $pt_log_file"; #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
101
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
102 exit(0);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
103 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
104
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
105 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
106 #FUNCTIONS
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
107
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
108 # -----------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
109 #MAIN FUNCTION number 5:Comparison between samples, common or specific links
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
110 sub links2compare{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
111
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
112 my @compare_files;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
113
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
114 compareSamples($CONF{general}{output_dir},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
115 $CONF{compare}{list_samples},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
116 $CONF{compare}{sample_link_file},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
117 $CONF{compare}{reference_link_file},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
118 $CONF{compare}{min_overlap},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
119 $CONF{compare}{same_sv_type},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
120 \@compare_files);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
121
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
122 my $pt_ind=0;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
123
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
124 for my $input_file (@compare_files){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
125
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
126 $input_file=$CONF{general}{output_dir}.$input_file;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
127
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
128 my $output_file=$input_file;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
129 $output_file=~s/unique$/compared/;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
130
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
131 sortLinks($input_file, $output_file,1);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
132
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
133 if($CONF{compare}{circos_output}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
134 links2segdup($CONF{circos}{organism_id},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
135 $CONF{circos}{colorcode},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
136 $output_file,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
137 $output_file.".segdup.txt");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
138 system "rm $pt_circos_file[$pt_ind]; ln -s $output_file.segdup.txt $pt_circos_file[$pt_ind]" if (defined $pt_circos_file[$pt_ind]); #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
139 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
140
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
141 if($CONF{compare}{bed_output}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
142 links2bedfile($CONF{compare}{read_lengths},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
143 $CONF{bed}{colorcode},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
144 $output_file,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
145 $output_file.".bed");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
146 system "rm $pt_bed_file[$pt_ind]; ln -s $output_file.bed $pt_bed_file[$pt_ind]" if (defined $pt_bed_file[$pt_ind]); #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
147 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
148
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
149 if($CONF{compare}{sv_output}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
150
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
151 links2SVfile ($output_file, $output_file.".sv.txt");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
152 system "rm $pt_sv_file[$pt_ind]; ln -s $output_file.sv.txt $pt_sv_file[$pt_ind]" if (defined $pt_sv_file[$pt_ind]); #GALAXY
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
153 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
154 $pt_ind++;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
155
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
156 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
157 unlink(@compare_files);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
158
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
159 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
160 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
161 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
162 sub compareSamples{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
163
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
164 my ($dir,$list_samples,$sample_file,$reference_file,$min_overlap,$same_sv_type,$file_names)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
165
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
166 my @bedpefiles;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
167 my @list=split(",",$list_samples);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
168 my @list_files=($sample_file,$reference_file);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
169
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
170 print LOG "\# Comparison procedure...\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
171 print LOG "-- samples=$list_samples\n".
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
172 "-- minimum overlap=$min_overlap\n".
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
173 "-- same SV type=$same_sv_type\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
174
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
175 #conversion of links to bedPE format file
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
176 print LOG "-- Conversion of links.filtered files to bedPE format\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
177 for my $s (0..$#list) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
178
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
179 links2bedPElinksfile($list[$s],$list_files[$s],$list_files[$s].".bedpe.txt");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
180 push(@bedpefiles,$list_files[$s].".bedpe.txt");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
181
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
182 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
183
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
184 #get common links between all samples compared
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
185 print LOG "-- Getting common links between all samples with BEDTools\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
186 my $common_name=join(".",@list);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
187
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
188 my $nb=scalar @list;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
189 my $command="";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
190 my $prompt=">";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
191
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
192 while ($nb>0){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
193
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
194 for my $i (0..$#list_files){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
195
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
196 $command.="$BEDTOOLS_BIN_DIR/pairToPair -type both -f $min_overlap -a ".$list_files[$i].".bedpe.txt";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
197 my $pipe=0;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
198
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
199 for my $j ($i+1..$#list_files){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
200
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
201 $command.="| $BEDTOOLS_BIN_DIR/pairToPair -type both -f $min_overlap -a stdin" if($pipe);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
202 $command.=" -b ".$list_files[$j].".bedpe.txt";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
203 $pipe=1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
204
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
205 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
206
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
207 $command.=$prompt.$dir.$common_name.".bedpe.tmp;";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
208 $prompt=">>";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
209
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
210 my $first=shift(@list_files); push(@list_files,$first);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
211 last;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
212 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
213 $nb--;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
214 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
215
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
216 system ($command);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
217
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
218 push(@bedpefiles,$dir.$common_name.".bedpe.tmp");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
219
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
220 #Post comparison to get common links if same type only (as an option)
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
221 open( FILE, "<".$dir.$common_name.".bedpe.tmp") or die "Can't open".$dir.$common_name.".bedpe.tmp : $!";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
222 open( OUT, ">".$dir.$common_name.".bedpe.unique") or die "Can't write in ".$dir.$common_name.".bedpe.unique : $!";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
223
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
224 while(<FILE>){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
225 my @t=split("\t",$_);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
226 my $s=(split("_",$t[6]))[0];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
227 my ($sv1,$sv2)=($t[7],$t[18]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
228 splice(@t,11,$#t);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
229
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
230 if($same_sv_type){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
231 print OUT join("\t",@t)."\n" if($sv1 eq $sv2);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
232 }else{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
233 print OUT join("\t",@t)."\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
234 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
235 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
236 close FILE;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
237 close OUT;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
238
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
239 bedPElinks2linksfile($dir.$common_name.".bedpe.unique", $dir.$common_name.".unique");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
240 push(@bedpefiles,$dir.$common_name.".bedpe.unique");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
241 push(@$file_names,$common_name.".unique");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
242 print LOG "-- output created: ".$dir.$common_name.".compared\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
243
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
244 #get specific links for each sample
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
245 print LOG "-- Getting specific links for each sample\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
246 for my $s (0..$#list) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
247 system("grep -Fxv -f ".$dir.$common_name.".bedpe.unique ".$list_files[$s].".bedpe.txt >".$dir.$list[$s].".bedpe.unique");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
248 bedPElinks2linksfile($dir.$list[$s].".bedpe.unique",$dir.$list[$s].".unique");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
249 push(@bedpefiles,$dir.$list[$s].".bedpe.unique");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
250 push(@$file_names,$list[$s].".unique");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
251 print LOG "-- output created: ".$dir.$list[$s].".compared\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
252 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
253
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
254 unlink(@bedpefiles);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
255
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
256 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
257 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
258 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
259 #convert the links file to the circos format
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
260 sub links2segdup{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
261
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
262 my($id,$color_code,$links_file,$segdup_file)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
263
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
264 print LOG "\# Converting to the circos format...\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
265
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
266 tie (my %hcolor,'Tie::IxHash'); #color-code hash table
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
267 foreach my $col (keys %{$color_code}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
268 my ($min_links,$max_links)=split(",",$color_code->{$col});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
269 $hcolor{$col}=[$min_links,$max_links];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
270 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
271
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
272 open LINKS, "<$links_file" or die "$0: can't open $links_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
273 open SEGDUP, ">$segdup_file" or die "$0: can't write in the output: $segdup_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
274
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
275 my $index=1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
276 while(<LINKS>){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
277
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
278 my ($chr1,$start1,$end1,$chr2,$start2,$end2,$count)=(split)[0,1,2,3,4,5,6];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
279
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
280 my $color=getColor($count,\%hcolor,"circos"); #get the color-code according the number of links
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
281
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
282 print SEGDUP "$index\t$id$chr1\t$start1\t$end1\tcolor=$color\n". #circos output
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
283 "$index\t$id$chr2\t$start2\t$end2\tcolor=$color\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
284 $index++;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
285 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
286
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
287 close LINKS;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
288 close SEGDUP;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
289 print LOG "-- output created: $segdup_file\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
290 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
291 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
292 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
293 #convert the links file to the bedPE format for BEDTools usage
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
294 sub links2bedPElinksfile{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
295
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
296 my ($sample,$links_file,$bedpe_file)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
297
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
298 open LINKS, "<$links_file" or die "$0: can't open $links_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
299 open BEDPE, ">$bedpe_file" or die "$0: can't write in the output: $bedpe_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
300
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
301 my $nb_links=1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
302
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
303 while(<LINKS>){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
304
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
305 chomp;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
306 my @t=split("\t",$_);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
307 my ($chr1,$start1,$end1,$chr2,$start2,$end2)=splice(@t,0,6);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
308 my $type=($chr1 eq $chr2)? "INTRA":"INTER";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
309 $type.="_".$t[10];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
310
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
311 $start1--; $start2--;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
312
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
313 print BEDPE "$chr1\t$start1\t$end1\t$chr2\t$start2\t$end2".
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
314 "\t$sample"."_link$nb_links\t$type\t.\t.".
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
315 "\t".join("|",@t)."\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
316
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
317 $nb_links++;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
318 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
319
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
320 close LINKS;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
321 close BEDPE;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
322
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
323 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
324 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
325 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
326 sub bedPElinks2linksfile{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
327
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
328 my ($bedpe_file,$links_file)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
329
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
330 open BEDPE, "<$bedpe_file" or die "$0: can't open: $bedpe_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
331 open LINKS, ">$links_file" or die "$0: can't write in the output $links_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
332
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
333 while(<BEDPE>){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
334
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
335 chomp;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
336 my $sample=(split("_",(split("\t",$_))[6]))[0];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
337 my @t1=(split("\t",$_))[0,1,2,3,4,5];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
338 my @t2=split(/\|/,(split("\t",$_))[10]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
339 push(@t2,$sample);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
340
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
341 print LINKS join("\t",@t1)."\t".join("\t",@t2)."\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
342
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
343 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
344 close BEDPE;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
345 close LINKS;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
346
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
347 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
348 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
349 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
350 #convert the links file to the bed format
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
351 sub links2bedfile{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
352
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
353 my ($tag_length,$color_code,$links_file,$bed_file)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
354
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
355 print LOG "\# Converting to the bed format...\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
356
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
357 my $compare=1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
358 if($links_file!~/compared$/){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
359 $compare=0;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
360 $tag_length->{none}->{1}=$tag_length->{1};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
361 $tag_length->{none}->{2}=$tag_length->{2};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
362 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
363
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
364 #color-code hash table
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
365 tie (my %hcolor,'Tie::IxHash');
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
366 my %color_order;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
367 $color_order{"255,255,255"}=0;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
368 my $n=1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
369 foreach my $col (keys %{$color_code}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
370 my ($min_links,$max_links)=split(",",$color_code->{$col});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
371 $hcolor{$col}=[$min_links,$max_links];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
372 $color_order{$col}=$n;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
373 $n++;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
374 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
375
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
376 my %pair;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
377 my %pt;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
378 $n=1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
379 open LINKS, "<$links_file" or die "$0: can't open $links_file:$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
380
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
381 my %str=( "F"=>"+", "R"=>"-" );
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
382
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
383 while(<LINKS>){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
384
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
385 my @t=split;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
386 my $sample=($compare)? pop(@t):"none";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
387
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
388 my $chr1=$t[0];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
389 my $chr2=$t[3];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
390 $chr1 = "chr".$chr1 unless ($chr1 =~ m/chr/i);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
391 $chr2 = "chr".$chr2 unless ($chr2 =~ m/chr/i);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
392 my $same_chr=($chr1 eq $chr2)? 1:0;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
393
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
394 my $count=$t[6];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
395 my $color=getColor($count,\%hcolor,"bed");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
396
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
397 my @pairs=deleteBadOrderSensePairs(split(",",$t[7]));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
398 my @strand1=deleteBadOrderSensePairs(split(",",$t[8]));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
399 my @strand2=deleteBadOrderSensePairs(split(",",$t[9]));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
400 my @ends_order1=deleteBadOrderSensePairs(split(",",$t[10]));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
401 my @ends_order2=deleteBadOrderSensePairs(split(",",$t[11]));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
402 my @position1=deleteBadOrderSensePairs(split(",",$t[14]));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
403 my @position2=deleteBadOrderSensePairs(split(",",$t[15]));
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
404 my @start1; my @end1; getCoordswithLeftMost(\@start1,\@end1,\@position1,\@strand1,\@ends_order1,$tag_length->{$sample});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
405 my @start2; my @end2; getCoordswithLeftMost(\@start2,\@end2,\@position2,\@strand2,\@ends_order2,$tag_length->{$sample});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
406
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
407
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
408 for my $p (0..$#pairs){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
409
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
410 if (!exists $pair{$pairs[$p]}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
411
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
412 if($same_chr){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
413
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
414 $pair{$pairs[$p]}->{0}=[ $chr1, $start1[$p]-1, $end2[$p], $pairs[$p], 0, $str{$strand1[$p]},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
415 $start1[$p]-1, $end2[$p], $color,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
416 2, $tag_length->{$sample}->{$ends_order1[$p]}.",".$tag_length->{$sample}->{$ends_order2[$p]}, "0,".($start2[$p]-$start1[$p]) ];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
417 $pt{$n}=$pair{$pairs[$p]}->{0};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
418 $n++;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
419
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
420 }else{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
421
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
422 $pair{$pairs[$p]}->{1}=[ $chr1, $start1[$p]-1, $end1[$p] , $pairs[$p]."/1", 0, $str{$strand1[$p]},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
423 $start1[$p]-1, $end1[$p], $color,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
424 1, $tag_length->{$sample}->{$ends_order1[$p]}, 0];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
425 $pt{$n}=$pair{$pairs[$p]}->{1};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
426 $n++;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
427
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
428
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
429 $pair{$pairs[$p]}->{2}=[ $chr2, $start2[$p]-1, $end2[$p], $pairs[$p]."/2", 0, $str{$strand2[$p]},
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
430 $start2[$p]-1, $end2[$p], $color,
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
431 1, $tag_length->{$sample}->{$ends_order2[$p]}, 0];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
432 $pt{$n}=$pair{$pairs[$p]}->{2};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
433 $n++;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
434 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
435 }else{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
436
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
437 if($same_chr){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
438 ${$pair{$pairs[$p]}->{0}}[8]=$color if($color_order{$color}>$color_order{${$pair{$pairs[$p]}->{0}}[8]});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
439 }else{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
440 ${$pair{$pairs[$p]}->{1}}[8]=$color if($color_order{$color}>$color_order{${$pair{$pairs[$p]}->{1}}[8]});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
441 ${$pair{$pairs[$p]}->{2}}[8]=$color if($color_order{$color}>$color_order{${$pair{$pairs[$p]}->{2}}[8]});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
442 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
443 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
444 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
445 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
446 close LINKS;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
447
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
448 my $nb_pairs=$n-1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
449
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
450 open BED, ">$bed_file" or die "$0: can't write in the output: $bed_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
451 print BED "track name=\"$bed_file\" description=\"mate pairs involved in links\" ".
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
452 "visibility=2 itemRgb=\"On\"\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
453
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
454 for my $i (1..$nb_pairs){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
455 print BED join("\t",@{$pt{$i}})."\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
456 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
457
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
458 close BED;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
459
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
460 print LOG "-- output created: $bed_file\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
461
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
462 undef %pair;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
463 undef %pt;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
464
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
465 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
466 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
467 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
468 sub links2SVfile{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
469
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
470 my($links_file,$sv_file)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
471
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
472 print LOG "\# Converting to the sv output table...\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
473 open LINKS, "<$links_file" or die "$0: can't open $links_file:$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
474 open SV, ">$sv_file" or die "$0: can't write in the output: $sv_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
475
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
476 my @header=qw(chr_type SV_type BAL_type chromosome1 start1-end1 average_dist
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
477 chromosome2 start2-end2 nb_pairs score_strand_filtering score_order_filtering score_insert_size_filtering
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
478 final_score breakpoint1_start1-end1 breakpoint2_start2-end2);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
479
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
480 my $nb_links=0;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
481
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
482 while (<LINKS>){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
483
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
484 my @t=split;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
485 my @sv=();
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
486 my $sv_type="-";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
487 my $strand_ratio="-";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
488 my $eq_ratio="-";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
489 my $eq_type="-";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
490 my $insert_ratio="-";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
491 my $link="-";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
492 my ($bk1, $bk2)=("-","-");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
493 my $score="-";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
494
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
495 my ($chr1,$start1,$end1)=($t[0],$t[1],$t[2]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
496 my ($chr2,$start2,$end2)=($t[3],$t[4],$t[5]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
497 my $nb_pairs=$t[6];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
498 $chr1 = "chr".$chr1 unless ($chr1 =~ m/chr/i);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
499 $chr2 = "chr".$chr2 unless ($chr2 =~ m/chr/i);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
500 my $chr_type=($chr1 eq $chr2)? "INTRA":"INTER";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
501
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
502 #if strand filtering
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
503 if (defined $t[16]){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
504 #if inter-chr link
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
505 $sv_type=$t[16];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
506 if(defined $t[17] && $t[17]=~/^(\d+)\/(\d+)$/){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
507 $strand_ratio=floor($1/$2*100)."%";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
508 $score=$t[18];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
509 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
510 if(defined $t[18] && $t[18]=~/^(\d+)\/(\d+)$/){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
511 #if intra-chr link with insert size filtering
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
512 $strand_ratio=floor($1/$2*100)."%";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
513 $link=floor($t[17]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
514 if($sv_type!~/^INV/){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
515 $insert_ratio=floor($1/$2*100)."%" if($t[19]=~/^(\d+)\/(\d+)$/);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
516 $score=$t[20];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
517 }else{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
518 $score=$t[19];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
519 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
520 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
521 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
522
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
523 if(defined $t[18] && ($t[18] eq "UNBAL" || $t[18] eq "BAL")){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
524
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
525 #if strand and order filtering only and/or interchr link
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
526 $eq_type=$t[18];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
527 $eq_ratio=floor($1/$2*100)."%" if($t[19]=~/^(\d+)\/(\d+)$/);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
528 ($bk1, $bk2)=($t[20],$t[21]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
529 foreach my $bk ($bk1, $bk2){$bk=~s/\),\(/ /g; $bk=~s/(\(|\))//g; $bk=~s/,/-/g;}
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
530 $score=$t[22];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
531
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
532 }elsif(defined $t[19] && ($t[19] eq "UNBAL" || $t[19] eq "BAL")){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
533
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
534 #if all three filtering
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
535 $link=floor($t[17]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
536 $eq_type=$t[19];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
537 $eq_ratio=floor($1/$2*100)."%" if($t[20]=~/^(\d+)\/(\d+)$/);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
538
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
539 if(defined $t[21] && $t[21]=~/^(\d+)\/(\d+)$/){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
540 $insert_ratio=floor($1/$2*100)."%";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
541 ($bk1, $bk2)=($t[22],$t[23]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
542 $score=$t[24];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
543
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
544 }else{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
545 ($bk1, $bk2)=($t[21],$t[22]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
546 $score=$t[23];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
547 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
548 foreach my $bk ($bk1, $bk2){$bk=~s/\),\(/ /g; $bk=~s/(\(|\))//g; $bk=~s/,/-/g;}
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
549
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
550 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
551
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
552
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
553 push(@sv, $chr_type, $sv_type,$eq_type);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
554 push(@sv,"$chr1\t$start1-$end1");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
555 push(@sv, $link);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
556 push(@sv,"$chr2\t$start2-$end2",
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
557 $nb_pairs,$strand_ratio,$eq_ratio,$insert_ratio, decimal($score,4), $bk1, $bk2);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
558
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
559
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
560 print SV join("\t",@sv)."\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
561 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
562
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
563 close LINKS;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
564 close SV;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
565
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
566 system "sort -k 9,9nr -k 13,13nr $sv_file > $sv_file.sorted";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
567
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
568 open SV, "<".$sv_file.".sorted" or die "$0: can't open in the output: $sv_file".".sorted :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
569 my @links=<SV>;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
570 close SV;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
571
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
572 open SV, ">$sv_file" or die "$0: can't write in the output: $sv_file :$!\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
573
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
574 print SV join("\t",@header)."\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
575 print SV @links;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
576 close SV;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
577
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
578 unlink($sv_file.".sorted");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
579
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
580 print LOG "-- output created: $sv_file\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
581
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
582 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
583 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
584 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
585 sub deleteBadOrderSensePairs{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
586
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
587 my (@tab)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
588 my @tab2;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
589
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
590 foreach my $v (@tab){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
591
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
592 $v=~s/[\(\)]//g;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
593 push(@tab2,$v) if($v!~/[\$\*\@]$/);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
594 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
595 return @tab2;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
596 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
597 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
598 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
599 #gets starts and ends Coords when start=leftmost given positions, directions and orders
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
600 sub getCoordswithLeftMost {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
601
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
602 my ($starts,$ends,$positions,$strand,$end_order,$tag_length) = @_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
603
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
604 for my $i (0..scalar(@{$positions})-1) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
605
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
606 if($strand->[$i] eq 'F'){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
607 $starts->[$i]=$positions->[$i];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
608 $ends->[$i]=$positions->[$i]+$tag_length->{$end_order->[$i]}-1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
609 }else{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
610 $starts->[$i]=$positions->[$i]-$tag_length->{$end_order->[$i]}+1;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
611 $ends->[$i]=$positions->[$i];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
612 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
613 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
614 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
615 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
616 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
617 sub floor {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
618 my $nb = $_[0];
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
619 $nb=~ s/\..*//;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
620 return $nb;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
621 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
622 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
623 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
624 sub decimal{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
625
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
626 my $num=shift;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
627 my $digs_to_cut=shift;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
628
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
629 $num=sprintf("%.".($digs_to_cut-1)."f", $num) if ($num=~/\d+\.(\d){$digs_to_cut,}/);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
630
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
631 return $num;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
632 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
633
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
634 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
635 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
636 #Sort links according the concerned chromosomes and their coordinates
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
637 sub sortLinks{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
638
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
639 my ($links_file,$sortedlinks_file,$unique)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
640
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
641 print LOG "# Sorting links...\n";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
642
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
643 my $pipe=($unique)? "| sort -u":"";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
644 system "sort -k 1,1 -k 4,4 -k 2,2n -k 5,5n -k 8,8n $links_file $pipe > $sortedlinks_file";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
645
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
646 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
647 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
648 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
649 sub getColor{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
650
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
651 my($count,$hcolor,$format)=@_;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
652 for my $col ( keys % { $hcolor} ) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
653 return $col if($count>=$hcolor->{$col}->[0] && $count<=$hcolor->{$col}->[1]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
654 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
655 return "white" if($format eq "circos");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
656 return "255,255,255" if($format eq "bed");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
657 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
658 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
659 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
660 #check if the configuration file is correct
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
661 sub validateconfiguration{
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
662
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
663 my %conf=%{$_[0]};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
664 my $list_prgs="@ARGV";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
665
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
666 my @circos_params=qw(organism_id colorcode);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
667 my @bed_params=qw(colorcode);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
668 my @compare_params=qw(list_samples list_read_lengths sample_link_file reference_link_file);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
669
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
670 unless (defined($conf{general}{output_dir})) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
671 $conf{general}{output_dir} = ".";
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
672 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
673 unless (-d $conf{general}{output_dir}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
674 mkdir $conf{general}{output_dir} or die;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
675 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
676 $conf{general}{output_dir}.="/" if($conf{general}{output_dir}!~/\/$/);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
677
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
678
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
679 if($list_prgs=~/links2compare/){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
680 foreach my $p (@compare_params) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
681 die("Error Config : The compare parameter \"$p\" is not defined\n") if (!defined $conf{compare}{$p});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
682 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
683
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
684 unless (defined($conf{compare}{same_sv_type})) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
685 $conf{compare}{same_sv_type} = 0;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
686 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
687
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
688 unless (defined($conf{compare}{min_overlap})) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
689 $conf{compare}{min_overlap} = 1E-9;
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
690 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
691
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
692 if($conf{compare}{circos_output}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
693 foreach my $p (@circos_params) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
694 next if($list_prgs=~/^ratio/ && $p eq "colorcode");
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
695 die("Error Config : The circos parameter \"$p\" is not defined\n") if (!defined $conf{circos}{$p});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
696 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
697 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
698 if($conf{compare}{bed_output}){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
699 foreach my $p (@bed_params) {
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
700 die("Error Config : The bed parameter \"$p\" is not defined\n") if (!defined $conf{bed}{$p});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
701 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
702 die("Error Config : The compare parameter \"list_read_lengths\" is not defined\n") if (!defined $conf{compare}{list_read_lengths});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
703
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
704 my @samples=split(",",$conf{compare}{list_samples});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
705 my @read_lengths=split(",",$conf{compare}{list_read_lengths});
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
706 for my $i (0..$#samples){
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
707 my @l=split("-",$read_lengths[$i]);
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
708 $conf{compare}{read_lengths}{$samples[$i]}={ 1=> $l[0], 2=> $l[1]};
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
709 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
710 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
711 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
712
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
713
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
714 }
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
715 #------------------------------------------------------------------------------#
091714bd75a0 new release r0.8b
bzeitouni
parents:
diff changeset
716 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#