—#!perl
use
strict;
use
Data::Dumper;
use
Carp;
#
# This is a SAS Component
#
=head1 genomes_to_genome_data
Example:
genomes_to_genome_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 genomes_to_genome_data. It is documented as follows:
$return = $obj->genomes_to_genome_data($genomes)
=over 4
=item Parameter and return types
=begin html
<pre>
$genomes is a genomes
$return is a reference to a hash where the key is a genome and the value is a genome_data
genomes is a reference to a list where each element is a genome
genome is a string
genome_data is a reference to a hash where the following keys are defined:
complete has a value which is an int
contigs has a value which is an int
dna_size has a value which is an int
gc_content has a value which is a float
genetic_code has a value which is an int
pegs has a value which is an int
rnas has a value which is an int
scientific_name has a value which is a string
taxonomy has a value which is a string
genome_md5 has a value which is a string
</pre>
=end html
=begin text
$genomes is a genomes
$return is a reference to a hash where the key is a genome and the value is a genome_data
genomes is a reference to a list where each element is a genome
genome is a string
genome_data is a reference to a hash where the following keys are defined:
complete has a value which is an int
contigs has a value which is an int
dna_size has a value which is an int
gc_content has a value which is a float
genetic_code has a value which is an int
pegs has a value which is an int
rnas has a value which is an int
scientific_name has a value which is a string
taxonomy has a value which is a string
genome_md5 has a value which 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: rnas gc_content dna_size taxonomy scientific_name contigs genome_md5 pegs genetic_code complete.
Input lines that cannot be extended are written to stderr.
=cut
my
$usage
=
"usage: genomes_to_genome_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
) {
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
->genomes_to_genome_data(\
@h
);
for
my
$tuple
(
@tuples
) {
#
# Process output here and print.
#
my
(
$id
,
$line
) =
@$tuple
;
my
$v
=
$h
->{
$id
};
if
(!
defined
(
$v
))
{
STDERR
$line
,
"\n"
;
}
elsif
(
ref
(
$v
) eq
'ARRAY'
)
{
foreach
$_
(
@$v
)
{
"$line\t$_\n"
;
}
}
else
{
my
$rna
=
$v
->{rnas};
my
$gc
=
$v
->{gc_content};
my
$dna_size
=
$v
->{dna_size};
my
$tax
=
$v
->{taxonomy};
my
$name
=
$v
->{scientific_name};
my
$contigs
=
$v
->{contigs};
my
$md5
=
$v
->{genome_md5};
my
$pegs
=
$v
->{pegs};
my
$gcode
=
$v
->{genetic_code};
my
$complete
=
$v
->{complete};
"$line\t$rna\t$gc\t$dna_size\t$tax\t$name\t$contigs\t$md5\t$pegs\t$gcode\t$complete\n"
;
}
}
}