#!/usr/bin/perl -w
#usage: ./MaizeChrMap.pl IBMneighbor matchSeq.hqPGSmap > mapGSS.png
use GD;
use strict;

my $im = new GD::Image(600, 300); 
my $white = $im->colorAllocate(255, 255, 255);
my $black = $im->colorAllocate(0,0,0);
my $green = $im->colorAllocate(50,200,0);
my $red = $im->colorAllocate(255,0,0);
my $blue = $im->colorAllocate(0,0,255);
$im->transparent($white);
$im->interlaced('true');

my $margin = 20;
my $rowHeight = 20;
my $vmargin = 20;
my $scale = 2;
my $barHeight = 5;


my $count = 0;
my %ChrLen;
my $maxLen = 0;
open(FILE, "$ARGV[0]")||die("can not open $ARGV[0]");
while(<FILE>) {
    	my ($chr, $chrLen) = /^(\d+)\s+(\S+)/;
	$ChrLen{$chr} = $chrLen;
	$maxLen = $chrLen if($chrLen>$maxLen);
	#draw chromosome
	my $CHx1 = 0+ 2*$margin;
	my $CHy1 = 3*$vmargin + $count*$rowHeight;
	my $CHx2 = $chrLen/$scale + 2*$margin;
	my $CHy2 = $CHy1 + $barHeight;
	$im->string(gdLargeFont,0, $CHy1, "Chr$chr", $blue);
	$im->filledRectangle($CHx1, $CHy1, $CHx2, $CHy2, $green);
	#draw large tick marks
	$count++;
}#end draw chromosomes
close(FILE);

#draw ruler
$im->filledRectangle(2*$margin, $vmargin, 2*$margin+$maxLen/$scale, $vmargin+2, $black);
for(my $i=0; $i<=$maxLen; $i+=50)
{
            my $tickx1=$i/$scale + 2*$margin;
            my $ticky1=$vmargin+2;
            my $tickx2 = $tickx1;
            my $ticky2 = $ticky1+5;
            $im->line($tickx1,$ticky1,$tickx2,$ticky2,$black);
            $im->string(gdSmallFont, $tickx2-2, $ticky2-20, "$i",$black);
}

my $COUNT = 0;
my %GSS; #only plot each GSS once
#draw mapped ESTs ************Change map name here**********IBM neighbors************
open(FILE, "grep 'neighbors' $ARGV[1] |") || die("Canot open temp");
while(<FILE>){
	my $poly = new GD::Polygon;
	my ($gss, $chr, $coordinates) = /^(\S+)\s+(\d+).*\s+(\S+)$/;
	next if(exists $GSS{$gss});
	$GSS{$gss} = 1;
	next if ($coordinates > $ChrLen{$chr} || $coordinates < 0); #some other map exceeds
        my $polyx = $coordinates/$scale + 2*$margin;
        my $polyy = 3*$vmargin + ($chr-1)*$rowHeight;
	$poly->addPt($polyx, $polyy);
        $poly->addPt($polyx-3, $polyy-3);
        $poly->addPt($polyx+3, $polyy-3);
	$im->filledPolygon($poly, $red);
	$COUNT++;
}
close(FILE); 
print STDERR "Total $COUNT GSS contigs were plotted\n";

#print picture
print  $im->png;



