4a62e3df45e78063b5dba737f51749a8bd829505
[htsworkflow.git] / htswanalysis / scripts / SummarizeLibrary.pm
1 #!/usr/bin/perl -w
2
3 use strict;
4 use warnings;
5
6 use XML::Simple;
7
8 my $filename = shift;
9 my $standalone = shift;
10
11 my %month;
12 $month{0} = "Jan";
13 $month{1} = "Jan";
14 $month{2} = "Feb";
15 $month{3} = "Mar";
16 $month{4} = "Apr";
17 $month{5} = "May";
18 $month{6} = "Jun";
19 $month{7} = "Jul";
20 $month{8} = "Aug";
21 $month{9} = "Sep";
22 $month{10} = "Oct";
23 $month{11} = "Nov";
24 $month{12} = "Dec";
25
26 if(defined($standalone)) { print "<HTML><HEAD><TITLE>Sequencing Summary</TITLE></HEAD><BODY>\n"; }
27
28 my $total_reads = 0;
29 my $summary = SummarizeLibrary($filename);
30
31 printf ("<H1>Solexa Sequencing Summary</H1><H2>Over %0.2f Billion Bases (%0.2f Human Genomes) Served</H2>\n",25*$total_reads/1e9,25*$total_reads/3.3e9);
32
33 print $summary;
34
35 if(defined($standalone)) { print "</BODY></HTML>\n"; }
36
37 sub SummarizeLibrary {
38   my $xml_file = shift;
39   my $xml = XMLin($xml_file, ForceArray => 1);
40
41   my $summary = "";
42
43   $summary .= "<TABLE BORDER=1><TR><TD><EM>Library</EM></TD><TD><EM>Name</EM></TD><TD><EM>Num Lanes</EM></TD><TD><EM>Num Reads</EM></TD><TD><EM>First Lane</EM></TD><TD><EM>Most Recent Lane</EM></TD><TD><EM>Qtr. Start</EM></TD><TD><EM>Qtr. Complete</EM></TD></TR>\n";
44
45   for my $x (0..scalar(@{$xml->{Library}})-1) {
46     my $i = scalar(@{$xml->{Library}})-1-$x;
47     my $lib = $xml->{Library}->[$i]->{Name};
48     my $N = scalar(@{$xml->{Library}->[$i]->{Track}});
49     my($date,$fc,$lane,$desc);
50     my $num_reads = 0;
51     my $num_lanes = 0;
52
53     my($start_date,$end_date);
54     for my $t (0..$N-1) {
55       my $filename = `basename $xml->{Library}->[$i]->{Track}->[$t]->{Filename}`;
56       $filename =~ /^(\d+)_(.+?)_s(\d+)_(.+?)_$lib.align/;
57       ($date,$fc,$lane,$desc) = ($1,$2,$3,$4);
58       $num_lanes += length($lane);
59       $num_reads += $xml->{Library}->[$i]->{Track}->[$t]->{Count};
60       if(!defined($start_date)) {
61         $start_date = $date;
62         $end_date = $date;
63       }
64
65       if($date < $start_date) { $start_date = $date; }
66       if($date > $end_date) { $end_date = $date; }
67     }
68   
69     my $bgcolor;
70     if($num_reads < 3000000) { $bgcolor = "FF3300"; }
71     elsif($num_reads < 5000000) { $bgcolor = "FFCC33"; }
72     elsif($num_reads < 10000000) { $bgcolor = "00CCFF"; }
73     else { $bgcolor = "66FF66"; }
74
75     $total_reads += $num_reads;
76     
77     $start_date =~ /(\d\d)(\d\d)(\d\d)/;
78     my $start_year = 2000+$1; my $start_mo_d = int($2); my $start_mo = $month{$start_mo_d}; my $start_day = $3;
79     my $start_q; my $start_color; if($start_mo_d <= 3) { $start_q = "Q1, $start_year"; $start_color = "#66FFFF"; } elsif($start_mo_d <= 6) { $start_q = "Q2, $start_year";$start_color = "#FFFF66";  } elsif($start_mo_d <= 9) { $start_q = "Q3, $start_year"; $start_color = "#FF66FF"; } else { $start_q = "Q4, $start_year"; $start_color = "#DEDEDE"; }
80
81     $end_date =~ /(\d\d)(\d\d)(\d\d)/;
82     my $end_year = 2000+$1; my $end_mo_d = int($2); my $end_mo = $month{$end_mo_d}; my $end_day = $3;
83     my $end_q; my $end_color; if($end_mo_d <= 3) { $end_q = "Q1, $end_year"; $end_color = "#66FFFF"; } elsif($end_mo_d <= 6) { $end_q = "Q2, $end_year";$end_color = "#FFFF66";  } elsif($end_mo_d <= 9) { $end_q = "Q3, $end_year"; $end_color = "#FF66FF"; } else { $end_q = "Q4, $end_year"; $end_color = "#DEDEDE"; }
84
85     if($num_reads < 10000000) { $end_color = "#FFFFFF"; $end_q = ""; }
86
87     if($start_day == 0) { $start_day = 1; } if($end_day == 0) { $end_day = 1; }
88     $summary .= sprintf("<TR BGCOLOR=#%s><TD>%s</TD><TD>%s</TD><TD>%d</TD><TD>%0.2fM</TD><TD>%s %d, %d</TD><TD>%s %d, %d</TD><TD BGCOLOR=$start_color>$start_q</TD><TD BGCOLOR=$end_color>$end_q</TD></TR>\n",$bgcolor,$lib,$desc,$num_lanes,$num_reads/1000000.0,$start_mo,$start_day,$start_year,$end_mo,$end_day,$end_year);
89   }
90   
91   $summary .= "</TABLE>\n";
92
93   return $summary;
94 }