<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>