#!/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() { 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(){ 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;