#!/usr/bin/perl -w
=head1 Feature Location Computer
This script adds feature locations to a data mining stream. The locations
are formatted as Sprout locations, consisting of the contig ID, the start
position, the direction, and the length. If a feature has multiple
locations, each one will produce a separate output line.
The currently-supported command-line options are as follows.
=over 4
=item keyColumn
Name or number of the column containing the feature ID.
=item user
Name suffix to be used for log files. If omitted, the PID is used.
=item trace
Numeric trace level. A higher trace level causes more messages to appear. The
default trace level is 2. Tracing will be directly to the standard output
as well as to a CIC file in the FIG temporary directory,
where I is the value of the B option above.
=item sql
If specified, turns on tracing of SQL activity.
=item background
Save the standard and error output to files. The files will be created
in the FIG temporary directory and will be named CIC and
CIC, respectively, where I is the value of the
B option above.
=item h
Display this command's parameters and options.
=back
=cut
use strict;
use Tracer;
use FIG;
use Sprout;
use SFXlate;
use ERDB;
# Get the command-line options and parameters.
my ($options, @parameters) = StandardSetup([qw(Sprout ERDB SFXlate)],
{
keyColumn => ["Feature(id)", "column from which to take the feature ID"],
trace => ["2-", "tracing level"],
},
"",
@ARGV);
# Get the database.
my $sprout = SFXlate->new_sprout_only();
# Get the key column.
my $colName = $options->{keyColumn};
if (! $colName) {
Confess("No source column name specified.");
} else {
# Get the column headers.
my $colhdrs = ;
# Verify that we have column headers.
if (! defined($colhdrs)) {
Confess("Nothing found in input.");
} else {
# Process the column headers.
my @metaData = ERDB::ParseColumns($colhdrs);
# Find the desired key column.
my $sourceCol = ERDB::FindColumn($colhdrs, $colName);
# Write out the new column headers.
print join("\t", @metaData, 'Feature(location)') . "\n";
# We will now loop through the input, appending feature locations to each
# input line.
while (my $line = ) {
# Pull the feature ID from the line.
my @data = ERDB::ParseColumns($line);
my $keyValue = $data[$sourceCol];
# Get the feature's locations.
my @locations = $sprout->FeatureLocation($keyValue);
# Loop through the locations, producing output lines.
for my $loc (@locations) {
print join("\t", @data, $loc) . "\n";
}
}
}
}
1;