—#!perl
use
strict;
use
Data::Dumper;
use
Carp;
#
# This is a SAS Component
#
=head1 query_entity_Subsystem
Query the entity Subsystem.
A subsystem is a set of functional roles that have been annotated simultaneously (e.g.,
the roles present in a specific pathway), with an associated subsystem spreadsheet
which encodes the fids in each genome that implement the functional roles in the
subsystem.
Example:
query_entity_Subsystem -a
=head2 Related entities
The Subsystem entity has the following relationship links:
=over 4
=item Describes Variant
=item Includes Role
=item IsInClass SubsystemClass
=item IsRelevantTo Diagram
=item IsSubInstanceOf Scenario
=item WasProvidedBy Source
=back
=head2 Command-Line Options
=over 4
=item -is field,value
Limit the results to entities where the given field has the given value.
=item -like field,value
Limit the results to entities where the given field is LIKE (in the sql sense) the given value.
=item -op operator,field,value
Limit the results to entities where the given field is related to the given value based on the given operator.
The operators supported are as follows. We provide text based alternatives to the comparison
operators so that extra quoting is not required to keep the command-line shell from
confusing them with shell I/O redirection operators.
=over 4
=item < or lt
=item > or gt
=item <= or le
=item >= or ge
=item =
=item LIKE
=back
=item -a
Return all fields.
=item -h
Display a list of the fields available for use.
=item -fields field-list
Choose a set of fields to return. Field-list is a comma-separated list of
strings. The following fields are available:
=over 4
=item version
=item curator
=item notes
=item description
=item usable
=item private
=item cluster_based
=item experimental
=back
=back
=head2 Output Format
The standard output is a tab-delimited file containing a column
for each requested field.
=cut
use
Getopt::Long;
#Default fields
my
@all_fields
= (
'version'
,
'curator'
,
'notes'
,
'description'
,
'usable'
,
'private'
,
'cluster_based'
,
'experimental'
);
my
%all_fields
=
map
{
$_
=> 1 }
@all_fields
,
'id'
;
my
$usage
=
"usage: query_entity_Subsystem [-is field,value] [-like field,value] [-op operator,field,value] [-show-fields] [-a | -f field list] > entity.data"
;
my
$a
;
my
$f
;
my
@fields
;
my
$show_fields
;
my
@query_is
;
my
@query_like
;
my
@query_op
;
my
%op_map
= (
'>'
,
'>'
,
'gt'
,
'>'
,
'<'
,
'<'
,
'lt'
,
'<'
,
'>='
,
'>='
,
'ge'
,
'>='
,
'<='
,
'<='
,
'le'
,
'<='
,
'like'
,
'LIKE'
,
);
my
$geO
= Bio::KBase::CDMI::CDMIClient->new_get_entity_for_script(
"a"
=> \
$a
,
"show-fields"
=> \
$show_fields
,
"h"
=> \
$show_fields
,
"is=s"
=> \
@query_is
,
"like=s"
=> \
@query_like
,
"op=s"
=> \
@query_op
,
"fields=s"
=> \
$f
);
if
(
$show_fields
)
{
STDERR
"Available fields: @all_fields\n"
;
exit
0;
}
if
(
@ARGV
!= 0 || (
$a
&&
$f
))
{
STDERR
$usage
,
"\n"
;
exit
1;
}
if
(
$a
)
{
@fields
=
@all_fields
;
}
elsif
(
$f
) {
my
@err
;
for
my
$field
(
split
(
","
,
$f
))
{
if
(!
$all_fields
{
$field
})
{
push
(
@err
,
$field
);
}
else
{
push
(
@fields
,
$field
);
}
}
if
(
@err
)
{
STDERR
"all_entities_Subsystem: unknown fields @err. Valid fields are: @all_fields\n"
;
exit
1;
}
}
my
@qry
;
for
my
$ent
(
@query_is
)
{
my
(
$field
,
$value
) =
split
(/,/,
$ent
, 2);
if
(!
$all_fields
{
$field
})
{
die
"$field is not a valid field\n"
;
}
push
(
@qry
, [
$field
,
'='
,
$value
]);
}
for
my
$ent
(
@query_like
)
{
my
(
$field
,
$value
) =
split
(/,/,
$ent
, 2);
if
(!
$all_fields
{
$field
})
{
die
"$field is not a valid field\n"
;
}
push
(
@qry
, [
$field
,
'LIKE'
,
$value
]);
}
for
my
$ent
(
@query_op
)
{
my
(
$op
,
$field
,
$value
) =
split
(/,/,
$ent
, 3);
if
(!
$all_fields
{
$field
})
{
die
"$field is not a valid field\n"
;
}
my
$mapped_op
=
$op_map
{
lc
(
$op
)};
if
(!
$mapped_op
)
{
die
"$op is not a valid operator\n"
;
}
push
(
@qry
, [
$field
,
$mapped_op
,
$value
]);
}
my
$h
=
$geO
->query_entity_Subsystem(\
@qry
, \
@fields
);
while
(
my
(
$k
,
$v
) =
each
%$h
)
{
join
(
"\t"
,
$k
,
map
{
ref
(
$_
) eq
'ARRAY'
?
join
(
","
,
@$_
) :
$_
}
@$v
{
@fields
}),
"\n"
;
}