Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/Utils/SeqRegionCache.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/Utils/SeqRegionCache.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,97 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 The European Bioinformatics Institute and + Genome Research Limited. All rights reserved. + + This software is distributed under a modified Apache license. + For license details, please see + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=cut + +=head1 NAME + +Bio::EnsEMBL::Utils::SeqRegionCache - A shared LRU cache of information about +seq_regions + +=head1 SYNOPSIS + + use Bio::EnsEMBL::DBSQL::DBAdaptor; + + $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(...); + + $seq_region_cache = $db->get_SeqRegionCache(); + + $key = "$seq_region_name:$coord_system_id"; + + $array = $seq_region_cache->{$key}; + + if ($array) { + $name = $array->[1]; + $length = $array->[3]; + } else { + # cache miss, get the info from the database + # ... + + # cache the retrieved information + $seq_region_cache->{$key} = [ + $seq_region_id, $seq_region_name, + $coord_system_id, $seq_region_length + ]; + } + +=head1 DESCRIPTION + +This module is simply a convenient place to put a cache of sequence +region information which is shared by several adaptors for a given +database. + +=head1 METHODS + +=cut + +use strict; +use Bio::EnsEMBL::Utils::Cache; + +package Bio::EnsEMBL::Utils::SeqRegionCache; + +our $SEQ_REGION_CACHE_SIZE = 40000; + + + +sub new { + my $class = shift; + + my %id_cache; + my %name_cache; + + # + # the items to cache should be listrefs to + # [ sr_id, sr_name, cs_id, sr_length ] + # + # The name cache key is "sr_name:cs_id" + # The id cache is keyed on "sr_id" + # + + tie(%name_cache, 'Bio::EnsEMBL::Utils::Cache', $SEQ_REGION_CACHE_SIZE); + tie(%id_cache, 'Bio::EnsEMBL::Utils::Cache', $SEQ_REGION_CACHE_SIZE); + + return bless {'name_cache' => \%name_cache, + 'id_cache' => \%id_cache}, $class; +} + + +1; + + + +