hw6/genbank_CD_draw.pl
use Bio::SeqIO;
use GD;
use integer;
$imagefile = "bmp7.png";
$div = 3;
$image_width = 800;
$image_height = 600;
$seq_width = 20;
$margin_left = 20;
$margin_top = 50;
$img = new GD::Image($image_width, $image_height);
$white = $img->colorAllocate(255,255,255);
$black = $img->colorAllocate(0,0,0);
$green = $img->colorAllocate(0, 255, 0);
$blue = $img->colorAllocate(0, 0, 255);
$red = $img->colorAllocate(255, 0, 0);
$seqin = Bio::SeqIO->new( '-format' => 'Genbank' , -file => 'bmp7.txt');
while(my $seqobj = $seqin->next_seq()) {
foreach $feat ($seqobj->all_SeqFeatures()) {
if ($feat->primary_tag eq "gene") {
$geneStart = $feat->start;
$geneEnd = $feat->end;
foreach $tag($feat->all_tags()) {
if ($tag eq "gene") {
$geneName = join(' ',$feat->each_tag_value($tag));
$img->string(gdGiantFont, $margin_left, 5, $geneName, $black);
my $x1 = $margin_left + ($geneStart / $div);
my $x2 = $margin_left + ($geneEnd / $div);
my $y1 = $margin_top;
my $y2 = $y1 + $seq_width;
$img->filledRectangle($x1, $y1, $x2, $y2, $red);
for ($i = 1; $i < ($geneEnd - $geneStart); $i+= 200) {
my $x1 = $margin_left + ($geneStart / $div) + (($i - 1) / $div);
$img->string(gdGiantFont, $x1, 20, $i, $red);
$img->line($x1, 50, $x1, 30, $blue);
}
}
}
}
if ($feat->primary_tag eq "CDS") {
$CDstart = $feat->start;
$CDend = $feat->end;
my $x1 = $margin_left + ($CDstart / $div);
my $x2 = $margin_left + ($CDend / $div);
my $y1 = $margin_top + $seq_width + 30;
$y2 = $y1 + 20;
$img->filledRectangle($x1, $y1, $x2, $y2, $green);
}
if ($feat->primary_tag eq "variation") {
$variationStart = $feat->start;
$variationEnd = $feat->end;
my $x1 = $margin_left + ($variationStart / $div);
my $x2 = $margin_left + ($variationEnd / $div);
my $y1 = $margin_top;
my $y2 = $y1 + $seq_width;
$img->line($x1, $y1, $x2, $y2, $black);
}
}
}
open(OUT, ">$imagefile") || die "Cannot write to $imagefile: $!\n";
print OUT $img->png;
close OUT;