### plotNuc.pl --- #! /usr/bin/perl -w # # File: plotNuc.pl # Time-stamp: <2010-11-22 10:16:45> # $Id: $ # # Copyright (C) 2010 by tmjdone # # Author: tmjdone # # Description: # use strict; use Data::Dumper; use Getopt::Long; use Pod::Usage; use Bio::SeqIO; #################################################################### ## OPTIONS #################################################################### GetOptions( "help|h!" => /my $help, "version|v!" => /my $version ) or pod2usage( verbose => 0, exitstatus => 1 ); if ($help) { pod2usage( verbose => 1, exitstatus => 0 ); } if ($version) { print $version; exit 0; } ################################################################# ## MAIN ################################################################# my ($dir,$ext)=@ARGV; my @files=glob("$dir/*.$ext"); my $canvas_height="200"; my $canvas_width="600"; open(F,'>',"$dir.html") or die("$!: $dir.html/n"); print F ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>',$dir,'</title> <mce:script type="text/javascript"><!-- var fasta=new Array(); '; my $count=0; foreach my $file(sort @files){ my $in=Bio::SeqIO->new(-file=>$file,-format=>'fasta'); my $string=""; while(my $s=$in->next_seq){ my $id=$s->id; my $seq=$s->seq; $string .= "/"$id/",/"$seq/","; } chop($string); print F "fasta[",$count,"]=new Object();/n"; print F "fasta[",$count,"].filename=/"$file/";/n"; print F "fasta[",$count,"].seq=[$string];/n"; $count++; } print F ' function draw(fasta){ var x_max=600; var y_max=200; var x=0; var y=0; var fontsize=10; var bar_height=30; var bar_mid=10; for(var i=0;i<fasta.length;i++){ var canvas=document.getElementById(i); var ctx= canvas.getContext("2d"); var seqs=fasta[i].seq; var start_y=0; ctx.font="10pt Arial"; ctx.fillStyle="black"; ctx.fillText(fasta[i].filename,0,fontsize); start_y+=1.2*fontsize; for(var j=0;j+1<seqs.length;j+=2){ var id=seqs[j]; var seq=seqs[j+1]; var seq_tmp=seq.replace(/([^-])-/g,"$1,-"); seq_tmp=seq_tmp.replace(/-([^-])/g,"-,$1"); var group=seq_tmp.split(","); var color="gray"; var start_x=0; var end_x=x_max; ctx.fillStyle=color; start_y+=1.2*fontsize; ctx.fillText(id,0,start_y); start_y+=0.2*fontsize; for(var k=0;k<group.length;k++){ if(group[k].match(/-/)){ color="rgba(5,5,5,0.2)"; } else{ color="rgba(255,0,0,0.5)"; } var len=group[k].length; len=len*x_max/seq.length; end_x=start_x+len; ctx.fillStyle=color; ctx.fillRect(start_x,start_y,len,bar_height); start_x+=len; } start_y+=bar_height+bar_mid; } } } // --></mce:script> </head> <body> '; print F ' <table border="1" id="table"> '; my $count=0; foreach my $file(sort @files) { print F "<tr>/n"; print F "<td>/n"; print F '<canvas id="',$count,'" width="',$canvas_width,'" height="',$canvas_height,'"></canvas>',"/n"; print F "</td>/n"; print F "</tr>/n"; $count++; } print F ' </table> <mce:script type="text/javascript"><!-- draw(fasta); // --></mce:script> '; close(F); ################################################################# ## SUBS ################################################################# __END__ ################################################################### ## Now Docs... ################################################################### =head1 NAME plotNuc.pl - DESCRIBE ME =head1 SYNOPSIS plotNuc.pl [-h] [-v] =head1 OPTIONS =over 1 =item B<-h|--help> Print help message and exit successfully. =item B<-v|--version> Print version information and exit successfully. =back =cut 使用说明: plotNuc.pl dir ext dir 包含多重序列比对文件的文件夹 ext 多重序列比对文件后缀 生成dir.html