Bio::EnsEMBL::Funcgen::DBSQL ExperimentalChipAdaptor
SummaryIncluded librariesPackage variablesSynopsisDescriptionGeneral documentationMethods
Toolbar
WebCvsRaw content
Summary
Bio::EnsEMBL::Funcgen::DBSQL::ExperimentalChipAdaptor - A database adaptor for fetching and
storing Funcgen ExperimentalChip objects.
Package variables
No package variables defined.
Included modules
Bio::EnsEMBL::Funcgen::DBSQL::BaseAdaptor
Bio::EnsEMBL::Funcgen::ExperimentalChip
Bio::EnsEMBL::Utils::Exception qw ( warning throw )
Inherit
Bio::EnsEMBL::Funcgen::DBSQL::BaseAdaptor
Synopsis
my $ec_a = $db->get_ExperimentalChipAdaptor();
my @ecs = @{$ec_a->fetch_all_by_Experiment($exp)};
Description
The ExperimentalChipAdaptor is a database adaptor for storing and retrieving
Funcgen ExperimentalChip objects.
Methods
_columnsDescriptionCode
_objs_from_sthDescriptionCode
_tablesDescriptionCode
fetch_all_by_ArrayChipDescriptionCode
fetch_all_by_Experiment()
No description
Code
fetch_all_by_experiment_dbIDDescriptionCode
fetch_by_unique_and_experiment_idDescriptionCode
fetch_by_unique_id_vendorDescriptionCode
list_dbIDsDescriptionCode
storeDescriptionCode
update_replicate_types
No description
Code
Methods description
_columnscode    nextTop
  Args       : None
Example : None
Description: PROTECTED implementation of superclass abstract method.
Returns a list of columns to use for queries.
Returntype : List of strings
Exceptions : None
Caller : Internal
Status : Medium Risk
_objs_from_sthcodeprevnextTop
  Arg [1]    : DBI statement handle object
Example : None
Description: PROTECTED implementation of superclass abstract method.
Creates Array objects from an executed DBI statement
handle.
Returntype : Listref of Bio::EnsEMBL::Funcgen::ExperimentalChip objects
Exceptions : None
Caller : Internal
Status : At Risk
_tablescodeprevnextTop
  Args       : None
Example : None
Description: PROTECTED implementation of superclass abstract method.
Returns the names and aliases of the tables to use for queries.
Returntype : List of listrefs of strings
Exceptions : None
Caller : Internal
Status : Medium Risk
fetch_all_by_ArrayChipcodeprevnextTop
  Arg [1]    : Bio::EnsEMBL::Funcgen::ArrayChip
Example : my @ecs = @{$ec_a->fetch_all_by_ArrayChip($achip)};
Description: Retrieves all ExperimentChips which have the corresponding ArrayChip design
Returntype : Listref of Bio::EnsEMBL::Funcgen::ExperimentalChips
Exceptions : throws if valid stored ArrayChip not passed
Caller : General
Status : at risk
fetch_all_by_experiment_dbIDcodeprevnextTop
  Arg [1]    : int - dbID of Experiment
Example : my @ecs = @{$ec_a->fetch_all_by_experiment_dbID($ac_dbid);
Description: Does what it says on the tin
Returntype : Listref of Bio::EnsEMBL::Funcgen::ExperimentalChip
Exceptions : None
Caller : General
Status : Medium Risk
fetch_by_unique_and_experiment_idcodeprevnextTop
  Arg [2]    : int - unique_id
Arg [1] : int - dbID of Experiment
Example : my $ec = ec_a->fetch_by_unique_and_experiment_id($c_uid, $exp_dbid);
Description: Does what it says on the tin
Returntype : Bio::EnsEMBL::Funcgen::ExperimentalChip
Exceptions : None
Caller : General
Status : Medium Risk
fetch_by_unique_id_vendorcodeprevnextTop
  Arg [2]    : string - unique_id
Arg [1] : string - name of array vendor e.g. NIMBLEGEN
Example : my $ec = $ec_a->fetch_by_unique_id_vendor($c_uid, $vendor);
Description: Fetches a unique ExperimentalChip for a given unique id and vendor
Returntype : Bio::EnsEMBL::Funcgen::ExperimentalChip
Exceptions : None
Caller : General
Status : at Risk
list_dbIDscodeprevnextTop
  Args       : None
Example : my @array_ids = @{$ec_a->list_dbIDs()};
Description: Gets an array of internal IDs for all ExperimentalChip objects in the
current database.
Returntype : List of ints
Exceptions : None
Caller : ?
Status : Medium Risk
storecodeprevnextTop
  Args       : List of Bio::EnsEMBL::Funcgen::ExperimentalChip objects
Example : $oaa->store($ec1, $ec2, $ec3);
Description: Stores given ExperimentalChip objects in the database. Should only be
called once per array because no checks are made for duplicates.
Sets dbID and adaptor on the objects that it stores.
Returntype : ARRAYREF
Exceptions : Throws if passed non-ExperimentalChip arg or if ExperimentalChip already stored but arg has no dbID
Caller : General
Status : Medium Risk
Methods code
_columnsdescriptionprevnextTop
sub _columns {
	my $self = shift;
	
	return qw( ec.experimental_chip_id  ec.unique_id 
		   ec.experiment_id         ec.array_chip_id 
		   ec.feature_type_id       ec.cell_type_id
		   ec.biological_replicate  ec.technical_replicate);
}
_objs_from_sthdescriptionprevnextTop
sub _objs_from_sth {
  my ($self, $sth) = @_;
	
  my (@result, $ec_id, $c_uid, $exp_id, $ac_id, $ftype_id, $ctype_id, $brep, $trep, $ftype, $ctype);

  my $ft_adaptor = $self->db->get_FeatureTypeAdaptor();
  my $ct_adaptor = $self->db->get_CellTypeAdaptor();
  
  
  $sth->bind_columns(\$ec_id,\$ c_uid,\$ exp_id,\$ ac_id,\$ ftype_id,\$ ctype_id,\$ brep,\$ trep);
  
  while ( $sth->fetch() ) {

    $ftype = (defined $ftype_id) ? $ft_adaptor->fetch_by_dbID($ftype_id) : undef;
    $ctype = (defined $ctype_id) ? $ct_adaptor->fetch_by_dbID($ctype_id) : undef;
    
    my $array = Bio::EnsEMBL::Funcgen::ExperimentalChip->new(
															 -dbID           => $ec_id,
															 -unique_id      => $c_uid,
															 -experiment_id  => $exp_id,
															 -array_chip_id  => $ac_id,
															 -feature_type   => $ftype,
															 -cell_type      => $ctype,
															 -biological_replicate => $brep,
															 -technical_replicate  => $trep,
															 -adaptor        => $self,
															);
	  
    push @result, $array;
    
  }
  return\@ result;
}
_tablesdescriptionprevnextTop
sub _tables {
	my $self = shift;
	
	return ['experimental_chip', 'ec'];
}
fetch_all_by_ArrayChipdescriptionprevnextTop
sub fetch_all_by_ArrayChip {
  my ($self, $achip) = @_;

  $self->db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::ArrayChip', $achip);

  $self->generic_fetch("ec.array_chip_id=".$achip->dbID());
}
fetch_all_by_Experiment()descriptionprevnextTop
sub fetch_all_by_Experiment() {
  my ($self, $exp) = @_;

  if(! ($exp && $exp->isa('Bio::EnsEMBL::Funcgen::Experiment') && $exp->dbID())){
	throw('Must provide a valid stored Bio::EnsEMBL::Funcgen::Experiment');
  }

  $self->generic_fetch("ec.experiment_id=".$exp->dbID());
}
fetch_all_by_experiment_dbIDdescriptionprevnextTop
sub fetch_all_by_experiment_dbID {
    my $self = shift;
    my $e_dbid = shift;

	my ($ec_id, @results);

	throw("Must specify an experiemntal dbID") if(! $e_dbid);


	my $sth = $self->prepare("
		SELECT ec.experimental_chip_id
		FROM experimental_chip ec, experiment e
		WHERE ec.experiment_id = $e_dbid
	");



	#can we do a generic fetch here?
$sth->execute(); while ($ec_id = $sth->fetchrow()){ #warn("got ec id $ec_id\n");
push @results, $self->fetch_by_dbID($ec_id); } return\@ results;
}
fetch_by_unique_and_experiment_iddescriptionprevnextTop
sub fetch_by_unique_and_experiment_id {
  my ($self, $c_uid, $e_dbid) = @_;
    

  

  throw("Must provide and unique_id and and experiment_id") if(! $c_uid || ! $e_dbid);

  my $sth = $self->prepare("
		SELECT ec.experimental_chip_id
		FROM experimental_chip ec
		WHERE ec.unique_id ='$c_uid'
        AND ec.experiment_id = $e_dbid
	");
  

  $sth->execute();
  my ($ec_id) = $sth->fetchrow();
  
	
  return $self->fetch_by_dbID($ec_id) if $ec_id;
}
fetch_by_unique_id_vendordescriptionprevnextTop
sub fetch_by_unique_id_vendor {
  my ($self, $c_uid, $vendor) = @_;

  throw("Must provide and unique_id and and vendor") if(! $c_uid || ! $vendor);

  my ($ec_id, $ac_id, @ecids, $avendor);


  my $sth = $self->prepare("
		SELECT ec.experimental_chip_id, ec.array_chip_id
		FROM experimental_chip ec
		WHERE ec.unique_id ='$c_uid'
	");
  

  $sth->execute();
  
  while (($ec_id, $ac_id) = $sth->fetchrow()){

    my $sql = "SELECT a.vendor from array a, array_chip ac where a.array_id=ac.array_id and ac.array_chip_id=$ac_id;";
    ($avendor) = @{$self->db->dbc->db_handle->selectrow_arrayref($sql)};
    push @ecids, $ec_id if (uc($avendor) eq uc($vendor));
  }
  
  #This check shouldn't be necessary if this control is illicited on import
#no unique key possible so just for safety until import fully tested.
if(scalar(@ecids) > 1){ throw("Found more than one ExperimentalChip with the same unique_id($c_uid) for $vendor"); } return $self->fetch_by_dbID($ecids[0]) if $ecids[0];
}
list_dbIDsdescriptionprevnextTop
sub list_dbIDs {
    my ($self) = @_;	
    return $self->_list_dbIDs('experimental_chip');
}



1;
}
storedescriptionprevnextTop
sub store {
  my $self = shift;
  my @args = @_;
  
  my ($sarray);
  
  my $sth = $self->prepare("
			INSERT INTO experimental_chip
			(unique_id, experiment_id, array_chip_id, feature_type_id, 
             cell_type_id, biological_replicate, technical_replicate)
			VALUES (?, ?, ?, ?, ?, ?, ?)");
    
  foreach my $ec (@args) {
    throw('Can only store ExperimentalChip objects') if ( ! $ec->isa('Bio::EnsEMBL::Funcgen::ExperimentalChip') );
    
    if (!( $ec->dbID() && $ec->adaptor() == $self )){
      
      #Some slight jiggery pokery here to get the vendor as the EC does not yet have an adaptor
#cache these?
my $vendor = $self->db->get_ArrayChipAdaptor->fetch_by_dbID($ec->array_chip_id)->get_Array->vendor(); my $s_ec = $self->fetch_by_unique_id_vendor($ec->unique_id(), $vendor); throw("ExperimentalChip already exists in the database with dbID:".$s_ec->dbID(). "\nTo reuse/update this ExperimentalChip you must retrieve it using the ExperimentalChipAdaptor". "\nMaybe you want to use the -recover option?") if $s_ec; my $ftype_id = (defined $ec->feature_type()) ? $ec->feature_type->dbID() : undef; my $ctype_id = (defined $ec->cell_type()) ? $ec->cell_type->dbID() : undef; $sth->bind_param(1, $ec->unique_id(), SQL_VARCHAR); $sth->bind_param(2, $ec->experiment_id(), SQL_VARCHAR); $sth->bind_param(3, $ec->array_chip_id(), SQL_VARCHAR); $sth->bind_param(4, $ftype_id, SQL_INTEGER); $sth->bind_param(5, $ctype_id, SQL_INTEGER); $sth->bind_param(6, $ec->biological_replicate(), SQL_VARCHAR); $sth->bind_param(7, $ec->technical_replicate(), SQL_VARCHAR); $sth->execute(); my $dbID = $sth->{'mysql_insertid'}; $ec->dbID($dbID); $ec->adaptor($self); #}
#else{
# $ec = $s_ec;
#my @states = @{$self->db->fetch_all_states('experimental_chip', $ec->dbID())};
# my @states = @{$self->db->get_StatusAdaptor->fetch_all_states($ec)};
# warn("Using previously stored ExperimentalChip (".$ec->unique_id().") with states\t@states\n");
# }
}else{ #assume we want to update the states
warn('You may want to use $exp_chip->adaptor->store_states($exp_chip)'); $self->store_states($ec); } } return\@ args;
}
update_replicate_typesdescriptionprevnextTop
sub update_replicate_types {
  my ($self, $echip) = @_;

  if(! ($echip && $echip->isa('Bio::EnsEMBL::Funcgen::ExperimentalChip') && $echip->dbID())){
	throw('Must provide a valid store Bio::EnsEMBL::Funcgen::ExperimentalChip');
  }

  my $sql = 'UPDATE experimental_chip set biological_replicate="'.$echip->biological_replicate().
	'" where experimental_chip_id='.$echip->dbID();

  $self->db->dbc->do($sql);

  $sql = 'UPDATE experimental_chip set technical_replicate="'.$echip->technical_replicate().
	'" where experimental_chip_id='.$echip->dbID();
  $self->db->dbc->do($sql);


  if(defined $echip->cell_type()){
	$sql = 'UPDATE experimental_chip set cell_type_id="'.$echip->cell_type()->dbID.
	  '" where experimental_chip_id='.$echip->dbID();
	$self->db->dbc->do($sql);
  }

  if(defined $echip->feature_type()){
	$sql = 'UPDATE experimental_chip set feature_type_id="'.$echip->feature_type()->dbID.
	  '" where experimental_chip_id='.$echip->dbID();
	$self->db->dbc->do($sql);
  }



  return;
}
General documentation
AUTHORTop
This module was created by Nathan Johnson.
This module is part of the Ensembl project: /
CONTACTTop
Post comments or questions to the Ensembl development list: ensembl-dev@ebi.ac.uk
fetch_all_by_ExperimentTop
  Arg [1]    : Bio::EnsEMBL::Funcgen::Experiment
Example : my @ecs = @{$ec_a->fetch_all_by_Experiment($exp)};
Description: Does what it says on the tin
Returntype : Listref of Bio::EnsEMBL::Funcgen::ExperimentalChips
Exceptions : throws if valid stored Experiment not passed
Caller : General
Status : at risk