diff variant_effect_predictor/Bio/EnsEMBL/Funcgen/Experiment.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/EnsEMBL/Funcgen/Experiment.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,439 @@
+
+=head1 LICENSE
+
+  Copyright (c) 1999-2011 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 <ensembl-dev@ebi.ac.uk>.
+
+  Questions may also be sent to the Ensembl help desk at
+  <helpdesk@ensembl.org>.
+
+
+=head1 NAME
+
+Bio::EnsEMBL::Funcgen::Experiment
+
+=head1 SYNOPSIS
+
+use Bio::EnsEMBL::Funcgen::Experiment;
+
+my $exp = Bio::EnsEMBL::Funcgen::Experiment->new
+               (
+				-ADAPTOR             => $self,
+				-NAME                => $name,
+				-EXPERIMENTAL_GROUP  => $experimental_group,
+				-DATE                => $date,
+				-PRIMARY_DESIGN_TYPE => 'binding_site_indentification',
+				-DESCRIPTION         => $description,
+				-ARCHIVE_ID          => $archive_id,
+               );
+
+my $db_adaptor = Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor->new(...);
+my $exp_adaptor = $db_adaptor->get_ExperimentAdaptor();
+my $exp = $exp_adaptor->fetch_by_name($exp_name)
+
+=head1 DESCRIPTION
+
+The Experiment class represents an instance of an experiment i.e. a discrete set of data
+
+=cut
+
+
+################################################################################
+
+package Bio::EnsEMBL::Funcgen::Experiment;
+
+use warnings;
+use strict;
+
+use Bio::EnsEMBL::Utils::Argument qw( rearrange );
+use Bio::EnsEMBL::Utils::Exception qw( throw warning deprecate );
+use Bio::EnsEMBL::Funcgen::Storable;
+use vars qw(@ISA);
+
+@ISA = qw(Bio::EnsEMBL::Funcgen::Storable);
+
+
+
+=head2 new
+
+  Arg [-NAME]                : String - experiment name
+  Arg [-EXPERIMENTAL_GROUP]  : Bio::EnsEMBL::Funcgen ExperimentalGroup associated with this experiment
+  Arg [-DATE]                : String - Date of the experiment (YYYY-MM-DD)
+  Arg [-PRIMARY_DESIGN_TYPE] : String - MGED term for the primary design of teh experiment e.g. binding_site_identification
+  Arg [-DESCRIPTION]         : String
+
+  Example    : my $array = Bio::EnsEMBL::Funcgen::Experiment->new
+                              (
+							   -NAME                => $name,
+							   -EXPERIMENTAL_GROUP  => $group,
+							   -DATE                => $date,
+							   -PRIMARY_DESIGN_TYPE => $p_design_type,
+							   -DESCRIPTION         => $description,
+					          );
+
+  Description: Creates a new Bio::EnsEMBL::Funcgen::Experiment object.
+  Returntype : Bio::EnsEMBL::Funcgen::Experiment
+  Exceptions : Throws if name not defined
+               Throws if ExperimentalGroup not valid
+  Caller     : General
+  Status     : Medium Risk
+
+=cut
+
+sub new {
+	my $caller = shift;
+
+	my $class = ref($caller) || $caller;
+
+	my $self = $class->SUPER::new(@_);
+
+	my ($name, $group, $date, $p_dtype, $desc, $archive_id, $data_url, $xml_id, $xml)
+		= rearrange( ['NAME', 'EXPERIMENTAL_GROUP', 'DATE', 'PRIMARY_DESIGN_TYPE', 
+					  'DESCRIPTION','ARCHIVE_ID', 'DATA_URL', 'MAGE_XML', 'MAGE_XML_ID'], @_ );
+	
+    
+    #Added in v68
+    #Remove in v69
+    if($data_url || $archive_id){
+      throw('The -data_url and -archive_id parameters have been moved to the InputSubSet class');
+    }
+
+
+	#Mandatory attr checks
+
+	if(ref($group) ne 'Bio::EnsEMBL::Funcgen::ExperimentalGroup'){
+	  throw("Must pass a valid stored Bio::EnsEMBL::Funcgen::ExperimentalGroup object");
+	}
+
+	if(! defined $name){
+	  throw('You must provide a name parameter');
+	}
+
+	#test date format here?
+
+
+	#Direct assignment here so we avoid setter test in methods
+	$self->{name}                = $name;
+	$self->{group}               = $group;
+	$self->{date}                = $date       if defined $date;
+	$self->{primary_design_type} = $p_dtype    if defined $p_dtype; #MGED term for primary design type
+	$self->{description}         = $desc       if defined $desc;
+
+	#Maintain setter funcs here as these are populated after initialisation
+	$self->mage_xml_id($xml_id) if defined $xml_id;
+	$self->mage_xml($xml)       if defined $xml;
+	
+	return $self;
+}
+
+
+### ACCESSOR METHODS ###
+
+=head2 name
+
+  Example     : my $exp_name = $exp->name;
+  Description : Getter for the experiment name
+  Returntype  : String
+  Exceptions  : None
+  Caller      : General
+  Status      : Stable
+
+=cut
+
+sub name{
+  return $_[0]->{'name'};
+}
+
+
+=head2 experimental_group
+
+  Example     : my $exp_group_name = $exp->experimental_group()->name();
+  Description : Getter for the experimental group
+  Returntype  : Bio::EnsEMBL::Funcgen::ExperimentalGroup
+  Exceptions  : None
+  Caller      : General
+  Status      : At risk
+
+=cut
+
+sub experimental_group{
+  return $_[0]->{'group'};
+}
+
+
+=head2 date
+
+  Example     : my $exp_date = $exp->date;
+  Description : Getter for the date
+  Returntype  : String
+  Exceptions  : None
+  Caller      : General
+  Status      : Stable
+
+=cut
+
+sub date{
+  return $_[0]->{'date'};
+}
+
+
+=head2 description
+
+  Example     : my $exp_desc = $exp->description
+  Description : Getter for the experiment description
+  Returntype  : String
+  Exceptions  : None
+  Caller      : General
+  Status      : At risk - Not used, was stable until v64
+
+=cut
+
+sub description{
+  return $_[0]->{'description'};
+}
+
+
+
+
+
+=head2 primary_design_type
+
+  Example     : my $pdt = $exp->primary_design_type;
+  Description : Getter for the primary design type
+  Returntype  : String - MGED term
+  Exceptions  : None
+  Caller      : General
+  Status      : At risk
+
+=cut
+
+sub primary_design_type{
+  return $_[0]->{'primary_design_type'};
+}
+
+
+# Accessor/Setter methods
+
+=head2 mage_xml
+
+  Arg [1]     : string(optional) - MAGE XML
+  Example     : my $xml = $exp->mage_xml();
+  Description : Getter/Setter for the mage_xml attribute
+  Returntype  : String
+  Exceptions  : None
+  Caller      : General
+  Status      : at risk
+
+=cut
+
+sub mage_xml{
+  my ($self) = shift;	
+
+  $self->{'mage_xml'} = shift if(@_);
+  
+  #use fetch_attrs?
+  if(! exists $self->{'mage_xml'} && $self->mage_xml_id()){
+	$self->{'mage_xml'} = $self->adaptor->fetch_mage_xml_by_Experiment($self);
+  }
+
+  return (exists $self->{'mage_xml'}) ? $self->{'mage_xml'} : undef;
+}
+
+
+=head2 mage_xml_id
+
+  Arg [1]     : int (optional) - mage_xml_id
+  Example     : $exp->group_db_id('1');
+  Description : Getter/Setter for the mage_xml attribute
+  Returntype  : String
+  Exceptions  : None
+  Caller      : General
+  Status      : at risk
+
+=cut
+
+sub mage_xml_id{
+  my $self = shift;	
+
+  $self->{'mage_xml_id'} = shift if @_;
+  
+  return $self->{'mage_xml_id'};
+}
+
+
+
+
+
+
+#These convenience methods are to provide a registry for the experimental chips of the experiment
+
+=head2 get_ExperimentalChips
+
+  Example     : my $exp_chips = @{$exp->get_ExperimentalChips()}
+  Description : Retrieves all ExperiemntalChips
+  Returntype  : Listref of ExperimentalChips
+  Exceptions  : None
+  Caller      : General
+  Status      : At risk
+
+=cut
+
+sub get_ExperimentalChips{
+  my ($self) = shift;
+	
+  #should this also store echips?
+
+  #Need to retrieve all from DB if not defined, then check whether already present and add and store if not
+  #what about immediate access to dbID
+  #should we separate and have add_ExperimentalChip?
+
+  
+
+  if(! exists $self->{'experimental_chips'}){
+     $self->{'experimental_chips'} = {};
+
+     #need to warn about DBAdaptor here?
+  
+    foreach my $echip(@{$self->adaptor->db->get_ExperimentalChipAdaptor->fetch_all_by_experiment_dbID($self->dbID())}){
+      $self->{'experimental_chips'}->{$echip->unique_id()} = $echip;
+    }
+  }
+
+  #is this returning a list or a listref?
+  return [values %{$self->{'experimental_chips'}}];
+}
+
+=head2 add_ExperimentalChip
+
+  Example     : $exp_chip = $exp->add_ExperimentalChip($exp_chip)
+  Description : Adds and stores an ExperiemntalChip for this Experiment
+  Returntype  : Bio::EnsEMBL::Funcgen::ExperimentalChip
+  Exceptions  : Throws is not passed a valid stored Bio::EnsENBML::Funcgen::ExperimentalChip
+  Caller      : General
+  Status      : At risk
+
+=cut
+
+sub add_ExperimentalChip{
+  my ($self, $echip) = @_;
+ 
+
+ throw("Must pass a valid stored Bio::EnsEMBL::Funcgen::ExperimentalChip object") 
+    if(! $echip->isa("Bio::EnsEMBL::Funcgen::ExperimentalChip") || ! $echip->dbID());
+ 
+  if(! exists $self->{'experimental_chips'}){
+    $self->get_ExperimentalChips();
+    $self->{'experimental_chips'}->{$echip->unique_id()} = $echip;
+    #do this here without checking to avoid probelm of retrieving first stored chip
+  }elsif(exists  $self->{'experimental_chips'}->{$echip->unique_id()}){
+    warn("You cannot add the same ExperimentalChip(".$echip->unique_id().")to an Experiment more than once, check your code");
+  }else{
+    $self->{'experimental_chips'}->{$echip->unique_id()} = $echip;
+  }
+  
+  return;
+}
+
+=head2 get_ExperimentalChip_by_unique_id
+
+  Example     : $exp_chip = $exp->add_ExperimentalChip($exp_chip)
+  Description : Adds and stores an ExperiemntalChip for this Experiment
+  Returntype  : Bio::EnsEMBL::Funcgen::ExperimentalChip
+  Exceptions  : Throws if no uid supplied
+  Caller      : General
+  Status      : At risk
+
+=cut
+
+sub get_ExperimentalChip_by_unique_id{
+  my ($self, $uid) = @_;
+  
+  my ($echip);
+
+  throw("Must supply a ExperimentalChip unque_id") if(! defined $uid);
+  
+  $self->{'experimental_chips'} || $self->get_ExperimentalChips();
+
+  if(exists $self->{'experimental_chips'}->{$uid}){
+    $echip = $self->{'experimental_chips'}->{$uid};
+  }
+  #should we warn here if not exists?
+
+  return $echip;
+}
+
+
+=head2 get_ExperimentalChip_unique_ids
+
+  Example     : foreach my $uid(@{$self->experiment->get_ExperimentalChip_unique_ids()}){ ... }
+  Description : retrieves all ExperimentalChip unique_ids
+  Returntype  : ListRef
+  Exceptions  : None
+  Caller      : General
+  Status      : At risk
+
+=cut
+
+sub get_ExperimentalChip_unique_ids{
+  my $self = shift;
+  
+  $self->{'experimental_chips'} || $self->get_ExperimentalChips();
+
+  return [keys %{ $self->{'experimental_chips'}}];
+}
+
+
+
+
+### Deprecated methods ###
+
+
+sub group{
+  my $self = shift;	
+  
+  deprecate("group is deprecated experimental_group instead");
+  throw("You are trying to set a experimental group name using a deprecated method") if @_;
+  return $self->experimental_group()->name;
+}
+
+
+
+sub group_id{
+	my ($self) = shift;	
+	
+	deprecate("Experiment->group_id is deprecated. Use exp->experimental_group->dbID instead");
+	return $self->experimental_group()->dbID;
+}
+
+
+
+sub archive_id{ #deprecated in v68
+  #would deprecate, but no easy way of doing this reliably
+  throw("Use InputSubset->archive_id");
+}
+
+
+sub data_url{ #deprecated in v68
+  #would deprecate, but no easy way of doing this reliably
+  throw("Use InputSubset->display_url");
+}
+
+
+sub source_info{ #deprecated in v68
+  #would deprecate, but no easy way of doing this reliably
+  throw("Use InputSubset->source_info");
+}
+
+
+1;
+