view scripts/generate_density_json.pl @ 21:9672fe07a232 draft default tip

planemo upload for repository https://github.com/portiahollyoak/Tools commit 0fea84d05f8976b8360a8b4943ecb01b87e3ade0-dirty
author mvdbeek
date Mon, 05 Dec 2016 09:58:47 -0500
parents 28d1a6f8143f
children
line wrap: on
line source

#! /usr/bin/perl                                                                                                                                                                                  

use strict;
die "perl $0 <input.insertion.bp.summary> <chromInfo file> <genomic bin size>\n" if @ARGV<2;

my @colors=("blue","green","red","yellow","grey","orange","purple","brown", "black");

my $op_title=$ARGV[0];
$op_title =~ s/summary/json/;

my %chrs=();
system("cut -f1 $ARGV[0] | uniq > chr");
open (input, "<chr") or die "Can't open chr since $!\n";
while (my $line=<input>) {
    chomp($line);
    $chrs{$line}=1;
}
close input;
system("rm chr");

open (output, ">>$op_title") or die "Can't open $op_title since $!\n";
print output "{\"ideograms\":[\n";

my $i=0;
open (input, "<$ARGV[1]") or die "Can't open $ARGV[1] since $!\n";
while (my $line=<input>) {
    chomp($line);
    my @a=split(/\t/, $line);
    if ($chrs{$a[0]}==1) {
        my $len=int($a[1]/$ARGV[2])+1;
        if ($len < 5) {
            $chrs{$a[0]}=0;
            next;
        }
        if ($i > 0) {print output ",\n";}
        print output "{\"id\":\"$a[0]\",\"length\":$len,\"color\":\"$colors[$i % 9]\"}";
        $i++;
    }
}
close input;

print output "\n],\n\"tracks\":[\n{\n";
print output "\"name\": \"Density\",\n";
print output "\"type\": \"plot\",\n";
print output "\"values\":\n[\n";

my @hist=();
my $last_chr="";
my $i=0;
my $k=0;
open (input, "<$ARGV[0]") or die "Can't open $ARGV[0] since $!\n";
#my $header=<input>;                                                                                                                                                                              
while (my $line=<input>) {
    chomp($line);
    my @a=split(/\t/, $line);
    if ($a[0] eq $last_chr) {
        my $mid=int(($a[1]+$a[2])/2);
        if (int($mid/$ARGV[2]) > $i) {
            $i++;
            $hist[$i]=1;
        }
        else {$hist[$i]++;}
    }
    else {
        if (($last_chr ne "") && ($chrs{$last_chr} == 1)) {
            if ($k > 0) {print output ",\n";}
            print output "{\"color\":\"$colors[$k % 9]\",\"chr\":\"$last_chr\",\"values\":[";
            for my $j (0..$i-1) {print output "$hist[$j],";}
            print output "$hist[$i]]}";
            $k++;
        }
        $i=0;
        $hist[0]=1;
        $last_chr=$a[0];
    }
}
close input;

print output "\n]}\n]\n}\n";
close output;