Raw content of Bio::EnsEMBL::Funcgen::ExperimentalSet # # Ensembl module for Bio::EnsEMBL::Funcgen::ExperimentalSubset # # You may distribute this module under the same terms as Perl itself =head1 NAME Bio::EnsEMBL::ExperimentalSet - A module to represent ExperimentalSet object. =head1 SYNOPSIS use Bio::EnsEMBL::Funcgen::ExpeimentalSet; my $data_set = Bio::EnsEMBL::Funcgen::ExperimentalSet->new( -DBID => $dbID, -ADAPTOR => $self, -EXPERIMENT => $exp, -FEATURE_TYPE => $ftype, -CELL_TYPE => $ctype, -FORMAT => 'READ_FORMAT', -VENDOR => 'SOLEXA', -NAME => 'ExpSet1', ); =head1 DESCRIPTION An ExperimentalSet object provides a generic container for any non-array based feature import, allowing tracking of file import via the status table and integration into Data and FeatureSets to provide traceability to the source experiment from a given FeatureSet. =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::ExperimentalSet; use Bio::EnsEMBL::Funcgen::ExperimentalSubset; use Bio::EnsEMBL::Utils::Argument qw( rearrange ); use Bio::EnsEMBL::Utils::Exception qw( throw warning deprecate); use Bio::EnsEMBL::Funcgen::Set; use vars qw(@ISA); @ISA = qw(Bio::EnsEMBL::Funcgen::Set);#change to Set once we have implemented analysis properly =head2 new Example : my $eset = Bio::EnsEMBL::Funcgen::ExperimentalSet->new( -EXPERIMENT => $exp, -FEATURE_TYPE => $ftype, -CELL_TYPE => $ctype, -FORMAT => 'READ_FORMAT', -VENDOR => 'SOLEXA', -NAME => 'ExpSet1', -ANALYSIS => $anal, ); Do we want to define subsets likes this or are we more likely to add them one by one? Description: Constructor for ExperimentalSet objects. Returntype : Bio::EnsEMBL::Funcgen::ExperimentalSet Exceptions : Throws if no Experiment defined Throws if CellType or FeatureType are not valid or stored Caller : General Status : At risk =cut sub new { my $caller = shift; my $class = ref($caller) || $caller; my $self = $class->SUPER::new(@_); #do we need to add $fg_ids to this? Currently maintaining one feature_group focus.(combi exps?) my ($exp, $format, $vendor) = rearrange(['EXPERIMENT', 'FORMAT', 'VENDOR'], @_); if (! (ref $exp && $exp->isa('Bio::EnsEMBL::Funcgen::Experiment') && $exp->dbID())){ throw('Must specify a valid stored Bio::EnsEMBL::Funcgen::Experiment'); } #These are set in Set, just validate here throw ('Must provide a FeatureType') if(! defined $self->feature_type); throw ('Must provide a CellType') if(! defined $self->cell_type); if(! defined $self->analysis){ #default analysis hack for v47 #Set directly to avoid dbID boolean check $self->{'analysis'} = Bio::EnsEMBL::Analysis->new(-logic_name => 'external', -id => 0,#??someone needs to rewrite analysis ); } $self->format($format) if defined $format; $self->vendor($vendor) if defined $vendor; $self->{'experiment'} = $exp; $self->{'subsets'} = {}; return $self; } =head2 add_new_subset Arg [1] : string - sub set name e.g. the file name (not path as we're restricted to 30 chars) Example : $expset->add_new_subset($ss_name, $exp_subset); Description: Adds experimental_subset Returntype : none Exceptions : Throws if set is already present Throws if ExperimentalSubset is not valid or stored Caller : General Status : At Risk =cut sub add_new_subset { my ($self, $ss_name, $exp_sset) = @_; if($self->get_subset_by_name($ss_name)){ throw("Subset $ss_name is already present in this ExperimentalSet, maybe you need to alter the filename?"); } if(defined $exp_sset){ if(!(ref($exp_sset) && $exp_sset->isa('Bio::EnsEMBL::Funcgen::ExperimentalSubset') && $exp_sset->dbID())){ throw('ExperimentalSubsets must be valid and stored'); } } else{ $exp_sset = Bio::EnsEMBL::Funcgen::ExperimentalSubset->new( -name => $ss_name, -experimental_set => $self, ); } $self->{'subsets'}{$ss_name} = $exp_sset; return $self->{'subsets'}{$ss_name}; } =head2 get_Experiment Example : my $exp = $exp_set->get_Experiment(); Description: Getter for the Experiment of this DataSet. Returntype : Bio::EnsEMBL::Fuuncgen::Experiment Exceptions : None Caller : General Status : At Risk =cut sub get_Experiment{ my $self = shift; return $self->{'experiment'}; } =head2 get_subsets Example : my @subsets = @{$exp_set->get_subsets()}; Description: Getter for the subsets for this ExperimentalSet. Returntype : Arrayref Exceptions : None Caller : General Status : At Risk =cut sub get_subsets{ my ($self) = shift; return [ values %{$self->{'subsets'}} ]; } =head2 get_subset_by_name Example : my $subsets = $exp_set->get_subset_by_name('subset1'); Description: Getter for the subset of a given name for this ExperimentalSet. Returntype : Bio::EnsEMBL::Funcgen::ExpeirmentalSubset Exceptions : None Caller : General Status : At Risk =cut sub get_subset_by_name{ my ($self, $name) = @_; return (exists $self->{'subsets'}{$name}) ? $self->{'subsets'}{$name} : undef; } =head2 get_subset_names Example : my @subset_names = @{$exp_set->get_subset_names()}; Description: Getter for the subset names for this ExperimentalSet. Returntype : Arrayref Exceptions : None Caller : General Status : At Risk =cut sub get_subset_names{ my ($self) = shift; return [ keys %{$self->{'subsets'}} ]; } =head2 vendor Arg[1] : string - vendor Example : my $eset->vendor('SOLEXA'); Description: Getter/Setter for the vendor attribute of this DataSet. Returntype : string Exceptions : None Caller : General Status : At Risk =cut sub vendor { my $self = shift; $self->{'vendor'} = shift if @_; return $self->{'vendor'}; } =head2 format Arg[1] : string - format i.e. product type/format Example : my $eset->format('DATASET1'); Description: Getter/Setter for the format attribute of this ExperimentalSet. Returntype : string Exceptions : None Caller : General Status : At Risk =cut sub format { my $self = shift; $self->{'format'} = shift if @_; return $self->{'format'}; } 1;