annotate variant_effect_predictor/Bio/EnsEMBL/Utils/AssemblyProjector.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-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::Utils::AssemblyProjector -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 utility class to post-process projections from one assembly to another
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 # connect to an old database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $dba_old = new Bio::EnsEMBL::DBSQL::DBAdaptor(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 -host => 'ensembldb.ensembl.org',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 -port => 3306,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 -user => ensro,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 -dbname => 'mus_musculus_core_46_36g',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 -group => 'core_old',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # connect to the new database containing the mapping between old and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 # new assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 my $dba_new = new Bio::EnsEMBL::DBSQL::DBAdaptor(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 -host => 'ensembldb.ensembl.org',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 -port => 3306,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 -user => ensro,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 -dbname => 'mus_musculus_core_47_37',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 -group => 'core_new',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 my $assembly_projector = Bio::EnsEMBL::Utils::AssemblyProjector->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 -OLD_ASSEMBLY => 'NCBIM36',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 -NEW_ASSEMBLY => 'NCBIM37',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 -ADAPTOR => $dba_new,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 -EXTERNAL_SOURCE => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 -MERGE_FRAGMENTS => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 -CHECK_LENGTH => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 # fetch a slice on the old assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 my $slice_adaptor = $dba_old->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 my $slice =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 $slice_adaptor->fetch_by_region( 'chromosome', 1, undef, undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 undef, 'NCBIM36' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 my $new_slice = $assembly_projector->old_to_new($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 print $new_slice->name, " (", $assembly_projector->last_status, ")\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 This class implements some utility functions for converting coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 between assemblies. A mapping between the two assemblies has to present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 the database for this to work, see the 'Related Modules' section below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 on how to generate the mapping.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 In addition to the "raw" projecting of features and slices, the methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 in this module also apply some sensible rules to the results of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 projection (like discarding unwanted results or merging fragmented
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 projections). These are the rules (depending on configuration):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Discard the projected feature/slice if:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 1. it doesn't project at all (no segments returned)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 2. [unless MERGE_FRAGMENTS is set] the projection is fragmented (more
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 than one segment)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 3. [if CHECK_LENGTH is set] the projection doesn't have the same
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 length as the original feature/slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 4. all segments are on same chromosome and strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 If a projection fails any of these rules, undef is returned instead of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 a projected feature/slice. You can use the last_status() method to find
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 out about the results of the rules tests.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 Also note that when projecting features, only a shallow projection is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 performed, i.e. other features attached to your features (e.g. the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 transcripts of a gene) are not projected automatically, so it will be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 the responsability of the user code project all levels of features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 involved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 project
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 old_to_new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 new_to_old
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 external_source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 old_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 new_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 merge_fragments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 check_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 =head1 RELATED MODULES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 The process of creating a whole genome alignment between two assemblies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 (which is the basis for the use of the methods in this class) is done by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 a series of scripts. Please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 ensembl/misc-scripts/assembly/README
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 for a high-level description of this process, and POD in the individual
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 scripts for the details.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 package Bio::EnsEMBL::Utils::AssemblyProjector;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 no warnings qw(uninitialized);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 use Bio::EnsEMBL::Slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 use Scalar::Util qw(weaken);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Arg [ADAPTOR] : Bio::EnsEMBL::DBSQL::DBAdaptor $adaptor - a db adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 for a database containing the assembly mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Arg [EXTERNAL_SOURCE] : (optional) Boolean $external_source - indicates if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 source is from a different database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Arg [OLD_ASSEMBLY] : name of the old assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Arg [OLD_ASSEMBLY] : name of the new assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Arg [OBJECT_TYPE] : (optional) object type ('slice' or 'feature')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Arg [MERGE_FRAGMENTS] : (optional) Boolean - determines if segments are merged
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 to return a single object spanning all segments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 (default: true)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 Arg [CHECK_LENGTH] : (optional) Boolean - determines if projected objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 have to have same length as original (default: false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Example : my $ap = Bio::EnsEMBL::Utils::AssemblyProjector->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 -DBADAPTOR => $dba,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 -OLD_ASSEMBLY => NCBIM36,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 -NEW_ASSEMBLY => NCBIM37,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Description : Constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Return type : a Bio::EnsEMBL::Utils::AssemblyProjector object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Exceptions : thrown on missing arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 thrown on invalid OBJECT_TYPE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my ($adaptor, $external_source, $old_assembly, $new_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 $merge_fragments, $check_length) = rearrange([qw(ADAPTOR EXTERNAL_SOURCE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 OLD_ASSEMBLY NEW_ASSEMBLY MERGE_FRAGMENTS CHECK_LENGTH)], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 unless ($adaptor and ref($adaptor) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $adaptor->isa('Bio::EnsEMBL::DBSQL::DBAdaptor')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 throw("You must provide a DBAdaptor to a database containing the assembly mapping.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 unless ($old_assembly and $new_assembly) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 throw("You must provide an old and new assembly name.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 my $self = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 bless ($self, $class);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 # initialise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $self->adaptor($adaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $self->{'old_assembly'} = $old_assembly;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $self->{'new_assembly'} = $new_assembly;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 # by default, merge fragments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $self->{'merge_fragments'} = $merge_fragments || 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 # by default, do not check length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $self->{'check_length'} = $check_length || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 # by default, features and slices are expected in same database as the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 # assembly mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $self->{'external_source'} = $external_source || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 =head2 project
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Arg[1] : Bio::EnsEMBL::Slice or Bio::EnsEMBL::Feature $object -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 the object to project
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Arg[2] : String $to_assembly - assembly to project to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Example : my $new_slice = $assembly_projector->project($old_slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 'NCBIM37');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Description : Projects a Slice or Feature to the specified assembly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Several tests are performed on the result to discard unwanted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 results. All projection segments have to be on the same
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 seq_region and strand. If -MERGE_FRAGMENTS is set, gaps will be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 bridged by creating a single object from first_segment_start to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 last_segment_end. If -CHECK_LENGTH is set, the projected object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 will have to have the same length as the original. You can use
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 the last_status() method to find out what the result of some of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 these rule tests were. Please see the comments in the code for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 more details about these rules.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 The return value of this method will always be a single object,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 or undef if the projection fails any of the rules.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 Note that when projecting features, only a "shallow" projection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 is performed, i.e. attached features aren't projected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 automatically! (e.g. if you project a gene, its transcripts will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 have to be projected manually before storing the new gene)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 Return type : same a Arg 1, or undef if projection fails any of the rules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Exceptions : thrown on invalid arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Caller : general, $self->old_to_new, $self->new_to_old
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 sub project {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 my ($self, $object, $to_assembly) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 throw("Need an assembly version to project to.") unless ($to_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 throw("Need an object to project.") unless ($object and ref($object));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my ($slice, $object_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 if ($object->isa('Bio::EnsEMBL::Feature')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $object_type = 'feature';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 } elsif ($object->isa('Bio::EnsEMBL::Slice')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $object_type = 'slice';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 throw("Need a Feature or Slice to project.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 # if the feature or slice is sourced from another db, we have to "transfer"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 # it to the db that contains the assembly mapping. the transfer is very
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 # shallow but that should do for our purposes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 if ($self->external_source) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 my $slice_adaptor = $self->adaptor->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 if ($object_type eq 'feature') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 # createa a new slice from the target db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 my $f_slice = $object->slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 my $target_slice = $slice_adaptor->fetch_by_name($f_slice->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 # now change the feature so that it appears it's from the target db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $object->slice($target_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 # createa a new slice from the target db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $object = $slice_adaptor->fetch_by_name($object->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 if ($object_type eq 'feature') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $slice = $object->feature_Slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $slice = $object;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 # warn if trying to project to assembly version the object already is on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 if ($slice->coord_system->version eq $to_assembly) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 warning("Assembly version to project to ($to_assembly) is the same as your object's assembly (".$slice->coord_system->version.").");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 # now project the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 my $cs_name = $slice->coord_system_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my @segments = @{ $slice->project($cs_name, $to_assembly) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 # we need to reverse the projection segment list if the orignial
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 if ($slice->strand == -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 @segments = reverse(@segments);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 # apply rules to projection results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 # discard the projected feature/slice if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 # 1. it doesn't project at all (no segments returned)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 # 2. [unless MERGE_FRAGMENTS is set] the projection is fragmented (more
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 # than one segment)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 # 3. [if CHECK_LENGTH is set] the projection doesn't have the same length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 # as the original feature/slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 # 4. all segments are on same chromosome and strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 # keep track of the status of applied rules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my @status = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 # test (1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 return undef unless (@segments);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 #warn "DEBUG: passed test 1\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 # test (2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 return undef if (!($self->merge_fragments) and scalar(@segments) > 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 push @status, 'fragmented' if (scalar(@segments) > 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 #warn "DEBUG: passed test 2\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 # test (3)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 my $first_slice = $segments[0]->to_Slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 my $last_slice = $segments[-1]->to_Slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my $length_mismatch = (($last_slice->end - $first_slice->start + 1) !=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $object->length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 return undef if ($self->check_length and $length_mismatch);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 push @status, 'length_mismatch' if ($length_mismatch);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 #warn "DEBUG: passed test 3\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 # test (4)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 my %sr_names = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 my %strands = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 foreach my $seg (@segments) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 my $sl = $seg->to_Slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 $sr_names{$sl->seq_region_name}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 $strands{$sl->strand}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 return undef if (scalar(keys %sr_names) > 1 or scalar(keys %strands) > 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 #warn "DEBUG: passed test 4\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 # remember rule status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $self->last_status(join('|', @status));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 # everything looks fine, so adjust the coords of your feature/slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 my $new_slice = $first_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 $new_slice->{'end'} = $last_slice->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 if ($object_type eq 'slice') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 return $new_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $object->start($new_slice->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $object->end($new_slice->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $object->strand($new_slice->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 $object->slice($new_slice->seq_region_Slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 # undef dbID and adaptor so you can store the feature in the target db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 $object->dbID(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 $object->adaptor(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 return $object;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 =head2 old_to_new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Arg[1] : Bio::EnsEMBL::Slice or Bio::EnsEMBL::Feature $object -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 the object to project
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Example : my $new_slice = $assembly_projector->old_to_new($old_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Description : Projects a Slice or Feature from old to new assembly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 This method is just a convenience wrapper for $self->project.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Return type : same a Arg 1, or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 sub old_to_new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 my ($self, $object) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 return $self->project($object, $self->new_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 =head2 new_to_old
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Arg[1] : Bio::EnsEMBL::Slice or Bio::EnsEMBL::Feature $object -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 the object to project
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Example : my $old_slice = $assembly_projector->new_to_old($new_slice, 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Description : Projects a Slice or Feature from new to old assembly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 This method is just a convenience wrapper for $self->project.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Return type : same a Arg 1, or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 sub new_to_old {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 my ($self, $object) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 return $self->project($object, $self->old_assembly);
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 # accessors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 sub adaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 weaken($self->{'adaptor'} = shift) if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 return $self->{'adaptor'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 sub external_source {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $self->{'external_source'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 return $self->{'external_source'};
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 old_assembly {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $self->{'old_assembly'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 return $self->{'old_assembly'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 sub new_assembly {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 $self->{'new_assembly'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 return $self->{'new_assembly'};
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 sub merge_fragments {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $self->{'merge_fragments'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 return $self->{'merge_fragments'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 sub check_length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 $self->{'check_length'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 return $self->{'check_length'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 sub last_status {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 $self->{'last_status'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 return $self->{'last_status'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459