annotate variant_effect_predictor/Bio/EnsEMBL/Utils/ConversionSupport.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::Utils::ConversionSupport - Utility module for Vega release and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 schema conversion scripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my $serverroot = '/path/to/ensembl';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $support = new Bio::EnsEMBL::Utils::ConversionSupport($serverroot);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 # parse common options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 $support->parse_common_options;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 # parse extra options for your script
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 $support->parse_extra_options( 'string_opt=s', 'numeric_opt=n' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # ask user if he wants to run script with these parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $support->confirm_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 # see individual method documentation for more stuff
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 This module is a collection of common methods and provides helper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 functions for the Vega release and schema conversion scripts. Amongst
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 others, it reads options from a config file, parses commandline options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 and does logging.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 package Bio::EnsEMBL::Utils::ConversionSupport;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 no warnings 'uninitialized';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 use Getopt::Long;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 use Text::Wrap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 use FindBin qw($Bin $Script);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 use POSIX qw(strftime);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 use Cwd qw(abs_path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 use DBI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 use Data::Dumper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 use Fcntl qw(:flock SEEK_END);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 my $species_c = 1; #counter to be used for each database connection made
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 Arg[1] : String $serverroot - root directory of your ensembl sandbox
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 Example : my $support = new Bio::EnsEMBL::Utils::ConversionSupport(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 '/path/to/ensembl');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 Description : constructor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Return type : Bio::EnsEMBL::Utils::ConversionSupport object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Exceptions : thrown if no serverroot is provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 (my $serverroot = shift) or throw("You must supply a serverroot.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my $self = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 '_serverroot' => $serverroot,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 '_param' => { interactive => 1 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 '_warnings' => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 bless ($self, $class);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 =head2 parse_common_options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 Example : $support->parse_common_options;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 Description : This method reads options from a configuration file and parses
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 some commandline options that are common to all scripts (like
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 db connection settings, help, dry-run). Commandline options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 will override config file settings.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 All options will be accessible via $self->param('name').
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Exceptions : thrown if configuration file can't be opened
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 sub parse_common_options {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 # read commandline options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my %h;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 Getopt::Long::Configure("pass_through");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 &GetOptions( \%h,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 'dbname|db_name=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 'host|dbhost|db_host=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 'port|dbport|db_port=n',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 'user|dbuser|db_user=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 'pass|dbpass|db_pass=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 'conffile|conf=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 'logfile|log=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 'nolog',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 'logpath=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 'log_base_path=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 'logappend|log_append',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 'verbose|v',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 'interactive|i=s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 'dry_run|dry|n',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 'help|h|?',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # reads config file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $conffile = $h{'conffile'} || $self->serverroot . "/sanger-plugins/vega/conf/ini-files/Conversion.ini";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 $conffile = abs_path($conffile);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 if (-e $conffile) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 open(CONF, $conffile) or throw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 "Unable to open configuration file $conffile for reading: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 my $serverroot = $self->serverroot;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 while (<CONF>) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 chomp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 # remove comments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 s/^[#;].*//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 s/\s+[;].*$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 # read options into internal parameter datastructure, removing whitespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 next unless (/(\w\S*)\s*=\s*(\S*)\s*/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $name = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 my $val = $2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 if ($val =~ /\$SERVERROOT/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 $val =~ s/\$SERVERROOT/$serverroot/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 $val = abs_path($val);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 $self->param($name, $val);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $self->param('conffile', $conffile);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 elsif ($conffile) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 warning("Unable to open configuration file $conffile for reading: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 # override configured parameter with commandline options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 map { $self->param($_, $h{$_}) } keys %h;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 return (1) if $self->param('nolog');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 # if logpath & logfile are not set, set them here to /ensemblweb/vega_dev/shared/logs/conversion/DBNAME/SCRIPNAME_NN.log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 if (! defined($self->param('log_base_path'))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $self->param('log_base_path','/ensemblweb/shared/logs/conversion/');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 my $dbname = $self->param('dbname');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $dbname =~ s/^vega_//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 if (not (defined($self->param('logpath')) )){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $self->param('logpath', $self->param('log_base_path')."/".$dbname."/" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 if ( not defined $self->param('logfile') ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 my $log = $Script;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 $log =~ s/.pl$//g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 my $counter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 for ($counter=1 ; (-e $self->param('logpath')."/".$log."_".sprintf("%03d", $counter).".log"); $counter++){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 # warn $self->param('logpath')."/".$log."_".$counter.".log";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $self->param('logfile', $log."_".sprintf("%03d", $counter).".log");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 =head2 parse_extra_options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 Arg[1-N] : option descriptors that will be passed on to Getopt::Long
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Example : $support->parse_extra_options('string_opt=s', 'numeric_opt=n');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Description : Parse extra commandline options by passing them on to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Getopt::Long and storing parameters in $self->param('name).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Exceptions : none (caugth by $self->error)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 sub parse_extra_options {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my ($self, @params) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Getopt::Long::Configure("no_pass_through");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 # catch warnings to pass to $self->error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 local $SIG{__WARN__} = sub { die @_; };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 &GetOptions(\%{ $self->{'_param'} }, @params);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $self->error($@) if $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 =head2 allowed_params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 Arg[1-N] : (optional) List of allowed parameters to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Example : my @allowed = $self->allowed_params(qw(param1 param2));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Description : Getter/setter for allowed parameters. This is used by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $self->confirm_params() to avoid cluttering of output with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 conffile entries not relevant for a given script. You can use
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $self->get_common_params() as a shortcut to set them.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Return type : Array - list of allowed parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 sub allowed_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 # setter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 @{ $self->{'_allowed_params'} } = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 # getter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 if (ref($self->{'_allowed_params'}) eq 'ARRAY') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 return @{ $self->{'_allowed_params'} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 return ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 =head2 get_common_params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Example : my @allowed_params = $self->get_common_params, 'extra_param';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Description : Returns a list of commonly used parameters in the conversion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 scripts. Shortcut for setting allowed parameters with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 $self->allowed_params().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Return type : Array - list of common parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 sub get_common_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 return qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 conffile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 host
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 port
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 user
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 pass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 nolog
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 logpath
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 log_base_path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 logfile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 logappend
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 interactive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 dry_run
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 =head2 get_loutre_params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Arg : (optional) return a list to parse or not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 Example : $support->parse_extra_options($support->get_loutre_params('parse'))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 Description : Returns a list of commonly used loutre db parameters - parse option is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 simply used to distinguish between reporting and parsing parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 Return type : Array - list of common parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 sub get_loutre_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my ($self,$p) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 if ($p) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 return qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 loutrehost=s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 loutreport=s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 loutreuser=s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 loutrepass:s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 loutredbname=s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 return qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 loutrehost
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 loutreport
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 loutreuser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 loutrepass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 loutredbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 =head2 remove_vega_params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 Example : $support->remove_vega_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 Description : Removes Vega db conection parameters. Usefull to avoid clutter in log files when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 working exclusively with loutre
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 sub remove_vega_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 foreach my $param (qw(dbname host port user pass)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $self->{'_param'}{$param} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 =head2 confirm_params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 Example : $support->confirm_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 Description : Prints a table of parameters that were collected from config
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 file and commandline and asks user to confirm if he wants
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 to proceed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 sub confirm_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 # print parameter table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 print "Running script with these parameters:\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 print $self->list_all_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 if ($self->param('host') eq 'ensweb-1-10') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 # ask user if he wants to proceed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 exit unless $self->user_proceed("**************\n\n You're working on ensdb-1-10! Is that correct and you want to continue ?\n\n**************");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 # ask user if he wants to proceed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 exit unless $self->user_proceed("Continue?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 =head2 list_all_params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Example : print LOG $support->list_all_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Description : prints a table of the parameters used in the script
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Return type : String - the table to print
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 sub list_all_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my $txt = sprintf " %-21s%-90s\n", qw(PARAMETER VALUE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $txt .= " " . "-"x121 . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $Text::Wrap::colums = 130;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my @params = $self->allowed_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 foreach my $key (@params) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 my @vals = $self->param($key);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 if (@vals) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 $txt .= Text::Wrap::wrap( sprintf(' %-21s', $key),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 ' 'x24,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 join(", ", @vals)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 ) . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 $txt .= "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 return $txt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 =head2 create_commandline_options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Arg[1] : Hashref $settings - hashref describing what to do
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Allowed keys:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 allowed_params => 0|1 # use all allowed parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 exclude => [] # listref of parameters to exclude
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 replace => {param => newval} # replace value of param with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 # newval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Example : $support->create_commandline_options({
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 allowed_params => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 exclude => ['verbose'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 replace => { 'dbname' => 'homo_sapiens_vega_33_35e' }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 Description : Creates a commandline options string that can be passed to any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 other script using ConversionSupport.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 Return type : String - commandline options string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 sub create_commandline_options {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my ($self, $settings, $param_hash) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my %param_hash = $param_hash ? %$param_hash : ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 # get all allowed parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 if ($settings->{'allowed_params'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 # exclude params explicitly stated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 my %exclude = map { $_ => 1 } @{ $settings->{'exclude'} || [] };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 foreach my $param ($self->allowed_params) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 unless ($exclude{$param}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 my ($first, @rest) = $self->param($param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 next unless (defined($first));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 if (@rest) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 $first = join(",", $first, @rest);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $param_hash{$param} = $first;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 # replace values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 foreach my $key (keys %{ $settings->{'replace'} || {} }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 $param_hash{$key} = $settings->{'replace'}->{$key};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 # create the commandline options string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 my $options_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 foreach my $param (keys %param_hash) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 $options_string .= sprintf("--%s %s ", $param, $param_hash{$param});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 return $options_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 =head2 check_required_params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Arg[1-N] : List @params - parameters to check
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Example : $self->check_required_params(qw(dbname host port));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Description : Checks $self->param to make sure the requested parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 have been set. Dies if parameters are missing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 sub check_required_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 my ($self, @params) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 my @missing = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 foreach my $param (@params) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 push @missing, $param unless defined $self->param($param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 if (@missing) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 throw("Missing parameters: @missing.\nYou must specify them on the commandline or in your conffile.\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 =head2 user_proceed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 Arg[1] : (optional) String $text - notification text to present to user
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 Example : # run a code snipped conditionally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 if ($support->user_proceed("Run the next code snipped?")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 # run some code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 # exit if requested by user
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 exit unless ($support->user_proceed("Want to continue?"));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Description : If running interactively, the user is asked if he wants to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 perform a script action. If he doesn't, this section is skipped
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 and the script proceeds with the code. When running
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 non-interactively, the section is run by default.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 Return type : TRUE to proceed, FALSE to skip.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 sub user_proceed {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my ($self, $text) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 if ($self->param('interactive')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 print "$text\n" if $text;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 print "[y/N] ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 my $input = lc(<>);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 chomp $input;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 unless ($input eq 'y') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 print "Skipping.\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 return(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 =head2 user_confirm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 Description : DEPRECATED - please use user_proceed() instead
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 sub user_confirm {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 exit unless $self->user_proceed("Continue?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 =head2 read_user_input
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 Arg[1] : (optional) String $text - notification text to present to user
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 Example : my $ret = $support->read_user_input("Choose a number [1/2/3]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 if ($ret == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 # do something
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 } elsif ($ret == 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 # do something else
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 Description : If running interactively, the user is asked for input.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 Return type : String - user's input
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 sub read_user_input {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 my ($self, $text) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 if ($self->param('interactive')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 print "$text\n" if $text;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 my $input = <>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 chomp $input;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 return $input;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 =head2 comma_to_list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 Arg[1-N] : list of parameter names to parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 Example : $support->comma_to_list('chromosomes');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 Description : Transparently converts comma-separated lists into arrays (to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 allow different styles of commandline options, see perldoc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 Getopt::Long for details). Parameters are converted in place
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 (accessible through $self->param('name')).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 sub comma_to_list {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 foreach my $param (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 $self->param($param,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 split (/,/, join (',', $self->param($param))));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 =head2 list_or_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Arg[1] : Name of parameter to parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 Example : $support->list_or_file('gene');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 Description : Determines whether a parameter holds a list or it is a filename
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 to read the list entries from.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 Exceptions : thrown if list file can't be opened
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 sub list_or_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 my ($self, $param) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 my @vals = $self->param($param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 return unless (@vals);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 my $firstval = $vals[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 if (scalar(@vals) == 1 && -e $firstval) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 # we didn't get a list of values, but a file to read values from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 @vals = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 open(IN, $firstval) or throw("Cannot open $firstval for reading: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 while(<IN>){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 chomp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 push(@vals, $_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 close(IN);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 $self->param($param, @vals);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 $self->comma_to_list($param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 =head2 param
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 Arg[1] : Parameter name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 Arg[2-N] : (optional) List of values to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 Example : my $dbname = $support->param('dbname');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 $support->param('port', 3306);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 $support->param('chromosomes', 1, 6, 'X');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 Description : Getter/setter for parameters. Accepts single-value params and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 list params.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 Return type : Scalar value for single-value parameters, array of values for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 list parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 Exceptions : thrown if no parameter name is supplied
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 sub param {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 my $name = shift or throw("You must supply a parameter name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 # setter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 if (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 if (scalar(@_) == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 # single value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 $self->{'_param'}->{$name} = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 # list of values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 undef $self->{'_param'}->{$name};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 @{ $self->{'_param'}->{$name} } = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 # getter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 if (ref($self->{'_param'}->{$name}) eq 'ARRAY') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 # list parameter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 return @{ $self->{'_param'}->{$name} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 } elsif (defined($self->{'_param'}->{$name})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 # single-value parameter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 return $self->{'_param'}->{$name};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 return ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 =head2 error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 Arg[1] : (optional) String - error message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 Example : $support->error("An error occurred: $@");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 exit(0) if $support->error;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 Description : Getter/setter for error messages
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 Return type : String - error message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 sub error {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 $self->{'_error'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 return $self->{'_error'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 =head2 warnings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 Example : print LOG "There were ".$support->warnings." warnings.\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 Description : Returns the number of warnings encountered while running the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 script (the warning counter is increased by $self->log_warning).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 Return type : Int - number of warnings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 sub warnings {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 return $self->{'_warnings'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 =head2 serverroot
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 Arg[1] : (optional) String - root directory of your ensembl sandbox
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 Example : my $serverroot = $support->serverroot;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 Description : Getter/setter for the root directory of your ensembl sandbox.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 This is set when ConversionSupport object is created, so
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 usually only used as a getter.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 Return type : String - the server root directory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 sub serverroot {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 $self->{'_serverroot'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 return $self->{'_serverroot'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 =head2 get_database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 Arg[1] : String $database - the type of database to connect to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 (eg core, otter)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 Arg[2] : (optional) String $prefix - the prefix used for retrieving the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 connection settings from the configuration
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 Example : my $db = $support->get_database('core');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 Description : Connects to the database specified.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 Return type : DBAdaptor of the appropriate type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 Exceptions : thrown if asking for unknown database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 sub get_database {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 my $database = shift or throw("You must provide a database");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 my $prefix = shift || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 $self->check_required_params(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 "${prefix}host",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 "${prefix}port",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 "${prefix}user",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 "${prefix}dbname",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 my %adaptors = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 core => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 ensembl => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 evega => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 otter => 'Bio::Otter::DBSQL::DBAdaptor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 vega => 'Bio::Otter::DBSQL::DBAdaptor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 compara => 'Bio::EnsEMBL::Compara::DBSQL::DBAdaptor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 loutre => 'Bio::Vega::DBSQL::DBAdaptor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 throw("Unknown database: $database") unless $adaptors{$database};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 $self->dynamic_use($adaptors{$database});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 my $species = 'species' . $species_c;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 my $dba = $adaptors{$database}->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 -host => $self->param("${prefix}host"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 -port => $self->param("${prefix}port"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 -user => $self->param("${prefix}user"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 -pass => $self->param("${prefix}pass") || '',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 -dbname => $self->param("${prefix}dbname"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 -group => $database,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 -species => $species,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 #can use this approach to get dna from another db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 # my $dna_db = $adaptors{$database}->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 # -host => 'otterlive',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 # -port => '3301',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 # -user => $self->param("${prefix}user"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 # -pass => $self->param("${prefix}pass"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 # -dbname => 'loutre_human',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 # );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 # $dba->dnadb($dna_db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 # otherwise explicitely set the dnadb to itself - by default the Registry assumes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 # a group 'core' for this now
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 $dba->dnadb($dba);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 $species_c++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 $self->{'_dba'}->{$database} = $dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 $self->{'_dba'}->{'default'} = $dba unless $self->{'_dba'}->{'default'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 return $self->{'_dba'}->{$database};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 =head2 get_dbconnection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 Arg[1] : (optional) String $prefix - the prefix used for retrieving the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 connection settings from the configuration
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 Example : my $dbh = $self->get_dbconnection;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 Description : Connects to the database server specified. You don't have to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 specify a database name (this is useful for running commands
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 like $dbh->do('show databases')).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 Return type : DBI database handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 Exceptions : thrown if connection fails
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 sub get_dbconnection {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 my $prefix = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 $self->check_required_params(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 "${prefix}host",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 "${prefix}port",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 "${prefix}user",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 my $dsn = "DBI:" . ($self->param('driver')||'mysql') .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 ":host=" . $self->param("${prefix}host") .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 ";port=" . $self->param("${prefix}port");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 if ($self->param("${prefix}dbname")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 $dsn .= ";dbname=".$self->param("${prefix}dbname");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 # warn $dsn;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 my $dbh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 eval{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 $dbh = DBI->connect($dsn, $self->param("${prefix}user"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 $self->param("${prefix}pass"), {'RaiseError' => 1, 'PrintError' => 0});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 if (!$dbh || $@ || !$dbh->ping) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 $self->log_error("Could not connect to db server as user ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 $self->param("${prefix}user") .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 " using [$dsn] as a locator:\n" . $DBI::errstr . $@);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 $self->{'_dbh'} = $dbh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809 return $self->{'_dbh'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 =head2 dba
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 Arg[1] : (optional) String $database - type of db apaptor to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 Example : my $dba = $support->dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 Description : Getter for database adaptor. Returns default (i.e. created
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 first) db adaptor if no argument is provided.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 Return type : Bio::EnsEMBL::DBSQL::DBAdaptor or Bio::Otter::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 sub dba {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 my ($self, $database) = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 return $self->{'_dba'}->{$database} || $self->{'_dba'}->{'default'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 =head2 dynamic_use
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 Arg [1] : String $classname - The name of the class to require/import
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 Example : $self->dynamic_use('Bio::EnsEMBL::DBSQL::DBAdaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 Description: Requires and imports the methods for the classname provided,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 checks the symbol table so that it doesnot re-require modules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 that have already been required.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 Returntype : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 Exceptions : Warns to standard error if module fails to compile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 sub dynamic_use {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 my ($self, $classname) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 my ($parent_namespace, $module) = $classname =~/^(.*::)(.*)$/ ? ($1,$2) : ('::', $classname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 no strict 'refs';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 # return if module has already been imported
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 return 1 if $parent_namespace->{$module.'::'} && %{ $parent_namespace->{$module.'::'}||{} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 eval "require $classname";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 throw("Failed to require $classname: $@") if ($@);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 $classname->import();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 =head2 get_chrlength
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 Arg[1] : (optional) Bio::EnsEMBL::DBSQL::DBAdaptor $dba
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 Arg[2] : (optional) String $version - coord_system version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 Arg[3] : (optional) String $type - type of region eg chromsome (defaults to 'toplevel')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 Arg[4] : (optional) Boolean - return non reference slies as well (required for haplotypes eq 6-COX)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 Arg[5] : (optional) Override chromosome parameter filtering with this array reference. Empty denotes all.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 Example : my $chr_length = $support->get_chrlength($dba);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 Description : Get all chromosomes and their length from the database. Return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 chr_name/length for the chromosomes the user requested (or all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 chromosomes by default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 Return type : Hashref - chromosome_name => length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 Exceptions : thrown if not passing a Bio::EnsEMBL::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 sub get_chrlength {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 my ($self, $dba, $version,$type,$include_non_reference,$chroms) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 $dba ||= $self->dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 $type ||= 'toplevel';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 throw("get_chrlength should be passed a Bio::EnsEMBL::DBSQL::DBAdaptor\n")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 unless ($dba->isa('Bio::EnsEMBL::DBSQL::DBAdaptor'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 my $sa = $dba->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 my @chromosomes = map { $_->seq_region_name }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 @{ $sa->fetch_all($type,$version,$include_non_reference) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 my %chr = map { $_ => $sa->fetch_by_region($type, $_, undef, undef, undef, $version)->length } @chromosomes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 my @wanted = $self->param('chromosomes');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 @wanted = @$chroms if defined $chroms and ref($chroms) eq 'ARRAY';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 if (@wanted) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 # check if user supplied invalid chromosome names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 foreach my $chr (@wanted) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 my $found = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 foreach my $chr_from_db (keys %chr) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 if ($chr_from_db eq $chr) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 $found = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 unless ($found) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 warning("Didn't find chromosome $chr in database " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 $self->param('dbname'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 # filter to requested chromosomes only
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 HASH:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 foreach my $chr_from_db (keys %chr) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 foreach my $chr (@wanted) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 if ($chr_from_db eq $chr) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 next HASH;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 delete($chr{$chr_from_db});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 return \%chr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923 =head2 get_ensembl_chr_mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 Arg[1] : (optional) Bio::EnsEMBL::DBSQL::DBAdaptor $dba
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 Arg[2] : (optional) String $version - coord_system version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 Example : my $ensembl_mapping = $support->get_ensembl_chr_mapping($dba);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 Description : Gets a mapping between Vega chromosome names and their
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 equivalent Ensembl chromosomes. Works with non-reference chromosomes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930 Return type : Hashref - Vega name => Ensembl name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 Exceptions : thrown if not passing a Bio::EnsEMBL::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 sub get_ensembl_chr_mapping {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 my ($self, $dba, $version) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 $dba ||= $self->dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 throw("get_ensembl_chr_mapping should be passed a Bio::EnsEMBL::DBSQL::DBAdaptor\n") unless ($dba->isa('Bio::EnsEMBL::DBSQL::DBAdaptor'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 my $sa = $dba->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 my @chromosomes = map { $_->seq_region_name }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 @{ $sa->fetch_all('chromosome', $version, 1) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 my %chrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 foreach my $chr (@chromosomes) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 my $sr = $sa->fetch_by_region('chromosome', $chr, undef, undef, undef, $version);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 my ($ensembl_name_attr) = @{ $sr->get_all_Attributes('ensembl_name') };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 if ($ensembl_name_attr) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 $chrs{$chr} = $ensembl_name_attr->value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 $chrs{$chr} = $chr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 return \%chrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 =head2 get_taxonomy_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 Arg[1] : Bio::EnsEMBL::DBSQL::DBAdaptor $dba
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 Example : my $sid = $support->get_taxonony_id($dba);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 Description : Retrieves the taxononmy ID from the meta table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 Return type : Int - the taxonomy ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 Exceptions : thrown if no taxonomy ID is found in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 sub get_taxonomy_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 my ($self, $dba) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 $dba ||= $self->dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 my $sql = 'SELECT meta_value FROM meta WHERE meta_key = "species.taxonomy_id"';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 my $sth = $dba->dbc->db_handle->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 $sth->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 my ($tid) = $sth->fetchrow_array;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 $self->throw("Could not determine taxonomy_id from database.") unless $tid;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 return $tid;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 =head2 get_species_scientific_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 Arg[1] : Bio::EnsEMBL::DBSQL::DBAdaptor $dba
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 Example : my $species = $support->get_species_scientific_name($dba);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 Description : Retrieves the species scientific name (Genus species) from the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 meta table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 Return type : String - species scientific name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988 Exceptions : thrown if species name can not be determined from db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 sub get_species_scientific_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 my ($self, $dba) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 $dba ||= $self->dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 my $sql = "SELECT meta_value FROM meta WHERE meta_key = \'species.scientific_name\'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 my $sth = $dba->dbc->db_handle->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 $sth->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 my @sp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 while (my @row = $sth->fetchrow_array) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 push @sp, $row[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 if (! @sp || @sp > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 $self->throw("Could not retrieve a single species scientific name from database.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 my $species = $sp[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 $species =~ s/ /_/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 return $species;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 =head2 species
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 Arg[1] : (optional) String $species - species name to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 Example : my $species = $support->species;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 my $url = "http://vega.sanger.ac.uk/$species/";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 Description : Getter/setter for species name (Genus_species). If not set, it's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 determined from database's meta table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 Return type : String - species name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 sub species {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 $self->{'_species'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 # get species name from database if not set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 unless ($self->{'_species'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 $self->{'_species'} = $self->get_species_scientific_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 return $self->{'_species'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 =head2 sort_chromosomes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 Arg[1] : (optional) Hashref $chr_hashref - Hashref with chr_name as keys
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 Example : my $chr = { '6-COX' => 1, '1' => 1, 'X' => 1 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039 my @sorted = $support->sort_chromosomes($chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 Description : Sorts chromosomes in an intuitive way (numerically, then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 alphabetically). If no chromosome hashref is passed, it's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 retrieve by calling $self->get_chrlength()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 Return type : List - sorted chromosome names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 Exceptions : thrown if no hashref is provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 sub sort_chromosomes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 my ($self, $chr_hashref) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 $chr_hashref = $self->get_chrlength unless ($chr_hashref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 throw("You have to pass a hashref of your chromosomes")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 unless ($chr_hashref and ref($chr_hashref) eq 'HASH');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 return (sort _by_chr_num keys %$chr_hashref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 =head2 _by_chr_num
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 Example : my @sorted = sort _by_chr_num qw(X, 6-COX, 14, 7);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 Description : Subroutine to use in sort for sorting chromosomes. Sorts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 numerically, then alphabetically
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 Return type : values to be used by sort
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 Caller : internal ($self->sort_chromosomes)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 sub _by_chr_num {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 my @awords = split /-/, $a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 my @bwords = split /-/, $b;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072 my $anum = $awords[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073 my $bnum = $bwords[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 if ($anum !~ /^[0-9]*$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 if ($bnum !~ /^[0-9]*$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 return $anum cmp $bnum;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 if ($bnum !~ /^[0-9]*$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 return -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 if ($anum <=> $bnum) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 return $anum <=> $bnum;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 if ($#awords == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 return -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 } elsif ($#bwords == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094 return $awords[1] cmp $bwords[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 =head2 split_chromosomes_by_size
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 Arg[1] : (optional) Int $cutoff - the cutoff in bp between small and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 large chromosomes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 Arg[2] : (optional) Boolean to include duplicate regions, ie PAR or not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104 (default is no)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 Arg[3] : (optional) Coordsystem version to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 Example : my $chr_slices = $support->split_chromosomes_by_size;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108 foreach my $block_size (keys %{ $chr_slices }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 print "Chromosomes with blocksize $block_size: ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 print join(", ", map { $_->seq_region_name }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111 @{ $chr_slices->{$block_size} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 Description : Determines block sizes for storing DensityFeatures on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114 chromosomes, and return slices for each chromosome. The block
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115 size is determined so that you have 150 bins for the smallest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116 chromosome over 5 Mb in length. For chromosomes smaller than 5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 Mb, an additional smaller block size is used to yield 150 bins
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 for the overall smallest chromosome. This will result in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119 reasonable resolution for small chromosomes and high
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120 performance for big ones. Does not return non-reference seq_regions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121 Return type : Hashref (key: block size; value: Arrayref of chromosome
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 Bio::EnsEMBL::Slices)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124 Caller : density scripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128 sub split_chromosomes_by_size {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130 my $cutoff = shift || 5000000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131 my $dup = shift || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1132 my $cs_version = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1133 my $include_non_reference = 1; #get non reference slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1134 my $slice_adaptor = $self->dba->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1135 my $top_slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136 if ($self->param('chromosomes')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137 foreach my $chr ($self->param('chromosomes')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 push @{ $top_slices }, $slice_adaptor->fetch_by_region('chromosome', $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141 $top_slices = $slice_adaptor->fetch_all('chromosome',$cs_version,$include_non_reference,$dup);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144 # filter out patches, if present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145 $top_slices = [ grep { $_->is_reference or $self->is_haplotype($_,$self->dba) } @$top_slices ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147 my ($big_chr, $small_chr, $min_big_chr, $min_small_chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 foreach my $slice (@{ $top_slices }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149 next if ($slice->length eq 10000); #hack for chrY pseudoslice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150 if ($slice->length < $cutoff) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151 if (! $min_small_chr or ($min_small_chr > $slice->length)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152 $min_small_chr = $slice->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154 # push small chromosomes onto $small_chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155 push @{ $small_chr }, $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 elsif (! $min_big_chr or ($min_big_chr > $slice->length) ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158 $min_big_chr = $slice->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160 # push _all_ chromosomes onto $big_chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161 push @{ $big_chr }, $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163 my $chr_slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 $chr_slices->{int($min_big_chr/150)} = $big_chr if $min_big_chr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165 $chr_slices->{int($min_small_chr/150)} = $small_chr if $min_small_chr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 return $chr_slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169 =head2 log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171 Arg[1] : String $txt - the text to log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172 Arg[2] : Int $indent - indentation level for log message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173 Example : my $log = $support->log_filehandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174 $support->log('Log foo.\n', 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 Description : Logs a message to the filehandle initialised by calling
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176 $self->log_filehandle(). You can supply an indentation level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177 to get nice hierarchical log messages.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 Exceptions : thrown when no filehandle can be obtained
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 sub log {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185 my ($self, $txt, $indent) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 $indent ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1188 # strip off leading linebreaks so that indenting doesn't break
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1189 $txt =~ s/^(\n*)//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1191 $txt = $1." "x$indent . $txt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 my $fh = $self->{'_log_filehandle'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193 throw("Unable to obtain log filehandle") unless $fh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194 print $fh "$txt";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 =head2 lock_log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200 Description : Use flock-style locks to lock log and fastforward to end.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201 Useful if log is being written to by multiple processes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1204 sub lock_log {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1205 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1207 my $fh = $self->{'_log_filehandle'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1208 return if -t $fh or -p $fh; # Shouldn't lock such things
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1209 flock($self->{'_log_filehandle'},LOCK_EX) || return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1210 seek($self->{'_log_filehandle'},0,SEEK_END); # fail ok, prob not reg file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1211 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1214 =head2 unlock_log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1216 Description : Unlock log previously locked by lock_log.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1218 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1220 sub unlock_log {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1221 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1223 my $fh = $self->{'_log_filehandle'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1224 return if -t $fh or -p $fh; # We don't lock such things
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1225 # flush is implicit in flock
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1226 flock($self->{'_log_filehandle'},LOCK_UN) || return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1227 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1228 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1230 =head2 log_warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1232 Arg[1] : String $txt - the warning text to log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1233 Arg[2] : Int $indent - indentation level for log message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1234 Arg[3] : Bool - add a line break before warning if true
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1235 Example : my $log = $support->log_filehandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1236 $support->log_warning('Log foo.\n', 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1237 Description : Logs a message via $self->log and increases the warning counter.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1238 Return type : true on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1239 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1240 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1242 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1244 sub log_warning {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1245 my ($self, $txt, $indent, $break) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1246 $txt = "WARNING: " . $txt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1247 $txt = "\n$txt" if ($break);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1248 $self->log($txt, $indent);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1249 $self->{'_warnings'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1250 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1251 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1253 =head2 log_error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1255 Arg[1] : String $txt - the error text to log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1256 Arg[2] : Int $indent - indentation level for log message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1257 Example : my $log = $support->log_filehandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1258 $support->log_error('Log foo.\n', 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1259 Description : Logs a message via $self->log and exits the script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1260 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1261 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1262 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1264 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1266 sub log_error {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1267 my ($self, $txt, $indent) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1268 $txt = "ERROR: ".$txt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1269 $self->log($txt, $indent);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1270 $self->log("Exiting.\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1271 exit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1272 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1274 =head2 log_verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1276 Arg[1] : String $txt - the warning text to log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1277 Arg[2] : Int $indent - indentation level for log message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1278 Example : my $log = $support->log_filehandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1279 $support->log_verbose('Log this verbose message.\n', 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1280 Description : Logs a message via $self->log if --verbose option was used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1281 Return type : TRUE on success, FALSE if not verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1282 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1283 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1285 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1287 sub log_verbose {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1288 my ($self, $txt, $indent) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1289 return(0) unless $self->param('verbose');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1290 $self->log($txt, $indent);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1291 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1294 =head2 log_stamped
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1296 Arg[1] : String $txt - the warning text to log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1297 Arg[2] : Int $indent - indentation level for log message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1298 Example : my $log = $support->log_filehandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1299 $support->log_stamped('Log this stamped message.\n', 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1300 Description : Appends timestamp and memory usage to a message and logs it via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1301 $self->log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1302 Return type : TRUE on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1303 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1304 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1306 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1308 sub log_stamped {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1309 my ($self, $txt, $indent) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1310 # append timestamp and memory usage to log text
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1311 $txt =~ s/(\n*)$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1312 $txt .= " ".$self->date_and_mem.$1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1313 $self->log($txt, $indent);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1314 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1315 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1317 =head2 log_filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1319 Arg[1] : (optional) String $mode - file access mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1320 Example : my $log = $support->log_filehandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1321 # print to the filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1322 print $log 'Lets start logging...\n';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1323 # log via the wrapper $self->log()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1324 $support->log('Another log message.\n');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1325 Description : Returns a filehandle for logging (STDERR by default, logfile if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1326 set from config or commandline). You can use the filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1327 directly to print to, or use the smart wrapper $self->log().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1328 Logging mode (truncate or append) can be set by passing the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1329 mode as an argument to log_filehandle(), or with the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1330 --logappend commandline option (default: truncate)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1331 Return type : Filehandle - the filehandle to log to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1332 Exceptions : thrown if logfile can't be opened
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1333 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1335 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1337 sub log_filehandle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1338 my ($self, $mode, $date) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1339 $mode ||= '>';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1340 $mode = '>>' if ($self->param('logappend'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1341 my $fh = \*STDERR;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1342 if (my $logfile = $self->param('logfile')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1343 $logfile .= "_$date" if $date;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1344 if (my $logpath = $self->param('logpath')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1345 unless (-e $logpath) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1346 system("mkdir $logpath") == 0 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1347 $self->log_error("Can't create log dir $logpath: $!\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1348 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1349 $logfile = "$logpath/$logfile";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1350 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1351 open($fh, "$mode", $logfile) or throw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1352 "Unable to open $logfile for writing: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1353 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1354 $self->{'_log_filehandle'} = $fh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1355 return $self->{'_log_filehandle'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1356 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1358 =head2 filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1360 Arg[1] : String $mode - file access mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1361 Arg[2] : String $file - input or output file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1362 Example : my $fh = $support->filehandle('>>', '/path/to/file');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1363 # print to the filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1364 print $fh 'Your text goes here...\n';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1365 Description : Returns a filehandle (*STDOUT for writing, *STDIN for reading
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1366 by default) to print to or read from.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1367 Return type : Filehandle - the filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1368 Exceptions : thrown if file can't be opened
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1369 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1371 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1373 sub filehandle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1374 my ($self, $mode, $file) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1375 $mode ||= ">";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1376 my $fh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1377 if ($file) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1378 open($fh, "$mode", $file) or throw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1379 "Unable to open $file for writing: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1380 } elsif ($mode =~ />/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1381 $fh = \*STDOUT;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1382 } elsif ($mode =~ /</) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1383 $fh = \*STDIN;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1384 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1385 return $fh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1386 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1388 =head2 init_log_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1390 Example : $support->init_log_date;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1391 Description : Opens a filehandle to a logfile with the date in the file name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1392 Return type : Filehandle - the log filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1393 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1394 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1396 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1398 sub init_log_date {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1399 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1400 my $date = $self->date;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1401 return $self->init_log($date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1402 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1404 =head2 init_log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1406 Example : $support->init_log;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1407 Description : Opens a filehandle to the logfile and prints some header
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1408 information to this file. This includes script name, date, user
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1409 running the script and parameters the script will be running
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1410 with.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1411 Return type : Filehandle - the log filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1412 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1413 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1415 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1417 sub init_log {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1418 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1419 my $date = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1421 # get a log filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1422 my $log = $self->log_filehandle(undef,$date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1424 # print script name, date, user who is running it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1425 my $hostname = `hostname`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1426 chomp $hostname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1427 my $script = "$hostname:$Bin/$Script";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1428 my $user = `whoami`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1429 chomp $user;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1430 $self->log("Script: $script\nDate: ".$self->date_and_time."\nUser: $user\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1432 # print parameters the script is running with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1433 $self->log("Parameters:\n\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1434 $self->log($self->list_all_params);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1436 # remember start time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1437 $self->{'_start_time'} = time;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1439 return $log;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1440 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1442 =head2 finish_log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1444 Example : $support->finish_log;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1445 Description : Writes footer information to a logfile. This includes the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1446 number of logged warnings, timestamp and memory footprint.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1447 Return type : TRUE on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1448 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1449 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1451 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1453 sub finish_log {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1454 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1455 $self->log("\nAll done. ".$self->warnings." warnings. ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1456 if ($self->{'_start_time'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1457 $self->log("Runtime ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1458 my $diff = time - $self->{'_start_time'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1459 my $sec = $diff % 60;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1460 $diff = ($diff - $sec) / 60;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1461 my $min = $diff % 60;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1462 my $hours = ($diff - $min) / 60;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1463 $self->log("${hours}h ${min}min ${sec}sec ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1464 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1465 $self->log($self->date_and_mem."\n\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1466 return(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1469 =head2 date_and_mem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1471 Example : print LOG "Time, memory usage: ".$support->date_and_mem."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1472 Description : Prints a timestamp and the memory usage of your script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1473 Return type : String - timestamp and memory usage
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1474 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1475 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1477 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1479 sub date_and_mem {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1480 my $date = strftime "%Y-%m-%d %T", localtime;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1481 my $mem = `ps -p $$ -o vsz |tail -1`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1482 chomp $mem;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1483 return "[$date, mem $mem]";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1486 =head2 date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1488 Example : print "Date: " . $support->date . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1489 Description : Prints a nicely formatted datetamp (YYYY-DD-MM)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1490 Return type : String - the timestamp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1491 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1492 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1494 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1495
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1496 sub date {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1497 return strftime "%Y-%m-%d", localtime;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1500 =head2 date_and_time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1502 Example : print "Date: " . $support->date . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1503 Description : Prints a nicely formatted timestamp (YYYY-DD-MM hh:mm:ss)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1504 Return type : String - the timestamp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1505 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1506 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1508 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1510 sub date_and_time {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1511 return strftime "%Y-%m-%d %T", localtime;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1512 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1514 =head2 format_time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1515
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1516 Example : print $support->format_time($gene->modifed_date) . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1517 Description : Prints timestamps from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1518 Return type : String - nicely formatted time stamp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1519 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1520 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1522 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1524
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1525 sub date_format {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1526 my( $self, $time, $format ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1527 my( $d,$m,$y) = (localtime($time))[3,4,5];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1528 my %S = ('d'=>sprintf('%02d',$d),'m'=>sprintf('%02d',$m+1),'y'=>$y+1900);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1529 (my $res = $format ) =~s/%(\w)/$S{$1}/ge;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1530 return $res;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1531 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1534 =head2 mem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1536 Example : print "Memory usage: " . $support->mem . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1537 Description : Prints the memory used by your script. Not sure about platform
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1538 dependence of this call ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1539 Return type : String - memory usage
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1540 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1541 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1542
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1543 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1545 sub mem {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1546 my $mem = `ps -p $$ -o vsz |tail -1`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1547 chomp $mem;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1548 return $mem;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1549 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1551 =head2 commify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1553 Arg[1] : Int $num - a number to commify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1554 Example : print "An easy to read number: ".$self->commify(100000000);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1555 # will print 100,000,000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1556 Description : put commas into a number to make it easier to read
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1557 Return type : a string representing the commified number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1558 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1559 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1560 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1562 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1563
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1564 sub commify {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1565 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1566 my $num = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1568 $num = reverse($num);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1569 $num =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1571 return scalar reverse $num;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1572 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1574 =head2 fetch_non_hidden_slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1576 Arg[1] : B::E::SliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1577 Arg[2] : B::E::AttributeAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1578 Arg[3] : string $coord_system_name (optional) - 'chromosome' by default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1579 Arg[4] : string $coord_system_version (optional) - 'otter' by default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1580 Example : $chroms = $support->fetch_non_hidden_slice($sa,$aa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1581 Description : retrieve all slices from a loutre database that don't have a hidden attribute.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1582 Doesn't retrieve non-reference slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1583 Return type : arrayref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1584 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1585 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1586
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1587 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1589 sub fetch_non_hidden_slices {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1590 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1591 my $aa = shift or throw("You must supply an attribute adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1592 my $sa = shift or throw("You must supply a slice adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1593 my $cs = shift || 'chromosome';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1594 my $cv = shift || 'Otter';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1595 my $visible_chroms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1596 foreach my $chrom ( @{$sa->fetch_all($cs,$cv)} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1597 my $chrom_name = $chrom->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1598 my $attribs = $aa->fetch_all_by_Slice($chrom,'hidden');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1599 if ( scalar(@$attribs) > 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1600 $self->log_warning("More than one hidden attribute for chromosome $chrom_name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1601 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1602 elsif ($attribs->[0]->value == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1603 push @$visible_chroms, $chrom;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1604 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1605 elsif ($attribs->[0]->value == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1606 $self->log_verbose("chromosome $chrom_name is hidden\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1607 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1608 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1609 $self->log_warning("No hidden attribute for chromosome $chrom_name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1610 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1611 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1612 return $visible_chroms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1613 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1614
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1615 =head2 get_non_hidden_slice_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1617 Arg[1] : B::E::SliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1618 Arg[2] : B::E::AttributeAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1619 Arg[3] : string $coord_system_name (optional) - 'chromosome' by default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1620 Arg[4] : string $coord_system_version (optional) - 'otter' by default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1621 Example : $chrom_names = $support->get_non_hidden_slice_names($sa,$aa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1622 Description : retrieve names of all slices from a loutre database that don't have a hidden attribute.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1623 Doesn't retrieve non-reference slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1624 Return type : arrayref of names of all non-hidden slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1625 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1626 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1628 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1630 sub get_non_hidden_slice_names {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1631 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1632 my $aa = shift or throw("You must supply an attribute adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1633 my $sa = shift or throw("You must supply a slice adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1634 my $cs = shift || 'chromosome';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1635 my $cv = shift || 'Otter';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1636 my $visible_chrom_names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1637 foreach my $chrom ( @{$sa->fetch_all($cs,$cv)} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1638 my $chrom_name = $chrom->seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1639 my $attribs = $aa->fetch_all_by_Slice($chrom,'hidden');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1640 if ( scalar(@$attribs) > 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1641 $self->log_warning("More than one hidden attribute for chromosome $chrom_name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1642 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1643 elsif ($attribs->[0]->value == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1644 push @$visible_chrom_names, $chrom_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1645 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1646 elsif ($attribs->[0]->value == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1647 $self->log_verbose("chromosome $chrom_name is hidden\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1648 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1649 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1650 $self->log_warning("No hidden attribute for chromosome $chrom_name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1651 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1652 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1653 return $visible_chrom_names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1654 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1655
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1656
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1657 =head2 get_wanted_chromosomes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1658
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1659 Arg[1] : B::E::SliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1660 Arg[2] : B::E::AttributeAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1661 Arg[3] : string $coord_system_name (optional) - 'chromosome' by default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1662 Arg[4] : string $coord_system_version (optional) - 'otter' by default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1663 Example : $chr_names = $support->get_wanted_chromosomes($laa,$lsa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1664 Description : retrieve names of slices from a lutra database that are ready for dumping to Vega.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1665 Deals with list of names to ignore (ignore_chr = LIST)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1666 Return type : arrayref of slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1667 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1668 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1669
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1670 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1672 sub get_wanted_chromosomes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1673 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1674 my $aa = shift or throw("You must supply an attribute adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1675 my $sa = shift or throw("You must supply a slice adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1676 my $cs = shift || 'chromosome';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1677 my $cv = shift || 'Otter';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1678 my $export_mode = $self->param('release_type');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1679 my $release = $self->param('vega_release');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1680 my $names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1681 my $chroms = $self->fetch_non_hidden_slices($aa,$sa,$cs,$cv);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1682 CHROM:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1683 foreach my $chrom (@$chroms) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1684 my $attribs = $aa->fetch_all_by_Slice($chrom);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1685 my $vals = $self->get_attrib_values($attribs,'vega_export_mod');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1686 if (scalar(@$vals > 1)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1687 $self->log_warning ("Multiple attribs for \'vega_export_mod\', please fix before continuing");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1688 exit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1689 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1690 next CHROM if (! grep { $_ eq $export_mode} @$vals);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1691 $vals = $self->get_attrib_values($attribs,'vega_release',$release);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1692 if (scalar(@$vals > 1)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1693 $self->log_warning ("Multiple attribs for \'vega_release\' value = $release , please fix before continuing");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1694 exit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1695 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1696 next CHROM if (! grep { $_ eq $release} @$vals);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1697 my $name = $chrom->seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1698 if (my @ignored = $self->param('ignore_chr')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1699 next CHROM if (grep {$_ eq $name} @ignored);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1700 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1701 push @{$names}, $name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1702 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1703 return $names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1704 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1705
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1706 =head2 is_haplotype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1707
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1708 Arg[1] : B::E::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1709 Arg[2]: : B::E::DBAdaptor (optional, if you don't supply one then the *first* one you generated is returned, which may or may not be what you want!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1710 Description : Is the slice a Vega haplotype? At the moment this is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1711 implemented by testing for presence of vega_ref_chrom but non_ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1712 which is correct in practice, but really misses the prupose of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1713 vega_ref_chrom, so this might bite us if that changes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1714 Return type : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1715
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1716 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1717
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1718 sub is_haplotype {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1719 my ($self,$slice,$dba) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1720
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1721 $dba ||= $self->dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1722 my $aa = $dba->get_adaptor('Attribute');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1723
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1724 my $attribs = $aa->fetch_all_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1725 return (@{$self->get_attrib_values($attribs,'vega_ref_chrom')} and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1726 @{$self->get_attrib_values($attribs,'non_ref',1)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1727 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1728
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1729 =head2 get_unique_genes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1730
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1731 Arg[1] : B::E::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1732 Arg[2] : B::E::DBAdaptor (optional, if you don't supply one then the *first* one you generated is returned, which may or may not be what you want!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1733 Example : $genes = $support->get_unique_genes($slice,$dba);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1734 Description : Retrieve genes that are only on the slice itself - used for human where assembly patches
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1735 are in the assembly_exception table. Needs the PATCHes to have 'non_ref' seq_region_attributes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1736 Return type : arrayref of genes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1737 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1738 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1740 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1741
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1742 sub get_unique_genes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1743 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1744 my ($slice,$dba) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1745 $slice or throw("You must supply a slice");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1746 $dba ||= $self->dba;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1747
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1748 my $sa = $dba->get_adaptor('Slice');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1749 my $ga = $dba->get_adaptor('Gene');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1750 my $patch = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1751 my $genes = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1752 if ( ! $slice->is_reference() and ! $self->is_haplotype($slice,$dba) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1753 # if ( 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1754 $patch = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1755 my $slices = $sa->fetch_by_region_unique( $slice->coord_system_name(),$slice->seq_region_name(),undef,undef,undef,$slice->coord_system()->version() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1756 foreach my $slice ( @{$slices} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1757 push @$genes,@{$ga->fetch_all_by_Slice($slice)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1758 # my $start = $slice->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1759 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1760 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1761 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1762 $genes = $ga->fetch_all_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1763 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1764 return ($genes, $patch);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1765 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1766
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1767
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1768
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1769 =head2 get_attrib_values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1770
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1771 Arg[1] : Arrayref of B::E::Attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1772 Arg[2] : 'code' to search for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1773 Arg[3] : 'value' to search for (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1774 Example : my $c = $self->get_attrib_values($attribs,'name'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1775 Description : (i) In the absence of an attribute value argument, examines an arrayref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1776 of B::E::Attributes for a particular attribute type, returning the values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1777 for each attribute of that type. Can therefore be used to test for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1778 number of attributes of that type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1779 (ii) In the presence of the optional value argument it returns all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1780 attributes with that value ie can be used to test for the presence of an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1781 attribute with that particular value.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1782 Return type : arrayref of values for that attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1783 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1784 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1785
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1786 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1787
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1788 sub get_attrib_values {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1789 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1790 my $attribs = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1791 my $code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1792 my $value = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1793 if (my @atts = grep {$_->code eq $code } @$attribs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1794 my $r = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1795 if ($value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1796 if (my @values = grep {$_->value eq $value} @atts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1797 foreach (@values) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1798 push @$r, $_->value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1799 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1800 return $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1801 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1802 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1803 return [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1804 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1805 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1806 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1807 foreach (@atts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1808 push @$r, $_->value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1809 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1810 return $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1811 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1812 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1813 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1814 return [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1815 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1816 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1817
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1818 =head2 fix_attrib_value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1819
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1820 Arg[1] : Arrayref of existing B::E::Attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1821 Arg[2] : dbID of object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1822 Arg[3] : name of object (just for reporting)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1823 Arg[4] : attrib_type.code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1824 Arg[5] : attrib_type.value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1825 Arg[6] : interactive ? (0 by default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1826 Arg[7] : table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1827 Example : $support->fix_attrib_value($attribs,$chr_id,$chr_name,'vega_export_mod','N',1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1828 Description : adds a new attribute to an object, or updates an existing attribute with a new value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1829 Can be run in interactive or non-interactive mode (default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1830 Return type : arrayref of results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1831 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1832 Status : only ever tested with seq_region_attributes to date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1833
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1834 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1835
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1836 sub fix_attrib_value {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1837 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1838 my $attribs = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1839 my $id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1840 my $name = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1841 my $code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1842 my $value = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1843 my $interact = shift || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1844 my $table = shift || 'seq_region_attrib';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1845
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1846 #transiently set interactive parameter to zero
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1847 my $int_before;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1848 if (! $interact) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1849 $int_before = $self->param('interactive');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1850 $self->param('interactive',0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1851 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1852
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1853 #get any existing value(s) for this attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1854 my $existings = $self->get_attrib_values($attribs,$code);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1855
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1856 #add a new attribute if there is none...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1857 if (! @$existings ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1858 if ($self->user_proceed("Do you want to set $name attrib (code = $code) to value $value ?")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1859 my $r = $self->store_new_attribute($id,$code,$value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1860
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1861 #reset interactive parameter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1862 $self->param('interactive',$int_before) if (! $interact);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1863 return $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1864 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1865 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1866 #...warn and exit if you're trying to update more than one value for the same attribute...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1867 elsif (scalar @$existings > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1868 $self->log_warning("You shouldn't be trying to update multiple attributes with the same code at once ($name:$code,$value), looks like you have duplicate entries in the (seq_region_)attrib table\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1869 exit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1870 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1871
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1872 #...or update an attribute with new values...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1873 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1874 my $existing = $existings->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1875 if ($existing ne $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1876 if ($self->user_proceed("Do you want to reset $name attrib (code = $code) from $existing to $value ?")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1877 my $r = $self->update_attribute($id,$code,$value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1878 $self->param('interactive',$int_before) if (! $interact);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1879 push @$r, $existing;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1880 return $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1881 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1882 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1883 #...or make no change
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1884 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1885 $self->param('interactive',$int_before) if (! $interact);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1886 return [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1887 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1888 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1889 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1890
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1891 =head2 _get_attrib_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1892
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1893 Arg[1] : attrib_type.code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1894 Arg[2] : database handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1895 Example : $self->_get_attrib_id('name',$dbh)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1896 Description : get attrib_type.attrib_type_id from a attrib_type.code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1897 Return type : attrib_type.attrib_type_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1898 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1899 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1900
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1901 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1902
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1903 sub _get_attrib_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1904 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1905 my $attrib_code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1906 my $dbh = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1907 my ($attrib_id) = $dbh->selectrow_array(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1908 qq(select attrib_type_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1909 from attrib_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1910 where code = ?),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1911 {},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1912 ($attrib_code)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1913 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1914 if (! $attrib_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1915 $self->log_warning("There is no attrib_type_id for code $attrib_code, please patch the attrib_table\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1916 exit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1917 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1918 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1919 return $attrib_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1920 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1921 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1922
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1923 =head2 store_new_attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1924
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1925 Arg[1] : seq_region.seq_region_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1926 Arg[2] : attrib_type.code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1927 Arg[3] : attrib_type.value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1928 ARG[4] : table to update (seq_region_attribute by default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1929 Example : $support->store_new_attribute(23,name,5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1930 Description : uses MySQL to store an entry (code and value) in an attribute table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1931 (seq_region_attrib by default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1932 Return type : array_ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1933 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1934 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1935
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1936 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1937
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1938 sub store_new_attribute {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1939 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1940 my $sr_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1941 my $attrib_code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1942 my $attrib_value = shift || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1943 my $table = shift || 'seq_region_attrib';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1944
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1945 #get database handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1946 my $dbh = $self->get_dbconnection('loutre');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1947 #get attrib_type_id for this particular attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1948 my $attrib_id = $self->_get_attrib_id($attrib_code,$dbh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1949 #store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1950 my $r = $dbh->do(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1951 qq(insert into $table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1952 values (?,?,?)),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1953 {},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1954 ($sr_id,$attrib_id,$attrib_value)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1955 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1956 return ['Stored',$r];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1957 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1958
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1959 =head2 update_attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1960
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1961 Arg[1] : seq_region.seq_region_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1962 Arg[2] : attrib_type.code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1963 Arg[3] : attrib_type.value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1964 ARG[4] : table to update (seq_region_attribute by default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1965 Example : $support->update_attribute(23,name,5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1966 Description : uses MySQL to update an attribute table (seq_region_attrib by default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1967 Return type : array_ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1968 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1969 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1970
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1971 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1972
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1973 sub update_attribute {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1974 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1975 my $sr_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1976 my $attrib_code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1977 my $attrib_value = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1978 my $table = shift || 'seq_region_attrib';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1979 my $dbh = $self->get_dbconnection('loutre');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1980 my $attrib_id = $self->_get_attrib_id($attrib_code,$dbh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1981 #update
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1982 my $r = $dbh->do(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1983 qq(update $table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1984 set value = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1985 where seq_region_id = $sr_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1986 and attrib_type_id = $attrib_id),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1987 {},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1988 ($attrib_value)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1989 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1990 return ['Updated',$r];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1991 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1992
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1993
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1994 =head2 remove_duplicate_attribs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1995
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1996 Arg[1] : db handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1997 Arg[2] : table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1998 Example : $support->remove_duplicate_attribs($dbh,'gene');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1999 Description : uses MySQL to remove duplicate entries from an attribute table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2000 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2001 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2002 Status : stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2003
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2004 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2005
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2006 sub remove_duplicate_attribs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2007 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2008 my $dbh = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2009 my $table = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2010 $dbh->do(qq(create table nondup_${table}_attrib like ${table}_attrib));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2011 $dbh->do(qq(insert into nondup_${table}_attrib (select ${table}_id, attrib_type_id, value from ${table}_attrib group by ${table}_id, attrib_type_id, value)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2012 $dbh->do(qq(delete from ${table}_attrib));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2013 $dbh->do(qq(insert into ${table}_attrib (select ${table}_id, attrib_type_id, value from nondup_${table}_attrib)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2014 $dbh->do(qq(drop table nondup_${table}_attrib));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2015 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2016
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2017
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2018 1;