annotate variant_effect_predictor/Bio/EnsEMBL/Variation/Utils/dbSNP.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
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::Variation::Utils::dbSNP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::EnsEMBL::Variation::Utils::dbSNP qw(decode_bitfield);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $hashref = decode_bitfield('050160000a01050512110101');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 print "variant is precious\n" if $hashref->{precious};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 This module provides a single subroutine decode_bitfield which decodes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 a dbSNP bitfield from their VCF files into a hash reference with values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 for each value specified in the field.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 The encoding is taken from the following NCBI document:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 ftp://ftp.ncbi.nlm.nih.gov/snp/specs/dbSNP_BitField_latest.pdf
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 package Bio::EnsEMBL::Variation::Utils::dbSNP;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use base qw(Exporter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 our @EXPORT_OK = qw(decode_bitfield);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use constant ENCODING_VERSION => 5;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 # an example string, with the fields and offsets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # F0 F1 F2 F3 F4 F5 F6 F7 F8 F9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # 05 0160 000a 01 05 05 12 11 01 01
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # 0 2 4 6 8 10 12 14 16 18 20 22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 # offsets into the string for each field
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 my %offsets = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 F0 => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 F1_1 => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 F1_2 => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 F2_1 => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 F2_2 => 8,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 F3 => 10,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 F4 => 12,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 F5 => 14,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 F6 => 16,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 F7 => 18,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 F8 => 20,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 F9 => 22,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 # a hash mapping the values encoded in each field to the bits used encode them
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 # if multiple bits are used (e.g. for version) then the values should be a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 # listref of all the bits, this will be used to construct a bit mask to pick
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 # out the necessary information
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my %fields= (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 F0 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 version => [3,2,1],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 F1_1 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 trace_archive => 8,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 assembly_archive => 7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 entrez_geo => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 probe_db => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 entrez_gene => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 entrez_sts => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 has_structure => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 submitter_link_out => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 F1_2 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 clinical => 7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 precious => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 provisional_tpa => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 pubmed => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 sra => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 organism_db_link => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 mgc_clone => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 F2_1 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 utr_3 => 8,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 utr_5 => 7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 acceptor_ss => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 donor_ss => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 intron => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 region_3 => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 region_5 => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 in_gene => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 F2_2 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 stop_loss => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 frameshift => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 missense => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 stop_gain => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 has_ref => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 has_syn => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 F3 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 has_other_snp => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 has_assembly_conflict => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 is_assembly_specific => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 weight => [1,2],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 F4 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 is_mutation => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 is_validated => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 maf_all_pops => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 maf_some_pops => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 F5 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 marker_high_density => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 in_haplotype_tagging_set => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 genotypes_available => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 F6 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 tgp_2010_production => 7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 tgp_validated => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 tgp_2010_pilot => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 tgp_2009_pilot => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 hm_phase_3_genotyped => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 hm_phase_2_genotyped => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 hm_phase_1_genotyped => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 F7 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 has_mesh => 8,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 clinical_assay => 7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 has_tf => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 lsdb => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 dbgap_significant => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 dbgap_lod_score => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 third_party_annot => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 omim => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 F8 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 var_class => [4,3,2,1],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 F9 => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 is_suspect => 7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 is_somatic => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 contig_allele_not_present => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 withdrawn => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 cluster_no_overlap => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 strain_specific => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 genotype_conflict => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 # a lookup table for the variation class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 my %var_class = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 0b0001 => 'snp',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 0b0010 => 'dips',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 0b0011 => 'heterozygous',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 0b0100 => 'microsatellite',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 0b0101 => 'named',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 0b0110 => 'no_variation',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 0b0111 => 'mixed',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 0b1000 => 'multi_base',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =head2 decode_bitfield
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Arg[1] : string $bitfield
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 Example : my $hashref = decode_bitfield('050160000a01050512110101');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Description : Decodes a dbSNP bitfield string which encodes various attributes of a variation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 Returntype : A hash reference with a key for each attribute set in the field, if the field
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 is boolean (e.g. precious, suspect etc.) then the value should be treated as a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 true or false value, otherwise (e.g. var_class, weight) the value is the actual
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 value of the attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 sub decode_bitfield {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 my $bitfield = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 my %res;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 for my $field (keys %fields) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 for my $value (keys %{ $fields{$field} }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my $bits = $fields{$field}->{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 # if bits isn't an array, put the single bit into an array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $bits = [$bits] unless ref $bits eq 'ARRAY';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 # OR together all the bits to give us our mask
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my $mask;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 for my $bit (@$bits) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $mask |= 2**($bit-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 # extract the relevant characters from the bitfield string,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 # convert them to an integer, and apply our mask
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $res{$value} = hex(substr($bitfield, $offsets{$field}, 2)) & $mask;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 # check that the version matches what we expect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 if ($value eq 'version' && $res{$value} != ENCODING_VERSION) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 warn "Version field does not match the expected version (".$res{$value}." vs ".ENCODING_VERSION.")";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 # lookup the class description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $res{$value} = $var_class{$res{$value}} if $value eq 'var_class';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 # get rid of anything set to 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 delete $res{$value} unless $res{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 return \%res;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256