EdgeExpressDB
view release on metacpan or search on metacpan
lib/EEDB/Expression.pm view on Meta::CPAN
}
my $datatype_id = $class->_fetch_expression_datatype_id($feature->database, $type);
if(!$datatype_id) { return undef; }
my $sql = "SELECT * FROM expression e ".
"WHERE experiment_id=? and feature_id=? and e.datatype_id=?";
return $class->fetch_single($feature->database, $sql, $experiment->id, $feature->id, $datatype_id);
}
sub fetch_all_by_feature_experiment {
my $class = shift;
my $feature = shift; #Feature object
my $experiment = shift; #Experiment object
unless(defined($feature) && $feature->isa('EEDB::Feature')) {
die('ERROR : fetch_by_feature_experiment_type param[1] must be a EEDB::Feature');
}
unless(defined($experiment) && $experiment->isa('EEDB::Experiment')) {
die('ERROR : fetch_by_feature_experiment_type param[2] must be a EEDB::Experiment');
}
my $sql = "SELECT * FROM expression ".
"WHERE experiment_id=? and feature_id=?";
return $class->fetch_multiple($feature->database, $sql, $experiment->id, $feature->id);
}
sub fetch_all_by_feature {
my $class = shift;
my $feature = shift; #Feature object
my $type = shift; #optional type
my $sql = "SELECT * FROM expression e ".
"WHERE feature_id=?";
if(defined($type)) {
my $datatype_id = $class->_fetch_expression_datatype_id($feature->database, $type);
if(!$datatype_id) { return []; }
$sql .=" AND datatype_id=" . $datatype_id;
}
return $class->fetch_multiple($feature->database, $sql, $feature->id);
}
sub fetch_all_by_experiment {
my $class = shift;
my $experiment = shift; #Experiment object
my $sql = "SELECT * FROM expression ".
"WHERE experiment_id=? ";
return $class->fetch_multiple($experiment->database, $sql, $experiment->id);
}
sub fetch_all_feature_expression_by_named_region {
my $class = shift;
my $stream = EEDB::Expression->stream_by_named_region(@_);
return $stream->as_array;
}
###############################################################################################
#
# streaming API section
#
###############################################################################################
=head2 stream_all
Description: stream all expression (with feature) out of database
with a given set of source, experiment and datatype filters
Arg (1) : $database (MQdb::Database)
Arg (2...) : hash named filter parameters.
datatypes=>["tpm","raw"],
sources=>[$fsrc1, $fsrc2,$fsrc3], instances of EEDB::FeatureSource
experiments=>[$exp1, $exp2] instances of EEDB::Experiment
Returntype : a DBStream instance
Exceptions : none
=cut
sub stream_all {
my $class = shift;
my $db = shift; #database
my %options = @_; #like datatypes=>["tpm","raw"], sources=>[$esrc1, $esrc2,$esrc3], experiments=>[exp1]
return [] unless($db);
my @types = @{$options{'datatypes'}} if($options{'datatypes'});
my @sources = @{$options{'sources'}} if($options{'sources'});
my @experiments = @{$options{'experiments'}} if($options{'experiments'});
my @fsrc_ids;
my @exp_ids;
my @type_ids;
foreach my $source (@sources) {
next unless($source);
if($source->class eq 'FeatureSource') { push @fsrc_ids, $source->id; }
}
foreach my $exp (@experiments) {
next unless($exp);
if($exp->class eq 'Experiment') { push @exp_ids, $exp->id; }
}
foreach my $type (@types) {
my $datatype_id = $class->_fetch_expression_datatype_id($db, $type);
if($datatype_id) { push @type_ids, $datatype_id; }
}
my $sql = "SELECT * FROM feature f JOIN expression fe using(feature_id) WHERE 1=1 ";
if(@fsrc_ids) { $sql .= sprintf(" AND feature_source_id in(%s) ", join(',', @fsrc_ids)); }
if(@exp_ids) { $sql .= sprintf(" AND experiment_id in (%s) ", join(',', @exp_ids)); }
if(@type_ids) { $sql .= sprintf(" AND datatype_id in (%s) ", join(',', @type_ids)); }
$sql .= " ORDER BY chrom_id, chrom_start, chrom_end, fe.feature_id, experiment_id, datatype_id";
#print($sql, "\n");
return $class->stream_multiple($db, $sql);
}
=head2 stream_by_chrom
Description: stream all expression (with feature) on a specific EEDB::Chrom
with a given set of source, experiment and datatype filters
Arg (1) : $chrom (EEDB::Chrom object with database)
Arg (2...) : hash named filter parameters.
( run in 0.973 second using v1.01-cache-2.11-cpan-140bd7fdf52 )