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

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 # EnsEMBL module for Bio::EnsEMBL::Variation::Utils::Sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 Bio::EnsEMBL::Variation::Utils::Sequence - Utility functions for sequences
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 use Bio::EnsEMBL::Variation::Utils::Sequence qw(ambiguity_code variation_class);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 my $alleles = 'A|C';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 print "my alleles = $alleles\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 my $ambig_code = ambiguity_code($alleles);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 print "my ambiguity code is $ambig_code\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 print "my SNP class is = variation_class($alleles)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 package Bio::EnsEMBL::Variation::Utils::Sequence;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use Bio::EnsEMBL::Utils::Sequence qw(reverse_comp);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use Bio::EnsEMBL::Variation::Utils::Constants qw(:SO_class_terms);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use Bio::EnsEMBL::Utils::Scalar qw(wrap_array);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 use Exporter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 use vars qw(@ISA @EXPORT_OK);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 @ISA = qw(Exporter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 @EXPORT_OK = qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 &ambiguity_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 &variation_class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 &unambiguity_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 &sequence_with_ambiguity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 &hgvs_variant_notation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 &format_hgvs_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 &SO_variation_class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 &align_seqs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 &strain_ambiguity_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 &get_all_validation_states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 &get_validation_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 &add_validation_state
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 # List of validation states. Order must match that of set in database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 our @VALIDATION_STATES = qw(cluster freq submitter doublehit hapmap 1000Genome failed precious);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 =head2 ambiguity_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Arg[1] : string $alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Example : use Bio::EnsEMBL::Variation::Utils::Sequence qw(ambiguity_code)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my $alleles = 'A|C';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 my $ambig_code = ambiguity_code($alleles);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 print "the ambiguity code for $alleles is: ",$ambig_code;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Description : returns the ambiguity code for a SNP allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 ReturnType : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 The ambiguity code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 Caller : Variation, VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 sub ambiguity_code {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 my $alleles = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 my %duplicates; #hash containing all alleles to remove duplicates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 foreach my $a(split /[\|\/\\]/, $alleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 # convert Ns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 my @a = ($a eq 'N' ? qw(A C G T) : ($a));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 map {$duplicates{$_}++} @a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 $alleles = uc( join '', sort keys %duplicates );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 #my %ambig = qw(AC M ACG V ACGT N ACT H AG R AGT D AT W CG S CGT B CT Y
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 #GT K C C A A T T G G - - -A -A -C -C -G -G -T -T A- A- C- C- G- G- T- T-); #for now just make e.g. 'A-' -> 'A-'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 my %ambig = qw(AC M ACG V ACGT N ACT H AG R AGT D AT W CG S CGT B CT Y GT K C C A A T T G G - -);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 return $ambig{$alleles};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 =head2 strain_ambiguity_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 Arg[1] : string $alleles (separated by "/", "\" or "|")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 Example : use Bio::EnsEMBL::Variation::Utils::Sequence qw(strain_ambiguity_code)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my $alleles = 'A|C';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 my $ambig_code = strain_ambiguity_code($alleles);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 print "the ambiguity code for $alleles is: ",$ambig_code;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Description : returns the ambiguity code for a strain genotype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 ReturnType : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Caller : AlleleFeatureAdaptor
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 sub strain_ambiguity_code {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 my $alleles = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 # return normal ambiguity code for a SNP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 return ambiguity_code($alleles) if($alleles =~ /^[ACGT][\|\/\\][ACGT]$/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 # get alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 my ($a1, $a2) = split /[\|\/\\]/, $alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 # pad
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 if(length($a1) > length($a2)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $a2 .= '-' x (length($a1) - length($a2));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $a1 .= '-' x (length($a2) - length($a1));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 # build ambiguity code base by base
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my $ambig = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 for my $i(0..(length($a1) - 1)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my $b1 = substr($a1, $i, 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $b2 = substr($a2, $i, 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 # -/- = -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 if($b1 eq '-' && $b2 eq '-') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 $ambig .= '-';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 # G/- = g
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 elsif($b1 eq '-') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $ambig .= lc($b2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 # -/G = g
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 elsif($b2 eq '-') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 $ambig .= lc($b1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 # A/G = R
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 $ambig .= ambiguity_code($b1.'|'.$b2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 return $ambig;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 =head2 unambiguity_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Arg[1] : string $alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Example : use Bio::EnsEMBL::Variation::Utils::Sequence qw(unambiguity_code)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 my $ambiguity_code = 'M';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 my $alleles = unambiguity_code($ambiguity_code);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 print "the alleles for ambiguity code $ambiguity_code is: ",$alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 Description : returns the alleles for an ambiguity code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 ReturnType : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 The Alleles, alphabetically sorted and in capital
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Caller : Variation, VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 sub unambiguity_code {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my $ambiguity_code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 #my %unambig = qw(M AC V ACG N ACGT H ACT R AG D AGT W AT S CG B CGT Y CT K
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 #GT C CC A AA T TT G GG - -- -A -A -C -C -G -G -T -T A- A- C- C- G- G- T- T-); #for now just make e.g. 'A-' -> 'A-'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my %unambig = qw(M AC V ACG N ACGT H ACT R AG D AGT W AT S CG B CGT Y CT K GT C CC A AA T TT G GG - --);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 return $unambig{$ambiguity_code};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =head2 variation_class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Arg[1] : string $alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 Arg[2] : boolean $is_somatic - flag that this variation is somatic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Example : use Bio::EnsEMBL::Variation::Utils::Sequence qw (variation_class)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $alleles = 'A|C';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 my $variation_class = variation_class($alleles);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 print "the variation class for the alleles $alleles is: ",$variation_class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Description : return the class of the alleles according to dbSNP classification(SNP,indel,mixed,substitution...)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 ReturnType : String. The class of the alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Caller : Variation, VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 sub variation_class{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my ($alleles, $is_somatic) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 if ($alleles =~ /^[ACGTN]([\|\\\/][ACGTN])+$/i) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $class = 'snp';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 elsif (($alleles eq 'cnv') || ($alleles eq 'CNV')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $class = 'cnv';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 elsif ($alleles =~ /CNV\_PROBE/i) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 $class = 'cnv probe';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 elsif ($alleles =~ /HGMD\_MUTATION/i) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $class = 'hgmd_mutation';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 my @alleles = split /[\|\/\\]/, $alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 if (@alleles == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 #(HETEROZYGOUS) 1 allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $class = 'het';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 elsif(@alleles == 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 if ((($alleles[0] =~ tr/ACTGN//)== length($alleles[0]) && ($alleles[1] =~ tr/-//) == 1) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 (($alleles[0] =~ tr/-//) == 1 && ($alleles[1] =~ tr/ACTGN//) == length($alleles[1])) ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 #A/- 2 alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $class = 'in-del'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 elsif (($alleles[0] =~ /LARGE|INS|DEL/) || ($alleles[1] =~ /LARGE|INS|DEL/)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 #(LARGEDELETION) 2 alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 $class = 'named'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 elsif (($alleles[0] =~ tr/ACTG//) > 1 || ($alleles[1] =~ tr/ACTG//) > 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 #AA/GC 2 alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 $class = 'substitution'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 warning("not possible to determine class for @alleles");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $class = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 elsif (@alleles > 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 if ($alleles[0] =~ /\d+/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 #(CA)14/15/16/17 > 2 alleles, all of them contain the number of repetitions of the allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 $class = 'microsat'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 elsif ((grep {/-/} @alleles) > 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 #-/A/T/TTA > 2 alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $class = 'mixed'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 # warning("not possible to determine class of alleles " . @alleles);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 $class = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 warning("no alleles available ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 $class = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 if ($is_somatic) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 if ($class eq '') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 # for undetermined classes just call it somatic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $class = 'somatic';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 # somatic mutations aren't polymorphisms, so change SNPs to SNVs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $class = 'snv' if $class eq 'snp';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 # and prefix the class with 'somatic'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $class = 'somatic_'.$class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 return $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 =head2 SO_variation_class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 Arg[1] : string $alleles - a slash ()'/') separated list of alleles, the first allele is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 assumed to be the reference unless the $ref_correct argument is false
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Arg[2] : boolean $ref_correct - flags that the first allele is not known to be the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 reference sequence (so we can't call insertions or deletions and have to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 resort to 'indel')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Example : use Bio::EnsEMBL::Variation::Utils::Sequence qw (SO_variation_class)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my $alleles = 'A/C';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 my $SO_term = SO_variation_class($alleles);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 print "the SO term for the alleles $alleles is: ",$SO_term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 Description : return the SO term for the class of the alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 ReturnType : String. The SO term for the class of the alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 Caller : Variation, VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 sub SO_variation_class {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 my $alleles = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 my $ref_correct = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $ref_correct = 1 unless defined $ref_correct;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 my $allele_class = '[A-Z]';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 # default to sequence_alteration
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 my $class = SO_TERM_SEQUENCE_ALTERATION;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 if ($alleles =~ /^$allele_class(\/$allele_class)+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 # A/T, A/T/G
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 $class = SO_TERM_SNV;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 elsif ($alleles =~ /^$allele_class+(\/$allele_class+)+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 # AA/TTT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $class = SO_TERM_SUBSTITUTION;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 elsif ($alleles =~ /\)\d+/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 # (CAG)8/(CAG)9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $class = SO_TERM_TANDEM_REPEAT;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 my @alleles = split /\//, $alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 if (@alleles > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 my $ref = shift @alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 if ($ref eq '-') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 if (@alleles == 1 && $alleles[0] =~ /DEL/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 # -/(LARGEDELETION) (rather oddly!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 $class = $ref_correct ? SO_TERM_DELETION : SO_TERM_INDEL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 unless (grep { $_ !~ /^$allele_class+$|INS/ } @alleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 # -/ATT, -/(LARGEINSERTION)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $class = $ref_correct ? SO_TERM_INSERTION : SO_TERM_INDEL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 # else must be mixed insertion and deletion, so just called sequence_alteration
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 elsif ($ref =~ /^$allele_class+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 unless (grep { $_ !~ /-|DEL/ } @alleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 # A/-, A/(LARGEDELETION)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $class = $ref_correct ? SO_TERM_DELETION : SO_TERM_INDEL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 elsif ($ref =~ /DEL/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 unless (grep { $_ !~ /-/ } @alleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 # (LARGEDELETION)/-, (2345 BP DELETION)/-
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $class = $ref_correct ? SO_TERM_DELETION : SO_TERM_INDEL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 elsif (@alleles == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 if ($alleles[0] =~ /INS/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 # (LARGEINSERTION)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 $class = $ref_correct ? SO_TERM_INSERTION : SO_TERM_INDEL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 elsif($alleles[0] =~ /DEL/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 # (308 BP DELETION)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $class = $ref_correct ? SO_TERM_DELETION : SO_TERM_INDEL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 return $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 =head2 sequence_with_ambiguity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Arg[1] : Bio::EnsEMBL::DBSQL::DBAdaptor $dbCore
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Arg[2] : Bio::EnsEMBL::Variation::DBSQL::DBAdaptor $dbVar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Arg[3] : string $chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Arg[4] : int $start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 Arg[5] : int $end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 Arg[6] : int $strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 Example : use Bio::EnsEMBL::Variation::Utils::Sequence qw (sequence_with_ambiguity)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 my $slice = sequence_with_ambiguity($dbCore,$dbVar,1,100,200);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 print "the sequence with ambiguity code for your region is: ",$slice->seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 Description : given a region, returns a Bio::EnsEMBL::Slice object with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 the sequence set with ambiguity codes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 ReturnType : Bio::EnsEMBL::Slice object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 sub sequence_with_ambiguity{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my ($dbCore,$dbVar,$chr,$start,$end,$strand) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 if (ref($dbCore) ne 'Bio::EnsEMBL::DBSQL::DBAdaptor'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 warning('You need to provide a Bio::EnsEMBL::DBSQL::DBAdaptor as a first argument');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 return $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 if (ref($dbVar) ne 'Bio::EnsEMBL::Variation::DBSQL::DBAdaptor'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 warning('You need to provide a Bio::EnsEMBL::Variation::DBSQL::DBAdaptor object as second argument');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 return $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 my $slice_adaptor = $dbCore->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 my $vf_adaptor = $dbVar->get_VariationFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $slice = $slice_adaptor->fetch_by_region('chromosome',$chr,$start,$end,$strand); #get the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 my $seq = $slice->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 foreach my $vf (@{$vf_adaptor->fetch_all_by_Slice($slice)}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 substr($seq,$vf->start-1,1,$vf->ambig_code);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 $slice->{'seq'} = $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 return $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 =head2 hgvs_variant_notation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 Arg[1] : string $alt_allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 Arg[2] : string $ref_sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 Arg[3] : int $ref_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 Arg[4] : int $ref_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 Arg[5] : int $display_start (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 Arg[6] : int $display_end (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Example : use Bio::EnsEMBL::Variation::Utils::Sequence qw (hgvs_variant_notation)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 my $alt_allele = 'A';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 my $ref_sequence = 'CCGTGATGTGC';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 my $ref_start = 4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 my $ref_end = 4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my $ref_name = 'test_seq';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 my $ref_type = 'g';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my $notation = hgvs_variant_notation($alt_allele,$ref_sequence,$ref_start,$ref_end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 print "HGVS notation of your variant: $ref_name\:$ref_type\." . $notation->{'hgvs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Description : Given an allele, a reference sequence and position of variant, returns a reference to a hash containing metadata and a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 string with HGVS notation of the variant. Returns undef if reference and variant alleles are identical.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 The optional display_start and display_end, if specified, will be used in the notation instead of the ref_start and ref_end.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 This can be useful, e.g. if we want coordinates relative to chromosome but don't want to pass the entire chromosome sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 into the subroutine.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 The data fields in the returned hash are:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 'start' -> Displayed start position of variant
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 'end' -> Displayed end position of variant
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 'ref' -> Reference allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 'alt' -> Alternative allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 'type' -> The variant class, e.g. ins, inv, >, delins
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 'hgvs' -> A string with HGVS notation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 ReturnType : reference to a hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 Exceptions : If the length of the interval to be displayed is different from the length of the reference allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 sub hgvs_variant_notation {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 my $alt_allele = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my $ref_sequence = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 my $ref_start = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 my $ref_end = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 my $display_start = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 my $display_end = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 # If display_start and display_end were not specified, use ref_start and ref_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 $display_start ||= $ref_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 $display_end ||= $ref_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 #ÊThrow an exception if the lengths of the display interval and reference interval are different
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 throw("The coordinate interval for display is of different length than for the reference allele") if (($display_end - $display_start) != ($ref_end - $ref_start));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 # Length of the reference allele. Negative lengths make no sense
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 my $ref_length = ($ref_end - $ref_start + 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 if ($ref_length < 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 $ref_length = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 # Remove any gap characters in the alt allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 $alt_allele =~ s/\-//g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 # Length of alternative allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 my $alt_length = length($alt_allele);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 # Get the reference allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 my $ref_allele = substr($ref_sequence,($ref_start-1),$ref_length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 # Check that the alleles are different, otherwise return undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 return undef unless ($ref_allele ne $alt_allele);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 # Store the notation in a hash that will be returned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 my %notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $notation{'start'} = $display_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $notation{'end'} = $display_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $notation{'ref'} = $ref_allele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 $notation{'alt'} = $alt_allele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 # The simplest case is a deletion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 if (!$alt_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 $notation{'type'} = 'del';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 # Return the notation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 # Another case is if the allele lengths are equal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 if ($ref_length == $alt_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 # If length is 1 it's a single substitution
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 if ($ref_length == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 $notation{'type'} = '>';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 # Check if it's an inversion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 my $rev_ref = $ref_allele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 reverse_comp(\$rev_ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 if ($alt_allele eq $rev_ref) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 $notation{'type'} = 'inv';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 $notation{'type'} = 'delins';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 # If this is an insertion, we should check if the preceeding reference nucleotides match the insertion. In that case it should be annotated as a multiplication.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 if (!$ref_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 # Get the same number of nucleotides preceding the insertion as the length of the insertion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 my $prev_str = substr($ref_sequence,($ref_end-$alt_length),$alt_length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 # If they match, this is a duplication
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 if ($prev_str eq $alt_allele) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 $notation{'start'} = ($display_end - $alt_length + 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 $notation{'type'} = 'dup';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 $notation{'ref'} = $prev_str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 # Return the notation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 # If they didn't match it's a plain insertion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 $notation{'start'} = $display_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 $notation{'end'} = $display_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 $notation{'type'} = 'ins';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 # Otherwise, the reference and allele are of different lengths. By default, this is a delins but
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 # we need to check if the alt allele is a multiplication of the reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 # Check if the length of the alt allele is a multiple of the reference allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 if ($alt_length%$ref_length == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 my $multiple = ($alt_length / $ref_length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 if ($alt_allele eq ($ref_allele x $multiple)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 if ($multiple == 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 $notation{'type'} = 'dup';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 $notation{'type'} = '[' . $multiple . ']';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 # Else, it's gotta be a delins
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 $notation{'type'} = 'delins';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 return \%notation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 =head2 format_hgvs_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 Arg[1] : string reference sequence name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 Arg[2] : string strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 Arg[3] : hash of hgvs information
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 Description : Creates HGVS formatted string from input hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 ReturnType : string in HGVS format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 Exceptions :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 Caller :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 sub format_hgvs_string{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 ##### generic formatting routine for genomic and coding HGVS names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 my $hgvs_notation = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 ### all start with refseq name & numbering type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 $hgvs_notation->{'hgvs'} = $hgvs_notation->{'ref_name'} . ":" . $hgvs_notation->{'numbering'} . ".";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 my $coordinates;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 #### if single base event, list position only once
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 if($hgvs_notation->{'start'} eq $hgvs_notation->{'end'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 $coordinates = $hgvs_notation->{'start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 $coordinates = $hgvs_notation->{'start'} . "_" . $hgvs_notation->{'end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 ##### format rest of string according to type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 if($hgvs_notation->{'type'} eq 'del' || $hgvs_notation->{'type'} eq 'inv' || $hgvs_notation->{'type'} eq 'dup'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 ### inversion of reference bases => list ref not alt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 ### deletion of reference bases => list ref lost
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 ### duplication of reference bases (eg ref = GAAA alt = GAAAGAAA) => list duplicated ref (dupGAAA)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 $hgvs_notation->{'hgvs'} .= $coordinates . $hgvs_notation->{'type'} . $hgvs_notation->{'ref'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 elsif( $hgvs_notation->{'type'} eq '>'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 ### substitution - list both alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 $hgvs_notation->{'hgvs'} .= $hgvs_notation->{'start'} . $hgvs_notation->{'ref'} . $hgvs_notation->{'type'} . $hgvs_notation->{'alt'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 elsif( $hgvs_notation->{'type'} eq 'delins'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 $hgvs_notation->{'hgvs'} .= $coordinates . 'del' . $hgvs_notation->{'ref'} . 'ins' . $hgvs_notation->{'alt'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 elsif($hgvs_notation->{'type'} eq 'ins'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 ## reference not listed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 $hgvs_notation->{'hgvs'} .= $coordinates . $hgvs_notation->{'type'} . $hgvs_notation->{'alt'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 elsif($hgvs_notation->{'type'} =~ /\[\d+\]/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 #### insertion described by string and number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 $hgvs_notation->{'hgvs'} .= $coordinates . $hgvs_notation->{'type'} . $hgvs_notation->{'ref'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 warn "PROBLEM with generic HGVS formatter - type = ". $hgvs_notation->{'type'} ."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 return $hgvs_notation->{'hgvs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 =head2 align_seqs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 Arg[1] : string $seq1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 Arg[2] : string $seq2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 Example : my $aligned_seqs = align_seqs($seq1, $seq2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 Description : Does a simple NW align of two sequence strings. Best used on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 short (<1000bp) sequences, otherwise runtime will be long
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 ReturnType : arrayref to a pair of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 Caller : web flanking sequence display
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 sub align_seqs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 my $seq1 = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 my $seq2 = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 # align parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 my $match = 10;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 my $mismatch = -10;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 my $gep = -10;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 # split sequences into arrays
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 my @split1 = split //, $seq1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 my @split2 = split //, $seq2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 # evaluate substitutions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 my $len1 = length($seq1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 my $len2 = length($seq2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 my (@smat, @tb);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 for (my $i=0; $i<=$len1; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 $smat[$i][0] = $i * $gep;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 $tb[$i][0] = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 for (my $j=0; $j<=$len2; $j++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 $smat[0][$j] = $j * $gep;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 $tb[0][$j] = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 my ($s, $sub, $del, $ins);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 for (my $i=1; $i<=$len1; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 for (my $j=1; $j<=$len2; $j++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 # calculate score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 if($split1[$i-1] eq $split2[$j-1]) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 $s = $match;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 $s = $mismatch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 $sub = $smat[$i-1][$j-1] + $s;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 $del = $smat[$i][$j-1] + $gep;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 $ins = $smat[$i-1][$j] + $gep;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 if($sub > $del && $sub > $ins) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 $smat[$i][$j] = $sub;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 $tb[$i][$j] = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 elsif($del > $ins) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 $smat[$i][$j] = $del;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 $tb[$i][$j] = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 $smat[$i][$j] = $ins;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 $tb[$i][$j] = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 my $i = $len1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 my $j = $len2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 my $aln_len = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 my (@aln1, @aln2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 while(!($i == 0 && $j == 0)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 if($tb[$i][$j] == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 $aln1[$aln_len] = $split1[--$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 $aln2[$aln_len] = $split2[--$j];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 elsif($tb[$i][$j] == -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 $aln1[$aln_len] = '-';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 $aln2[$aln_len] = $split2[--$j];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 elsif($tb[$i][$j] == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 $aln1[$aln_len] = $split1[--$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 $aln2[$aln_len] = '-';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 $aln_len++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 return [(join "", reverse @aln1), (join "", reverse @aln2)];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 =head2 array_to_bitval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 Arg[1] : arrayref $arr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 Arg[2] : arrayref $ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 Example : my $bitval = array_to_bitval(['hapmap','precious'],['cluster','freq','submitter','doublehit','hapmap','1000Genome','failed','precious']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 Description : Takes a reference to an array as input and return a bit value representing the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 combination of elements from a reference array. c.f. the SET datatype in MySQL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 ReturnType : bitvalue that represents the combination of elements in the reference array specified in the given array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 Caller : get_validation_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 sub array_to_bitval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 my $arr = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my $ref = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 #ÊEnsure that we have array references
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 $arr = wrap_array($arr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 $ref = wrap_array($ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 #ÊTurn the reference array into a hash, the values will correspond to 2 raised to the power of the position in the array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 my $i=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 my %ref_hash = map {lc($_) => $i++;} @{$ref};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 #ÊSet the bitval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 my $bitval = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 foreach my $a (@{$arr}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 my $pos = $ref_hash{lc($a)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 if (defined($pos)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 $bitval |= 2**$pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 # Warn if the element is not present in the reference array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 warning("$a is not a recognised element. Recognised elements are: " . join(",",@{$ref}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 return $bitval;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 =head2 bitval_to_array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 Arg [1] : int $bitval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 Arg [2] : arrayref $ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 Example : my $arr = bitval_to_array(6,['cluster','freq','submitter','doublehit','hapmap','1000Genome','failed','precious']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 : print join(",",@{$arr}); #ÊWill print 'freq,submitter'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 Description: Returns an array with the combination of elements from the reference array specified by the supplied bitvalue.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 c.f. the SET datatype in MySQL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 Returntype : reference to list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 Caller : get_all_validation_states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 sub bitval_to_array {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 my $bitval = shift || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 my $ref = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 #ÊEnsure that we have array references
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 $ref = wrap_array($ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 # convert the bit value into an ordered array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 my @arr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 for (my $i = 0; $i < @{$ref}; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 push(@arr,$ref->[$i]) if ((1 << $i) & $bitval);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 return \@arr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 =head2 add_validation_state
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 Arg [1] : string $state
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 Example : add_validation_state('cluster');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 Description: Adds a validation state to this variation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 Exceptions : warning if validation state is not a recognised type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 sub add_validation_state {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 my $obj = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 my $state = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 #ÊGet the bitvalue for the new state
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 my $newbit = get_validation_code($state) || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 #ÊBit-add it to the current validation_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 my $oldbit = $obj->{'validation_code'} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 $newbit |= $oldbit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 # Set the validation_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 $obj->{'validation_code'} = $newbit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 =head2 get_all_validation_states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 Arg [1] : int $bitval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 Example : my @vstates = @{get_all_validation_states($var->{'validation_code'})};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 Description: Retrieves all validation states for a specified bit value.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 Returntype : reference to list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 sub get_all_validation_states {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 return bitval_to_array(shift,\@VALIDATION_STATES);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 =head2 get_validation_code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 Arg [1] : arrayref $validation_status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 Example : $var->{'validation_code'} = get_validation_code(['submitter','precious']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 Description: Retrieves the bit value for a combination of validation statuses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 Caller : Variation::new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 sub get_validation_code {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 return array_to_bitval(shift,\@VALIDATION_STATES);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 1;