diff variant_effect_predictor/Bio/EnsEMBL/Compara/DnaFragRegion.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/EnsEMBL/Compara/DnaFragRegion.pm	Fri Aug 03 10:04:48 2012 -0400
@@ -0,0 +1,403 @@
+=head1 LICENSE
+
+  Copyright (c) 1999-2012 The European Bioinformatics Institute and
+  Genome Research Limited.  All rights reserved.
+
+  This software is distributed under a modified Apache license.
+  For license details, please see
+
+    http://www.ensembl.org/info/about/code_licence.html
+
+=head1 CONTACT
+
+  Please email comments or questions to the public Ensembl
+  developers list at <dev@ensembl.org>.
+
+  Questions may also be sent to the Ensembl help desk at
+  <helpdesk@ensembl.org>.
+
+=head1 NAME
+
+Bio::EnsEMBL::Compara::DnaFragRegion - dnafrag region on one species
+
+=head1 SYNOPSIS
+
+  my $slice = $dnafrag_region->slice;
+  my $dnafrag = $dnafrag_region->dnafrag;
+  my $genome_db = $dnafrag_region->genome_db;
+  my $dnafrag_start = $dnafrag_region->dnafrag_start;
+  my $dnafrag_end = $dnafrag_region->dnafrag_end;
+  my $dnafrag_strand = $dnafrag_region->dnafrag_strand;
+  my $length = $dnafrag_region->length;
+
+=head1 DESCRIPTION
+
+DnaFragRegion are the objects underlying the SyntenyRegion objects. Each synteny is
+represented as a Bio::EnsEMBL::Compara::SyntenyRegion object. Each of these objects
+contain one Bio::EnsEMBL::Compara::DnaFragRegion object per region which defines the
+synteny. For instance, for a syntenic region between human and mouse, there will be
+one DnaFragRegion object for the human region and another one for the mouse one.
+
+=head1 OBJECT ATTRIBUTES
+
+=over
+
+=item adaptor
+
+Bio::EnsEMBL::Compara::DBSQL::DnaFragRegionAdaptor object to access DB
+
+=item synteny_region_id
+
+corresponds to dnafrag.synteny_region_id (external ref.)
+
+=item dnafrag_id
+
+corresponds to dnafrag.dnafrag_id (external ref.)
+
+=item dnafrag
+
+Bio::EnsEMBL::Compara::DnaFrag object corresponding to dnafrag_id
+
+=item dnafrag_start
+
+corresponds to dnafrag_region.dnafrag_start
+
+=item dnafrag_end
+
+corresponds to dnafrag_region.dnafrag_end
+
+=item dnafrag_strand
+
+corresponds to dnafrag_region.dnafrag_strand
+
+=back
+
+=head1 APPENDIX
+
+The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
+
+=cut
+
+
+package Bio::EnsEMBL::Compara::DnaFragRegion;
+
+use strict;
+use Bio::EnsEMBL::Utils::Argument;
+use Bio::EnsEMBL::Utils::Exception;
+
+#use Bio::EnsEMBL::Compara::NestedSet;
+#our @ISA = qw(Bio::EnsEMBL::Compara::NestedSet);
+
+
+=head2 new_fast
+
+  Arg         : possible keys: ADAPTOR, SYNTENY_REGION_ID, DNAFRAG_ID,
+                DNAFRAG_START, DNAFRAG_END, DNAFRAG_STRAND
+                See also parent object: Bio::EnsEMBL::Compara::NestedSet
+  Example     : none
+  Description : Object constructor.
+  Returntype  : Bio::EnsEMBL::Compara::DnaFragRegion object
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub new {
+  my ($class, @args) = @_;
+#  my $self = $class->SUPER::new(@args);
+  my $self = bless {}, $class;
+  
+  if (scalar @args) {
+    #do this explicitly.
+    my ($adaptor, $synteny_region_id, $dnafrag_id, $dnafrag_start, $dnafrag_end, $dnafrag_strand) = rearrange([qw(ADAPTOR SYNTENY_REGION_ID DNAFRAG_ID DNAFRAG_START DNAFRAG_END DNAFRAG_STRAND)], @args);
+
+    $adaptor && $self->adaptor($adaptor);
+    $synteny_region_id && $self->synteny_region_id($synteny_region_id);
+    $dnafrag_id && $self->dnafrag_id($dnafrag_id);
+    $dnafrag_start && $self->dnafrag_start($dnafrag_start);
+    $dnafrag_end && $self->dnafrag_end($dnafrag_end);
+    $dnafrag_strand && $self->dnafrag_strand($dnafrag_strand);
+  }
+
+  return $self;
+}
+
+
+=head2 new_fast
+
+  Arg 1       : hash reference $hashref
+  Example     : none
+  Description : This is an ultra fast constructor which requires knowledge of
+                the objects internals to be used.
+  Returntype  : Bio::EnsEMBL::Compara::DnaFragRegion object
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub new_fast {
+  my ($class, $hashref) = @_;
+
+  return bless $hashref, $class;
+}
+
+
+=head2 synteny_region_id
+
+  Arg 1       : (optional) integer $synteny_region_id
+  Example     : my $synteny_region_id = $dnafrag->synteny_region_id;
+  Description : Getter/setter for the synteny_region_id attribute
+  Returntype  : integer
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub synteny_region_id {
+  my $obj = shift;
+
+  if (@_) {
+    my $value = shift;
+    $obj->{'synteny_region_id'} = $value;
+  }
+
+  return $obj->{'synteny_region_id'};
+}
+
+
+=head2 dnafrag_id
+
+  Arg 1       : (optional) integer $dnafrag_id
+  Example     : my $dnafrag_id = $dnafrag->dnafrag_id;
+  Description : Getter/setter for the dnafrag_id attribute
+  Returntype  : integer
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub dnafrag_id {
+  my $obj = shift;
+
+  if (@_) {
+    my $value = shift;
+    $obj->{'dnafrag_id'} = $value;
+  }
+
+  return $obj->{'dnafrag_id'};
+}
+
+
+=head2 dnafrag_start
+
+  Arg 1       : (optional) integer $dnafrag_start
+  Example     : my $dnafrag_start = $dnafrag->dnafrag_start;
+  Description : Getter/setter for the dnafrag_start attribute
+  Returntype  : integer
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub dnafrag_start {
+  my $obj = shift;
+
+  if (@_) {
+    my $value = shift;
+    $obj->{'dnafrag_start'} = $value;
+  }
+
+  return $obj->{'dnafrag_start'};
+}
+
+
+=head2 dnafrag_end
+
+  Arg 1       : (optional) integer $dnafrag_end
+  Example     : my $dnafrag_end = $dnafrag->dnafrag_end;
+  Description : Getter/setter for the dnafrag_end attribute
+  Returntype  : integer
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub dnafrag_end {
+  my $obj = shift;
+
+  if (@_) {
+    my $value = shift;
+    $obj->{'dnafrag_end'} = $value;
+  }
+
+  return $obj->{'dnafrag_end'};
+}
+
+
+=head2 dnafrag_strand
+
+  Arg 1       : (optional) integer $dnafrag_strand
+  Example     : my $dnafrag_strand = $dnafrag->dnafrag_strand;
+  Description : Getter/setter for the dnafrag_strand attribute
+  Returntype  : integer (1 or -1)
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub dnafrag_strand {
+  my $obj = shift;
+
+  if (@_) {
+    my $value = shift;
+    $obj->{'dnafrag_strand'} = $value;
+  }
+
+  return $obj->{'dnafrag_strand'};
+}
+
+
+=head2 adaptor
+
+  Arg 1       : (optional) Bio::EnsEMBL::Compara::DBSQL::DnaFragRegioAdaptor $adaptor
+  Example     : my $adaptor = $dnafrag->adaptor;
+  Description : Getter/setter for the corresponding
+                Bio::EnsEMBL::Compara::DBSQL::DnaFragRegioAdaptor object
+  Returntype  : Bio::EnsEMBL::Compara::DBSQL::DnaFragRegioAdaptor object
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub adaptor {
+  my $obj = shift;
+
+  if (@_) {
+    my $value = shift;
+    $obj->{'adaptor'} = $value;
+  }
+
+  return $obj->{'adaptor'};
+}
+
+
+=head2 dnafrag
+
+  Arg 1       : (optional) Bio::EnsEMBL::Compara::DnaFrag object
+  Example     : $dnafrag = $dnafragregion->dnafrag;
+  Description : Getter/setter for the Bio::EnsEMBL::Compara::DnaFrag object corresponding to this
+                Bio::EnsEMBL::Compara::DnaFragRegion object.
+  Returntype  : Bio::EnsEMBL::Compara::Dnafrag object
+  Exceptions  : warns when the corresponding Bio::EnsEMBL::Compara::GenomeDB,
+                coord_system_name, name or Bio::EnsEMBL::DBSQL::DBAdaptor
+                cannot be retrieved and returns undef.
+  Caller      : $object->methodname
+
+=cut
+
+sub dnafrag {
+  my ($self) = shift @_;
+
+  if (@_) {
+    $self->{'_dnafrag'} = shift @_;
+  } elsif (!defined $self->{'_dnafrag'}) {
+    if (!defined($self->dnafrag_id)) {
+      warn "Cannot get the Bio::EnsEMBL::Compara::DnaFrag object without dbID";
+      return undef;
+    }
+    my $dfa = $self->adaptor->db->get_DnaFragAdaptor;
+    if (!defined($dfa)) {
+      warn "Cannot get the Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor";
+      return undef;
+    }
+    $self->{'_dnafrag'} = $dfa->fetch_by_dbID($self->dnafrag_id);
+  }
+  return $self->{'_dnafrag'};
+}
+
+
+=head2 slice
+
+  Arg 1       : -none-
+  Example     : $slice = $dnafragregion->slice;
+  Description : Returns the Bio::EnsEMBL::Slice object corresponding to this
+                Bio::EnsEMBL::Compara::DnaFrag object.
+  Returntype  : Bio::EnsEMBL::Slice object
+  Exceptions  : warns when the corresponding Bio::EnsEMBL::Compara::GenomeDB,
+                coord_system_name, name or Bio::EnsEMBL::DBSQL::DBAdaptor
+                cannot be retrieved and returns undef.
+  Caller      : $object->methodname
+
+=cut
+
+sub slice {
+  my ($self) = @_;
+  
+  unless (defined $self->{'_slice'}) {
+    if (!defined($self->dnafrag->genome_db)) {
+      warn "Cannot get the Bio::EnsEMBL::Compara::GenomeDB object corresponding to [".$self."]";
+      return undef;
+    }
+    if (!defined($self->dnafrag->coord_system_name)) {
+      warn "Cannot get the coord_system_name corresponding to [".$self."]";
+      return undef;
+    }
+    if (!defined($self->dnafrag->name)) {
+      warn "Cannot get the name corresponding to [".$self."]";
+      return undef;
+    }
+    my $dba = $self->dnafrag->genome_db->db_adaptor;
+    if (!defined($dba)) {
+      warn "Cannot get the Bio::EnsEMBL::DBSQL::DBAdaptor corresponding to [".$self->dnafrag->genome_db."]";
+      return undef;
+    }
+    $self->{'_slice'} = $dba->get_SliceAdaptor->fetch_by_region($self->dnafrag->coord_system_name, $self->dnafrag->name,$self->dnafrag_start, $self->dnafrag_end, $self->dnafrag_strand);
+  }
+
+  return $self->{'_slice'};
+}
+
+
+=head2 genome_db
+
+  Arg 1       : -none-
+  Example     : $genome_db = $dnafragregion->genome_db;
+  Description : Returns the Bio::EnsEMBL::Compara::GenomeDB object corresponding to this
+                Bio::EnsEMBL::Compara::DnaFragRegion object. This method is a shortcut
+                for $dnafragregion->dnafrag->genome_db
+  Returntype  : Bio::EnsEMBL::Compara::GenomeDB object
+  Exceptions  : return undef if no dnafrag can be found for this DnaFragRegion object.
+                See dnafrag method elsewhere in this document.
+  Caller      : $object->methodname
+
+=cut
+
+sub genome_db {
+  my ($self) = @_;
+
+  if ($self->dnafrag) {
+    return $self->dnafrag->genome_db;
+  }
+
+  return undef;
+}
+
+
+=head2 length
+
+  Arg 1       : -none-
+  Example     : $length = $dnafragregion->length;
+  Description : Returns the lenght of this DnaFragRegion
+  Returntype  : integer
+  Exceptions  :
+  Caller      : $object->methodname
+
+=cut
+
+sub length {
+  my ($self) = @_;
+
+  return $self->dnafrag_end - $self->dnafrag_start + 1;
+}
+
+1;