sub _over_lapping_printer
{ &opt_default(output=>"stdout",filename=>"over_lapping.csv");
my @args=opt_get(@_);
my $result=shift @args;
my $printer=opt_val("output");
my $filename=opt_val("filename");
my $debug=shift;
if($printer eq "f"){
open(FILE,">$filename");
foreach(sort{$a <=> $b} keys(%$result)){
print FILE "$$result{$_}{before},$$result{$_}{after},$$result{$_}{BeforeStart},$$result{$_}{BeforeEnd},$$result{$_}{AfterStart},$$result{$_}{AfterEnd},$$result{$_}{OverLap},$$result{$_}{type},$$result{$_}{BeforeDirect},$$result{$_}{AfterDirect}\n";
}
print FILE "\n\n";
close(FILE);
}
else{
foreach(sort{$a <=> $b} keys(%$result)){
&msg_send("$$result{$_}{before}\t$$result{$_}{after}\t$$result{$_}{BeforeStart}..$$result{$_}{BeforeEnd}\t$$result{$_}{AfterStart}..$$result{$_}{AfterEnd}\t$$result{$_}{OverLap}\t$$result{$_}{type}\t$$result{$_}{BeforeDirect}\t$$result{$_}{AfterDirect}\n");
}
} } |
sub over_lapping_finder
{ &opt_default(output=>"stdout",filename=>"over_lapping.csv");
my @args=opt_get(@_);
my $gb=opt_as_gb(shift @args);
my $output=opt_val("output");
my $filename=opt_val("filename");
my $num=1;
my ($tmp, $start, $end, %result, $q, $over, $switch, $type);
foreach($gb->cds()){
$over=0;
$switch=0;
$tmp=$num-1;
if($gb->{"CDS$num"}->{start} > $gb->{"CDS$tmp"}->{start} && $gb->{"CDS$num"}->{end} < $gb->{"CDS$tmp"}->{end}){
$switch=1;
$over=-($gb->{"CDS$num"}->{end}-$gb->{"CDS$num"}->{start}+1);
$type="internal";
}
elsif($gb->{"CDS$num"}->{direction} eq 'direct' && $gb->{"CDS"."$tmp"}->{direction} eq 'direct'){
$start = $gb->{"CDS$num"}->{start};
$end = $gb->{"CDS"."$tmp"}->{end};
if($start-$end-1<0){
$switch=1;
$over=$start-$end-1;
$type="uni-directional";
}
}
elsif($gb->{"CDS$num"}->{direction} eq 'complement' && $gb->{"CDS"."$tmp"}->{direction} eq 'complement'){
$start = $gb->{"CDS$num"}->{start};
$end = $gb->{"CDS"."$tmp"}->{end};
if($start-$end-1<0){
$switch=1;
$over=$start-$end-1;
$type="uni-directional";
}
}
elsif($gb->{"CDS$num"}->{direction} eq 'direct' && $gb->{"CDS"."$tmp"}->{direction} eq 'complement'){
$start = $gb->{"CDS$num"}->{start};
$end = $gb->{"CDS"."$tmp"}->{end};
if($start-$end-1<0){
$switch=1;
$over=$start-$end-1;
$type="head-on";
}
}
elsif($gb->{"CDS$num"}->{direction} eq 'complement' && $gb->{"CDS"."$tmp"}->{direction} eq 'direct'){
$start = $gb->{"CDS$num"}->{start};
$end = $gb->{"CDS"."$tmp"}->{end};
if($start-$end-1<0){
$switch=1;
$over=$start-$end-1;
$type="end-on";
}
}
if($switch==1){
$result{$q}{before}="CDS$tmp";
$result{$q}{after}="CDS$num";
$result{$q}{BeforeStart}=$gb->{"CDS$tmp"}->{start};
$result{$q}{BeforeEnd}=$gb->{"CDS$tmp"}->{end};
$result{$q}{AfterStart}=$gb->{"CDS$num"}->{start};
$result{$q}{AfterEnd}=$gb->{"CDS$num"}->{end};
$result{$q}{BeforeDirect}=$gb->{"CDS$tmp"}->{direction};
$result{$q}{AfterDirect}=$gb->{"CDS$num"}->{direction};
$result{$q}{OverLap}=$over;
$result{$q}{type}=$type;
$q++;
}
$num++;
}
if($output eq "f"){
_over_lapping_printer(\%result,-output=>$output,-filename=>$filename);
}
if($output eq "stdout"){
_over_lapping_printer(\%result,-output=>"stdout");
}
return\% result; } |