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

View of /FigWebServices/SimBlockPattern.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (download) (annotate)
Wed May 4 03:17:43 2005 UTC (15 years ago) by parrello
Branch: MAIN
*** empty log message ***

#!/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 "set1Genomes" and "set2Genomes" parameters.

my @genomes = ();
push @genomes, $query->param("set1Genomes"), $query->param("set2Genomes");

# Next, we need to get the block ID. The block ID is going to be the value of the
# "set1Blocks", "set2Blocks", or "bothBlocks" parameter, depending on whether the
# "set1Button", "set2Button", or "bothButton" parameter is present.
my $blockID;
for my $setID ('set1', 'both', 'set2') {
    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->GetEntity('GroupBlock', $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};
        # 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 }, "Html");
        print $row;
    }
};
# 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