#!perl
use strict;
use Carp;
#
# This is a SAS Component
#
=head1 complexes_to_complex_data
Example:
complexes_to_complex_data [arguments] < input > output
The standard input should be a tab-separated table (i.e., each line
is a tab-separated set of fields). Normally, the last field in each
line would contain the identifer. If another column contains the identifier
use
-c N
where N is the column (from 1) that contains the subsystem.
This is a pipe command. The input is taken from the standard input, and the
output is to the standard output.
=head2 Documentation for underlying call
This script is a wrapper for the CDMI-API call complexes_to_complex_data. It is documented as follows:
$return = $obj->complexes_to_complex_data($complexes)
=over 4
=item Parameter and return types
=begin html
<pre>
$complexes is a complexes
$return is a reference to a hash where the key is a complex and the value is a complex_data
complexes is a reference to a list where each element is a complex
complex is a string
complex_data is a reference to a hash where the following keys are defined:
complex_name has a value which is a name
complex_roles has a value which is a roles_with_flags
complex_reactions has a value which is a reactions
name is a string
roles_with_flags is a reference to a list where each element is a role_with_flag
role_with_flag is a reference to a list containing 2 items:
0: a role
1: an optional
role is a string
optional is a string
reactions is a reference to a list where each element is a reaction
reaction is a string
</pre>
=end html
=begin text
$complexes is a complexes
$return is a reference to a hash where the key is a complex and the value is a complex_data
complexes is a reference to a list where each element is a complex
complex is a string
complex_data is a reference to a hash where the following keys are defined:
complex_name has a value which is a name
complex_roles has a value which is a roles_with_flags
complex_reactions has a value which is a reactions
name is a string
roles_with_flags is a reference to a list where each element is a role_with_flag
role_with_flag is a reference to a list containing 2 items:
0: a role
1: an optional
role is a string
optional is a string
reactions is a reference to a list where each element is a reaction
reaction is a string
=end text
=back
=head2 Command-Line Options
=over 4
=item -c Column
This is used only if the column containing the subsystem is not the last column.
=item -i InputFile [ use InputFile, rather than stdin ]
=back
=head2 Output Format
The standard output is a tab-delimited file. It consists of the input
file with extra columns added in this order: complex_name complex_reactions complex_roles (flag role).
Input lines that cannot be extended are written to stderr.
=cut
my $usage = "usage: complexes_to_complex_data [-c column] < input > output";
my $column;
my $input_file;
my $kbO = Bio::KBase::CDMI::CDMIClient->new_for_script('c=i' => \$column,
'i=s' => \$input_file);
if (! $kbO) { print STDERR $usage; exit }
my $ih;
if ($input_file)
{
open $ih, "<", $input_file or die "Cannot open input file $input_file: $!";
}
else
{
$ih = \*STDIN;
}
while (my @tuples = Bio::KBase::Utilities::ScriptThing::GetBatch($ih, undef, $column)) {
my @h = map { $_->[0] } @tuples;
my $h = $kbO->complexes_to_complex_data(\@h);
for my $tuple (@tuples) {
#
# Process output here and print.
#
my ($id, $line) = @$tuple;
my $v = $h->{$id};
if (! defined($v))
{
print STDERR $line,"\n";
}
elsif (ref($v) eq 'ARRAY')
{
foreach $_ (@$v)
{
print "$line\t$_\n";
}
}
else
{
my $roles = $v->{complex_roles};
my @role_strings = map {join("", $_->[1], "\t", $_->[0])} @$roles;
my $rol = join(",", @role_strings);
my $name = $v->{complex_name};
my $reactions = $v->{complex_reactions};
my $reaction_strings = join("\t", @$reactions);
print "$line\t$name\t$reaction_strings\t$rol\n";
}
}
}