Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/Funcgen/ExperimentalSet.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/ExperimentalSet.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,281 @@ +# +# 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: http://www.ensembl.org/ + +=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; +