<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:583879744;
mso-list-template-ids:-658741542;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l0:level2
{mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level3
{mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level4
{mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level5
{mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level6
{mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level7
{mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level8
{mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level9
{mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Dear Developers<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I am having an issue running a query on my internal ensembl database.<o:p></o:p></p><p class=MsoNormal>I have a script that retrieves all the exons and introns for a given transcript ID.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>When I query the remote ensembl servers I get back the expected data, however if I query my internal database the script just hangs and retrieves nothing.<o:p></o:p></p><p class=MsoNormal>The script runs fine for ENSEMBL transcript Ids but fails on NM ids.<o:p></o:p></p><p class=MsoNormal>Can you tell me if we need to download any additional tables in order to support external Ids?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>In this case, if I do :<o:p></o:p></p><p class=MsoNormal>getIntronsOrExonsByTranscript.pl -i -e --remote NM_000016<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I get back: <o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76190036 76190502 ENST00000370841 ENSE00001844831 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76194086 76194173 ENST00000370841 ENSE00000830661 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76198329 76198426 ENST00000370841 ENSE00000830662 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76198538 76198607 ENST00000370841 ENSE00000830663 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76199213 76199313 ENST00000370841 ENSE00000830664 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76200476 76200556 ENST00000370841 ENSE00000830665 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76205665 76205795 ENST00000370841 ENSE00000830666 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76211491 76211599 ENST00000370841 ENSE00000830671 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76215104 76215244 ENST00000370841 ENSE00000931972 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76216136 76216231 ENST00000370841 ENSE00000931973 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76226807 76227055 ENST00000370841 ENSE00000931974 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76228377 76229364 ENST00000370841 ENSE00001513957 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76190503 76194085 ENST00000370841 ENST00000370841-intron_1 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76194174 76198328 ENST00000370841 ENST00000370841-intron_2 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76198427 76198537 ENST00000370841 ENST00000370841-intron_3 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76198608 76199212 ENST00000370841 ENST00000370841-intron_4 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76199314 76200475 ENST00000370841 ENST00000370841-intron_5 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76200557 76205664 ENST00000370841 ENST00000370841-intron_6 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76205796 76211490 ENST00000370841 ENST00000370841-intron_7 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76211600 76215103 ENST00000370841 ENST00000370841-intron_8 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76215245 76216135 ENST00000370841 ENST00000370841-intron_9 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76216232 76226806 ENST00000370841 ENST00000370841-intron_10 0 (+1)<o:p></o:p></p><p class=MsoNormal>NM_000016 chr1 76227056 76228376 ENST00000370841 ENST00000370841-intron_11 0 (+1)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>However when querying our internal database the script hangs in line 121 (see script bellow)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Can you tell me what I am doing wrong? I am very confused why this works remotely but not on my local database.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Here is the script I’ve been using:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>#!/usr/bin/perl -w<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>use lib 'v67_ensembl_api/ensembl/modules/';<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>use strict;<o:p></o:p></p><p class=MsoNormal>use warnings;<o:p></o:p></p><p class=MsoNormal>use Term::ProgressBar;<o:p></o:p></p><p class=MsoNormal>use Getopt::Long;<o:p></o:p></p><p class=MsoNormal>use Bio::EnsEMBL::Registry;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>my $transcript_list = "";<o:p></o:p></p><p class=MsoNormal>my $help = "";<o:p></o:p></p><p class=MsoNormal>my $remote;<o:p></o:p></p><p class=MsoNormal>my $db_version;<o:p></o:p></p><p class=MsoNormal>my $get_introns;<o:p></o:p></p><p class=MsoNormal>my $get_exons = 1;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>GetOptions(<o:p></o:p></p><p class=MsoNormal> 'remote' => \$remote,<o:p></o:p></p><p class=MsoNormal> 'i|introns' => \$get_introns,<o:p></o:p></p><p class=MsoNormal> 'e|exons!' => \$get_exons,<o:p></o:p></p><p class=MsoNormal> 'f|file:s' => \$transcript_list,<o:p></o:p></p><p class=MsoNormal> 'db|db_version:i' => \$db_version,<o:p></o:p></p><p class=MsoNormal> 'h|?|help' => \$help<o:p></o:p></p><p class=MsoNormal>);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>my $transcript_of_interest = shift;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>if ( $help || ( !($transcript_of_interest) && !($transcript_list) ) ) {<o:p></o:p></p><p class=MsoNormal> die "Usage: $0 <Options> [TrancriptName/ID]<o:p></o:p></p><p class=MsoNormal> --remote Query remote database instead of local<o:p></o:p></p><p class=MsoNormal> --db or --db_version Use this to specify an alternative database to query defaults to the same database as the api being used<o:p></o:p></p><p class=MsoNormal> -i or --introns => get all exons for transcript (default on)<o:p></o:p></p><p class=MsoNormal> -e or --exons => get all introns for transcript (default off)<o:p></o:p></p><p class=MsoNormal> Note: both last 2 options and negatable... no if you want to exclude exons or introns you can specify --noexons or --nointrons;<o:p></o:p></p><p class=MsoNormal> -f or --file File with a list of transcripts - 1 per line<o:p></o:p></p><p class=MsoNormal> -h or --help or -? This message\n";<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>my $registry = 'Bio::EnsEMBL::Registry';<o:p></o:p></p><p class=MsoNormal>unless ($db_version){<o:p></o:p></p><p class=MsoNormal> $db_version = $registry->software_version;<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>unless ($remote) {<o:p></o:p></p><p class=MsoNormal> $registry->load_registry_from_db(<o:p></o:p></p><p class=MsoNormal> -db_version => $db_version,<o:p></o:p></p><p class=MsoNormal> -host => 'internal_host',<o:p></o:p></p><p class=MsoNormal> <span lang=PT>-user => 'ensembl',<o:p></o:p></span></p><p class=MsoNormal><span lang=PT> -pass => 'password',<o:p></o:p></span></p><p class=MsoNormal><span lang=PT> -port => 3306,<o:p></o:p></span></p><p class=MsoNormal><span lang=PT> -verbose=> 1,<o:p></o:p></span></p><p class=MsoNormal><span lang=PT> </span>);<o:p></o:p></p><p class=MsoNormal> my $core_mca = $registry->get_adaptor("Homo sapiens", 'core' , 'metacontainer');<o:p></o:p></p><p class=MsoNormal> if ($core_mca) {<o:p></o:p></p><p class=MsoNormal> print STDERR "Connected to core version ", $core_mca->get_schema_version, " database"; <o:p></o:p></p><p class=MsoNormal> }else{<o:p></o:p></p><p class=MsoNormal> print STDERR "Failed to connect to local database -- connecting to remote instead\n";<o:p></o:p></p><p class=MsoNormal> $registry->load_registry_from_db(<o:p></o:p></p><p class=MsoNormal> -db_version => $db_version,<o:p></o:p></p><p class=MsoNormal> -host => 'ensembldb.ensembl.org',<o:p></o:p></p><p class=MsoNormal> -user => 'anonymous',<o:p></o:p></p><p class=MsoNormal> #-verbose=> 1,<o:p></o:p></p><p class=MsoNormal> );<o:p></o:p></p><p class=MsoNormal> unless ($core_mca) {<o:p></o:p></p><p class=MsoNormal> die "Could not connect to core database either locally or remotely";<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal>else {<o:p></o:p></p><p class=MsoNormal> $registry->load_registry_from_db(<o:p></o:p></p><p class=MsoNormal> -host => 'ensembldb.ensembl.org',<o:p></o:p></p><p class=MsoNormal> -user => 'anonymous',<o:p></o:p></p><p class=MsoNormal> #-verbose=> 1, <o:p></o:p></p><p class=MsoNormal> );<o:p></o:p></p><p class=MsoNormal> my $core_mca = $registry->get_adaptor("Homo sapiens", 'core' , 'metacontainer');<o:p></o:p></p><p class=MsoNormal> if ($core_mca) {<o:p></o:p></p><p class=MsoNormal> print STDERR "Connected to core version ", $core_mca->get_schema_version, " database"; <o:p></o:p></p><p class=MsoNormal> }else{<o:p></o:p></p><p class=MsoNormal> die "Could not connect to core database";<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>my $transcript_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Transcript' );<o:p></o:p></p><p class=MsoNormal>my $gene_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Gene' );<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>my @transcripts_of_interest = ();<o:p></o:p></p><p class=MsoNormal>if ($transcript_list) {<o:p></o:p></p><p class=MsoNormal> open( my $list,"<", $transcript_list ) || die "Could not open $transcript_list file for reading $!\n";<o:p></o:p></p><p class=MsoNormal> @transcripts_of_interest = <$list>;<o:p></o:p></p><p class=MsoNormal> close($list);<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal>else {<o:p></o:p></p><p class=MsoNormal> push( @transcripts_of_interest, $transcript_of_interest );<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>my $analysis_name;<o:p></o:p></p><p class=MsoNormal>if ($get_introns && $get_exons){<o:p></o:p></p><p class=MsoNormal> $analysis_name = "Gathering Exons and Introns" ;<o:p></o:p></p><p class=MsoNormal>}elsif($get_introns){<o:p></o:p></p><p class=MsoNormal> $analysis_name = "Gathering Introns";<o:p></o:p></p><p class=MsoNormal>}elsif($get_exons){<o:p></o:p></p><p class=MsoNormal> $analysis_name = "Gathering Exons";<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>my $number_of_entries = scalar @transcripts_of_interest;<o:p></o:p></p><p class=MsoNormal>my $progress = Term::ProgressBar->new ({ count => $number_of_entries ,<o:p></o:p></p><p class=MsoNormal> name => $analysis_name, <o:p></o:p></p><p class=MsoNormal> ETA => 'linear', <o:p></o:p></p><p class=MsoNormal> });<o:p></o:p></p><p class=MsoNormal>$progress->max_update_rate(1);<o:p></o:p></p><p class=MsoNormal>my $next_update = 0;<o:p></o:p></p><p class=MsoNormal>my $j = 0;<o:p></o:p></p><p class=MsoNormal>foreach my $query_transcript (@transcripts_of_interest) {<o:p></o:p></p><p class=MsoNormal> chomp $query_transcript;<o:p></o:p></p><p class=MsoNormal> my $transcript = "";<o:p></o:p></p><p class=MsoNormal> if ($query_transcript =~ /ENST/i){<o:p></o:p></p><p class=MsoNormal> $transcript = $transcript_adaptor->fetch_by_stable_id("$query_transcript");<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> else{<o:p></o:p></p><p class=MsoNormal> ($transcript) = @{ $transcript_adaptor->fetch_all_by_external_name("$query_transcript") };<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> if ($transcript){<o:p></o:p></p><p class=MsoNormal> fetch_data($get_exons, $get_introns, $query_transcript, $transcript);<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> else{<o:p></o:p></p><p class=MsoNormal> #$progress->message("Query: $query_transcript failed >> using Fetch all method to retrieve gene associated with this transcript");<o:p></o:p></p><p class=MsoNormal> my ($gene) = @{ $gene_adaptor->fetch_all_by_external_name("$query_transcript") };<o:p></o:p></p><p class=MsoNormal> unless ($gene){<o:p></o:p></p><p class=MsoNormal> $progress->message("Query: $query_transcript failed!");<o:p></o:p></p><p class=MsoNormal> next;<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> my @transcripts = @{ $gene->get_all_Transcripts() };<o:p></o:p></p><p class=MsoNormal> fetch_data($get_exons, $get_introns, $query_transcript, @transcripts);<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> $next_update = $progress->update() if (++$j > $next_update);<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal>$progress->update($number_of_entries) if ($number_of_entries >= $next_update);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>sub feature2string<o:p></o:p></p><p class=MsoNormal>{<o:p></o:p></p><p class=MsoNormal> my $feature = shift;<o:p></o:p></p><p class=MsoNormal> my $trans_id = shift;<o:p></o:p></p><p class=MsoNormal> my $i = shift;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> my $seq_region = $feature->slice->seq_region_name();<o:p></o:p></p><p class=MsoNormal> my $start = $feature->start();<o:p></o:p></p><p class=MsoNormal> my $end = $feature->end();<o:p></o:p></p><p class=MsoNormal> my $strand = $feature->strand();<o:p></o:p></p><p class=MsoNormal> my $stable_id;<o:p></o:p></p><p class=MsoNormal> if ($i){<o:p></o:p></p><p class=MsoNormal> $stable_id = $trans_id."-intron_".$i;<o:p></o:p></p><p class=MsoNormal> }else{<o:p></o:p></p><p class=MsoNormal> $stable_id = $feature->stable_id();<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> return sprintf( "%s\t%d\t%d\t%s\t%s\t%d\t(%+d)", "chr".$seq_region, $start, $end, $trans_id, $stable_id, "0", $strand );<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>sub fetch_data{<o:p></o:p></p><p class=MsoNormal> my $get_exons = shift;<o:p></o:p></p><p class=MsoNormal> my $get_introns = shift;<o:p></o:p></p><p class=MsoNormal> my $query_transcript = shift;<o:p></o:p></p><p class=MsoNormal> my @transcripts = @_;<o:p></o:p></p><p class=MsoNormal> foreach my $transcript (@transcripts){<o:p></o:p></p><p class=MsoNormal> my $i = 0;<o:p></o:p></p><p class=MsoNormal> if ($get_exons){<o:p></o:p></p><p class=MsoNormal> foreach my $exon ( @{ $transcript->get_all_Exons() } ) {<o:p></o:p></p><p class=MsoNormal> my $estring = feature2string($exon, $transcript->stable_id);<o:p></o:p></p><p class=MsoNormal> print $query_transcript."\t".$estring."\n";<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> if ($get_introns){<o:p></o:p></p><p class=MsoNormal> foreach my $intron ( @{ $transcript->get_all_Introns() } ) {<o:p></o:p></p><p class=MsoNormal> my $estring = feature2string($intron, $transcript->stable_id, ++$i);<o:p></o:p></p><p class=MsoNormal> print $query_transcript."\t".$estring."\n";<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>