Bio::EnsEMBL::Compara::DBSQL HomologyAdaptor
Included librariesPackage variablesGeneral documentationMethods
Toolbar
WebCvsRaw content
Package variables
No package variables defined.
Included modules
Bio::EnsEMBL::Compara::DBSQL::BaseRelationAdaptor
Bio::EnsEMBL::Compara::Homology
Bio::EnsEMBL::Utils::Exception
Inherit
Bio::EnsEMBL::Compara::DBSQL::BaseRelationAdaptor
Synopsis
No synopsis!
Description
No description!
Methods
_columns
No description
Code
_default_where_clause
No description
Code
_objs_from_sth
No description
Code
_recursive_get_orthocluster
No description
Code
_tables
No description
Code
fetch_all_by_MemberDescriptionCode
fetch_all_by_Member_MethodLinkSpeciesSetDescriptionCode
fetch_all_by_Member_method_link_typeDescriptionCode
fetch_all_by_Member_paired_speciesDescriptionCode
fetch_all_by_MethodLinkSpeciesSetDescriptionCode
fetch_all_by_MethodLinkSpeciesSet_orthology_typeDescriptionCode
fetch_all_by_MethodLinkSpeciesSet_orthology_type_subtypeDescriptionCode
fetch_all_by_genome_pairDescriptionCode
fetch_all_by_tree_node_idDescriptionCode
fetch_all_orphans_by_GenomeDBDescriptionCode
fetch_by_MemberDescriptionCode
fetch_by_Member_Homology_source
No description
Code
fetch_by_Member_Member_method_link_typeDescriptionCode
fetch_by_Member_id_Member_idDescriptionCode
fetch_by_Member_paired_speciesDescriptionCode
fetch_orthocluster_with_MemberDescriptionCode
storeDescriptionCode
update_genetic_distanceDescriptionCode
Methods description
fetch_all_by_Membercode    nextTop
 Arg [1]    : Bio::EnsEMBL::Compara::Member $member
Example : $homologies = $HomologyAdaptor->fetch_all_by_Member($member);
Description: fetch the homology relationships where the given member is implicated
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller : general
fetch_all_by_Member_MethodLinkSpeciesSetcodeprevnextTop
  Arg [1]    : Bio::EnsEMBL::Compara::Member $member
Arg [2] : Bio::EnsEMBL::Compara::MethodLinkSpeciesSet $mlss
Example : $homologies = $HomologyAdaptor->fetch_all_by_Member_MethodLinkSpeciesSet($member, $mlsss);
Description: fetch the homology relationships for a given $member and $mlss.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_all_by_Member_method_link_typecodeprevnextTop
  Arg [1]    : Bio::EnsEMBL::Compara::Member $member
Arg [2] : string $method_link_type
Example : $homologies = $HomologyAdaptor->fetch_all_by_Member_method_link_type(
$member, "ENSEMBL_ORTHOLOGUES");
Description: fetch the homology relationships where the given member is implicated
in a relationship of the type defined by $method_link_type.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_all_by_Member_paired_speciescodeprevnextTop
  Arg [1]    : Bio::EnsEMBL::Compara::Member $member
Arg [2] : string $species
e.g. "Mus_musculus" or "Mus musculus"
Arg [3] : (optional) an arrayref of method_link types
e.g. ['ENSEMBL_ORTHOLOGUES']. Default is ['ENSEMBL_ORTHOLOGUES','ENSEMBL_PARALOGUES']
Example : $homologies = $HomologyAdaptor->fetch_all_by_Member_paired_species($member, "Mus_musculus");
Description: fetch the homology relationships where the given member is implicated
in pair with another member from the paired species. Member species and
paired species should be different.

When you give the species name the method attempts to find
the species without _ subsitution and then replacing them
for spaces. This is to help support GenomeDB objects which
have _ in their names.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : If a GenomeDB cannot be found for the given species name
Caller :
fetch_all_by_MethodLinkSpeciesSetcodeprevnextTop
  Arg [1]    : Bio::EnsEMBL::Compara::MethodLinkSpeciesSet $mlss
Example : $homologies = $HomologyAdaptor->fetch_all_by_MethodLinkSpeciesSet($mlss);
Description: fetch all the homology relationships for the given MethodLinkSpeciesSet
Since each species pair Orthologue analysis is given a unique
MethodLinkSpeciesSet, this method can be used to grab all the
orthologues for a species pair.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_all_by_MethodLinkSpeciesSet_orthology_typecodeprevnextTop
  Arg [1]    : method_link_species_set
Arg [2] : orthology type
Example : $homologies = $HomologyAdaptor->
fetch_all_by_MethodLinkSpeciesSet_orthology_type(
$mlss, 'ortholog_one2one');
Description: fetch all the homology relationships for the given
orthology type and for a mlss (corresponding to one or
a pair of genomes). This method can be used to grab all
the orthologues for one genome paralogues or a species
pair and an orthology type.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_all_by_MethodLinkSpeciesSet_orthology_type_subtypecodeprevnextTop
  Arg [1]    : method_link_species_set
Arg [2] : orthology type
Arg [3] : orthology subtype
Example : $homologies = $HomologyAdaptor->
fetch_all_by_MethodLinkSpeciesSet_orthology_type_subtype(
$mlss, 'ortholog_one2one','Mammalia');
Description: fetch all the homology relationships for the given
orthology type, mlss (corresponding to one or
a pair of genomes) and subtype (taxonomy level). This method can be
used to grab all the orthologues for one genome paralogues or a species
pair and an orthology type and taxonomy level.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_all_by_genome_paircodeprevnextTop
  Arg [1]    : genome_db_id
Arg [2] : genome_db_id
Example : $homologies = $HomologyAdaptor->fetch_all_by_genome_pair(22,3);
Description: fetch all the homology relationships for the a pair of genome_db_ids
This method can be used to grab all the orthologues for a species pair.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_all_by_tree_node_idcodeprevnextTop
  Arg [1]    : int $tree_node_id
Example : $homologies = $HomologyAdaptor->fetch_all_by_tree_node_id($tree->node_id);
Description: fetch all the homology relationships for the given tree
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_all_orphans_by_GenomeDBcodeprevnextTop
 Arg [1]    : Bio::EnsEMBL::Compara::GenomeDB $genome_db
Example : $HomologyAdaptor->fetch_all_orphans_by_GenomeDB($genome_db);
Description: fetch the members for a genome_db that have no homologs in the database
Returntype : an array reference of Bio::EnsEMBL::Compara::Member objects
Exceptions : when isa if Arg [1] is not Bio::EnsEMBL::Compara::GenomeDB
Caller : general
fetch_by_MembercodeprevnextTop
  DEPRECATED: use fetch_all_by_Member instead
fetch_by_Member_Member_method_link_typecodeprevnextTop
  Arg [1]    : Bio::EnsEMBL::Compara::Member $member
Arg [2] : Bio::EnsEMBL::Compara::Member $member
Arg [3] : string $method_link_type
Example : $homologies = $HomologyAdaptor->fetch_by_Member_Member_method_link_type(
$member1->gene_member, $member2->gene_member, "ENSEMBL_ORTHOLOGUES");
Description: fetch the homology relationships where the given member pair is implicated
in a relationship of the type defined by $method_link_type.
Returntype : an array reference of Bio::EnsEMBL::Compara::Homology objects
Exceptions : none
Caller :
fetch_by_Member_id_Member_idcodeprevnextTop
  Arg [1]    : int $member_id1
Arg [2] : int $member_id2
Example : $homologies = $HomologyAdaptor->fetch_by_Member_id_Member_id(
$member_id1, $member_id2);
Description: fetch the homology relationships for a given member_id pair
Returntype : a Bio::EnsEMBL::Compara::Homology object
Exceptions : none
Caller :
fetch_by_Member_paired_speciescodeprevnextTop
  DEPRECATED: use fetch_all_by_Member_paired_species instead
fetch_orthocluster_with_MembercodeprevnextTop
  Arg [1]    : Bio::EnsEMBL::Compara::Member $gene_member (must be ENSEMBLGENE type)
Example : my ($homology_list, $gene_list) =
$HomologyAdaptor->fetch_orthocluster_with_Member($gene_member);
Description: do a recursive search starting from $gene_member to find the cluster of
all connected genes and homologies via connected components clustering.
Returntype : an array pair of array references.
First array_ref is the list of Homology objects in the cluster graph
Second array ref is the list of unique gene Members in the cluster
Exceptions : none
Caller :
storecodeprevnextTop
 Arg [1]    : Bio::EnsEMBL::Compara::Homology $homology
Example : $HomologyAdaptor->store($homology)
Description: Stores a homology object into a compara database
Returntype : int
been the database homology identifier, if homology stored correctly
Exceptions : when isa if Arg [1] is not Bio::EnsEMBL::Compara::Homology
Caller : general
update_genetic_distancecodeprevnextTop
 Arg [1]    : Bio::EnsEMBL::Compara::Homology $homology
Example : $HomologyAdaptor->update_genetic_distance($homology)
Description: updates the n,s,dn,ds,lnl values from a homology object into a compara database
Exceptions : when isa if Arg [1] is not Bio::EnsEMBL::Compara::Homology
Caller : Bio::EnsEMBL::Compara::Runnable::Homology_dNdS
Methods code
_columnsdescriptionprevnextTop
sub _columns {
  my $self = shift;

  return qw (h.homology_id
             h.stable_id
             h.method_link_species_set_id
             h.description
             h.subtype
             h.dn
             h.ds
             h.n
             h.s
             h.lnl
             h.threshold_on_ds
             h.ancestor_node_id
             h.tree_node_id);
}
_default_where_clausedescriptionprevnextTop
sub _default_where_clause {
  my $self = shift;
  return '';
}

#
# STORE METHODS
#
################
}
_objs_from_sthdescriptionprevnextTop
sub _objs_from_sth {
  my ($self, $sth) = @_;
  
  my ($homology_id, $stable_id, $description, $dn, $ds, $n, $s, $lnl, $threshold_on_ds,
      $method_link_species_set_id, $subtype, $ancestor_node_id, $tree_node_id);

  $sth->bind_columns(\$homology_id,\$ stable_id,\$ method_link_species_set_id,\$
                     description,\$ subtype,\$ dn,\$ ds,\$
                     n,\$ s, \$lnl, \$threshold_on_ds,\$ ancestor_node_id,\$ tree_node_id);

  my @homologies = ();
  
  while ($sth->fetch()) {
    push @homologies, Bio::EnsEMBL::Compara::Homology->new_fast
      ({'_dbID' => $homology_id,
       '_stable_id' => $stable_id,
       '_description' => $description,
       '_method_link_species_set_id' => $method_link_species_set_id,
       '_subtype' => $subtype,
       '_dn' => $dn,
       '_ds' => $ds,
       '_n' => $n,
       '_s' => $s,
       '_lnl' => $lnl,
       '_threshold_on_ds' => $threshold_on_ds,
       '_adaptor' => $self,
       '_this_one_first' => $self->{'_this_one_first'},
       '_ancestor_node_id' => $ancestor_node_id,
       '_tree_node_id' => $tree_node_id});
  }
  
  return\@ homologies;
}
_recursive_get_orthoclusterdescriptionprevnextTop
sub _recursive_get_orthocluster {
  my $self = shift;
  my $gene = shift;
  my $ortho_set = shift;
  my $member_set = shift;
  my $debug = shift;

  return if($member_set->{$gene->dbID});

  $gene->print_member("query gene\n") if($debug);
  $member_set->{$gene->dbID} = $gene;

  my $homologies = $self->fetch_by_Member($gene);
  printf("fetched %d homologies\n", scalar(@$homologies)) if($debug);

  foreach my $homology (@{$homologies}) {
    next if($ortho_set->{$homology->dbID});
    
    foreach my $member_attribute (@{$homology->get_all_Member_Attribute}) {
      my ($member, $attribute) = @{$member_attribute};
      next if($member->dbID == $gene->dbID); #skip query gene
$member->print_member if($debug); printf("adding homology_id %d to cluster\n", $homology->dbID) if($debug); $ortho_set->{$homology->dbID} = $homology; $self->_recursive_get_orthocluster($member, $ortho_set, $member_set, $debug); } } printf("done with search query %s\n", $gene->stable_id) if($debug); } #
# internal methods
#
###################
# internal methods used in multiple calls above to build homology objects from table data
}
_tablesdescriptionprevnextTop
sub _tables {
  my $self = shift;

  return (['homology', 'h']);
}
fetch_all_by_MemberdescriptionprevnextTop
sub fetch_all_by_Member {
  my ($self, $member) = @_;

  my $join = [[['homology_member', 'hm'], 'h.homology_id = hm.homology_id']];
  my $constraint = "hm.member_id = " .$member->dbID;

  # This internal variable is used by add_Member_Attribute method 
# in Bio::EnsEMBL::Compara::BaseRelation to make sure that the first element
# of the member array is the one that has been used by the user to fetch the
# homology object
$self->{'_this_one_first'} = $member->stable_id; return $self->generic_fetch($constraint, $join);
}
fetch_all_by_Member_MethodLinkSpeciesSetdescriptionprevnextTop
sub fetch_all_by_Member_MethodLinkSpeciesSet {
  my ($self, $member, $method_link_species_set) = @_;

  unless ($member->isa('Bio::EnsEMBL::Compara::Member')) {
    throw("The argument must be a Bio::EnsEMBL::Compara::Member object, not $member");
  }

  throw("method_link_species_set arg is required\n")
    unless ($method_link_species_set);

#  my $mlssa = $self->db->get_MethodLinkSpeciesSetAdaptor;
# my $mlss_arrayref = $mlssa->fetch_all_by_method_link_type_genome_db_id($method_link_type,$member->genome_db_id);
# unless (scalar @{$mlss_arrayref}) {
# warning("There is no $method_link_type data stored in the database for " . $member->genome_db->name . "\n");
# return [];
# }
my $join = [[['homology_member', 'hm'], 'h.homology_id = hm.homology_id']]; my $constraint = " h.method_link_species_set_id =" . $method_link_species_set->dbID; $constraint .= " AND hm.member_id = " . $member->dbID; # See in fetch_by_Member what is this internal variable for
$self->{'_this_one_first'} = $member->stable_id; return $self->generic_fetch($constraint, $join);
}
fetch_all_by_Member_method_link_typedescriptionprevnextTop
sub fetch_all_by_Member_method_link_type {
  my ($self, $member, $method_link_type) = @_;

  unless ($member->isa('Bio::EnsEMBL::Compara::Member')) {
    throw("The argument must be a Bio::EnsEMBL::Compara::Member object, not $member");
  }

  unless ($member->genome_db_id) {
    warning("Cannot get Homologues for a Bio::EnsEMBL::Compara::Member (".$member->source_name.
        "::".$member->stable_id.") with no GenomeDB");
    return [];
  }

  throw("method_link_type arg is required\n")
    unless ($method_link_type);

  my $mlssa = $self->db->get_MethodLinkSpeciesSetAdaptor;
  my $mlss_arrayref = $mlssa->fetch_all_by_method_link_type_GenomeDB($method_link_type,$member->genome_db);

  unless (scalar @{$mlss_arrayref}) {
    warning("There is no $method_link_type data stored in the database for " . $member->genome_db->name . "\n");
    return [];
  }

  my $join = [[['homology_member', 'hm'], 'h.homology_id = hm.homology_id']];
  my $constraint =  " h.method_link_species_set_id in (". join (",", (map {$_->dbID} @{$mlss_arrayref})) . ")";

  $constraint .= " AND hm.member_id = " . $member->dbID;

  # See in fetch_by_Member what is this internal variable for
$self->{'_this_one_first'} = $member->stable_id; return $self->generic_fetch($constraint, $join);
}
fetch_all_by_Member_paired_speciesdescriptionprevnextTop
sub fetch_all_by_Member_paired_species {
  my ($self, $member, $species, $method_link_types) = @_;

	my $gdb_a = $self->db->get_GenomeDBAdaptor();
  my $gdb1 = $member->genome_db;
  my $gdb2 = eval {$gdb_a->fetch_by_name_assembly($species)};
  if(!defined $gdb2) {
  	my $species_no_underscores = $species;
  	$species_no_underscores =~ tr/_/ /;
  	$gdb2 = eval {$gdb_a->fetch_by_name_assembly($species_no_underscores)};
  	if(!defined $gdb2) {
  		throw("No GenomeDB found with names [$species | $species_no_underscores]");
  	}
  }

  unless (defined $method_link_types) {
    $method_link_types = ['ENSEMBL_ORTHOLOGUES','ENSEMBL_PARALOGUES'];
  }
  my $mlssa = $self->db->get_MethodLinkSpeciesSetAdaptor;

  my $all_homologies = [];
  foreach my $ml (@{$method_link_types}) {
    my $mlss;
    if ($gdb1->dbID == $gdb2->dbID) {
      next if ($ml eq 'ENSEMBL_ORTHOLOGUES');
      $mlss = $mlssa->fetch_by_method_link_type_GenomeDBs($ml, [$gdb1]);
    } else {
      $mlss = $mlssa->fetch_by_method_link_type_GenomeDBs($ml, [$gdb1, $gdb2]);
    }
    if (defined $mlss) {
      my $homologies = $self->fetch_all_by_Member_MethodLinkSpeciesSet($member, $mlss);
      push @{$all_homologies}, @{$homologies} if (defined $homologies);
    }
  }
  return $all_homologies;
}
fetch_all_by_MethodLinkSpeciesSetdescriptionprevnextTop
sub fetch_all_by_MethodLinkSpeciesSet {
  my ($self, $method_link_species_set) = @_;

  throw("method_link_species_set arg is required\n")
    unless ($method_link_species_set);

  my $constraint =  " h.method_link_species_set_id =" . $method_link_species_set->dbID;

  return $self->generic_fetch($constraint);
}
fetch_all_by_MethodLinkSpeciesSet_orthology_typedescriptionprevnextTop
sub fetch_all_by_MethodLinkSpeciesSet_orthology_type {
  my ($self, $method_link_species_set, $orthology_type) = @_;

  throw ("method_link_species_set arg is required\n")
    unless ($method_link_species_set);
  throw ("[$method_link_species_set] must be a Bio::EnsEMBL::Compara::MethodLinkSpeciesSet object\n")
    unless (UNIVERSAL::isa($method_link_species_set, "Bio::EnsEMBL::Compara::MethodLinkSpeciesSet"));
  throw ("orthology_type arg is required\n")
    unless ($orthology_type);

  my $constraint =  " h.method_link_species_set_id =" . $method_link_species_set->dbID;
  $constraint .= " AND h.description=\"$orthology_type\"";

  $self->{'_this_one_first'} = undef; #not relevant
return $self->generic_fetch($constraint);
}
fetch_all_by_MethodLinkSpeciesSet_orthology_type_subtypedescriptionprevnextTop
sub fetch_all_by_MethodLinkSpeciesSet_orthology_type_subtype {
  my ($self, $method_link_species_set, $orthology_type, $subtype) = @_;

  throw ("method_link_species_set arg is required\n")
    unless ($method_link_species_set);
  throw ("[$method_link_species_set] must be a Bio::EnsEMBL::Compara::MethodLinkSpeciesSet object\n")
    unless (UNIVERSAL::isa($method_link_species_set, "Bio::EnsEMBL::Compara::MethodLinkSpeciesSet"));
  throw ("orthology_type arg is required\n")
    unless ($orthology_type);

  my $constraint =  " h.method_link_species_set_id =" . $method_link_species_set->dbID;
  $constraint .= " AND h.description=\"$orthology_type\"";
  $constraint .= " AND h.subtype=\"$subtype\"";

  $self->{'_this_one_first'} = undef; #not relevant
return $self->generic_fetch($constraint);
}
fetch_all_by_genome_pairdescriptionprevnextTop
sub fetch_all_by_genome_pair {
  my ($self, $genome_db_id1, $genome_db_id2) = @_;

  my $join = [ [['homology_member', 'hm1'], 'h.homology_id = hm1.homology_id'],
               [['member', 'm1'], 'hm1.member_id = m1.member_id'],
               [['homology_member', 'hm2'], 'h.homology_id = hm2.homology_id'],
               [['member', 'm2'], 'hm2.member_id = m2.member_id'],
             ];

  my $constraint = "m1.genome_db_id= $genome_db_id1";
  $constraint .= " AND m2.genome_db_id = $genome_db_id2";

  $self->{'_this_one_first'} = undef; #not relevant
return $self->generic_fetch($constraint, $join);
}
fetch_all_by_tree_node_iddescriptionprevnextTop
sub fetch_all_by_tree_node_id {
  my ($self, $tree_node_id) = @_;

  throw("tree_node_id arg is required\n")
    unless ($tree_node_id);

  my $constraint =  " h.tree_node_id =" . $tree_node_id;

  return $self->generic_fetch($constraint);
}
fetch_all_orphans_by_GenomeDBdescriptionprevnextTop
sub fetch_all_orphans_by_GenomeDB {
  my $self = shift;
  my $gdb = shift;

  throw("genome_db arg is required\n")
    unless ($gdb);

  my $gdb_id = $gdb->dbID;
  my $sql = "SELECT m.member_id from member m LEFT JOIN homology_member hm ON m.member_id=hm.member_id WHERE m.source_name='ENSEMBLGENE' AND m.genome_db_id=$gdb_id AND hm.member_id IS NULL";
  my $sth = $self->dbc->prepare($sql);
  $sth->execute();
  my $ma = $self->db->get_MemberAdaptor;
  my @members;
  while ( my $member_id  = $sth->fetchrow ) {
    my $member = $ma->fetch_by_dbID($member_id);
    push @members, $member;
  }
  return\@ members;
}

# DEPRECATED METHODS
####################
}
fetch_by_MemberdescriptionprevnextTop
sub fetch_by_Member {
  my ($self, @args) = @_;
  return $self->fetch_all_by_Member(@args);
}
fetch_by_Member_Homology_sourcedescriptionprevnextTop
sub fetch_by_Member_Homology_source {
  my ($self, $member, $source_name) = @_;
  deprecate("fetch_by_Member_Homology_source method is deprecated. Calling 
fetch_all_by_Member_method_link_type instead");
  return $self->fetch_all_by_Member_method_link_type($member, $source_name);
}

1;
}
fetch_by_Member_Member_method_link_typedescriptionprevnextTop
sub fetch_by_Member_Member_method_link_type {
  my ($self, $member1, $member2, $method_link_type) = @_;

  unless ($member1->stable_id ne $member2->stable_id) {
    throw("The members should be different");
  }
  unless ($member1->isa('Bio::EnsEMBL::Compara::Member')) {
    throw("The argument must be a Bio::EnsEMBL::Compara::Member object, not $member1");
  }
  unless ($member2->isa('Bio::EnsEMBL::Compara::Member')) {
    throw("The argument must be a Bio::EnsEMBL::Compara::Member object, not $member2");
  }

  $method_link_type = 'ENSEMBL_ORTHOLOGUES' unless (defined($method_link_type));
  my $genome_dbs = [$member1->genome_db, $member2->genome_db];
  if ($member1->genome_db_id == $member2->genome_db_id) {
    $method_link_type = 'ENSEMBL_PARALOGUES';
    $genome_dbs = [$member1->genome_db];
  }
  my $mlssa = $self->db->get_MethodLinkSpeciesSetAdaptor;
  my $mlss = $mlssa->fetch_by_method_link_type_GenomeDBs($method_link_type,$genome_dbs);

  unless (defined($mlss)) {
    warning("There is no $method_link_type data stored in the database for " . $member1->genome_db->name . " and " . $member2->genome_db->name . "\n");
    return [];
  }

  #  my $join = [[['homology_member', 'hm'], 'h.homology_id = hm.homology_id']];
my $join = [[['homology_member', 'hm1'], 'h.homology_id = hm1.homology_id'],[['homology_member', 'hm2'], 'h.homology_id = hm2.homology_id']]; my $constraint = " h.method_link_species_set_id =" . $mlss->dbID; $constraint .= " AND hm1.member_id = " . $member1->dbID; $constraint .= " AND hm2.member_id = " . $member2->dbID; # $constraint .= " AND hm1.member_id<hm2.member_id ";
# See in fetch_by_Member what is this internal variable for
$self->{'_this_one_first'} = $member1->stable_id; return $self->generic_fetch($constraint, $join);
}
fetch_by_Member_id_Member_iddescriptionprevnextTop
sub fetch_by_Member_id_Member_id {
  my ($self, $member_id1, $member_id2) = @_;

  unless ($member_id1 ne $member_id2) {
    throw("The members should be different");
  }
  my $join = [[['homology_member', 'hm1'], 'h.homology_id = hm1.homology_id'],[['homology_member', 'hm2'], 'h.homology_id = hm2.homology_id']];

  my $constraint .= " hm1.member_id = " . $member_id1;
  $constraint .= " AND hm2.member_id = " . $member_id2;

  # See in fetch_by_Member what is this internal variable for
$self->{'_this_one_first'} = $member_id1; return $self->generic_fetch($constraint, $join);
}
fetch_by_Member_paired_speciesdescriptionprevnextTop
sub fetch_by_Member_paired_species {
  my ($self, @args) = @_;
  return $self->fetch_all_by_Member_paired_species(@args);
}
fetch_orthocluster_with_MemberdescriptionprevnextTop
sub fetch_orthocluster_with_Member {
  my $self = shift;
  my $gene_member = shift;
  
  my $ortho_set = {};
  my $member_set = {};
  $self->_recursive_get_orthocluster($gene_member, $ortho_set, $member_set, 0);

  my @homologies = values(%{$ortho_set});
  my @genes      = values(%{$member_set});
  return (\@homologies,\@ genes);
}
storedescriptionprevnextTop
sub store {
  my ($self,$hom) = @_;
  
  $hom->isa('Bio::EnsEMBL::Compara::Homology') ||
    throw("You have to store a Bio::EnsEMBL::Compara::Homology object, not a $hom");

  $hom->adaptor($self);

  if ( !defined $hom->method_link_species_set_id && defined $hom->method_link_species_set) {
    $self->db->get_MethodLinkSpeciesSetAdaptor->store($hom->method_link_species_set);
  }

  if (! defined $hom->method_link_species_set) {
    throw("Homology object has no set MethodLinkSpecies object. Can not store Homology object\n");
  } else {
    $hom->method_link_species_set_id($hom->method_link_species_set->dbID);
  }
  
  unless($hom->dbID) {
    my $sql = "INSERT INTO homology (stable_id, method_link_species_set_id, description, subtype, ancestor_node_id, tree_node_id) VALUES (?,?,?,?,?,?)";
    my $sth = $self->prepare($sql);
    $sth->execute($hom->stable_id,$hom->method_link_species_set_id,$hom->description, $hom->subtype, $hom->ancestor_node_id, $hom->tree_node_id);
    $hom->dbID($sth->{'mysql_insertid'});
  }

  foreach my $member_attribute (@{$hom->get_all_Member_Attribute}) {   
    $self->store_relation($member_attribute, $hom);
  }

  return $hom->dbID;
}
update_genetic_distancedescriptionprevnextTop
sub update_genetic_distance {
  my $self = shift;
  my $hom = shift;

  throw("You have to store a Bio::EnsEMBL::Compara::Homology object, not a $hom")
    unless($hom->isa('Bio::EnsEMBL::Compara::Homology'));

  throw("homology object must have dbID")
    unless ($hom->dbID);
  # We use here internal hash key for _dn and _ds because the dn and ds method call
# do some filtering based on the threshold_on_ds.
unless(defined $hom->{'_dn'} and defined $hom->{'_ds'} and defined $hom->n and defined $hom->lnl and defined $hom->s) { warn("homology needs valid dn, ds, n, s, and lnl values to store"); return $self; } my $sql = "UPDATE homology SET dn=?, ds=?, n=?, s=?, lnl=?"; if (defined $hom->threshold_on_ds) { $sql .= ", threshold_on_ds=?"; } $sql .= " WHERE homology_id=?"; my $sth = $self->prepare($sql); if (defined $hom->threshold_on_ds) { $sth->execute($hom->{'_dn'},$hom->{'_ds'},$hom->n, $hom->s, $hom->lnl, $hom->threshold_on_ds, $hom->dbID); } else { $sth->execute($hom->{'_dn'},$hom->{'_ds'},$hom->n, $hom->s, $hom->lnl, $hom->dbID); } $sth->finish(); return $self;
}
General documentation
No general documentation available.