[Bio] / FigWebServices / SimBlockPattern.cgi Repository:
ViewVC logotype

View of /FigWebServices/SimBlockPattern.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (download) (annotate)
Fri Jun 10 06:21:14 2005 UTC (14 years, 9 months ago) by parrello
Branch: MAIN
CVS Tags: merge-trunktag-bobdev_news-2, Root-bobdev_news, merge-bobdev_news-1, merge-trunktag-bobdev_news-1, merge-bodev_news-3, caBIG-00-00-00, merge-bobdev_news-2, merge-trunktag-bodev_news-3
Branch point for: Branch-bobdev_news
Changes since 1.1: +37 -9 lines
Converted code to use set0 and set1 instead of set1 and set2, so that the names match the list indices.

#!/usr/bin/perl -w

BEGIN {
    # Print the HTML header.
    print "CONTENT-TYPE: text/html\n\n";
}

=head1 Similarity Block Alignment Display

This script generates a table displaying the contents of a similarity block in the
form of an alignment between the regions in the block. The basic idea is that
we get all the regions in the specified block and display the ones belonging to
genomes selected in the scrolling lists for the sets. The individual regions will
be shown as rows in a table. Each row will be created from a template fragment.
The base page uses a style sheet that has a special style called C<dna> for the
DNA display in the table row. The C<em> tag will be applied to the columns that
vary inside the block so that they are more easily detected. These columns are
identified by question marks in the block pattern found in the original block
record.

For debugging purposes, you can specify the B<Trace> parameter to
set the tracing level. You can also set the B<ShowMode> parameter to
C<1> to display a table of the parameters passed by the form. So,
for example,

C<< http://myseedurl/CGI/SimBlockPattern.cgi?Trace=3 >>

runs the standard processing script at a trace level of 3. Normally, only the
script itself and B<Tracer> tracing is active; however, you can activate other tracing modules
by appending them to the trace level. Thus,

C<< http://myseedurl/CGI/SimBlockPattern.cgi?Trace=3%20SimBlocks%20DBObject >>

activates tracing for the similarity block module (C<SimBlocks.pm>) and the data
base object (C<DBObject.pm>).

=cut

use strict;
use CGI;
use Tracer;
use PageBuilder;
use SimBlocks;

# Get the CGI parameters.
my $query = new CGI;
my $traceLevel = $query->param("Trace");
if (!defined $traceLevel || length $traceLevel == 0) {
    $traceLevel = "0";
}
TSetup("$traceLevel Tracer", "QUEUE");

# Our first task is to get the parameters. We need a list of the IDs of the selected
# genomes. These lists will be found in the "set0Genomes" and "set1Genomes" parameters.

my @set0 = $query->param("set0Genomes");
my @set1 = $query->param("set1Genomes");
my @genomes = (@set0, @set1);

# Next, we need to get the block ID. The block ID is going to be the value of the
# "set0Blocks", "set1Blocks", or "bothBlocks" parameter, depending on whether the
# "set0Button", "set1Button", or "bothButton" parameter is present.
my $blockID;
for my $setID ('set0', 'both', 'set1') {
    my $thisBlockID = $query->param("${setID}Blocks");
    if ($thisBlockID && $query->param("${setID}Button")) {
        $blockID = $thisBlockID;
    }
}
Trace("Block $blockID selected for genomes " . join ", ", @genomes) if T(2);
# Now we have all the information we need to produce the alignment. We need to
# create the similarity block object and start the web page.
my $simBlock = SimBlocks->new();
my $builder = PageBuilder::new("Html/SimBlockPattern.html", {}, "Html");
# Protect against errors.
eval {
    # Next we need the template fragment for the rows.
    my $rowFragment = Tracer::GetFile("Html/SimBlockPatternRow.html");
    # Get the block from the similarity block database and extract its pattern.
    my $blockData = $simBlock->GetBlock($blockID);
    my ($pattern) = $blockData->Value('GroupBlock(pattern)');
    # Get the regions for the block.
    my %regions = $simBlock->GetRegions($blockID, \@genomes);
    for my $region (sort keys %regions) {
        my $dna = $regions{$region};
        # Get this region's set number.
        my $setNumber = SimBlocks::SetNumber($region, \@set0, \@set1);
        # Mark the variant columns with EM tags.
        $dna = SimBlocks::TagDNA($pattern, $dna, "<em>", "</em>");
        # Create a table row for this region.
        my $row = PageBuilder::Build($rowFragment, { region => $region, dna => $dna,
                                                     setNumber => $setNumber }, "Html");
        print $row;
    }
    # Now we need to create the snip list. The snip list is a column-oriented
    # table (that is, each data item is in a separate column), so we we will
    # build the rows in parallel and plug them into the HTML fragment. First
    # we get the snip analysis.
    my %snips = $simBlock->SnipScan($blockID, \@set0, \@set1);
    # Extract the positions.
    my @positions = (sort { $a <=> $b } keys %snips);
    # Create lists for the set1 and set2 rows.
    my @set0Data = ();
    my @set1Data = ();
    # Loop through the positions.
    for my $position (@positions) {
        my $setList = $snips{$position};
        push @set0Data, $setList->[0];
        push @set1Data, $setList->[1];
    }
    # Create the rows from the lists.
    my $positionRow = join "</td><td>", @positions;
    my $set0Row = join "</td><td>", @set0Data;
    my $set1Row = join "</td><td>", @set1Data;
    # Plug them into the fragment and write it out.
    my $snipData = PageBuilder::Build("<Html/SimBlockSnipFragment.html",
                                      { positionRow => $positionRow, set0Row => $set0Row,
                                        set1Row => $set1Row }, "Html");
    print $snipData;
};
# Trace any error that occurred.
if ($@) {
    Trace($@) if T(0);
}
# Write out any trace messages.
my $qtrace = QTrace("html");
print $qtrace;
# Finish the web page.
$builder->Finish();

1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3