Raw content of Bio::EnsEMBL::Funcgen::ExperimentalChip # # Ensembl module for Bio::EnsEMBL::Funcgen::ExperimentalChip # # You may distribute this module under the same terms as Perl itself =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. =head1 AUTHOR This module was created by Nathan Johnson. This module is part of the Ensembl project: / =head1 CONTACT Post comments or questions to the Ensembl development list: ensembl-dev@ebi.ac.uk =head1 METHODS =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;