#! /usr/local/bin/perl
use Getopt::Long;

@optionset_names = qw( gps.statnames.full gps.statnames.short );
@optionset_names{ @optionset_names } = qw( ADVANCED BASIC );

@version_names =  qw(	gs5_oo21_gold93_UL_NA 
			gs5_oo21_gold93_archived gs5_oo21_gold93 
			gs5_oo20_gold90 gs5_oo20_gold89 
			gs5_oo20_gold84 gs4_oo19_gold84 gs3_oo15_gold74 gs2_oo13_gold52);
@freeze{ @version_names} =
	('Oct 29 (UL & NA)','Oct 29 (archived)','Oct 29' , 'Oct 7 (V3)', 'Oct 7 (V2)','October 7' ,'Sept 5 (V2)', 'July 17', 'June 15' );

$default_version = 'gs5_oo21_gold93_UL_NA';

@default_display = qw(input_bp.number
	clone_size.number
	input_bp.sum
	barge_size.sum
	input_frags.sum
	clone_fragments.sum
	input_gc.mean
	finished_clone_size.sum
	draft_clone_size.sum
	predraft_clone_size.sum
	);

if (defined $ENV{QUERY_STRING}) {
#	print "<BLINK>$ENV{QUERY_STRING}</BLINK>";
	while ($ENV{QUERY_STRING} =~ /column[\ds]*=([^&]+)/g) {push(@display,split (/,/,$1))};
	if ($ENV{QUERY_STRING} =~ /action=([^&]+)/i) {$action = $1};
	if ($ENV{QUERY_STRING} =~ /version=([^&]+)/i) {$version = $1};
	if ($ENV{QUERY_STRING} =~ /statnames=([^&]+)/i) {$statnames = $1};
	if ($ENV{QUERY_STRING} =~ /mode=([^&]+)/i) {$mode = $1};
	if ($ENV{QUERY_STRING} =~ /ordered=([^&]+)/i) {$ordered = $1};
	if ($ENV{QUERY_STRING} =~ /nocomma/i) {$nocomma = 1};
#	print "[",join ("+", @display),"]";
	}
#else {print "No Query String Detected..."};

$numcols = ($statnames =~ /full$/i)? 20 : 10 ;
GetOptions( 	"rowheadcolorAlpha=s" => \$rowheadcolorAlpha,
		"rowheadcolorBeta=s" => \$rowheadcolorBeta,
		"rowcolorBeta=s" => \$rowcolorBeta,
		"rowcolorAlpha=s" => \$rowcolorAlpha,
		"version=s" => \$version,
		"statnames=s" => \$statnames
		);

if ($ul or $na) { @chromos = ('all',1..22,qw(X Y NA UL))}
else  {@chromos = ('all',1..22,qw(X Y))} 
#@chromos = ('all',1..22,qw(X Y NA UL));

$presetviews = << "__end_presets__";
<TABLE BORDER=0 BGCOLOR='$rowcolorBeta'>
<TR><TH> Preset Views</TH></TR>
<TR><TD>
<UL>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=input_bp.number&column2=clone_size.number&column3=input_bp.sum&column4=barge_size.sum&column5=input_frags.sum&column6=clone_fragments.sum&column7=input_gc.mean&column8=finished_clone_size.sum&column9=draft_clone_size.sum&column10=predraft_clone_size.sum&statnames=gps.statnames.full">
Basic Assembly Stats</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=barge_size.sum&column2=finished_clone_size.sum&column3=deep_raft_size.sum&column4=draft_raft_size.sum&column5=finished_raft_size.mean&column6=deep_raft_size.mean&column7=draft_raft_size.mean&column8=finished_raft_size.lander_median&column9=deep_raft_size.lander_median&column10=draft_raft_size.lander_median">
Jim Kent's 'Top Ten' List</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=input_bp.number&column2=input_bp.sum&column3=clone_size.number&column4=barge_size.sum&column5=finished_clone_size.number&column6=finished_clone_size.sum&column7=draft_clone_size.number&column8=draft_clone_size.sum&column9=predraft_clone_size.number&column10=predraft_clone_size.sum&version=gs4_oo18_gold84&statnames=gps.statnames.full">
'Basic Clone Phase Breakdown'</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=contig_size.lander_median&column2=raft_size.median&column3=raft_size.lander_median&column4=finished_raft_size.lander_median&column5=deep_raft_size.lander_median&column6=draft_raft_size.lander_median&column7=not_finished_raft_size.lander_median">
Some 'Weighted Medians' of Interest</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=dk_fin.wmed&column2=finished_raft_size.lander_median&column3=finished_raft_size.median&column4=finished_raft_size.mean&column5=&column6=&column7=&column8=&column9=&column10=&version=gs4_oo18_gold84&statnames=gps.statnames.full">
Comparing some various 'Averages'
</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column2=input_bp.number&column3=input_finished_clone_size.number&column4=input_finished_clone_size.sum&column5=input_draft_clone_size.number&column6=input_draft_clone_size.sum&column7=input_predraft_clone_size.number&column8=input_predraft_clone_size.sum&nada=View+Table&version=gs4_oo19_gold84&statnames=gps.statnames.full">
Table 3.3
</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=gplen&column2=barge_size.sum&column3=finished_clone_size.sum&column4=draft_clone_size.sum&column5=predraft_clone_size.sum&column6=contig_gaps&column7=bridged_gaps&column8=unbridged_gaps&column9=raft_gaps&column10=raft_size.number&column11=raft_size.lander_median&column12=scaffold_size.number&column13=scaffold_size.lander_median&column14=bridged_gaps_fraction&nada=View+Table&version=gs5_oo21_gold93&statnames=gps.statnames.full">
Table 3.16
</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=input_frags.sum&column2=input_frags_size.mean&column3=input_frags_size.lander_median&column4=raft_size.number&column5=raft_size.mean&column6=raft_size.lander_median&column7=scaffold_size.number&column8=scaffold_size.mean&column9=scaffold_size.lander_median&column10=&column11=&column12=&column13=&column14=&column15=&column16=&column17=&column18=&column19=&column20=&nada=View+Table&version=gs4_oo19_gold84&statnames=gps.statnames.full">
Table 3.16.2: Sequence Contig Scale Assembly
</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=barge_size.number&column2=barge_size.lander_median&column3=barge_size.mean&column4=clone_scaffold_size.number&column5=clone_scaffold_size.lccb.50&column6=clone_scaffold_size.mean&column7=contig_size.number&column8=contig_size.lander_median&column9=contig_size.mean&column10=&column11=&column12=&column13=&column14=&column15=&column16=&column17=&column18=&column19=&column20=&nada=View+Table&version=gs4_oo19_gold84&statnames=gps.statnames.full">
Table 3.16.3: Clone Contig Scale Assembly
</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=input_finished_clone_size.number&column2=input_draft_clone_size.number&column3=input_predraft_clone_size.number&column4=finished_clone_size.number&column5=draft_clone_size.number&column6=predraft_clone_size.number&column7=contig_size.number&column8=contig_size.lander_median&column9=contig_size.mean&column10=&column11=&column12=&column13=&column14=&column15=&column16=&column17=&column18=&column19=&column20=&nada=View+Table&version=gs4_oo19_gold84&statnames=gps.statnames.full">
Table 3.5 (INput/Output Clone Breakdown)
</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=finished_raft_size.number&column2=finished_raft_size.sum&column3=finished_raft_size.mean&column4=deep_raft_size.number&column5=deep_raft_size.sum&column6=deep_raft_size.mean&column7=draft_raft_size.number&column8=draft_raft_size.sum&column9=draft_raft_size.mean&column10=&column11=&column12=&column13=&column14=&column15=&column16=&column17=&column18=&column19=&column20=&nada=View+Table&version=gs5_oo21_gold93_UL_NA&statnames=gps.statnames.full">
Sequence Contig Breakdown
</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=input_finished_clone_size.number&column2=input_finished_clone_size.sum&column3=input_draft_clone_size.number&column4=input_draft_clone_size.sum&column5=input_predraft_clone_size.number&column6=input_predraft_clone_size.sum&column7=&column8=&column9=&column10=&column11=&column12=&column13=&column14=&column15=&column16=&column17=&column18=&column19=&column20=&nada=View+Table&statnames=gps.statnames.full">
Table 3.3
</A>

</UL>
</TD></TR></TABLE>
__end_presets__

open (HELP,"definitions.html") || die ("Can't open definitions file");
#@defs = <HELP>;
while (<HELP>) {
	s{<dl>}{<TABLE BORDER=0 CELLSPACING=5>}ig;
	s{</dl>}{</TABLE>}ig;
	s{<dc>}{<TR><TH COLSPAN=2>}ig;
	s{</dc>}{</TH></TR>}ig;
	s{<dt>}{<TR><TH VALIGN=TOP ALIGN=RIGHT BGCOLOR='$rowheadcolorAlpha'>}ig;
	s{</dt>}{</TH>}ig;
	s{<dd>}{<TD ALIGN=LEFT VALIGN=TOP  BGCOLOR='$rowcolorAlpha'>}ig;
	s{</dd>}{</TD></TR>}ig;
	$presetviews .= $_;
	};

#join "\n",@defs;
close HELP;

$version = $version || $default_version;

if (($action ne 'configure') && !$freeze{$version}) {print "<B>Unknown Version $version...defaulting to $default_version</b><BR>\n";
				$version = $default_version;}

$statnames = $statnames || 'gps.statnames.full';

unless ($freeze{$version}) {die ("Unknown Version: $version!")};

if ( open(STATNAMES,"$statnames") ) { 
	while (<STATNAMES>) {if (/(\S+)\s*=([^\n]+)\n/) {$statnames{$1} = $2}; push (@statopts,$1); };
	close STATNAMES;
	}
else {print "Ack!";die("Can't open file: '$statnames' for Stat definitions...\n")};

if ( $display[0] eq 'all' ) {print "<blink>USING ALL COLS[$display[0]][@display]</BLINK>" if $verbose;@display = sort keys %statnames}

if ($action eq 'configure') {
#	print "<TABLE WIDTH='100%'><TR><TH WIDTH='50%'></TH><TH WIDTH='50%'>Custom View</TH></TR>\n";
	print "<TABLE WIDTH='100%'>\n";

	print "<TR><TD ALIGN='CENTER' WIDTH='50%'>$presetviews</TD><TD ALIGN=CENTER VALIGN=TOP WIDTH='50%'>";


	print "<TABLE border=0>";
	print "<TR><TD BGCOLOR='$rowheadcolorBeta' COLSPAN=2><B><CENTER>Custom View</CENTER></B></TD></TR>\n";
	print "<FORM ACTION='http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml' METHOD='GET'>";
	for $colnum (1..$numcols) {
		print "<TR><TD ALIGN='RIGHT' BGCOLOR='$rowcolorAlpha'>Column $colnum: </TD>";
		print "<TD ALIGN='LEFT' BGCOLOR='$rowcolorAlpha'><SELECT NAME='column$colnum'><OPTION VALUE=''>NONE</OPTION>";
		print map {"<OPTION VALUE='$_'>$statnames{$_}</OPTION>\n";} @statopts;
		print "</SELECT></TD></TR>";
		}

	print "<TR><TD ALIGN='CENTER' COLSPAN=2 BGCOLOR='$rowheadcolorAlpha'> <INPUT TYPE=SUBMIT name='nada' VALUE='View Table'>\n";
	print " Using Version: <SELECT NAME='version'>";
	for (@version_names) {print "<OPTION VALUE='$_'>$_ ($freeze{$_})</OPTION>"};
	print "</SELECT><INPUT TYPE=HIDDEN NAME='statnames' VALUE='gps.statnames.full'></FORM></TD></TR>\n"; 


	print "<TR><TD BGCOLOR='$rowheadcolorBeta' COLSPAN=2><FORM ACTION='tester.shtml' METHOD='GET'><INPUT TYPE=HIDDEN NAME='action' VALUE='configure'>\n";
	print "(<INPUT TYPE=SUBMIT VALUE='Use'> </FONT>";
	print "(<SELECT NAME='statnames'>\n";
	for (@optionset_names) {
		print "<OPTION VALUE='$_'";
		if ($statnames eq $_) {print "SELECTED"};
		print ">$optionset_names{$_}</OPTION>"};
	print "</SELECT> options)</FORM></TD></TR>\n"; 

	print "<TR><TD BGCOLOR='$rowheadcolorBeta' COLSPAN=2>Select a statistic to view over chromosomes and genome-wide from any of the following drop down menus,\n";
	print "each corresponding to a column in table labeled left to right 1 through $numcols\n";
	print "</TD></TR>\n";

	print "</TABLE></TD></TR></TABLE></CENTER><HR>";
	}
 else {
	if ($#display == -1) {@display = @default_display};
	for $chr (@chromos) {$stats{$chr} = &GetChromoStats($chr,\@display)};


	if ($mode =~ /csv/i) {
		print "<PRE>\n";
		print join ("\t",'Chrom', map {"$statnames{$_}";} @display),"\n";
		for $chr (@chromos) {
			print join ("\t",$chr, map {commify( $stats{$chr}{$_} );} @display),"\n";
			}
		print "</PRE>\n";

		}
	else { #HTML OUTPUT
	print "<CENTER><B><FONT SIZE=+1><FORM ACTION='tester.shtml' METHOD='GET'><INPUT TYPE=HIDDEN NAME='action' VALUE='configure'>\n";
	print "<INPUT TYPE=SUBMIT VALUE='Configure'> the statistics diplayed in this table\n";

	print "(using <SELECT NAME='statnames'>";
	for (@optionset_names) {
		print "<OPTION VALUE='$_'";
		if ($statnames eq $_) {print "SELECTED"};
		print ">$optionset_names{$_}</OPTION>"};
	print "</SELECT> options )</B></FONT>\n"; 
	print "<A HREF='tester.shtml?". $ENV{QUERY_STRING} ."&mode=CSV'>View</A> tab-delimited version<BR></FORM>";

	print "<B><FONT SIZE=+2>Golden Path Statistics (version $version = $freeze{$version} Freeze)</FONT></B><BR>\n";

	print "<TABLE border=1>\n","<TR align='center'><TH>Chromo</TH>\n";
	for (@display) {print "<TH>",$statnames{$_},"</TH>";}
	print "</TR>\n";
	for $chr (@chromos) {
		$rowcolor = ($i++ % 2 == 0) ? $rowcolorAlpha || '#CCBBBB' : $rowcolorBeta || '#BBCCBB';
		$rowheadcolor = ($i % 2 == 1) ? $rowheadcolorAlpha || '#DDCCCC' : $rowheadcolorBeta ||'#CCDDCC' ;
		print "<TR align='right'><TH bgcolor = '$rowheadcolor' >$chr</TH>\n";
		for (@display) {
			if ($nocomma) {print "<TD bgcolor = '$rowcolor'>",$stats{$chr}{$_} ,"</TD>\n"}
			else {print "<TD bgcolor = '$rowcolor'>",commify( $stats{$chr}{$_} ),"</TD>\n"};

			}
		print "</TR>\n";
		}
	print "</TABLE>\n";
	print "</CENTER></BODY></HTML>\n";
	} #DONE WITH HTML OUTPUT
	} # Done with main task loop

sub commify {
	my ($num) = @_;
	my $text = reverse $num;
	$text =~ s|(\d\d\d)(?=\d)(?!\d*\.)|$1,|g;
	return scalar reverse $text;
	}

sub GetChromoStats {

	my ($chr,$arrayref) =@_;
	@stats = @{ $arrayref };
	open(GPS,"$version/$chr/gps.shtml") || die ("Can't open $chr/gps.shtml\n");
	while (<GPS>) {
		for $target (@stats) {
			if (/var='$target' value='([^']*)'/) {$found{$target} = $1 || '0'}
			}
		}
	close GPS;
	return { %found };

	}


