Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/Funcgen/ExperimentalChip.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/ExperimentalChip.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,460 @@ +# +# Ensembl module for Bio::EnsEMBL::Funcgen::ExperimentalChip +# + +=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::ExperimentalChip - A module to represent a physical unique experimental chip. + +=head1 SYNOPSIS + +use Bio::EnsEMBL::Funcgen::ExperimentalChip; + +my $ec = Bio::EnsEMBL::Funcgen::ExperimentalChip->new( + -dbID => $ec_id, + -unique_id => $c_uid, + -experiment_id => $exp_id, + -array_chip_id => $ac_id, + -feature_type => $ftpye, + -cell_type => $ctype, + -chip_set_id => 1, + ); + + +=head1 DESCRIPTION + +An ExperimentalChip object represent a physical array chip/slide used in an experiment. The data +(currently the unique_id, experiment_id, array_chip_id, and description) are stored +in the experimental_chip table. + +=cut + +use strict; +use warnings; + + +package Bio::EnsEMBL::Funcgen::ExperimentalChip; + + +use Bio::EnsEMBL::Utils::Argument qw( rearrange ); +use Bio::EnsEMBL::Utils::Exception qw( throw warning ); +use Bio::EnsEMBL::Funcgen::Storable; + +use vars qw(@ISA); +@ISA = qw(Bio::EnsEMBL::Funcgen::Storable); + + +=head2 new + + Arg [-unique_id] : int - the unique id of this individual experimental chip + Arg [-experiment_id] : int - the experiment dbID + Arg [-array_chip_id] : int - the dbID or the array_chip + Arg [-feature_type ] : Bio::EnsEMBL::Funcgen::FeatureType + Arg [-cell_type ] : Bio::EnsEMBL::Funcgen::CellType + Arg [-biological_replicate ] : string - the name to define the biological replicate set + Arg [-technical_replicate ] : string - the name to define the technical replicate set + + + Example : 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 => $ftype, + -biological_replicate => 'BIOREP1', + -technical_replicate => 'techrep_1', + ); + Description: Creates a new Bio::EnsEMBL::Funcgen::ExperimentalChip object. + Returntype : Bio::EnsEMBL::Funcgen::ExperimentalChip + Exceptions : None ? should throw if mandaotry params not set + Caller : General + Status : Medium Risk + +=cut + +sub new { + my $caller = shift; + + my $class = ref($caller) || $caller; + + my $self = $class->SUPER::new(@_); + + #can we lc these? + my ($c_uid, $exp_dbid, $ac_id, $ftype, $ctype, $brep, $trep) + = rearrange( ['UNIQUE_ID', 'EXPERIMENT_ID', 'ARRAY_CHIP_ID', 'FEATURE_TYPE', 'CELL_TYPE', 'BIOLOGICAL_REPLICATE', 'TECHNICAL_REPLICATE'], @_ ); + + + $self->unique_id($c_uid) if defined $c_uid; + $self->experiment_id($exp_dbid) if defined $exp_dbid; + $self->array_chip_id($ac_id) if defined $ac_id; + $self->feature_type($ftype) if defined $ftype; + $self->cell_type($ctype) if defined $ctype; + $self->biological_replicate($brep) if defined $brep; + $self->technical_replicate($trep) if defined $trep; + return $self; +} + +=head2 get_Experiment + + Args : None + Example : my $exp = $exp_chip->get_Experiment(); + Description: Returns the Experiment which this ExperimentalChip belongs to. + Returntype : Bio::EnsEMBL::Funcgen::Experiment + Exceptions : None + Caller : General + Status : At Risk + +=cut + +sub get_Experiment { + my $self = shift; + + if (! $self->{'experiment'}){ + + if ($self->dbID() && $self->adaptor() ) { + $self->{'experiment'} = $self->adaptor->db->get_ExperimentAdaptor->fetch_by_dbID($self->experiment_id); + } else { + warning('Need database connection to retrieve Experiment'); + } + } + + + return $self->{'experiment'}; +} + + + +=head2 get_Channels + + Args : None + Example : my $channels = $exp_chip->get_Channels(); + Description: Returns all channels on a ExperimentalChip. Needs a database connection. + Returntype : Listref of Bio::EnsEMBL::Funcgen::Channel objects + Exceptions : None + Caller : General + Status : At Risk + +=cut + +sub get_Channels { + my $self = shift; + + if (! $self->{'channels'}){ + + if ($self->dbID() && $self->adaptor() ) { + foreach my $channel (@{$self->adaptor->db->get_ChannelAdaptor->fetch_all_by_ExperimentalChip($self)}){ + $self->add_Channel($channel); + } + } else { + warning('Need database connection to retrieve Channels'); + } + } + + return [values %{$self->{'channels'}}]; +} + + +=head2 add_Channel + + Args : Bio::EnsEMBL::Funcgen::Channel + Example : $exp_chip->add_channel($chan); + Description: Sets ad channel object for the ExperimentalChip + Returntype : Listref of Bio::EnsEMBL::Funcgen::Channel objects + Exceptions : warns if Channel already set + Caller : General + Status : At Risk + +=cut + +sub add_Channel{ + my ($self, $chan) = @_; + + + if(! ($chan && $chan->isa("Bio::EnsEMBL::Funcgen::Channel") && $chan->dbID())){ + throw("Must provide a valid stored Bio::EnsEMBL::Funcgen::Channel object"); + } + + + $self->{'channels'} ||= {}; + + if (exists $self->{'channels'}->{$chan->dbID()}){ + #should this throw? + #This currently prevents haveing to check whether a channel has already been added + #If we were duplicating then we probably would have a different dbID + warn("You cannot add the same Channel to an ExperimentalChip more than once"); + }else{ + + + ##change this to key on freq? + + $self->{'channels'}{$chan->dbID()} = $chan; + } + + return; +} + + + +=head2 get_channel_ids + + Args : None + Example : my @channel_ids = @{$array->get_channel_ids()}; + Description: Returns all channel ids for an ExperimentalChip. Needs a database connection. + Returntype : List of ints + Exceptions : None + Caller : General + Status : Medium Risk + +=cut + +sub get_channel_ids{ + my $self = shift; + + $self->get_Channels(); + + return [keys %{$self->{'channels'}}]; +} + +=head2 get_Channel_by_dye + + Args : string - dye used in channel + Example : my $chan = $echip->get_Channel_by_dye("CY5"); + Description: Returnsthe channel corresponding to the frequency specified + Returntype : Bio::EnsEMBL::Funcgen::Channel + Exceptions : None + Caller : General + Status : At Risk + +=cut + +sub get_Channel_by_dye{ + my ($self, $dye) = @_; + + my @chans; + + foreach my $chan(@{$self->get_Channels()}){ + push @chans, $chan if uc($chan->dye()) eq uc($dye); + } + + throw("Found more than one Channels with the same dye") if(scalar(@chans) > 1); + + + return (@chans) ? $chans[0] : undef; +} + +=head2 contains_Channel + + Args [1] : Bio::EnsEMBL::Funcgen::Channel + Example : if(! $echip->contains_Channel($chan){..add channel ..}; + Description: Checks whether this Channel has already been added to the ExperimentalChip + Returntype : Boolean + Exceptions : Throws if arg not a valid stored Bio::EnseMBL::Funcgen::Channel + Caller : General + Status : At Risk + +=cut + +sub contains_Channel{ + my ($self, $chan) = @_; + + if(! ($chan && $chan->isa("Bio::EnsEMBL::Funcgen::Channel") && $chan->dbID())){ + throw("Must provide a valid stored Bio::EnsEMBL::Funcgen::Channel object"); + } + + $self->get_Channels(); + + my $contains = 0; + + $contains = 1 if(exists $self->{'channels'}->{$chan->dbID()}); + + return $contains; +} + + + +=head2 unique_id + + Arg [1] : (optional) int - the unique chip id for this ExperimentalChip + Example : my $c_uid = $array->unique_id(); + Description: Getter, setter unique_id attribute. + Returntype : string + Exceptions : None + Caller : General + Status : at Risk + +=cut + +sub unique_id { + my $self = shift; + $self->{'unique_id'} = shift if @_; + return $self->{'unique_id'}; +} + +=head2 feature_type + + Arg [1] : (optional) Bio::EnsEMBL::Funcgen::FeatureType + Example : $ec->feature_type($ftype); + Description: Getter/Setter thefeature_type attribute. + Returntype : Bio::EnsEMBL::Funcgen::FeatureType + Exceptions : Throws if arg is not a Bio::EnsEMBL::FeatureType + Caller : General + Status : At Risk + +=cut + +sub feature_type { + my $self = shift; + + if(@_){ + throw("Must pass a valid Bio::EnsEMBL::Funcgen::FeatureType object") if (! $_[0]->isa("Bio::EnsEMBL::Funcgen::FeatureType")); + $self->{'feature_type'} = shift; + } + + return $self->{'feature_type'}; +} + + +=head2 cell_type + + Arg [1] : (optional) Bio::EnsEMBL::Funcgen::CellType + Example : $ec->cell_type($ctype); + Description: Getter/Setter the cell_type attribute. + Returntype : Bio::EnsEMBL::Funcgen::CellType + Exceptions : Throws if arg is not a Bio::EnsEMBL::CellType + Caller : General + Status : At Risk + +=cut + +sub cell_type { + my $self = shift; + + if(@_){ + throw("Must pass a valid Bio::EnsEMBL::Funcgen::CellType object") if (! $_[0]->isa("Bio::EnsEMBL::Funcgen::CellType")); + $self->{'cell_type'} = shift; + } + + return $self->{'cell_type'}; +} + + + +=head2 biological_replicate + + Arg [1] : (optional) string - the name or number of the chip biological replicate set + Example : $ec->biological_replicate('SAMPLENAME_BR1'); + Description: Getter, setter for the biological_replicate attribute. + Returntype : string + Exceptions : None + Caller : General + Status : At Risk + +=cut + +sub biological_replicate { + my $self = shift; + $self->{'biological_replicate'} = shift if @_; + return $self->{'biological_replicate'}; +} + +=head2 technical_replicate + + Arg [1] : (optional) string - the name or number of the chip technical replicate set + Example : $ec->technical_replicate('SAMPLENAME_BR1_TR1'); + Description: Getter, setter for the technical_replicate attribute. + Returntype : string + Exceptions : None + Caller : General + Status : At Risk + +=cut + +sub technical_replicate { + my $self = shift; + $self->{'technical_replicate'} = shift if @_; + return $self->{'technical_replicate'}; +} + + + +=head2 experiment_id + + Arg [1] : (optional) int - the experiment dbID + Example : my $exp_id = $array->experiment_id(); + Description: Getter, setter experiment_id attribute + Returntype : int + Exceptions : None + Caller : General + Status : Medium Risk + +=cut + +sub experiment_id { + my $self = shift; + $self->{'experiment_id'} = shift if @_; + return $self->{'experiment_id'}; +} + +=head2 array_chip_id + + Arg [1] : (optional) int - the array_chip dbID + Example : my $ac_id = $ec->array_chip_id(); + Description: Getter, setter array_chip_id attribute + Returntype : int + Exceptions : None + Caller : General + Status : Medium Risk + +=cut + +sub array_chip_id { + my $self = shift; + $self->{'array_chip_id'} = shift if @_; + return $self->{'array_chip_id'}; +} + +=head2 get_ArrayChip + + Example : my $array_chip = $exp_chip->get_ArrayChip(); + Description: Getter for the array_chip attribute + Returntype : Bio::EnsEMBL::Funcgen::ArrayChip + Exceptions : None + Caller : General + Status : At Risk + +=cut + +sub get_ArrayChip { + my $self = shift; + + if(! defined $self->{'array_chip'}){ + $self->{'array_chip'} = $self->adaptor->db->get_ArrayChipAdaptor()->fetch_by_dbID($self->array_chip_id()); + } + + return $self->{'array_chip'}; +} + + + +1; +