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

View of /FigWebServices/SimBlockPattern.cgi

Parent Directory Parent Directory | Revision Log Revision Log

Revision 1.5 - (download) (annotate)
Fri Jul 28 02:07:28 2006 UTC (13 years, 10 months ago) by parrello
Branch: MAIN
Changes since 1.4: +3 -3 lines
Changed to use the new PageBuilder call signature.

#!/usr/bin/perl -w
# Copyright (c) 2003-2006 University of Chicago and Fellowship
# for Interpretations of Genomes. All Rights Reserved.
# This file is part of the SEED Toolkit.
# The SEED Toolkit is free software. You can redistribute
# it and/or modify it under the terms of the SEED Toolkit
# Public License.
# You should have received a copy of the SEED Toolkit Public License
# along with this program; if not write to the University of Chicago
# at info@ci.uchicago.edu or the Fellowship for Interpretation of
# Genomes at veronika@thefig.info or download a copy from
# http://www.theseed.org/LICENSE.TXT.

    # 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

For debugging purposes, you can specify the B<Trace> parameter to
set the tracing level. 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>).


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

# Get the CGI parameters and set up the variable hash.
my ($query, $varHash) = ScriptSetup();
# Do this next part safely.
eval {
    # 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 big block in the middle of
    # the web page.
    my $simBlock = SimBlocks->new();
    my $webData = "";
    # 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");
        $webData .= $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");
    $webData .= $snipData;
    # Put the web page data into the variable hash.
    $varHash->{Data} = $webData;
# Trace any error that occurred.
if ($@) {
    Trace($@) if T(0);
# Write out the web page.
ScriptFinish("Html/SimBlockPattern.html", $varHash);


MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3