<div dir="ltr">Hi Konrad,<div><br></div><div>This is probably to be expected. There is no caching implemented at all in the sequence fetching, so each time you call for the sequence, even if the code has requested the same block before, it will go back to disk to ask for it again.</div>
<div><br></div><div>It might be worth thinking about implementing some sort of sequence cache in your plugin; if you add</div><div></div><div><br>$self->{has_cache} = 1;</div><div><br></div><div>to the new method of your plugin, you can cache stuff on $self in run() and retrieve it each time you execute the run() method.</div>
<div><br></div><div>The Ensembl core API has similar functionality when fetching sequence from the database to avoid redundant lookups.</div><div><br></div><div>HTH</div><div><br></div><div>Will</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On 8 April 2014 19:28, Konrad Karczewski <span dir="ltr"><<a href="mailto:konradk@broadinstitute.org" target="_blank">konradk@broadinstitute.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">Hi Will,<div><br></div><div>Thanks! This appears to work now. However, performance is noticeably decreased (one test case with the plugin is ~118 vars/sec, with the plugin: 16 vars/sec). I've narrowed down the slowdown to the intron sequence access step (takes on the order of a second) - is this expected, or might there be something wrong with the indexing?<span class="HOEnZb"><font color="#888888"><br>
<div>
<div style="text-indent:0px;letter-spacing:normal;text-align:start;text-transform:none;white-space:normal;word-wrap:break-word;word-spacing:0px"><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:12px;white-space:normal;font-family:Helvetica;word-spacing:0px">
<br>-Konrad</div></div>
</div></font></span><div><div class="h5">
<br><div><div>On Apr 7, 2014, at 5:41 AM, Will McLaren <<a href="mailto:wm2@ebi.ac.uk" target="_blank">wm2@ebi.ac.uk</a>> wrote:</div><br><blockquote type="cite"><div dir="ltr">Hi Konrad,<div><br></div><div>Assuming you have the FASTA file available and functioning, this should work OK; you should see a message like this at VEP startup:</div>
<div><br></div><div><div>2014-04-07 10:32:11 - Read existing cache info</div>
<div>2014-04-07 10:32:12 - Auto-detected FASTA file in cache directory</div><div>2014-04-07 10:32:13 - Checking/creating FASTA index</div></div><div><br></div><div>or just the final message if you are pointing manually to a FASTA file using --fasta.</div>

<div><br></div><div>I just tested this with a rudimental plugin and I can retrieve the intron sequence OK, no Ns. Let me know if you still have any problems.</div><div><br></div><div>Plugin code:</div><div><br></div><div>

<div>package IntronSeq;</div><div>use Bio::EnsEMBL::Variation::Utils::BaseVepPlugin;</div><div>use base qw(Bio::EnsEMBL::Variation::Utils::BaseVepPlugin);</div><div><br></div><div>sub run {</div><div>  my ($self, $tva) = @_;  </div>

<div>  print STDERR $tva->transcript->get_all_Introns->[0]->seq()."\n";</div><div>  return {};</div><div>}</div><div><br></div><div>1;</div></div><div><br></div><div>Output:</div><div><br></div><div>

<div>> perl <a href="http://variant_effect_predictor.pl/" target="_blank">variant_effect_predictor.pl</a> -i example.vcf -force -plugin IntronSeq -offline -no_progress</div><div>2014-04-07 10:39:27 - Read existing cache info</div>
<div>
2014-04-07 10:39:27 - Auto-detected FASTA file in cache directory</div><div>2014-04-07 10:39:27 - Checking/creating FASTA index</div><div>2014-04-07 10:39:27 - Loaded plugin: IntronSeq</div><div>2014-04-07 10:39:27 - Starting...</div>

<div>2014-04-07 10:39:27 - Detected format of input file as vcf</div><div>2014-04-07 10:39:27 - Read 173 variants into buffer</div><div>2014-04-07 10:39:27 - Reading transcript data from cache and/or database</div><div>2014-04-07 10:39:28 - Retrieved 3097 transcripts (0 mem, 3162 cached, 0 DB, 65 duplicates)</div>

<div>2014-04-07 10:39:28 - Analyzing chromosome 21</div><div>2014-04-07 10:39:28 - Analyzing variants</div><div>2014-04-07 10:39:28 - Calculating consequences</div><div>Plugin 'IntronSeq' went wrong: Can't call method "seq" on an undefined value at /nfs/users/nfs_w/wm2/.vep/Plugins/IntronSeq.pm line 48, <GEN0> line 175.</div>

<div>GTGAGTTTCAGAGGCCGTAGGGACAGGGAGCGAGGCCTAGATAGTGGTGTCTGTCTAGATTGGGTCTGAGGCGGGGCCGGGGAGGTCCCGCGGGGCAGAGGAAGGAGGAGGGTTTCTTAGTCCCTCCGCGGCGGTCGCTCTTGCACAGCTTGGGAGGACTAATTTATGGGAACGAGGGTCTGGCGGAGGGCAGGGGCAAGGGCAGGGGTCGGGGCCAGGGGTCGGAGCCAGGCCGCGGGAGGAGCTTGGGCCCGCCTCTGGGAAGCAGCGCACGTTCCGTGCACATCTGTCCATGTCTTCCCAAGGAATACTCGTACTTGCCTTGGCAGGTTCCCTGATTTGGCCTTTGGGATATAAACTCAGCATTTCTCATTCTGGATATTGATAGTTTCGGTGTGGGACCTTTGGTTTCCTGAAATTTTCTTGTTTTTCTTCAGACCCTGTCAAACCGACCACTTTGTTCACCTTCCCAATGACTCTAGTCCAGTTTTGACTCCGTTTCCTGGTTACTTTTTGCCCCTTATTGTAAAGCACTGATTGGAAACACGACACAGGAAATTGGTGGGAAATAGCGATCTGATGTGAAAGAGCCAAATTTAAAAGTAGAGGCACGTATCTGGGCCAGCTCTGTTTCTTCCGCTGGTGTTTGTTAATATTACAAATTGGTTTAATTTTACCTCTGAGCGCACTTTTGGCAGTACGTTAATCATTTTTTCAGTCTTCATATTTATTGTAACTTCTCCACAG</div>

<div>GTGAGTTTCAGAGGCCGTAGGGACAGGGAGCGAGGCCTAGATAGTGGTGTCTGTCTAGATTGGGTCTGAGGCGGGGCCGGGGAGGTCCCGCGGGGCAGAGGAAGGAGGAGGGTTTCTTAGTCCCTCCGCGGCGGTCGCTCTTGCACAGCTTGGGAGGACTAATTTATGGGAACGAGGGTCTGGCGGAGGGCAGGGGCAAGGGCAGGGGTCGGGGCCAGGGGTCGGAGCCAGGCCGCGGGAGGAGCTTGGGCCCGCCTCTGGGAAGCAGCGCACGTTCCGTGCACATCTGTCCATGTCTTCCCAAGGAATACTCGTACTTGCCTTGGCAGGTTCCCTGATTTGGCCTTTGGGATATAAACTCAGCATTTCTCATTCTGGATATTGATAGTTTCGGTGTGGGACCTTTGGTTTCCTGAAATTTTCTTGTTTTTCTTCAGACCCTGTCAAACCGACCACTTTGTTCACCTTCCCAATGACTCTAGTCCAGTTTTGACTCCGTTTCCTGGTTACTTTTTGCCCCTTATTGTAAAGCACTGATTGGAAACACGACACAGGAAATTGGTGGGAAATAGCGATCTGATGTGAAAGAGCCAAATTTAAAAGTAGAGGCACGTATCTGGGCCAGCTCTGTTTCTTCCGCTGGTGTTTGTTAATATTACAAATTGGTTTAATTTTACCTCTGAGCGCACTTTTGGCAGTACGTTAATCATTTTTTCAGTCTTCATATTTATTGTAACTTCTCCACAG</div>

</div><div><br></div><div>etc etc</div><div><br></div><div>Regards</div><div><br></div><div>Will McLaren</div><div>Ensembl Variation</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 7 April 2014 03:21, Konrad Karczewski <span dir="ltr"><<a href="mailto:konradk@broadinstitute.org" target="_blank">konradk@broadinstitute.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<br>
I've been developing a loss-of-function plugin for VEP and having some implementation issues relating to the VEP cache. Specifically, when accessing transcripts via the API (with the --offline flag set) it seems the cache does not store intronic sequences. When I run the code below without the --offline flag, it works as expected. With --offline, the lengths prints properly, but the sequence is N repeated length times.<br>


<br>
# $transcript_variation is provided from VEP plugin "run" subroutine<br>
my @gene_introns = @{$transcript_variation->transcript->get_all_Introns()};<br>
my $intron_number = 0;<br>
print length($gene_introns[$intron_number]->seq()) . "\n"; # Returns correct length for first intron of the transcript<br>
print $gene_introns[$intron_number]->seq() . "\n"; # Returns "N"*length(intron)<br>
<br>
I can rebuild my cache if need be, but I was wondering if there were any plans to integrate intron (and exon) sequence into the cache? (Seems like it should be reasonably straightforward, since VEP requires the genome fasta anyway, but I'm not sure about the details of how this part is implemented). This would be very helpful for a number of reasons, including detecting proper intron sequences (i.e. with a canonical splice motif).<br>


<br>
(This happens in API versions 74 and 75).<br>
<br>
Thanks!<br>
-Konrad<br>
_______________________________________________<br>
Dev mailing list    <a href="mailto:Dev@ensembl.org" target="_blank">Dev@ensembl.org</a><br>
Posting guidelines and subscribe/unsubscribe info: <a href="http://lists.ensembl.org/mailman/listinfo/dev" target="_blank">http://lists.ensembl.org/mailman/listinfo/dev</a><br>
Ensembl Blog: <a href="http://www.ensembl.info/" target="_blank">http://www.ensembl.info/</a><br>
</blockquote></div><br></div>
_______________________________________________<br>Dev mailing list    <a href="mailto:Dev@ensembl.org" target="_blank">Dev@ensembl.org</a><br>Posting guidelines and subscribe/unsubscribe info: <a href="http://lists.ensembl.org/mailman/listinfo/dev" target="_blank">http://lists.ensembl.org/mailman/listinfo/dev</a><br>
Ensembl Blog: <a href="http://www.ensembl.info/" target="_blank">http://www.ensembl.info/</a><br></blockquote></div><br></div></div></div></div><br>_______________________________________________<br>
Dev mailing list    <a href="mailto:Dev@ensembl.org">Dev@ensembl.org</a><br>
Posting guidelines and subscribe/unsubscribe info: <a href="http://lists.ensembl.org/mailman/listinfo/dev" target="_blank">http://lists.ensembl.org/mailman/listinfo/dev</a><br>
Ensembl Blog: <a href="http://www.ensembl.info/" target="_blank">http://www.ensembl.info/</a><br>
<br></blockquote></div><br></div>