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 )