annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/Utils/Helper.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
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-2011 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 <ensembl-dev@ebi.ac.uk>.
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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 Bio::EnsEMBL::Funcgen::Utils::Helper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 e.g.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my $object = Bio::EnsEMBL::Object->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 logging => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 log_file => "/tmp/Misc.log",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 debug_level => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 debug_file => "/tmp/Misc.dbg",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $object->log("This is a log message.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 $object->debug(1,"This is a debug message.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 $object->system("rmdir /tmp/test");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 ----------------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =head1 OPTIONS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =over 8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 =item B<-debug>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 Turns on and defines the verbosity of debugging output, 1-3, default = 0 = off
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 =over 8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 =item B<-log_file|l>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Defines the log file, default = "${instance}.log"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =item B<-help>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Print a brief help message and exits.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 =item B<-man>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Prints the manual page and exits.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 B<This program> performs several debugging and logging functions, aswell as providing several inheritable EFGUtils methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 package Bio::EnsEMBL::Funcgen::Utils::Helper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 use Data::Dumper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 use Bio::EnsEMBL::Utils::Exception qw (throw stack_trace);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 use Bio::EnsEMBL::Funcgen::Utils::EFGUtils qw (get_date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 #use Devel::Timer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 use Carp;#? Can't use unless we can get it to redirect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 use File::Basename;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 @ISA = qw(Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 #List of valid rollback levels
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 #To be used in conjunction with -full_delete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 my @rollback_tables = ('data_set', 'feature_set', 'result_set', 'input_set', 'experiment', 'array', 'array_chip', 'experimental_chip');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 #Some local filevars to avoid assigning to package typeglobs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 my ($DBGFILE, $LOGFILE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Description : Constructor method to create a new object with passed or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 default attributes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Arg [1] : hash containing optional attributes :-
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 log_file - name of log file (default = undef -> STDOUT)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 debug_level - level of detail of debug message [1-3] (default = 0 = off)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 debug_file - name of debug file (default = undef -> STDERR)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 ReturnType : Helper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 Example : my $Helper = new Bio::EnsEMBL::Helper(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 debug_level => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 debug_file => "/tmp/efg.debug",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 log_file => "/tmp/efg.log",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Exceptions : throws exception if failed to open debug file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 : throws exception if failed to open log file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 #To do , change to rearrange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 sub new{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 my ($caller, %args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 my ($self, %attrdata, $argname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 #Create object from parent class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $self = $class->SUPER::new(%args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 #we need to mirror ensembl behaviour here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 #use rearrange and set default afterwards if not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 # objects private data and default values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 #Not all of these need to be in main
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 %attrdata = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 _tee => $main::_tee,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 _debug_level => $main::_debug_level,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 _debug_file => $main::_debug_file,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 _log_file => $main::_log_file,#default should be set in caller
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 _no_log => $main::_no_log,#suppresses log file generation if log file not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 _default_log_dir => $main::_default_log_dir,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 # set each class attribute using passed value or default value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 foreach my $attrname (keys %attrdata){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 ($argname = $attrname) =~ s/^_//; # remove leading underscore
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $self->{$attrname} = (exists $args{$argname}) ? $args{$argname} : $attrdata{$attrname};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 $self->{'_tee'} = 1 if $self->{'_no_log'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 #should we undef log_file here too?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 #This currently only turns off default logging
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->{_default_log_dir} ||= $ENV{'HOME'}.'/logs';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 $self->{'_report'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 # DEBUG OUTPUT & STDERR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 #should default to lowest or highest debug level here!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 if(defined $self->{_debug_level} && $self->{_debug_level}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $main::_debug_level = $self->{_debug_level};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 if(defined $self->{_debug_file}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $main::_debug_file = $self->{_debug_file};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 open($DBGFILE, '>>', $self->{_debug_file})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 or throw("Failed to open debug file : $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 #open (DBGFILE, "<STDERR | tee -a ".$self->{_debug_file});#Mirrors STDERR to debug file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 open($DBGFILE, '>&STDERR');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 select $DBGFILE; $| = 1; # make debug file unbuffered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 $self->debug(1,"Debugging started ".localtime()." on $0 at level ".$self->{_debug_level}." ...");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my $log_file = $self->{_log_file};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 # LOG OUTPUT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 if (defined $self->{_log_file}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 #This causes print on unopened file as we try and log in the DESTROY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 throw('You have specified mutually exclusive parameters log_file and no_log') if($self->{'_no_log'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 $main::_log_file = $self->{_log_file};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 #we need to implment tee here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 if($self->{'_tee'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 open($LOGFILE, ' | tee -a '.$log_file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 open($LOGFILE, '>>', $log_file)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 or throw("Failed to open log file : $log_file\nError: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 #Change this to get the name of the control script and append with PID.out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 #This is to ensure that we always capture output
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 #We need to also log params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 #We will have to call this from the child class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 #Only do this if we don't have supress default logs set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 #To avoid loads of loags during testing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 if(! $self->{'_no_log'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 my @stack = stack_trace();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 my $top_level = $stack[$#stack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 my (undef, $file) = @{$top_level};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 $file =~ s/.*\///;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 $self->run_system_cmd('mkdir '.$self->{_default_log_dir}) if(! -e $self->{_default_log_dir});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $self->{'_log_file'} = $self->{_default_log_dir}.'/'.$file.'.'.$$.'.log';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 warn "No log file defined, defaulting to:\t".$self->{'_log_file'}."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 #we should still tee here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 if($self->{'_tee'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 open($LOGFILE, '| tee -a '.$self->{'_log_file'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 open($LOGFILE, '>', $self->{'_log_file'})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 or throw('Failed to open log file : '.$self->{'_log_file'}."\nError: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 #Have to include STD filehandles in operator
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 open($LOGFILE, '>&STDOUT');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 select $LOGFILE; $| = 1; # make log file unbuffered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 $self->log("\n\nLogging started at ".localtime()."...");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 # RESET STDOUT TO DEFAULT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 select STDOUT; $| = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 $self->debug(2,"Helper class instance created.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 =head2 DESTROY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 Description : Called by gargbage collection to enable tidy up before object deleted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 ReturnType : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 Example : none - should not be called directly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 sub DESTROY{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 $self->report;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 if($self->{_log_file}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $self->log("Logging complete ".localtime().".");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $self->log('Virtual Memory '.`ps -p $$ -o vsz |tail -1`);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $self->log('Resident Memory '.`ps -p $$ -o rss |tail -1`);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 # close LOGFILE; # if inherited object then cannot close filehandle !!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 if($self->{_debug_level}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $self->debug(1,"Debugging complete ".localtime().".");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 # close DBGFILE; # if inherited object then cannot close filehandle !!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 if(defined $self->{'_timer'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $self->{'_timer'}->report();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 $self->debug(2,"Bio::EnsEMBL::Helper class instance destroyed.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 return;
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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 ##Need generic method in here to get stack and line info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 ###Use Root.pm stack methods!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 # and replace this with caller line method for logging
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 sub _get_stack{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my ($self) = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 #need to resolve this method with that in debug, pass log or debug arg for different format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my @prog = (caller(2)) ? caller(2) : (caller(1)) ? caller(1) : (undef,"undef",0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 return "[".localtime()." - ".basename($prog[1]).":$prog[2]]";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 }
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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 =head2 log
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 Arg[0] : string - log message.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 Arg[1] : boolean - memory usage, appends current process memory stats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 Description : Method to write messages to a previously set up log file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Example : $root->log("Processing file $filename ...", 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Exceptions : none
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 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 sub log{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 my ($self, $message, $mem, $date, $no_return) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 if($mem){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 $message.= " :: ".`ps -p $$ -o vsz |tail -1`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 chomp $message;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $message .= " KB";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 if($date){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 my $time = localtime();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 chomp($time);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 $message .= ' - '.localtime();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $message .= "\n" if ! $no_return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 print $LOGFILE "::\t$message";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 # Add to debug file if not printing to STDERR?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 # only if verbose?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 # this would double print everything to STDOUT if tee and debug has not redefined STDERR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $self->debug(1,$message);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 =head2 report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Arg[0] : optional string - log message.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Arg[1] : optional boolean - memory usage, appends current process memory stats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Description : Wrapper method for log, which also stores message for summary reporting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 Example : $root->report("WARNING: You have not done this or that and want it reported at the end of a script");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 sub report{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 my ($self, $message, $mem) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 if(defined $message){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 $self->log($message, $mem);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 push @{$self->{'_report'}}, $message;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 elsif(scalar(@{$self->{'_report'}})){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 print $LOGFILE "\n::\tSUMMARY REPORT\t::\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 print $LOGFILE join("\n", @{$self->{'_report'}})."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $self->{'_report'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 =head2 log_header
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 Arg[0] : string - log message.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Arg[1] : boolean - memory usage, appends current process memory stats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 Description : Wrapper method to format a log as a header line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 Example : $root->log("Processing file $filename ...", 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 sub log_header{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 my ($self, $message, $mem, $date) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 print $LOGFILE "\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $self->log("::\t$message\t::\t::", $mem, $date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 print $LOGFILE "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 =head2 debug
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 Description : Method to write debug info to a previously set up debug file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 Over-rides Root.pm on/off style debugging
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Args : int: debug level and string: log message.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 ReturnType : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Example : $root->debug(2,"dir=$dir file=$file");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 sub debug{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 my ($self,$level,$message) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 #Can we not detect whther message is a scalar, array or hash and Dump or print accordingly?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 my (@call,$cnt,$prog_name,$prog_line,$call_name,$call_line);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 $prog_name = $call_name = "undef";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 $prog_line = $call_line = $cnt = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 # if debug on at the requested level then output the passed message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 if (defined $self->{_debug_level} && $level <= $self->{_debug_level}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 ######Replace this with Carp method?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 while (@call = caller($cnt++)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 if ($cnt == 2){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $call_name = basename($call[1]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 $call_line = $call[2]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 $prog_name = basename($call[1]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 $prog_line = $call[2];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 #This still attempts to print if file not opened
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 print $DBGFILE "debug $message\t: [$$ - $prog_name:$prog_line $call_name:$call_line]\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 #carp("carping $message");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 =head2 debug_hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 Description : Method to write the contents of passed hash to debug output.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Args : int: debug level and hashref.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 ReturnType : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 Example : $Helper->debug_hash(3,\%hash);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 sub debug_hash{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 my ($self,$level,$hashref) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 my ($attr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 # if debug on at the requested level then output the passed hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 if (defined $self->{_debug_level} && $level <= $self->{_debug_level}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 print $DBGFILE Data::Dumper::Dumper(\$hashref)."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 =head2 run_system_cmd
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 Description : Method to control the execution of the standard system() command
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 ReturnType : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Example : $Helper->debug(2,"dir=$dir file=$file");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Exceptions : throws exception if system command returns none zero
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 #Move most of this to EFGUtils.pm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 #Maintain wrapper here with throws, only warn in EFGUtils
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 sub run_system_cmd{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 my ($self, $command, $no_exit) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 my $redirect = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 $self->debug(3, "system($command)");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 # decide where the command line output should be redirected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 #This should account for redirects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 #This just sends everything to 1 no?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 if (defined $self->{_debug_level} && $self->{_debug_level} >= 3){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 if (defined $self->{_debug_file}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 $redirect = " >>".$self->{_debug_file}." 2>&1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 $redirect = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 #$redirect = " > /dev/null 2>&1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 # execute the passed system command
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 my $status = system("$command $redirect");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 my $exit_code = $status >> 8;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 if ($status == -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 warn "Failed to execute: $!\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 elsif ($status & 127) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 warn sprintf("Child died with signal %d, %s coredump\nError:\t$!",($status & 127),($status & 128) ? 'with' : 'without');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 elsif($status != 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 warn sprintf("Child exited with value %d\nError:\t$!\n", $exit_code); #get the true exit code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 if ($exit_code != 0){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 if (! $no_exit){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 throw("System command failed:\t$command\nExit code:\t$exit_code\n$!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 warn("System command returned non-zero exit code:\t$command\nExit code:\t$exit_code\n$!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 #reverse boolean logic for perl...can't do this anymore due to tab2mage successful non-zero exit codes :/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 return $exit_code;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 #add sys_get method ehre to handle system calls which retrieve data?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 #i.e.backtick commands `find . -name *fasta`
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 #or use want or flag with above method?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 #should open pipe instead to capture error?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 sub get_data{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 my ($self, $data_type, $data_name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 #This method is just to provide standard checking for specific get_data/config methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 if(defined $data_name){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 throw("Defs data name $data_name for type '$data_type' does not exist\n") if (! exists $self->{"${data_type}"}{$data_name});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 }else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 throw("Defs data type $data_type does not exist\n") if (! exists $self->{"${data_type}"});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 return (defined $data_name) ? $self->{"${data_type}"}{$data_name} : $self->{"${data_type}"};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 #sub Timer{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 # my ($self) = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 # $self->{'_timer'} = new Devel::Timer() if(! defined $self->{'_timer'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 # return $self->{'_timer'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 sub set_header_hash{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 my ($self, $header_ref, $fields) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 my %hpos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 for my $x(0..$#{$header_ref}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 $hpos{$header_ref->[$x]} = $x;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 if($fields){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 foreach my $field(@$fields){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 if(! exists $hpos{$field}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 throw("Header does not contain mandatory field:\t${field}");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 return \%hpos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 #Move this to EFGUtils?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 sub backup_file{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 my ($self, $file_path) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 throw("Must define a file path to backup") if(! $file_path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 if (-f $file_path) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 $self->log("Backing up:\t$file_path");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 system ("mv ${file_path} ${file_path}.".`date '+%T'`);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 #This should move to Utils
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 #as it is a simple string manipulation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 sub get_schema_and_build{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 my ($self, $dbname) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 my @dbname = split/_/, $dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 return [$dbname[($#dbname -1)], $dbname[($#dbname )]];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 =head2 get_regbuild_set_states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 Arg [1] : Bio::EnsEMBL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 Example : my ($dset_states, $rset_states, $fset_states) = $helper->get_regbuild_set_states($db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 Description: Returns Array refs of appropriate states for sets use din the regulatory build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 Returntype : Array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 Exceptions : Warns if cannot find chromosome CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 Caller : HealthChecker & regulatory build code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 sub get_regbuild_set_states{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 my ($self, $db) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 my $cs_a = $db->get_CoordSystemAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 #These states need to be mirrored in RegulatorySets.java
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 my $chrom_cs = $cs_a->fetch_by_name('chromosome');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 my (@dset_states, @rset_states, @fset_states);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 if(! defined $chrom_cs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 #This species most likely does not have a regbuild
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 #really just need to get the 'highest' level here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 warn "Could not find Chromosome CoordSystem. ".$db->dbc->dbname.". most likely does not contain a RegulatoryBuild";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 my $imp_cs_status = 'IMPORTED_'.$cs_a->fetch_by_name('chromosome')->version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 #What about non-chromosome assemblies?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 #top level will not return version...why not?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 @dset_states = ('DISPLAYABLE');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 @rset_states = (@dset_states, 'DAS_DISPLAYABLE', $imp_cs_status);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 @fset_states = (@rset_states, 'MART_DISPLAYABLE');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 return (\@dset_states, \@rset_states, \@fset_states);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 =head2 define_and_validate_sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 Arg [1] : hash - set constructor parameters:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 -dbadaptor Bio::EnsEMBL::Funcgen::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 -name Data/FeatureSet/ResultSet name to create
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 -feature_type Bio::EnsEMBL::Funcgen::FeatureType
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 -cell_type Bio::EnsEMBL::Funcgen::CellType
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 -analysis FeatureSet Bio::EnsEMBL::Analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 -feature_class e.g. annotated or regulatory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 -description FeatureSet description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 -recovery Allows definition of extant sets so long as they match
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 -append Boolean - Forces import on top of previously imported data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 -rollback Rolls back product feature set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 -supporting_sets Complete set of pre-stored supporting or input sets for this DataSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 -slices ARRAYREF of Slices to rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 Example : my $dset = $self->define_and_validate_Set(%params);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 Description: Checks whether set is already in DB based on set name, rolls back features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 if roll back flag set. Or creates new DataSet and Feature|ResultSet if not present.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 Returntype : Bio::EnsEMBL::Funcgen::DataSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 Exceptions : Throws if DBAdaptor param not valid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 Caller : Importers and Parsers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 sub define_and_validate_sets{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 #change slice to slices to support multi slice import from InputSet::define_sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 #Can't do full rollback in slice mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 #This may not be safe in slice mode as we will then have mixed inputs/outputs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 my ($name, $anal, $ftype, $ctype, $type, $append, $db, $ssets, $description, $rollback, $recovery, $slices, $display_label) = rearrange(['NAME', 'ANALYSIS', 'FEATURE_TYPE', 'CELL_TYPE', 'FEATURE_CLASS', 'APPEND',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 'DBADAPTOR', 'SUPPORTING_SETS', 'DESCRIPTION', 'ROLLBACK', 'RECOVERY', 'SLICES', 'DISPLAY_LABEL'], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 #VALIDATE CONFIG HASH
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 #$config_hash ||= {};#default so exists will work without testing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 #if(keys %{$config_hash}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 # #There is a module to handle config hashes somewhere!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 # throw('config_hash not yet implemented for define_and_validate_sets');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 #my @known_config = ('full_delete');#We never want full delete here as this is a create method!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 #Can we set vars from has by refs like getopts?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 #map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 # throw("Found unsupported config hash parameter:\t$_") if ! grep(/^${_}$/, @known_config);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 #} keys %{$config_hash};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 #define rollback level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 #extract this to _set_rollback_level($rollback_mode, $feature_class)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my $rollback_level = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 #These should be globally defined so all rollback methods can use them
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 my %valid_rollback_modes =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 product_features => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 #Just product features and FeatureSet status, what about DataSet status?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 #full delete does nothing here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 sets => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 #Includes product_features and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 #deletes supporting_sets entries unless we specify append
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 #revoke all states on Feature/Data/InputSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 #Full delete removes Feature/Data/InputSet entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 #Never includes ResultSets!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 supporting_features => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 #Includes product_feature and sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 #Removes all states and supporting features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 #inc. ResultSet results/ResultFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 #Full_delete remove supporting set entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 #Otherwise just rollback states for affected sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 if($rollback){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 if(! exists $valid_rollback_modes{$rollback}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 #Default to some sensible values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 $rollback = 'product_features';#default for FeatureSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 #Always want overwrite supporting sets if there is a difference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 $rollback = 'sets' if ($type eq 'regulatory');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 $rollback = 'supporting_sets' if ($type eq 'result');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 warn ("You have not set a valid rollback mode(product_features|sets|supporting_features), defaulting to $rollback for feature class $type\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 $rollback_level = $valid_rollback_modes{$rollback};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 if($slices && (ref($slices) ne 'ARRAY')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 throw('-slices param must be an ARRAYREF of Bio::EnsEMBL::Slice objects');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 #Rest of validation done in other methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 #But how are we going to resolve the append behaviour when we also want to validate the ssets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 #Can't, so append also functions to enable addition in the absence of some or all previous data/esets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 #No this is not true, we want to be able to fetch an extant set for import,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 #we just need to be aware of sset IMPORTED status?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 #This should be a recovery thing, allow fetch, but validate sets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 #Check mandatory params
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 if(! (ref($db) && $db->isa('Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor'))){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 throw('Must provide a valid Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 throw('Must provide a -name ') if(! defined $name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 #Not necessarily, just do rollback then append?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 #But then we'd potentially have a supporting set associated which has had it's data removed from the feature set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 #Generating sets for an ExpSet will always have append set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 #This could be valid for generically grabing/creating sets for adding new supporting sets e.g. reg build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 throw('-append and -rollback are mutually exclusive') if $rollback_level && $append;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 #This will never happen due to previous test? append will always fail?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 #warn('You are defining a pre-existing FeatureSet without rolling back'.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 # ' previous data, this could result in data duplication') if $append && ! $rollback_level;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 #Is this really possible, surely the supporting set will fail to store due to unique key?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 #Should we warn here about append && recovery?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 #Aren't these mutually exclusive?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 #Do we know if we have new data? append should override recovery, or just specifiy append
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 #This will stop the import and highlight the issue to the user
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 #We need to be able to run with both otherwise the import will not work
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 throw('Must provide a -feature_class e.g. annotated, external, result or regulatory') if(! defined $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 #Check for annotated, external, regulatory etc here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 #Should never be external as we don't have DataSets for external sets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 $db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::FeatureType', $ftype);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 if (defined $ctype){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 $db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::CellType', $ctype);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 elsif($type ne 'regulatory'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 throw('Only Data/FeatureSets with type \'regulatory\' can have an undefined CellType');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 #Coudl extend this to core set by name eq 'RegulatoryFeatures'?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 $db->is_stored_and_valid('Bio::EnsEMBL::Analysis', $anal);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 my $dset_adaptor = $db->get_DataSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 my $fset_adaptor = $db->get_FeatureSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 my $rset_adaptor = $db->get_ResultSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 #DataSet centric definition to enable multiple DataSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 #to be generated from the same supporting sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 my $dset = $dset_adaptor->fetch_by_name($name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 my ($fset, $rset, @input_sets);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 #Validate stored vs passed set data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 if(defined $dset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 $self->log('Found Stored DataSet '.$dset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 if($type ne 'result'){#i.e. annotated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 #Does this account for regulatory?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 $fset = $dset->product_FeatureSet;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 #Here we have the possiblity that a feature_set with a different name may have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 #been associated with the DataSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 if(defined $fset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 $self->log("Found associated product FeatureSet:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 #if(! $clobber &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 if($fset->name ne $name){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 throw('Invalid product FeatureSet name ('.$fset->name.') for DataSet ('.$name.'). Rollback will overwrite the FeatureSet and mismatched name will be retained.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 #Need to clobber both or give explicit name for datasets or rename dataset???
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 #Force this throw for now, make this fix manual as we may end up automatically overwriting data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 #This needs to be modified to support InputSets in ResultSets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 #Would never have mixed Input/ResultSets so no need
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 #Could potential need to do it for mixed Result/FeatureSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 #if we ever use an analysis which uses both set types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 #check supporting_sets here if defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 #We have the problem here of wanting to add ssets to a previously existing dset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 #we may not know the original sset, or which of the ssets are new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 #Hence there is a likelihood of a mismatch.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 #Much of this is replicated in store_udpated sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 if(defined $ssets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 my @sorted_ssets = sort {$a->dbID <=> $b->dbID} @{$ssets};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 my @stored_ssets = sort {$a->dbID <=> $b->dbID} @{$dset->get_supporting_sets};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 my $mismatch = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 $mismatch = 1 if(scalar(@sorted_ssets) != scalar(@stored_ssets));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 if(! $mismatch){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 for my $i(0..$#stored_ssets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 if($stored_ssets[$i]->dbID != $sorted_ssets[$i]->dbID){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 $mismatch=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 if($mismatch){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 #We're really print this names here which may hide the true cell/feature/anal type differences.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 my $mismatch = 'There is a (name/type/analysis) mismatch between the supplied supporting_sets and the'.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930 ' supporting_sets in the DB for DataSet '.$dset->name."\n\nStored:\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 .join(', ', (map { $_->name } @stored_ssets))."\n\nSupplied supporting_sets:\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 .join(', ', (map { $_->name } @sorted_ssets));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 if($append){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 warn($mismatch."\n\nAppending supporting set data to unvalidated supporting sets");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 elsif($rollback_level > 1){#supporting set rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 warn($mismatch."\n\nReplacing previously stored supporting sets with newly defined sets\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 if($slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 warn("WARNING:\tPerforming supporting_set rollback in slice mode. This may corrupt the supporting_set definition for other slices in this DataSet if they are not re-generated using the same supporting_sets\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 #Remove supporting_set entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 #This should be in a rollback_DataSet method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 #This has moved to DataSetAdaptor::store_update_sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 #Reset supporting sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 $dset->{'supporting_sets'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 $dset->add_supporting_sets(\@sorted_ssets);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 #Move this to last block?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 #This will currently fail as it test for product_FeatureSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 #How do we get around this? Remove IMPORTED status and only throw if fset has IMPORTED status?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 #warn "pre store sset ".@{$dset->get_supporting_sets};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 #($dset) = @{$dset_adaptor->store_updated_sets([$dset], $rollback_level)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 #$dset->adaptor->store_regbuild_meta_strings($dset, $rollback_level) if $type eq 'regulatory';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 throw($mismatch);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 warn("No supporting sets defined, skipping supporting set validation for definition of DataSet:\t".$name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 else{#result_features from InputSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 #Do we ever pass supporting sets here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 #Do we need to test vs stored_sets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 #There is the potential for more than one ResultSet to be associated with DataSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 #But as we are using the same name, this restricts the number wrt the cardinality
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 #of the name field. i.e. 1 name per analysis/cell_type/feature_type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 #This now works slightly differently to the rest of this method as we
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 #need to treat the ResultSet as we are currently treating the FeatureSet below.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 #However, the use case of this method is for one InputSet giving rise to one ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 #Hence just throw if we find more than one or have a name mismatch???
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 my @stored_sets = @{$dset->get_supporting_sets};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 #THis assumes we will always have supporting sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988 #and is failing as we have removed this test in DataSet::new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 #But where are we storing it without the supporting set?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 if(scalar(@stored_sets) > 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 throw('define_and_validate_sets does not yet support DataSets with multiple supporting ResultSets for result_features');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 elsif(! @stored_sets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 throw("DataSet($name) does not have any stored supporting sets. These should have been defined when storing the DataSet");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 #Or should we handle this?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 $rset = $stored_sets[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 if($rset->set_type ne 'result'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 throw("DataSet already contains a supporting set which is not a ResultSet:\t".$rset->set_type."\t".$stored_sets[0]->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 elsif($ssets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 #Do we ever pass supporting sets, test for completeness
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 #Just test we have the same supplied ssets if it is defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 if(scalar(@$ssets) != 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 throw("ResultFeature data sets currently only support one supporting ResultSet.\nSupproting sets:\t".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 join(', ', (map { $_->name.'('.$_->set_type } @$ssets)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 elsif(! ($rset->dbID == $ssets->[0]->dbID) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 ($ssets->[0]->set_type eq 'result')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 throw('Supplied supporting set('.$ssets->[0]->name.') does not match stored supporting set('.$rset->name.')');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 @input_sets = @{$rset->get_InputSets};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 if($type eq 'result'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 #Validate the defined InputSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 if (scalar(@$ssets) > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 throw("define_and_validate_sets does not yet support multiple InputSets for defining a ResultSet:\t".$name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 if ($ssets->[0]->set_type ne 'input') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 throw("To define a ResultSet($name) containing result_features, you must provide and InputSet as a supporting set\nArray based ResultSets(i.e. experimental_chip/channel) are not defined using this method, see specific Import Parsers.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 #Try and grab the rset just in case it has been orphaned somehow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 if (! defined $rset) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039 $rset = $rset_adaptor->fetch_all_by_name($name, $ftype, $ctype, $anal)->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 #Should only ever be one given all parts of unique key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 @input_sets = @{$rset->get_InputSets} if $rset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 if (defined $rset) { #Validate stored InputSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048 if (scalar(@input_sets) != scalar(@$ssets)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 throw('Found mismatch between number of previously stored InputSets('.scalar(@input_sets).') and defined InputSets('.scalar(@$ssets).'). You must provide a complete list of InputSets to define your ResultSet.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 if ($input_sets[0]->dbID != $ssets->[0]->dbID) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 throw('Found dbID mismatch between previously stored InputSet('.$input_sets[0]->name.') and define InputSet('.$ssets->[0]->name.')');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056 #rollback ResultSet/InputSet here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 if($rollback_level > 2){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 warn "rollback not yet fully implemented for Result/InputSets";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 #Does this need to be by slice?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 #What about states if we are running in parallel?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 if($slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 map {$self->rollback_ResultSet($rset, $rollback, $_)} @$slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 $self->rollback_ResultSet($rset, $rollback);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073 else{#define ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074 ($rset) = @{$rset_adaptor->store(Bio::EnsEMBL::Funcgen::ResultSet->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 -name => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 -feature_type => $ftype,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 -cell_type => $ctype,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 -table_name => 'input_set',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 -table_id => $ssets->[0]->dbID,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081 -analysis => $anal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 )};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 else{#annotated/regulatory/external i.e. FeatureSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 #Try and grab the fset just in case it has been orphaned somehow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 if(! defined $fset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 $fset = $fset_adaptor->fetch_by_name($name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093 if(defined $fset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094 #Now we need to test whether it is attached to a dset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 #Will be incorrect dset if it is as we couldn't get it before
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 #else we test the types and rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097 $self->log("Found stored orphan FeatureSet:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 my $stored_dset = $dset_adaptor->fetch_by_product_FeatureSet($fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 if(defined $stored_dset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 throw('Found FeatureSet('.$name.') associated with incorrect DataSet('.$stored_dset->name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 ").\nTry using another -name in the set parameters hash");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 #Rollback or create FeatureSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 if(defined $fset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 if($rollback_level){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 #Don't check for IMPORTED here as we want to rollback anyway
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114 #Not forcing delete here as this may be used as a supporting set itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116 $self->rollback_FeatureSet($fset, undef, $slices);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 elsif ($append || $recovery) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119 #This is only true if we have an sset mismatch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121 #Do we need to revoke IMPORTED here too?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 #This behaves differently dependant on the supporting set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 #InputSet status refers to loading in FeatureSet, where as ResultSet status refers to loading into result table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125 #So we really want to revoke it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126 #But this leaves us vulnerable to losing data if the import crashes after this point
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127 #because we have no way of assesing which is complete data and which is incomplete data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128 #within a feature set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129 #This means we need a status on supporting_set, not InputSet or ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130 #as this has to be in the context of a dataset.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131 #Grrr, this means we need a SupportingSet class which simply wraps the InputSet/ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1132 #We also need a single dbID for the supporting_set table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1133 #Which means we will have to do some wierdity with the normal dbID implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1134 #i.e. Have supporting_set_id, so we can still access all the normal dbID method for the given Set class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1135 #This will have to be hardcoded into the state methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136 #Also will need to specify when we want to store as supporting_status or normal set status.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 #This is an awful lot to protect against vulnerability
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 #Also as there easy way to track what features came from which supporting set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 #There isn't currently a viable way to rollback, hence will have to redo the whole set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142 #Maybe we can enforce this by procedure?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143 #By simply not associating the supporting set until it has been loaded into the feature set?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144 #This may cause even more tracking problems
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146 #Right then, simply warn and do not revoke feature_set IMPORTED to protect old data?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147 #Parsers should identify supporting_sets(InputSets) which exist but do not have IMPORTED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 #status and fail, specifying -recover which will rollback_FeatureSet which will revoke the IMPORTED status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150 #This can mean a failed import can leave a partially imported feature set with the IMPORTED status!!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152 #We just need to handle InputSets and ResultSets differently.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153 #In parsers or here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154 #Probably best in the parsers as this is where the states are set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 #Should we throw here for ResultSet?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158 #Force rollback of FeatureSet first or create new one?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159 #And throw for InputSet?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160 #This again comes back to whether we will ever have more than one file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161 #for a give InputSet, currently not.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163 $self->log("WARNING\t::\tAdding data to a extant FeatureSet:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165 throw('Found extant FeatureSet '.$fset->name.'. Maybe you want to specify the rollback, append or recovery parameter or roll back the FeatureSet separately?');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168 #create a new one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169 $self->log("Creating new FeatureSet:\t".$name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171 $fset = Bio::EnsEMBL::Funcgen::FeatureSet->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172 -name => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173 -feature_type => $ftype,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174 -cell_type => $ctype,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 -analysis => $anal,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176 -feature_class => $type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177 -description => $description,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 -display_label => $display_label,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180 ($fset) = @{$fset_adaptor->store($fset)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 #Create/Update the DataSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185 if(defined $dset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 #Could do these updates above?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187 #But delayed to reduce redundancy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1189 if($type ne 'result'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1191 if(! defined $dset->product_FeatureSet){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 $self->log("Updating DataSet with new product FeatureSet:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193 $dset->product_FeatureSet($fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 $dset = $dset_adaptor->store_updated_sets([$dset], $rollback_level)->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197 #This cannot store the focus sets as we don't know which are which yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 #Only the script knows this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199 # $dset->adaptor->store_regbuild_meta_strings($dset, $rollback_level) if $type eq 'regulatory';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202 #We may have the case where we have a DataSet(with a FeatureSet) but no ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1203 #i.e. Load result_features after peak calls
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1204 #So update dset with ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1206 if(! @{$dset->get_supporting_sets}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1207 $self->log("Updating DataSet with new ResultSet:\t".$rset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1208 $dset->add_supporting_sets([$rset]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1209 $dset = $dset_adaptor->store_updated_sets([$dset], $rollback_level)->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1211 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1213 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1214 $self->log("Creating new ${type}_feature DataSet:\t".$name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1216 if($type ne 'result'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1217 ($dset) = @{$dset_adaptor->store(Bio::EnsEMBL::Funcgen::DataSet->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1218 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1219 -name => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1220 -feature_set => $fset,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1221 -supporting_sets => $ssets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1222 ))};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1223 #$dset->adaptor->store_regbuild_meta_strings($dset, $rollback_level) if $type eq 'regulatory';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1225 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1226 warn "creating dataset $name with supporting set $rset";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1227 ($dset) = @{$dset_adaptor->store(Bio::EnsEMBL::Funcgen::DataSet->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1228 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1229 -name => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1230 -supporting_sets => [$rset],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1231 ))};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1235 return $dset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1239 #Rollback/load methods migrated from DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1240 #Move to SetAdaptors, better located and will remove cyclical dependancy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1242 =head2 rollback_FeatureSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1244 Arg [0] : Bio::EnsEMBL::Funcgen::FeatureSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1245 Arg [1] : optional - boolean force delete flag, if this FeatureSet is use as a support
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1246 for another DataSet.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1247 Arg [2] : optional - arrayref of Bio::EnsEMBL::Slice objects to rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1248 Arg [3] : optional - boolean flag to perform full rollback i.e. default will just remove feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1249 specifying this with also delete the feature_set record
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1250 Example : $self->rollback_FeatureSet($fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1251 Description: Deletes all status and feature entries for this FeatureSet.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1252 Checks whether FeatureSet is a supporting set in any other DataSet.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1253 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1254 Exceptions : Throws if any deletes fails or if db method unavailable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1255 Caller : Importers and Parsers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1256 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1258 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1261 sub rollback_FeatureSet{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1262 my ($self, $fset, $force_delete, $slices, $full_delete) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1264 #Remove force delete and just throw?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1265 #Currently only used in project_feature_set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1266 #May want to keep an old RegBuild for mapping/comparison?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1267 #Coudl get around this by simply deleting the data_set? Unknown impact.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1268 #Move to config hash?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1269 #No need for rollback_level here as we always want to do the same thing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1271 my ($sql, $slice_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1272 my $slice_join = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1273 my $table = $fset->feature_class.'_feature';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1274 my $adaptor = $fset->adaptor || throw('FeatureSet must have an adaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1275 my $db = $adaptor->db;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1276 #Cyclical dpendancy here, so not strictly necessary.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1277 $db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::FeatureSet', $fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1280 $self->log_header('Rolling back '.$fset->feature_class." FeatureSet:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1282 if($slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1284 if($full_delete){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1285 throw("Cannot specify a full_delete for a Slice based rollback:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1289 if(! ref($slices) eq 'ARRAY'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1290 throw('Slices must be an ARRAYREF of Slice objects');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1291 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1293 map { throw("Must pass a valid Bio::EnsEMBL::Slice") if (! (ref($_) && $_->isa('Bio::EnsEMBL::Slice'))) } @$slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1294 $self->log("Restricting to slices:\n\t\t".join("\n\t\t", (map { $_->name } @$slices)) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1295 #Allow subslice rollback only for one slice at a time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1296 my $subslice = (scalar(@$slices) == 1) ? 1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1297 my @sr_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1299 foreach my $slice(@$slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1300 my $efg_sr_id = $fset->get_FeatureAdaptor->get_seq_region_id_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1302 if(! $efg_sr_id){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1303 $self->log("Slice is not present in eFG DB:\t".$slice->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1304 }else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1306 if(! $subslice){#Test is not subslice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1307 my $full_slice = $slice->adaptor->fetch_by_region(undef, $slice->seq_region_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1309 if(($slice->start != 1) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1310 ($full_slice->end != $slice->end)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1311 throw("Can only rollback subslices one at a time:\nRollback slice:\t"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1312 .$slice->name."\nFull slice:\t".$full_slice->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1313 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1314 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1316 push @sr_ids, $efg_sr_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1318 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1320 if(scalar(@sr_ids) == 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1321 #Allow sub slice rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1322 #add range here from meta coord?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1323 $slice_join = " and f.seq_region_id=$sr_ids[0] and f.seq_region_start<=".$slices->[0]->end.' and f.seq_region_end>='.$slices->[0]->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1325 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1326 $slice_join = ' and f.seq_region_id in ('.join(', ', @sr_ids).')';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1328 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1332 #Check whether this is a supporting set for another data_set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1333 my @dsets = @{$db->get_DataSetAdaptor->fetch_all_by_supporting_set($fset)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1335 if(@dsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1336 my $txt = $fset->name." is a supporting set of the following DataSets:\t".join(', ', (map {$_->name} @dsets));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1338 if($force_delete){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1339 $self->log("WARNING:\t$txt\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1340 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1341 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1342 throw($txt."\nPlease resolve or specify the force_delete argument")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1346 #Remove states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1347 if(! $slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1348 $fset->adaptor->revoke_states($fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1350 #Revoke InputSet states here as this refers to whether
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1351 #they are imported in the FeatureSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1352 #Do this in FeatureSet->revoke_states?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1354 my $dset = $db->get_DataSetAdaptor->fetch_by_product_FeatureSet($fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1356 #Account for absent dset if we have an external_feature set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1358 if((! defined $dset) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1359 $fset->feature_class ne 'external'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1360 warn "WARNING:\tFeatureSet ".$fset->name." does not have an associated DataSet. Rollback may be incomplete";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1361 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1363 if($dset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1365 foreach my $sset(@{$dset->get_supporting_sets}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1366 #Maybe skip this if we defined slice?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1368 #??? Do we want to do this?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1369 #This is dependant on the feature_class of the InputSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1370 #result InputSets may have been imported as ResultFeatureCollections
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1371 #So we want to leave those in place
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1372 #annotated feature_class InputSets are directly imports, so the status of these refers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1373 #to the FeatureSet import status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1374 #Where is the imported status set for SWEmbl?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1376 if(($sset->feature_class eq 'annotated') &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1377 $sset->isa('Bio::EnsEMBL::Funcgen::InputSet')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1379 $self->rollback_InputSet($sset) if $sset->isa('Bio::EnsEMBL::Funcgen::InputSet');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1380 $self->rollback_InputSet($sset);#add full delete here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1381 #Do not want to rollback here for other type of sset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1382 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1383 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1384 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1386 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1387 $self->log('Skipping '.$fset->name.' revoke_states for partial Slice rollback, maybe revoke IMPORTED? ');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1388 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1390 #should add some log statements here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1392 my $row_cnt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1394 #Rollback reg attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1395 if($fset->feature_class eq 'regulatory'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1396 $sql = "DELETE ra from regulatory_attribute ra, $table f where f.${table}_id=ra.${table}_id and f.feature_set_id=".$fset->dbID.$slice_join;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1397 $self->rollback_table($sql, 'regulatory_attribute', undef, $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1401 if($full_delete){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1402 #Now delete meta entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1403 #This is messy as we use the following meta_key nomencalture
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1404 #which do not match the fset names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1405 #regbuild.feature_set_ids_v5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1406 #regbuild.feature_type_ids_v5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1407 #regbuild.focus_feature_set_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1408 #regbuild.initial_release_date_v6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1409 #regbuild.last_annotation_update_v6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1410 #regbuild.version NEED TO ADD THIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1411 #Also need to revise how these are generated by build_reg_feats.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1412 #WHat about new cell_type level feature sets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1413 #How will we model these in the meta table?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1415 warn "Need to revise meta table entries before we add a delete here, remove manually for now for:\t".$fset->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1417 #We would only remove meta entries if we are performing a full rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1418 my $version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1419 ($version = $fset->name) =~ s/.*_v([0-9]+)$/$1/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1420 $version = ($version eq $fset->name) ? '' : "_v${version}";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1422 #These are versionless meta_keys and apply to all sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1423 #handle these in reg build script
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1424 #'regbuild.initial_release_date',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1425 #'regbuild.last_annotation_update'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1426 #'regbuild.version'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1428 foreach my $mkey('regbuild.%s.feature_set_ids',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1429 'regbuild.%s.feature_type_ids',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1430 'regbuild.%s.focus_feature_set_ids'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1432 my $meta_key = sprintf($mkey, $fset->cell_type->name).$version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1433 $sql = "DELETE from meta where meta_key='${meta_key}'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1434 $self->rollback_table($sql, 'meta', undef, $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1436 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1437 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1440 #Need to remove object xrefs here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1441 #Do not remove xrefs as these may be used by something else!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1442 $sql = "DELETE ox from object_xref ox, $table f where ox.ensembl_object_type='".ucfirst($fset->feature_class)."Feature' and ox.ensembl_id=f.${table}_id and f.feature_set_id=".$fset->dbID.$slice_join;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1443 $self->rollback_table($sql, 'object_xref', 'object_xref_id', $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1445
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1446 #Remove associated_feature_type records
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1447 #Do not remove actual feature_type records as they may be used by something else.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1449 $sql ="DELETE aft from associated_feature_type aft, $table f where f.feature_set_id=".$fset->dbID." and f.${table}_id=aft.table_id and aft.table_name='".$fset->feature_class."_feature'".$slice_join;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1450 $self->rollback_table($sql, 'associated_feature_type', undef, $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1454 #Remove features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1455 $sql = "DELETE f from $table f where f.feature_set_id=".$fset->dbID.$slice_join;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1456 $self->rollback_table($sql, $table, "${table}_id", $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1458 if($full_delete){ #Also delete feature/data_set records
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1460 $sql = "DELETE from feature_set where feature_set_id=".$fset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1461 $self->rollback_table($sql, 'feature_set', 'feature_set_id', $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1462 $self->log("Deleted feature_set entry for:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1465 $sql = "DELETE from data_set where feature_set_id=".$fset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1466 $self->rollback_table($sql, 'data_set', 'data_set_id', $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1467 $self->log("Deleted associated data_set entry for:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1468 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1469
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1470 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1471 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1474 =head2 rollback_ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1476 Arg[1] : Bio::EnsEMBL::Funcgen::ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1477 Arg[2] : Boolean - optional flag to roll back array results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1478 Example : $self->rollback_ResultSet($rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1479 Description: Deletes all status. chip_channel and result_set entries for this ResultSet.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1480 Will also rollback_results sets if rollback_results specified. This will also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1481 update or delete associated ResultSets where appropriate.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1482 Returntype : Arrayref containing the ResultSet and associated DataSet which have not been rolled back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1483 Exceptions : Throws if ResultSet not valid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1484 Throws is result_rollback flag specified but associated product FeatureSet found.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1485 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1486 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1488 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1490 #Need to change slice to slices ref here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1491 #Need to add full rollback, which will specify to remove all sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1492 #as well as results and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1493 #These params need clarifying as their nature changes between input_set and array rsets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1494 #Don't we always want to rollback_results?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1495 #force should only really be used to rollback InputSet ResultFeature sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1496 #i.e. Read collections which are not used as direct input for the linked product FeatureSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1497 #This should fail with array data associated with a product feature set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1499 #Do we want to separate ResultFeature rollback from result rollback?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1500 #Currently the array based collection rollback is done by hand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1501 #Could be done via the ResultFeature Collector, but should probably use this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1503
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1504 #rollback_results is only used in the MAGE parser to identify sets which have an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1505 #associated product fset.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1506 #Can't really separate due to integrated functionality
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1508 sub rollback_ResultSet{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1509 my ($self, $rset, $rollback_results, $slice, $force, $full_delete) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1511 if(! (ref($rset) && $rset->can('adaptor') && defined $rset->adaptor)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1512 throw('Must provide a valid stored Bio::EnsEMBL::ResultSet');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1513 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1515 if($slice && $rset->table_name ne 'input_set'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1516 throw('Can only rollback_ResultSet by Slice if the ResultSet contains InputSets');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1517 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1519 #We're still validating against itself??
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1520 #And reciprocating part of the test :|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1521 my $sql;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1522 my $db = $rset->adaptor->db;#This needs to be tested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1523 $db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::ResultSet', $rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1524 $self->log("Rolling back ResultSet:\t".$rset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1525 my $dset_adaptor = $self->db->get_DataSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1526 my $rset_adaptor = $self->db->get_ResultSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1527 my @skipped_sets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1529 ### Check if this ResultSet is part of a DataSet with a product feature set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1531 foreach my $dset(@{$dset_adaptor->fetch_all_by_supporting_set($rset)}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1533 if (defined $dset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1534 $self->log('Found linked DataSet('.$dset->name.") for ResultSet:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1536 if(my $fset = $dset->product_FeatureSet){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1537 @skipped_sets = ($rset,$dset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1539 #What impact does this have on result_rollback?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1540 #None as we never get there
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1541 #But what if we have specified rollback results?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1542 #We should throw here as we can't perform the rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1544 if($rollback_results){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1546 if($rset->table_name ne 'input_set' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1547 (! $force)){#is an input_set/reads collection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1548 #This will always throws for non-input_set ResultSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1549
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1550 throw("Could not rollback supporting ResultSet and results for:\t".$rset->log_label.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1551 "\nEither manually resolve the supporting/feature set relationship or set the 'force' flag.\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1552 # ."Alternatively omit the rollback_results argument if you simply want to redefine the ResultSet without loading any new data");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1553 #This last bit is no longer true
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1554 #Remove rollback_results?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1555 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1556 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1557 @skipped_sets = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1558 $self->log("Forcing results rollback for InputSet based ResultSet:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1560 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1562 if(@skipped_sets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1563 $self->log('Skipping rollback. Found product FeatureSet('.$fset->name.") for supporting ResultSet:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1564 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1566 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1567 elsif((! defined $slice) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1568 $full_delete){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1569 #Found rset in dset, but not yet processed so can remove safely.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1570 $self->unlink_ResultSet_DataSet($rset, $dset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1571 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1572 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1573 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1576 #Now do similar for all associated ResultSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1577 if(! @skipped_sets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1578
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1580 #Rollback results if required
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1581 if($rollback_results){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1583 $self->log("Rolling back results for ResultSet:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1584 #Check result_set_input_ids are present in other result sets.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1585 my @assoc_rsets = @{$rset_adaptor->fetch_all_linked_by_ResultSet($rset)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1586 my $feature_supporting = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1588 foreach my $assoc_rset(@assoc_rsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1589
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1590 foreach my $dset(@{$dset_adaptor->fetch_all_by_supporting_set($assoc_rset)}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1592 #Check for other product_FeatureSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1593 if(my $fset = $dset->product_FeatureSet){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1594 $feature_supporting++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1595 $self->log('Found product FeatureSet('.$fset->name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1596 ") for associated supporting ResultSet:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1598 if($rset->table_name ne 'input_set' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1599 (! $force)){#is an input_set/reads collection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1600 $feature_supporting++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1601 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1602 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1603 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1604 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1605
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1606
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1607 if(! $feature_supporting){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1608
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1609 #RollBack result_feature table first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1610 $self->rollback_ResultFeatures($rset, $slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1612 #Now rollback other states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1613 $rset->adaptor->revoke_states($rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1614
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1616 #This also handles Echip status rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1617 if ($rset->table_name ne 'input_set'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1618 $self->log("Rolling back result table for ResultSet:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1619 $self->rollback_results($rset->result_set_input_ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1620 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1621
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1622 $self->log('Removing result_set_input entries from associated ResultSets') if @assoc_rsets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1623
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1624 if((! $slice) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1625 $full_delete){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1626
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1627 #Now remove result_set_input_ids from associated rsets.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1628 foreach my $assoc_rset(@assoc_rsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1629 $sql = 'DELETE from result_set_input where result_set_id='.$assoc_rset->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1630 ' and result_set_input_id in('.join', ', @{$assoc_rset->result_set_input_ids}.')';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1631 $db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1633 # we need to delete complete subsets from the result_set table.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1634 my $subset = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1635
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1636 foreach my $cc_id(@{$assoc_rset->result_set_input_ids}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1637
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1638 if(! grep { /$cc_id/ } @{$rset->result_set_input_ids}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1639 $subset = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1640 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1641 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1642 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1644 #$assoc_rset is complete subset of $rset so can delete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1645 #We know this does not have an assoicated product feature set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1646 #Only if it is not derived from an input_set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1647 if($subset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1648 $self->log("Deleting associated subset ResultSet:\t".$assoc_rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1649
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1650 #Delete status entries first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1651 $assoc_rset->adaptor->revoke_states($assoc_rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1652
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1653 #All cc records will have already been deleted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1654 $sql = 'DELETE from result_set where result_set_id='.$assoc_rset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1655 $db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1656 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1657 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1658 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1659
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1661 #Now warn about Echips in Experiments which may need removing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1662 if($rset->table_name ne 'input_set'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1663 my %experiment_chips;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1664
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1665 foreach my $echip(@{$rset->get_ExperimentalChips}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1666 $experiment_chips{$echip->experiment->name}{$echip->unique_id} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1667 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1669 foreach my $exp(keys %experiment_chips){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1670 $self->log("Experiment $exp has had ".scalar(values %{$experiment_chips{$exp}}).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1671 " ExperimentalChips rolled back:\t".join('; ', values %{$experiment_chips{$exp}}).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1672 ".\nTo fully remove these, use the rollback_experiment.pl (with -chip_ids) script");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1673 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1674 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1675 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1676 #Should only be one to rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1677 foreach my $iset(@{$rset->get_InputSets}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1678 $self->rollback_InputSet($iset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1679 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1680 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1681 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1682 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1683 #$self->log("Skipping result rollback, found $feature_supporting associated supporting ResultSets for:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1684 #warn("Skipping result rollback, found $feature_supporting associated supporting ResultSets for:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1685 #do we need to return this info in skipped_rsets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1686 #This is just to allow importer to know which ones
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1687 #weren't rolled back to avoid naming clashes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1688 #so no.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1689
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1690 #But the results persist on the same chip_channel_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1691 #So not returning this rset may result in loading of more data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1692 #This should fail as status entries will not have been removed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1693 #Still we should throw here as we'll most likely want to manually resolve this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1694 #Besides this would be obfuscating the function
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1695
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1696 throw("Could not rollback ResultSet and results, found $feature_supporting associated supporting ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1697 "ResultSets for:\t".$rset->log_label."\nManually resolve the supporting/feature set relationship or omit the ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1698 "rollback_results argument if you simply want to redefine the ResultSet without loading any new data");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1699 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1700 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1701 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1702 $self->log('Skipping results rollback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1703
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1704 if($rset->name =~ /_IMPORT$/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1705 throw("Rolling back an IMPORT set without rolling back the result can result in ophaning result records for a whole experiment. Specify the result_rollback flag if you want to rollback the results for:\t".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1706 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1707 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1708
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1709 #Delete chip_channel and result_set records
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1710 #This should only be done with full delete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1711 if((! $slice) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1712 $full_delete){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1713 $sql = 'DELETE from result_set_input where result_set_id='.$rset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1714 $self->rollback_table($sql, 'result_set_input', 'result_set_input_id', $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1715
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1716 $sql = 'DELETE from result_set where result_set_id='.$rset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1717 $db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1718 $self->rollback_table($sql, 'result_set', 'result_set_id', $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1719 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1720 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1721
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1722 return \@skipped_sets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1723 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1724
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1725
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1726
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1727 sub unlink_ResultSet_DataSet{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1728 my ($self, $rset, $dset, $new_name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1729
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1730 #validate set vars
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1731
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1732 my $db = $rset->adaptor->db;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1733
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1734 $self->log("Removing supporting ResultSet from DataSet:\t".$dset->name."\tResultSet:".$rset->log_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1735 my $sql = 'DELETE from supporting_set where data_set_id='.$dset->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1736 ' and type="result" and supporting_set_id='.$rset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1737
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1738 warn "Removing ".$rset->log_label." as a supporting set to DataSet:\t".$dset->name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1739 "\nThis may result in a DataSet with no supporting sets";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1740 $db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1741
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1742 if($new_name){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1743 #We risk overwriting any previously renamed result sets.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1744 #Should use datestamp?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1745 $sql = 'UPDATE result_set set name="OLD_'.$rset->name.'" where result_set_id='.$rset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1746 $self->db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1747
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1748 if($dset->product_FeatureSet){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1749 $self->log('Associated DataSet('.$dset->name.') has already been processed. It is not wise to replace a supporting set without first rolling back the FeatureSet, as there may be additional supporting data');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1750 warn 'Associated DataSet('.$dset->name.') has already been processed. It is not wise to replace a supporting set without first rolling back the FeatureSet, as there may be additional supporting data';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1751 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1752 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1753
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1754 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1755 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1756
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1757 =head2 rollback_InputSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1758
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1759 Arg[1] : Bio::EnsEMBL::Funcgen::InputSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1760 Example : $self->rollback_InputSet($eset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1761 Description: Deletes all status entries for this InputSet and it's Subsets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1762 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1763 Exceptions : Throws if any deletes fails or if db method unavailable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1764 Caller : Importers and Parsers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1765 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1766
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1767 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1768
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1769
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1770 sub rollback_InputSet{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1771 my ($self, $eset, $force_delete, $full_delete) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1772
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1773
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1774 #Need to implement force_delete!!!!!!!!!!!!!!!!!!!!!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1775 #Need to check this is not used in a DataSet/ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1777 my $adaptor = $eset->adaptor || throw('InputSet must have an adaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1778 my $db = $adaptor->db;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1779
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1780
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1781 $db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::InputSet', $eset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1782
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1783 $self->log("Rolling back InputSet:\t".$eset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1784
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1785 #SubSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1786 foreach my $esset(@{$eset->get_InputSubsets}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1787 $esset->adaptor->revoke_states($esset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1788 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1790 #InputSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1791 $eset->adaptor->revoke_states($eset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1792
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1793 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1794 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1795
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1796
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1797 =head2 rollback_results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1798
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1799 Arg[1] : Arrayref of chip_channel ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1800 Example : $self->rollback_results($rset->chip_channels_ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1801 Description: Deletes all result records for the given chip_channel ids.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1802 Also deletes all status records for associated experimental_chips or channels
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1803 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1804 Exceptions : Throws if no chip_channel ids provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1805 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1806 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1807
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1808 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1810 #changed implementation to take arrayref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1811
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1812 sub rollback_results{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1813 my ($self, $cc_ids) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1814
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1815 my @cc_ids = @{$cc_ids};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1816
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1817 #Need to test for $self->db here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1818
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1819
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1820 if(! scalar(@cc_ids) >0){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1821 throw('Must pass an array ref of result_set_input_ids to rollback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1822 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1823
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1824 #Rollback status entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1825 #Cannot use revoke_states here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1826 #We can if we retrieve the Chip or Channel first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1827 #Add to ResultSet adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1828 my $sql = 'DELETE s from status s, result_set_input rsi WHERE rsi.result_set_input_id IN ('.join(',', @cc_ids).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1829 ') AND rsi.table_id=s.table_id AND rsi.table_name=s.table_name';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1830
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1831 if(! $self->db->dbc->do($sql)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1832 throw("Status rollback failed for result_set_input_ids:\t@cc_ids\n".$self->db->dbc->db_handle->errstr());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1833 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1834
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1835
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1836 #Rollback result entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1837 $sql = 'DELETE from result where result_set_input_id in ('.join(',', @cc_ids).');';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1838 $self->rollback_table($sql, 'result', 'result_id', $self->db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1839 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1840 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1841
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1842
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1843 =head2 rollback_ResultFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1844
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1845 Arg[0] : Bio::EnsEMBL::Funcgen::ResultSet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1846 Arg[1] : Optional - Bio::EnsEMBL::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1847 Arg[2] : Optional - no_revoke Boolean. This is only used when generating new windows
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1848 from a 0 window size which has been projected from a previous assembly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1849 Example : $self->rollback_result_features($rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1850 Description: Deletes all result_feature records for the given ResultSet.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1851 Also deletes 'RESULT_FEATURE_SET' status.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1852 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1853 Exceptions : Throws if ResultSet not provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1854 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1855 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1856
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1857 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1858
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1859
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1860 sub rollback_ResultFeatures{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1861 my ($self, $rset, $slice, $no_revoke) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1862
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1863 if(! (ref($rset) && $rset->can('adaptor') && defined $rset->adaptor)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1864 throw('Must provide a valid stored Bio::EnsEMBL::ResultSet');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1865 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1866
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1867 if(! $slice && $no_revoke){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1868 throw("Cannot rollback_ResultFeatures with no_reovke unless you specify a Slice");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1869 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1870 #else warn if slice and no_revoke?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1871
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1872 my ($sql, $slice_name, $slice_constraint);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1873
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1874 if($slice){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1875
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1876 if(ref($slice) && $slice->isa('Bio::EnsEMBL::Slice')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1877 my $sr_id = $rset->adaptor->db->get_ResultFeatureAdaptor->get_seq_region_id_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1878
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1879 if($sr_id){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1880
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1881 #Need to test for full slice here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1882 my $full_slice = $slice->adaptor->fetch_by_region(undef, $slice->seq_region_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1883 $slice_name = "\t".$slice->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1884 $slice_constraint = ' and seq_region_id='.$sr_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1885
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1886 if(($slice->start != 1) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1887 ($slice->end != $full_slice->end)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1888
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1889 throw("rollback_ResultFeatures does not yet support non-full length Slices:\t".$slice_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1890
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1891 #Need to test whether we have non-0 wsize collections without the exact seq_region values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1892 #$sql='SELECT window_size from result_feature where result_feature_id='.$rset->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1893 # ' and window_size!=0 and seq_region_start!='.$slice->start.' and seq_region_end!='.$slice->end.$slice_constraint;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1894 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1895 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1896 else{#seq_region is not yet present in DB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1897 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1898 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1899 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1900 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1901 throw('slice argument must be a valid Bio::EnsEMBL::Slice');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1902 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1903 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1904
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1905 #We're still validating against itself??
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1906 #And reciprocating part of the test :|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1907 my $db = $rset->adaptor->db;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1908 $db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::ResultSet', $rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1909
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1910 #Do this conditionally on whether it is a result_feature_set?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1911 #This may break if we have removed the status but not finished the rollback so no!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1912 $self->log("Rolling back result_feature table for ResultSet:\t".$rset->name.$slice_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1913
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1914 #Rollback status entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1915 if($rset->has_status('RESULT_FEATURE_SET') && ! $no_revoke){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1916 $rset->adaptor->revoke_status('RESULT_FEATURE_SET', $rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1917 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1918
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1919 #Cannot use revoke_states here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1920 #We can if we retrieve the Chip or Channel first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1921 #Add to ResultSet adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1922 $sql = 'DELETE from result_feature where result_set_id='.$rset->dbID.$slice_constraint;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1923 $self->rollback_table($sql, 'result_feature', 'result_feature_id', $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1924
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1925 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1926 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1927
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1928
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1929
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1930 =head2 rollback_ArrayChips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1931
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1932 Arg[1] : ARRAYREF: Bio::EnsEMBL::Funcgen::ArrayChip objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1933 Example : $self->rollback_ArrayChips([$achip1, $achip2]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1934 Description: Deletes all Probes, ProbeSets, ProbeFeatures and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1935 states associated with this ArrayChip
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1936 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1937 Exceptions : Throws if ArrayChip not valid and stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1938 Throws if ArrayChips are not of same class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1939 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1940 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1941
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1942 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1943
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1944 #This should be tied to a CS id!!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1945 #And analysis dependant?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1946 #We may not want to delete alignment by different analyses?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1947 #In practise the slice methods ignore analysis_id for this table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1948 #So we currently never use this!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1949 #So IMPORTED status should be tied to CS id and Analysis id?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1950
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1951 sub rollback_ArrayChips{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1952 my ($self, $acs, $mode, $force, $keep_xrefs, $no_clean_up, $force_clean_up) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1953
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1954 #no_clean_up and force_clean_up allow analyze/optimize to be skipped until the last rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1955 #We could get around this by specifying all ArrayChips for all formats at the same time?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1956 #Need to implement in RollbackArrays
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1957
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1958 $mode ||= 'probe';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1959
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1960 if($mode && ($mode ne 'probe' &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1961 $mode ne 'probe_feature' &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1962 $mode ne 'ProbeAlign' &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1963 $mode ne 'ProbeTranscriptAlign' &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1964 $mode ne 'probe2transcript')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1965 throw("You have passed an invalid mode argument($mode), you must omit or specify either 'probe2transcript', 'probe', 'ProbeAlign, 'ProbeTranscriptAlign' or 'probe_feature' for all of the Align output");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1966 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1967
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1968 if($force && ($force ne 'force')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1969 throw("You have not specified a valid force argument($force), you must specify 'force' or omit");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1970 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1971
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1972 if($keep_xrefs && ($keep_xrefs ne 'keep_xrefs')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1973 throw("You have not specified a valid keep_xrefs argument($keep_xrefs), you must specify 'keep_xrefs' or omit");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1974 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1975
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1976
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1977 if($keep_xrefs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1978
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1979 if($mode eq 'probe' || $mode eq 'probe2transcript'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1980 throw("You cannot specify 'keep_xrefs' with mode $mode, you can only rollback features e.g. probe_feature, ProbeAlign or ProbeTranscriptAlign");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1981 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1982
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1983 if($force){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1984 throw("You cannot 'force' delete the probe2transcript xrefs and 'keep_xrefs' at the same time. Please specify just one.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1985 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1986 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1987
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1989
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1990
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1991 my ($adaptor, $db, %classes);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1992
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1993 foreach my $ac(@$acs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1994 $adaptor ||= $ac->adaptor || throw('ArrayChip must have an adaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1995 $db ||= $adaptor->db;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1996 $db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::ArrayChip', $ac);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1997
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1998 if(! $ac->get_Array->class){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1999 throw('The ArrayChip you are trying to rollback does not have a class attribute');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2000 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2001
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2002
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2003 $classes{$ac->get_Array->class} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2004
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2005 #if($class && ($class ne $ac->get_Array->class)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2006 # throw('You can only rollback_ArrayChips for ArrayChips with the same class');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2007 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2008 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2009
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2010
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2011 #This is always the case as we register the association before we set the Import status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2012 #Hence the 2nd stage of the import fails as we have an associated ExperimentalChip
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2013 #We need to make sure the ExperimentalChip and Channel have not been imported!!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2014 warn "NOTE: rollback_ArrayChips. Need to implement ExperimentlChip check, is the problem that ExperimentalChips are registered before ArrayChips imported?";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2015 #Check for dependent ExperimentalChips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2016 #if(my @echips = @{$db->get_ExperimentalChipAdaptor->fetch_all_by_ArrayChip($ac)}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2017 # my %exps;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2018 # my $txt = "Experiment\t\t\t\tExperimentalChip Unique IDs\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2019
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2020 # foreach my $ec(@echips){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2021 # $exps{$ec->get_Experiment->name} ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2022
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2023 # $exps{$ec->get_Experiment->name} .= "\t".$ec->unique_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2024 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2025
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2026 # map {$txt.= "\t".$_.":".$exps{$_}."\n"} keys %exps;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2027
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2028 # throw("Cannot rollback ArrayChip:\t".$ac->name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2029 # "\nFound Dependent Experimental Data:\n".$txt);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2030 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2031
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2032
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2033 my $ac_names = join(', ', (map { $_->name } @$acs));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2034 my $ac_ids = join(', ', (map { $_->dbID } @$acs));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2035
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2036
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2037 $self->log("Rolling back ArrayChips $mode entries:\t$ac_names");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2038 my ($row_cnt, $probe_join, $sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2039 #$ac->adaptor->revoke_states($ac);#This need to be more specific to the type of rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2040 my $species = $db->species;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2041
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2042 if(!$species){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2043 throw('Cannot rollback probe2transcript level xrefs without specifying a species for the DBAdaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2044 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2045 #Will from registry? this return Homo sapiens?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2046 #Or homo_sapiens
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2047 ($species = lc($species)) =~ s/ /_/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2048
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2049 my $transc_edb_name = "${species}_core_Transcript";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2050 my $genome_edb_name = "${species}_core_Genome";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2051
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2052 #Maybe we want to rollback ProbeAlign and ProbeTranscriptAlign output separately so we
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2053 #can re-run just one part of the alignment step.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2054
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2055
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2056 #We want this Probe(Transcript)Align rollback available in the environment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2057 #So we can do it natively and before we get to the RunnableDB stage,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2058 #where we would be trying multiple rollbacks in parallel
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2059 #Wrapper script?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2060 #Or do we keep it simple here and maintain probe_feature wide rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2061 #And just the ProbeAlign/ProbeTranscriptAlign roll back in the environment?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2062
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2063
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2064 #We can restrict the probe deletes using the ac_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2065 #We should test for other ac_ids using the same probe_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2066 #Then fail unless we have specified force delete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2067
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2068 #These should be deleted for all other modes but only if force is set?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2069 #This may delete xrefs for other ArrayChips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2070
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2071 #The issues is if we need to specify force for one delete but don't want to delete something else?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2072 #force should only be used to delete upto and including the mode specified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2073 #no mode equates to probe mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2074 #if no force then we fail if previous levels/modes have xrefs etc...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2075
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2076
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2077 #Let's grab the edb ids first and use them directly, this will avoid table locks on edb
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2078 #and should also speed query up?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2079
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2080
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2081 if($mode eq 'probe2transcript' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2082 $force){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2083
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2084 #Delete ProbeFeature UnmappedObjects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2085 $self->log("Deleting probe2transcript ProbeFeature UnmappedObjects");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2086 $sql = "DELETE uo FROM analysis a, unmapped_object uo, probe p, probe_feature pf, external_db e WHERE a.logic_name ='probe2transcript' AND a.analysis_id=uo.analysis_id AND p.probe_id=pf.probe_id and pf.probe_feature_id=uo.ensembl_id and uo.ensembl_object_type='ProbeFeature' and uo.external_db_id=e.external_db_id AND e.db_name ='${transc_edb_name}' AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2087 $self->rollback_table($sql, 'unmapped_object', 'unmapped_object_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2088
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2089
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2090 #Delete ProbeFeature Xrefs/DBEntries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2091 $self->log("Deleting probe2transcript ProbeFeature Xrefs");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2092 $sql = "DELETE ox FROM xref x, object_xref ox, probe p, probe_feature pf, external_db e WHERE x.external_db_id=e.external_db_id AND e.db_name ='${transc_edb_name}' AND x.xref_id=ox.xref_id AND ox.ensembl_object_type='ProbeFeature' AND ox.ensembl_id=pf.probe_feature_id AND pf.probe_id=p.probe_id AND ox.linkage_annotation!='ProbeTranscriptAlign' AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2093 $self->rollback_table($sql, 'object_xref', 'object_xref_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2094
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2095
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2096 #Probe/Set specific entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2097 for my $xref_object('Probe', 'ProbeSet'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2098 $probe_join = ($xref_object eq 'ProbeSet') ? 'p.probe_set_id' : 'p.probe_id';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2099
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2100 #Delete Probe/Set UnmappedObjects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2102 $self->log("Deleting probe2transcript $xref_object UnmappedObjects");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2104 $sql = "DELETE uo FROM analysis a, unmapped_object uo, probe p, external_db e WHERE a.logic_name='probe2transcript' AND a.analysis_id=uo.analysis_id AND uo.ensembl_object_type='${xref_object}' AND $probe_join=uo.ensembl_id AND uo.external_db_id=e.external_db_id AND e.db_name='${transc_edb_name}' AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2105 #.' and edb.db_release="'.$schema_build.'"';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2106 $self->rollback_table($sql, 'unmapped_object', 'unmapped_object_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2108 #Delete Probe/Set Xrefs/DBEntries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2109 $sql = "DELETE ox FROM xref x, object_xref ox, external_db e, probe p WHERE x.xref_id=ox.xref_id AND e.external_db_id=x.external_db_id AND e.db_name ='${transc_edb_name}' AND ox.ensembl_object_type='${xref_object}' AND ox.ensembl_id=${probe_join} AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2110 $self->log("Deleting probe2transcript $xref_object xref records");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2111 $self->rollback_table($sql, 'object_xref', 'object_xref_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2112 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2113 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2114 elsif(! $keep_xrefs){#Need to check for existing xrefs if not force
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2115 #we don't know whether this is on probe or probeset level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2116 #This is a little hacky as there's not way we can guarantee this xref will be from probe2transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2117 #until we get the analysis_id moved from identity_xref to xref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2118 #We are also using the Probe/Set Xrefs as a proxy for all other Xrefs and UnmappedObjects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2119 #Do we need to set a status here? Would have problem rolling back the states of associated ArrayChips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2121 for my $xref_object('Probe', 'ProbeSet'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2123 $probe_join = ($xref_object eq 'ProbeSet') ? 'p.probe_set_id' : 'p.probe_id';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2125 $row_cnt = $db->dbc->db_handle->selectrow_array("SELECT COUNT(*) FROM xref x, object_xref ox, external_db e, probe p WHERE x.xref_id=ox.xref_id AND e.external_db_id=x.external_db_id AND e.db_name ='${transc_edb_name}' and ox.ensembl_object_type='${xref_object}' and ox.ensembl_id=${probe_join} AND p.array_chip_id IN($ac_ids)");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2127 if($row_cnt){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2128 throw("Cannot rollback ArrayChips($ac_names), found $row_cnt $xref_object Xrefs. Pass 'force' argument or 'probe2transcript' mode to delete");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2129 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2130 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2131 #$self->log("Found $row_cnt $xref_object Xrefs");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2133 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2134 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2137 #ProbeFeatures inc ProbeTranscriptAlign xrefs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2139 if($mode ne 'probe2transcript'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2141 if(($mode eq 'probe' && $force) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2142 $mode eq 'probe_feature' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2143 $mode eq 'ProbeAlign' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2144 $mode eq 'ProbeTranscriptAlign'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2147 #Should really revoke some state here but we only have IMPORTED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2149 #ProbeTranscriptAlign Xref/DBEntries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2151 #my (@anal_ids) = @{$db->get_AnalysisAdaptor->generic_fetch("a.module='ProbeAlign'")};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2152 #Grrrr! AnalysisAdaptor is not a standard BaseAdaptor implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2153 #my @anal_ids = @{$db->dbc->db_handle->selectall_arrayref('select analysis_id from analysis where module like "%ProbeAlign"')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2154 #@anal_ids = map {$_= "@$_"} @anal_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2156 if($mode ne 'ProbeAlign'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2157 my $lnames = join(', ', (map { "'${_}_ProbeTranscriptAlign'" } keys(%classes)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2159 $sql = "DELETE ox from object_xref ox, xref x, probe p, probe_feature pf, external_db e WHERE ox.ensembl_object_type='ProbeFeature' AND ox.linkage_annotation='ProbeTranscriptAlign' AND ox.xref_id=x.xref_id AND e.external_db_id=x.external_db_id and e.db_name='${transc_edb_name}' AND ox.ensembl_id=pf.probe_feature_id AND pf.probe_id=p.probe_id AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2160 $self->log("Deleting ProbeFeature Xref/DBEntry records for:\t$lnames");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2161 $self->rollback_table($sql, 'object_xref', 'object_xref_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2164 #Can't include uo.type='ProbeTranscriptAlign' in these deletes yet as uo.type is enum'd to xref or probe2transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2165 #will have to join to analysis and do a like "%ProbeTranscriptAlign" on the the logic name?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2166 #or/and ur.summary_description='Promiscuous probe'?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2168 $sql = "DELETE uo from unmapped_object uo, probe p, external_db e, analysis a WHERE uo.ensembl_object_type='Probe' AND uo.analysis_id=a.analysis_id AND a.logic_name in (${lnames}) AND e.external_db_id=uo.external_db_id and e.db_name='${transc_edb_name}' AND uo.ensembl_id=p.probe_id AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2170 $self->log("Deleting UnmappedObjects for:\t${lnames}");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2171 $self->rollback_table($sql, 'unmapped_object', 'unmapped_object_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2174 #Now the actual ProbeFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2175 $sql = "DELETE pf from probe_feature pf, probe p, analysis a WHERE a.logic_name in(${lnames}) AND a.analysis_id=pf.analysis_id AND pf.probe_id=p.probe_id AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2176 $self->log("Deleting ProbeFeatures for:\t${lnames}");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2177 $self->rollback_table($sql, 'probe_feature', 'probe_feature_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2180 if($mode ne 'ProbeTranscriptAlign'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2181 my $lnames = join(', ', (map { "'${_}_ProbeAlign'" } keys(%classes)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2183 $sql = "DELETE uo from unmapped_object uo, probe p, external_db e, analysis a WHERE uo.ensembl_object_type='Probe' AND uo.analysis_id=a.analysis_id AND a.logic_name=(${lnames}) AND e.external_db_id=uo.external_db_id and e.db_name='${genome_edb_name}' AND uo.ensembl_id=p.probe_id AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2184 $self->log("Deleting UnmappedObjects for:\t${lnames}");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2185 $self->rollback_table($sql, 'unmapped_object', 'unmapped_object_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2188 $sql = "DELETE pf from probe_feature pf, probe p, analysis a WHERE a.logic_name in(${lnames}) AND a.analysis_id=pf.analysis_id AND pf.probe_id=p.probe_id AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2189 $self->log("Deleting ProbeFeatures for:\t${lnames}");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2190 $self->rollback_table($sql, 'probe_feature', 'probe_feature_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2191 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2192 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2193 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2194 #Need to count to see if we can carry on with a unforced probe rollback?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2195 #Do we need this level of control here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2196 #Can't we assume that if you want probe you also want probe_feature?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2197 #Leave for safety, at least until we get the dependant ExperimetnalChip test sorted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2198 #What about if we only want to delete one array from an associated set?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2199 #This would delete all the features from the rest?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2201 $sql = "select count(*) from object_xref ox, xref x, probe p, external_db e WHERE ox.ensembl_object_type='ProbeFeature' AND ox.linkage_annotation='ProbeTranscriptAlign' AND ox.xref_id=x.xref_id AND e.external_db_id=x.external_db_id and e.db_name='${transc_edb_name}' AND ox.ensembl_id=p.probe_id AND p.array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2202 $row_cnt = $db->dbc->db_handle->selectrow_array($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2204 if($row_cnt){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2205 throw("Cannot rollback ArrayChips($ac_names), found $row_cnt ProbeFeatures. Pass 'force' argument or 'probe_feature' mode to delete");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2206 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2207 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2208 $self->log("Found $row_cnt ProbeFeatures");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2212 if($mode eq 'probe'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2213 #Don't need to rollback on a CS as we have no dependant EChips?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2214 #Is this true? Should we enforce a 3rd CoordSystem argument, 'all' string we delete all?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2216 foreach my $ac(@$acs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2217 $ac->adaptor->revoke_states($ac);#Do we need to change this to revoke specific states?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2218 #Current states are only IMPORTED, so not just yet, but we could change this for safety?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2219 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2221 #ProbeSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2222 $sql = "DELETE ps from probe p, probe_set ps where p.array_chip_id IN($ac_ids) and p.probe_set_id=ps.probe_set_id";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2223 $self->rollback_table($sql, 'probe_set', 'probe_set_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2225 #Probes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2226 $sql = "DELETE from probe where array_chip_id IN($ac_ids)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2227 $self->rollback_table($sql, 'probe', 'probe_id', $db, $no_clean_up);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2228 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2229 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2231 $self->log("Finished $mode roll back for ArrayChip:\t$ac_names");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2232 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2236 #This will just fail silently if the reset value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2237 #Is less than the true autoinc value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2238 #i.e. if there are parallel inserts going on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2239 #So we can never assume that the $new_auto_inc will be used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2242 sub rollback_table{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2243 my ($self, $sql, $table, $id_field, $db, $no_clean_up, $force_clean_up) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2245 my $row_cnt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2246 eval { $row_cnt = $db->dbc->do($sql) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2248 if($@){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2249 throw("Failed to rollback table $table using sql:\t$sql\n$@");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2252 $row_cnt = 0 if $row_cnt eq '0E0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2253 $self->log("Deleted $row_cnt $table records");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2255 if($force_clean_up ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2256 ($row_cnt && ! $no_clean_up)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2257 $self->refresh_table($table, $id_field, $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2260 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2261 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2263 #Now separated so that we can do this once at the end of a rollback of many Sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2265 sub refresh_table{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2266 my ($self, $table, $id_field, $db) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2268 #This only works if the new calue is available
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2269 #i.e. do not need lock for this to be safe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2270 $self->reset_table_autoinc($table, $id_field, $db) if $id_field;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2272 $self->log("Optimizing and Analyzing $table");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2274 $db->dbc->do("optimize table $table");#defrag data, sorts indices, updates table stats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2275 $db->dbc->do("analyze table $table");#analyses key distribution
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2277 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2278 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2282 sub reset_table_autoinc{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2283 #Is this called elsewhere or can we merge with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2284 my($self, $table_name, $autoinc_field, $db) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2286 if(! ($table_name && $autoinc_field && $db)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2287 throw('You must pass a table_name and an autoinc_field to reset the autoinc value');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2288 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2290 if(! (ref($db) && $db->isa('Bio::EnsEMBL::DBSQL::DBAdaptor'))){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2291 throw('Must pass a valid Bio::EnsEMBL::DBSQL::DBAdaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2294 #my $sql = "show table status where name='$table_name'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2295 #my ($autoinc) = ${$db->dbc->db_handle->selectrow_array($sql)}[11];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2296 #11 is the field in the show table status table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2297 #We cannot select just the Auto_increment, so this will fail if the table format changes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2299 #Why do we need autoinc here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2301 my $sql = "select $autoinc_field from $table_name order by $autoinc_field desc limit 1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2302 my ($current_auto_inc) = $db->dbc->db_handle->selectrow_array($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2303 my $new_autoinc = ($current_auto_inc) ? ($current_auto_inc + 1) : 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2304 $sql = "ALTER TABLE $table_name AUTO_INCREMENT=$new_autoinc";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2305 $db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2306 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2307 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2312 =head2 get_core_display_name_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2314 Args [1] : Bio::EnsEMBL::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2315 Args [2] : stable ID from core DB.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2316 Args [3] : stable feature type e.g. gene, transcript, translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2317 Example : $self->validate_and_store_feature_types;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2318 Description: Builds a cache of stable ID to display names.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2319 Returntype : string - display name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2320 Exceptions : Throws is type is not valid.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2321 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2322 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2324 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2326 # --------------------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2327 # Build a cache of ensembl stable ID -> display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2328 # Return hashref keyed on {$type}{$stable_id}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2329 #Need to update cache if we're doing more than one 'type' at a time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2330 # as it will never get loaded for the new type!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2332 sub get_core_display_name_by_stable_id{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2333 my ($self, $cdb, $stable_id, $type) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2335 $type = lc($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2337 if($type !~ /(gene|transcript|translation)/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2338 throw("Cannot get display_name for stable_id $stable_id with type $type");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2339 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2341 if(! exists $self->{'display_name_cache'}->{$stable_id}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2342 ($self->{'display_name_cache'}->{$stable_id}) = $cdb->dbc->db_handle->selectrow_array("SELECT x.display_label FROM $type t, xref x where t.display_xref_id=x.xref_id and t.stable_id='${stable_id}'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2345 return $self->{'display_name_cache'}->{$stable_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2346 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2349 =head2 get_core_stable_id_by_display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2351 Args [1] : Bio::EnsEMBL::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2352 Args [2] : display name (e.g. from core DB or GNC name)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2353 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2354 Description: Builds a cache of stable ID to display names.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2355 Returntype : string - gene stable ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2356 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2357 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2358 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2360 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2362 # --------------------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2363 # Build a cache of ensembl stable ID -> display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2364 # Return hashref keyed on {$type}{$stable_id}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2365 #Need to update cache if we're doing more than one 'type' at a time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2366 # as it will never get loaded for the new type!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2368 sub get_core_stable_id_by_display_name{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2369 my ($self, $cdb, $display_name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2371 #if($type !~ /(gene|transcript|translation)/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2372 # throw("Cannot get display_name for stable_id $stable_id with type $type");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2373 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2375 if(! exists $self->{'stable_id_cache'}->{$display_name}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2376 ($self->{'stable_id_cache'}->{$display_name}) = $cdb->dbc->db_handle->selectrow_array("SELECT g.stable_id FROM gene g, xref x where g.display_xref_id=x.xref_id and and x.display_label='${display_name}'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2377 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2379 return $self->{'stable_id_cache'}->{$display_name};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2380 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2387 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2388