[Bio] / FigKernelScripts / svr_subsystem_spreadsheet.pl Repository:
ViewVC logotype

View of /FigKernelScripts/svr_subsystem_spreadsheet.pl

Parent Directory Parent Directory | Revision Log Revision Log

Revision 1.1 - (download) (as text) (annotate)
Wed Aug 11 20:36:18 2010 UTC (9 years, 3 months ago) by parrello
Branch: MAIN
CVS Tags: mgrast_dev_08112011, mgrast_dev_08022011, rast_rel_2014_0912, myrast_rel40, mgrast_dev_05262011, mgrast_dev_04082011, rast_rel_2010_0928, mgrast_version_3_2, mgrast_dev_12152011, mgrast_dev_06072011, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2011_0119, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, mgrast_dev_04012011, rast_rel_2010_0827, myrast_33, rast_rel_2011_0928, mgrast_dev_04052011, mgrast_dev_02222011, mgrast_dev_10262011, HEAD
subsystem download scripts.

#!/usr/bin/perl -w
use strict;

use Getopt::Long;
use SAPserver;
use ScriptThing;

#	This is a SAS Component.

=head1 svr_subsystem_spreadsheet

    svr_subsystem_spreadsheet "subsystem ID" >sub_data.tbl

Output a subsystem's spreadsheet.

This script takes as input a subsystem name on the command line and produces a
tab-delimited file that organizes the features of the subsystem by genome and role.
There will be one output line per genome. The first column will contain the genome ID,
the second the relevant variant code, and then each other column will correspond to one
of the subsystem's roles (effectively, a spreadsheet cell). The features performing the
role in the subsystem will be placed in the appropriate position as a comma-delimited list.

Note that because the subsystem name likely contains spaces, it will need to be
enclosed in quotes on the command-line.

=head2 Command-Line Options

=over 4

=item url

The URL for the Sapling server, if it is to be different from the default.

=item aux

If specified, auxiliary roles will be included in the output. Normally these are



# Parse the command-line options.
my $url = '';
my $aux;
my $opted =  GetOptions('url=s' => \$url, aux => \$aux);
my $subID = $ARGV[0];
if (! $opted || ! $subID) {
    print "usage: svr_subsystem_spreadsheet [--url=http://...] [--aux] \"subsystem name\" >output\n";
} else {
    # Get the server object.
    my $sapServer = SAPserver->new(url => $url);
    # Get the roles.
    my $subHash = $sapServer->subsystem_roles(-ids => $subID, -aux => $aux, -abbr => 1);
    my $roles = $subHash->{$subID};
    if (! $roles) {
        print STDERR "Could not find \"$subID\".\n";
    } else {
        # Build a hash that maps role IDs to role indices.
        my %roleHash;
        for (my $i = 0; $i < @$roles; $i++) {
            $roleHash{$roles->[$i][0]} = $i;
        # Now get the subsystem's genomes and features.
        $subHash = $sapServer->pegs_in_variants(-subsystems => $subID);
        # Loop through the genomes, producing spreadsheet rows.
        my $genomeHash = $subHash->{$subID};
        for my $genome (sort { $a <=> $b } keys %$genomeHash) {
            # Get the row for this genome.
            my $ssRow = $genomeHash->{$genome};
            # Yank out the variant code.
            my $variant = shift @$ssRow;
            # The spreadsheet cells will be put in here.
            my @cells;
            # Now we loop through the row, putting feature IDs in cells.
            for my $ssCell (@$ssRow) {
                # Get the role ID and the features;
                my ($role, @fids) = @$ssCell;
                # If this role is one we're interested in, put the features in the cell.
                my $cellIndex = $roleHash{$role};
                if (defined $cellIndex) {
                    $cells[$cellIndex] = join(', ', @fids);
            # Form all the cells into an output line.
            my $line = join("\t", $genome, $variant, map { $_ || '' } @cells);
            print "$line\n";

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3