diff variant_effect_predictor/Bio/EnsEMBL/Variation/Individual.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/Variation/Individual.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,402 @@
+=head1 LICENSE
+
+ Copyright (c) 1999-2012 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 <dev@ensembl.org>.
+
+ Questions may also be sent to the Ensembl help desk at
+ <helpdesk@ensembl.org>.
+
+=cut
+
+# Ensembl module for Bio::EnsEMBL::Variation::Individual
+#
+# Copyright (c) 2004 Ensembl
+#
+
+
+=head1 NAME
+
+Bio::EnsEMBL::Variation::Individual - A single member of a population.
+
+=head1 SYNOPSIS
+
+    $individual = Bio::EnsEMBL::Variation::Individual->new
+       (-name => 'WI530.07',
+        -description => 'african',
+        -gender => 'Male',
+        -father_individual => $father_ind,
+        -mother_individual => $mother_ind);
+
+    ...
+
+    print $individual->name(), ' - ', $individual->description(), "\n";
+    print "Gender: ", $individual->gender(), "\n";
+    print $individual->mother_Individual->name()
+       if($individual->mother_Individual());
+    print $individual->father_Individual->name()
+       if($individual->father_Individual());
+
+
+
+=head1 DESCRIPTION
+
+This is a class representing a single individual.  An individual may be part
+of one population or several.  A pedigree may be constructed using the father_Individual
+and mother_Individual attributes.
+
+=head1 METHODS
+
+=cut
+
+
+use strict;
+use warnings;
+
+package Bio::EnsEMBL::Variation::Individual;
+
+use Bio::EnsEMBL::Utils::Exception qw(throw warning);
+use Bio::EnsEMBL::Utils::Argument qw(rearrange);
+use Bio::EnsEMBL::Variation::Sample;
+
+our @ISA = ('Bio::EnsEMBL::Variation::Sample');
+
+=head2 new
+
+  Arg [-dbID] :
+    int - unique internal identifier
+  Arg [-ADAPTOR] :
+    Bio::EnsEMBL::Variation::DBSQL::IndividualAdaptor
+  Arg [-NAME] :
+    string - name of this individual
+  Arg [-DESCRIPTION] :
+    string description - description of this individual
+  Arg [-GENDER] :
+    string - must be one of 'Male', 'Female', 'Unknown'
+  Arg [-FATHER_INDIVIDUAL] :
+    Bio::EnsEMBL::Variation::Individual - the father of this individual
+  Arg [-MOTHER_INDIVIDUAL] :
+    Bio::EnsEMBL::Variation::Individual - the mother of this individual
+  Arg [-MOTHER_INDIVIDUAL_SAMPLE_ID] :
+    int - set the internal id of the mother individual so that the actual
+    mother Individual object can be retrieved on demand.
+  Arg [-FATHER_INDIVIDUAL_SAMPLE_ID]:
+    int - set the internal id of the mother individual so that the actual
+    mother Individual object can be retrieved on demand.
+  Arg [-TYPE_INDIVIDUAL]:
+    int - name for the type of the individual (fully or partly inbred, outbred or mutant
+  Arg [-TYPE_DESCRIPTION]:
+    string - description of the type of individual
+  Example    : $individual = Bio::EnsEMBL::Variation::Individual->new
+                 (-name => 'WI530.07',
+                  -description => 'african',
+                  -gender => 'Male',
+                  -father_individual => $father_ind,
+                  -mother_individual => $mother_ind,
+		  -type_individual => 'outbred',
+		  -type_description => 'a single organism which breeds freely');
+  Description: Constructor Instantiates an Individual object.
+  Returntype : Bio::EnsEMBL::Variation::Individual
+  Exceptions : throw if gender arg is provided but not valid
+  Caller     : general
+  Status     : At Risk
+
+=cut
+
+sub new {
+  my $caller = shift;
+  my $class = ref($caller) || $caller;
+
+  my ($dbID, $adaptor, $name, $desc, $display_flag, $gender, $father, $mother, $type_name, $type_desc,
+      $father_id, $mother_id) =
+    rearrange([qw(dbID adaptor name description display gender
+                  father_individual mother_individual
+		  type_individual type_description
+                  father_individual_sample_id mother_individual_sample_id)], @_);
+
+  if(defined($gender)) {
+    $gender = ucfirst(lc($gender));
+    if($gender ne 'Male' && $gender ne 'Female' && $gender ne 'Unknown') {
+      throw('Gender must be one of "Male","Female","Unknown"');
+    }
+  }
+
+  if (defined($type_name)){
+      $type_name = ucfirst(lc($type_name));
+      if ($type_name ne 'Fully_inbred' && $type_name ne 'Partly_inbred' && $type_name ne 'Outbred' && $type_name ne 'Mutant'){
+	  throw('Type of individual must of one of: "fully_inbred", "partly_inbred", "outbred", "mutant"');
+      }
+  }
+  
+  return bless {
+	'dbID'    => $dbID,
+	'adaptor' => $adaptor,
+	'name'    => $name,
+	'description' => $desc,
+	'display' => $display_flag,
+	'gender'  => $gender,
+	'father_individual' => $father,
+	'mother_individual' => $mother,
+	'type_individual' => $type_name,
+	'type_description' => $type_desc,
+	'_mother_individual_sample_id' => $mother_id,
+	'_father_individual_sample_id' => $father_id,
+  }, $class;
+}
+
+
+=head2 type_individual
+
+    Arg [1]     : int $newval (optional)
+                  The new value to set the type_individual attribute to                  
+    Example     : $type_individual = $obj->type_individual();
+    Description : Getter/Setter for the type_individual attribute
+    Returntype  : int
+    Exceptions  : none
+    Caller      : general
+    Status      : At Risk
+
+=cut
+
+sub type_individual{
+    my $self = shift;
+    if (@_){
+	my $new_name = shift;
+	return $self->{'type_individual'} = $new_name;
+    }
+    return $self->{'type_individual'};
+}
+
+=head2 type_description
+
+    Arg [1]     : int $newval (optional)
+                  The new value to set the type_description attribute to                  
+    Example     : $type_description = $obj->type_description();
+    Description : Getter/Setter for the type_description attribute
+    Returntype  : int
+    Exceptions  : none
+    Caller      : general
+    Status      : At Risk
+
+=cut
+
+sub type_description{
+    my $self = shift;
+    if (@_){
+	my $new_desc = shift;
+	return $self->{'type_description'} = $new_desc;
+    }
+    return $self->{'type_description'};
+}
+
+=head2 gender
+
+  Arg [1]    : string $newval (optional)
+               The new value to set the gender attribute to
+  Example    : $gender = $obj->gender()
+  Description: Getter/Setter for the gender attribute
+  Returntype : string
+  Exceptions : none
+  Caller     : general
+  Status     : At Risk
+
+=cut
+
+sub gender{
+  my $self = shift;
+
+  if(@_) {
+    my $gender = ucfirst(lc(shift));
+
+    if($gender ne 'Male' && $gender ne 'Female' && $gender ne 'Unknown') {
+      throw('Gender must be one of "Male","Female","Unknown"');
+    }
+    $self->{'gender'} = $gender;
+  }
+
+  return $self->{'gender'};
+}
+
+
+=head2 display
+
+  Arg [1]    : string $newval (optional)
+               The new value to set the display attribute to
+  Example    : $display = $obj->display()
+  Description: Getter/Setter for the display attribute
+  Returntype : string
+  Exceptions : none
+  Caller     : general
+  Status     : At Risk
+
+=cut
+
+sub display{
+  my $self = shift;
+  
+  if(@_) {
+    my $display = uc(shift);
+    
+    if($display ne 'UNDISPLAYABLE' && $display ne 'REFERENCE' && $display ne 'DISPLAYABLE' && $display ne 'DEFAULT') {
+      throw('Display flag must be one of "REFERENCE", "DEFAULT", "DISPLAYABLE", "UNDISPLAYABLE"');
+    }
+    
+    $self->{'display'} = $display;
+  }
+  
+  return $self->{'display'};
+}
+
+
+=head2 get_all_Populations
+
+   Args        : none
+   Example     : $pops = $ind->get_all_Populations();
+   Description : Getter for the Populations for this Individual. Returns
+                 empty list if there are none.
+   ReturnType  : listref of Bio::EnsEMBL::Population
+   Exceptions  : none
+   Caller      : general
+   Status      : At Risk
+
+=cut
+
+sub get_all_Populations{
+  my $self = shift;
+  
+  if(!defined($self->{populations})) {
+	if (defined ($self->{'adaptor'})){
+	  my $pop_adaptor = $self->{'adaptor'}->db()->get_PopulationAdaptor();
+	  $self->{populations} = $pop_adaptor->fetch_all_by_Individual($self);
+	}
+  }
+  
+  return $self->{populations};
+}
+
+
+
+=head2 father_Individual
+
+  Arg [1]    : string $newval (optional)
+               The new value to set the father_Individual attribute to
+  Example    : $father_Individual = $obj->father_Individual()
+  Description: Getter/Setter for the father of this Individual. If this
+               has not been set manually and this Individual has an attached
+               adaptor, an attempt will be made to lazy-load it from the
+               database.
+  Returntype : string
+  Exceptions : none
+  Caller     : general
+  Status     : At Risk
+
+=cut
+
+sub father_Individual{
+  my $self = shift;
+
+  if(@_) {
+    my $ind = shift;
+    if(defined($ind) && (!ref($ind) ||
+                         !$ind->isa('Bio::EnsEMBL::Variation::Individual'))) {
+      throw('Bio::EnsEMBL::Variation::Individual arg expected');
+    }
+    if($ind->gender() eq 'Female') {
+      throw("Father individual may not have gender of Female");
+    }
+    return $self->{'father_individual'} = $ind;
+  }
+
+  # lazy-load mother if we can
+  if(!defined($self->{'father_individual'}) && $self->adaptor() &&
+     defined($self->{'_father_individual_sample_id'})) {
+    $self->{'father_individual'} =
+      $self->adaptor->fetch_by_dbID($self->{'_father_individual_sample_id'});
+  }
+
+  return $self->{'father_individual'};
+}
+
+
+
+=head2 mother_Individual
+
+  Arg [1]    : string $newval (optional) 
+               The new value to set the mother_Individual attribute to
+  Example    : $mother_Individual = $obj->mother_Individual()
+  Description: Getter/Setter for the mother of this individual. If this
+               has not been set manually and this Individual has an attached
+               adaptor, an attempt will be made to lazy-load it from the
+               database.
+  Returntype : string
+  Exceptions : none
+  Caller     : general
+  Status     : At Risk
+
+=cut
+
+sub mother_Individual{
+  my $self = shift;
+
+  if(@_) {
+    my $ind = shift;
+    if(defined($ind) && (!ref($ind) ||
+                         !$ind->isa('Bio::EnsEMBL::Variation::Individual'))) {
+      throw('Bio::EnsEMBL::Variation::Individual arg expected');
+    }
+    if($ind->gender() eq 'Male') {
+      throw("Mother individual may not have gender of Male");
+    }
+    return $self->{'mother_individual'} = $ind;
+  }
+
+  # lazy-load mother if we can
+  if(!defined($self->{'mother_individual'}) && $self->adaptor() &&
+     defined($self->{'_mother_individual_sample_id'})) {
+    $self->{'mother_individual'} =
+      $self->adaptor->fetch_by_dbID($self->{'_mother_individual_sample_id'});
+  }
+
+  return $self->{'mother_individual'};
+}
+
+
+
+=head2 get_all_child_Individuals
+
+  Arg [1]    : none
+  Example    : foreach my $c (@{$ind->get_all_child_Individuals}) {
+                 print "Child: " $c->name(), "\n";
+               }
+  Description: Retrieves all individuals from the database which are children
+               of this individual. This will only work if this Individual
+               object has been stored in the database and has an attached
+               adaptor.
+  Returntype : reference to list of Bio::EnsEMBL::Variation::Individual objects
+  Exceptions : warning if this object does not have an attached adaptor
+  Caller     : general
+  Status     : At Risk
+
+=cut
+
+sub get_all_child_Individuals {
+  my $self = shift;
+
+  if(!$self->adaptor()) {
+    warning("Cannot retrieve child individuals without attached adaptor.");
+  }
+
+  return $self->adaptor()->fetch_all_by_parent_Individual($self);
+  
+}
+
+1;