diff variant_effect_predictor/Bio/EnsEMBL/Utils/SchemaConversion.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/Utils/SchemaConversion.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,347 @@
+=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
+
+=head1 NAME
+
+Bio::EnsEMBL::Utils::SchemaConversion - Utility module for Vega schema conversion script
+
+=head1 SYNOPSIS
+
+  my $serverroot = '/path/to/ensembl';
+  my $conversion =
+    Bio::EnsEMBL::Utils::ConversionSupport->new($serverroot);
+
+  # parse common options
+  $conversion->conv_usage->parse_common_options;
+
+  # convert from schema 19 to 20+
+  $conversion->do_conversion()
+
+=head1 DESCRIPTION
+
+This module is a helper module for database conversion, for
+both vega-vega and ensembl-vega schemas. It provides a wrapper
+around SeqStoreConverter::BasicConverter and the species specific
+methods therein. Also provides access to helper functions in
+Bio::EnsEMBL::Utils::ConversionSupport
+
+=head1 METHODS
+
+=cut
+
+package Bio::EnsEMBL::Utils::SchemaConversion;
+
+use  Bio::EnsEMBL::Utils::ConversionSupport;
+use strict;
+use warnings;
+
+use Data::Dumper;
+
+=head2 new
+
+  Example     : $conversion->Bio::EnsEMBL::Utils::SchemaConversion->new($serverroot);
+  Description : Constructor, including an instance of a Bio::EnsEMBL::Utils::ConversionSupport 
+                object. Parses input file and checks input with user
+  Return type : Bio::EnsEMBL::Utils::SchemaConversion object 
+  Exceptions  : thrown if $Siteroot not passed over
+  Caller      : $Siteroot/utils/vega_schema_conversion
+
+=cut
+
+sub new {
+    my $class = shift;
+    my $support = shift;
+    my $self = {};
+    bless ($self,$class);
+    $self->{config} =  Bio::EnsEMBL::Utils::ConversionSupport->new($support);
+    $self->conv_support->parse_common_options;
+	$self->conv_support->parse_extra_options('do_vega_sc=s',
+											 'do_ens_sc=s',
+											 'source_db=s',
+											 'core_sql=s',
+											 'vega_sql=s',
+											 'patch_sql=s',
+											 'force=s',
+											 'do_features=s');
+
+	#check input and show help
+	$self->conv_usage() if ($self->conv_support->param("help"));
+	$self->conv_usage("configuration file needed") unless ($self->conv_support->param("conffile"));
+	$self->conv_usage("password for database access needed") unless ($self->conv_support->param("pass"));
+	$self->conv_usage("can only do conversion to ensembl OR Vega, not both") if ($self->conv_support->param('do_vega_sc') && $self->conv_support->param('do_ens_sc'));
+	$self->conv_usage("You need to do vega->veg or ensembl->vega conversion") unless ($self->conv_support->param('do_vega_sc') || $self->conv_support->param('do_ens_sc'));
+	
+	# ask user to confirm parameters to proceed
+	$self->conv_support->allowed_params('conffile',
+										'do_vega_sc',
+										'do_ens_sc',
+										'host',
+										'port',
+										'user',
+										'pass',
+										'source_db',
+										'dbname',
+										'force',
+										'do_features',
+										'verbose',
+										'logpath',
+										'logfile',
+										'core_sql',
+										'vega_sql',
+										'patch_sql');										
+	$self->conv_support->confirm_params;
+
+    return $self;
+}
+
+=head2 conv_support
+
+  Example     : $conversion->conv_support; 
+  Description : Provides access to Bio::EnsEMBL::Utils::ConversionSupport methods
+  Return type : Bio::EnsEMBL::Utils::ConversionSuppor object
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub conv_support {
+    my $self = shift;
+    return $self->{config};
+}
+
+=head2 conv_obj
+
+  Example     : $conversion->conv_obj; 
+  Description : Provides access to SeqStoreConverter::BasicConverter methods
+  Return type : SeqStoreConverter::BasicConverter object
+  Exceptions  : none
+  Caller      : general
+
+=cut
+
+sub conv_obj {
+    my $self = shift;
+    return $self->{'converter_object'};
+}
+
+
+=head2 species_alias
+
+  Example     : $self->species_alias
+  Description : examines name of source database to determine which conversion module to use
+  Return type : string
+  Exceptions  : die if wrong species name used
+  Caller      : $self
+
+=cut
+
+sub species_alias {
+    my $self=shift;
+    my $name = shift;
+    return 'CanisFamiliaris' if $name =~ /canis/;
+    return 'HomoSapiens' if $name =~ /homo/;
+    return 'MusMusculus' if $name =~ /mus/;
+    return 'DanioRerio' if $name =~ /danio/;
+	##hack - should use own modules
+    return 'HomoSapiens' if $name =~ /sus/;
+    die "invalid name of source database, please check configuration file";
+}
+
+=head2 choose_conversion_type
+
+  Example     : $conversion->choose_conversion_type
+  Description : compares conversion type (ensembl or vega) and species type with 
+                available modules and chooses that to use for the conversion. Stores
+                a converter object within the caller
+  Return type : none
+  Exceptions  : none
+  Caller      : $Siteroot/utils/vega_schema_conversion
+
+=cut
+
+sub choose_conversion_type {
+    my $self = shift;
+    my $converter;
+    my $species;
+
+    $species = $self->species_alias($self->conv_support->param('source_db'));
+    if ($self->conv_support->param('do_vega_sc')) {
+        $species = "vega::".$species;
+        eval "require SeqStoreConverter::$species";
+        if($@) {
+            warn("Could not require conversion module SeqStoreConverter::$species\ for vega conversion\n" .
+                    "Using SeqStoreConverter::BasicConverter instead:\n$@");
+            require SeqStoreConverter::BasicConverter;
+            $species = "BasicConverter";
+        }
+        else {
+            warn "Using conversion module SeqStoreConverter::$species for vega conversion\n";
+        }
+    }
+    else {
+        eval "require SeqStoreConverter::$species";
+        if($@) {
+            warn("Could not require conversion module SeqStoreConverter::$species for Ensembl conversion\n" .
+                    "Using SeqStoreConverter::BasicConverter instead:\n$@");
+            require SeqStoreConverter::BasicConverter;
+            $species = "BasicConverter";
+        }
+        else {
+            warn "Using conversion module SeqStoreConverter::$species for Ensembl conversion\n";
+        }
+        $self->conv_support->param('vega_sql',0);
+    }
+    $converter = "SeqStoreConverter::$species"->new
+        ( $self->conv_support->param('user'), 
+          $self->conv_support->param('pass'), 
+          $self->conv_support->param('host').':'.$self->conv_support->param('port'), 
+          $self->conv_support->param('source_db'), 
+          $self->conv_support->param('dbname'), 
+          $self->conv_support->param('core_sql'), 
+          $self->conv_support->param('vega_sql'), 
+          $self->conv_support->param('force'), 
+          $self->conv_support->param('verbose'),
+          '',
+        );
+
+    $self->{'converter_object'} = $converter;
+}
+
+=head2 do_conversion
+
+  Example     : $conversion->do_conversion
+  Description : does the database conversion 
+  Return type : none
+  Exceptions  : none
+  Caller      : $Siteroot/utils/vega_schema_conversion
+
+=cut
+
+
+sub do_conversion {
+    my $self= shift;
+    $self->conv_obj->debug( "\n\n*** converting " . $self->conv_obj->source . " to " . 
+            $self->conv_obj->target() . " ***");
+    $self->conv_obj->transfer_meta();
+    $self->conv_obj->create_coord_systems();
+    $self->conv_obj->create_seq_regions();
+    $self->conv_obj->create_assembly();
+    $self->conv_obj->create_attribs();
+    $self->conv_obj->set_top_level();
+    $self->conv_obj->transfer_dna();
+    $self->conv_obj->back_patch_schema();
+    $self->conv_obj->transfer_genes();
+    $self->conv_obj->transfer_prediction_transcripts();
+
+    if ($self->conv_support->param('do_features')) {
+        $self->conv_obj->transfer_features();
+    }
+#use this for both ensembl and vega for now,
+#but might need changing when vega gets eg transcript modified dates
+    $self->conv_obj->transfer_vega_stable_ids();
+    $self->conv_obj->copy_other_tables(); 
+    $self->conv_obj->copy_repeat_consensus(); 
+    $self->conv_obj->create_meta_coord(); 
+    if ($self->conv_support->param('do_vega_sc')) { 
+        $self->conv_obj->copy_other_vega_tables(); 
+        $self->conv_obj->update_clone_info();
+        $self->conv_obj->remove_supercontigs(); 
+        $self->conv_obj->copy_internal_clone_names(); 
+        $self->conv_obj->copy_assembly_exception; 
+    } 
+}
+
+=head2 make_schema_up_to_date
+
+  Example     : $conversion->make_schema_up_to_date
+  Description : patches schema to latest version
+  Return type : none
+  Exceptions  : none
+  Caller      : $conversion
+
+=cut
+
+sub make_schema_up_to_date {
+	my $self = shift;
+	$self->conv_obj->debug ("\nPatching schema to latest version\n");
+	my $user = $self->conv_obj->user;
+	my $pass = $self->conv_obj->password;
+	my $port = $self->conv_obj->port;
+	my $host = $self->conv_obj->host;
+	my $target = $self->conv_obj->target;
+	my $patch_schema = $self->conv_support->param('patch_sql');
+	my $cmd = "/usr/local/mysql/bin/mysql -u $user -p$pass -P $port -h $host $target < $patch_schema";
+	system ($cmd);
+}
+
+
+
+=head2 conv_usage
+
+  Example     : $conversion->conv_usage("message")
+  Description : prints usage information and exits
+  Return type : none
+  Exceptions  : none
+  Caller      : $Siteroot/utils/vega_schema_conversion
+
+=cut
+
+sub conv_usage {
+	my $self = shift;
+	my $msg = shift;
+
+	print STDERR "\nMSG: $msg\n" if($msg);
+	
+	print STDERR <<EOF;
+
+** Source and target databases must be on the same mysql instance
+
+usage: ./conversion_densities.pl  <options>
+
+options: --conf <conf_file>      configuration file (uses conf/Conversion.ini by default):
+
+                                   fields:
+                                      do_vega_sc (do vega conversion: 0 or 1)
+                                      do_ens_sc (do ensembl conversion: 0 or 1)
+                                      user (a mysql db user with read/write priveleges)
+                                      host (eg ecs3f)
+                                      port (eg 3310)
+                                      source_db (schema 19 source database)
+                                      dbname (schema 20+ target database)
+                                      force (overwrite existing target database: 0 or 1)
+                                      verbose (print out debug statements: 0 or 1)
+                                      logpath (location of log file)
+                                      do_features (transfer dna- and protein-align features, for debugging: 0 or 1)
+                                      core_sql (location of ensembl schema creation script: ensembl/sql/table.sql)
+                                      vega_sql (location of creation script for additional vega tables: ensembl/sql/vega_specific_tables.sql)
+                                      patch_sql (location of schema patching script: ensembl/sql/vega_latest_schema.sql)
+ 
+         --log                   name of log_file
+         --help                  display this message
+
+EOF
+  exit;
+
+}
+
+1;
+
+
+