[ensembl-dev] gene to coords code issue
Javier Herrero
jherrero at ebi.ac.uk
Fri Apr 20 05:49:55 BST 2012
Dear Sean
The method fetch_all_by_external_name returns a reference to an array of
Bio::EnsEMBL::Gene objects. All the methods named "fetch_all_by..."
return a reference to an array. The array might be empty or contain just
one entry, but you will always get a reference to an array. Contrarily,
all the methods named "fetch_by..." return either undef or 1 single object.
Typically, you would use a foreach loop to go through all possible
returned object:
open OUT, ">$gene_file.coords";
for my $geneid ( @unique ) {
chomp $geneid;
ensembl_coords($geneid);
}
sub ensembl_coords {
my ($id) = @_;
my $adaptor = $registry->get_adaptor( 'Human', 'Core', 'gene' );
my $all_genes = $adaptor->fetch_all_by_external_name($id);
foreach my $gene (@$all_genes) {
$chr = $gene->seq_region_name();
$start = $gene->seq_region_start();
$end = $gene->seq_region_end();
print OUT join("\t", $chr,$start,$end,$id),"\n"; #I have added the
original $id here
}
}
I hope the helps
Javier
On 20/04/12 04:49, Sean O'Keeffe wrote:
> Hi,
> I've used the code below on multiple occasions to convert external
> gene names to chromosome coords and it worked fine.
> However when I tried it just now I get the error for the very first
> gene DNAI2 and the script crashes:
>
> Can't call method "seq_region_name" on unblessed reference
>
> When I tried fetch_by_display_label($id) - I get:
>
> Can't call method "seq_region_name" on an undefined value
>
> Have I missed something?
> Thanks for any help,
> Sean.
>
> p.s. I tried connecting to the useastdb.ensembl.org,
> <http://useastdb.ensembl.org/> as I'm in the states, but It gave the
> following (maybe the 2 issues are related):
>
> DBI connect('host=useastdb.ensembl.org
> <http://useastdb.ensembl.org/>;port=3306','anonymous',...) failed:
> Can't connect to MySQL server on 'useastdb.ensembl.org
> <http://useastdb.ensembl.org/>' (111) at
> /home/sean/tools/ensembl_53/modules/Bio/EnsEMBL/Registry.pm line 1329
> Can't call method "selectall_arrayref" on an undefined value at
> /home/sean/tools/ensembl_53/modules/Bio/EnsEMBL/Registry.pm line 1332.
>
> ==============
>
> #!/usr/bin/perl
>
> use strict;
> use lib '/home/sean/tools/ensembl_53/modules';
>
> use Bio::SeqIO;
> use Bio::Root::IO;
> use Bio::EnsEMBL::DBSQL::BaseAdaptor;
> use Bio::EnsEMBL::Registry;
> my $registry = 'Bio::EnsEMBL::Registry';
> #$registry->load_registry_from_db(-host => 'useastdb.ensembl.org
> <http://useastdb.ensembl.org/>',-user => 'anonymous');
> $registry->load_registry_from_db(-host => 'ensembldb.ensembl.org
> <http://ensembldb.ensembl.org/>',-user => 'anonymous');
> open OUT, ">$gene_file.coords";
> for my $geneid ( @unique ) {
> chomp $geneid;
> ($chr,$start, $end) = ensembl_coords($geneid);
> print OUT join("\t", $chr,$start,$end,$geneid),"\n";
> }
> sub ensembl_coords {
> my ($id) = @_;
> my $adaptor = $registry->get_adaptor( 'Human', 'Core', 'gene' );
> my $gene = $adaptor->fetch_all_by_external_name($id);
> # my $gene = $adaptor->fetch_by_display_label($id);
>
> $chr = $gene->seq_region_name();
> $start = $gene->seq_region_start();
> $end = $gene->seq_region_end();
> return ($chr,$start,$end);
>
> }
>
>
> _______________________________________________
> Dev mailing list Dev at ensembl.org
> List admin (including subscribe/unsubscribe): http://lists.ensembl.org/mailman/listinfo/dev
> Ensembl Blog: http://www.ensembl.info/
--
Javier Herrero, PhD
Ensembl Coordinator and Ensembl Compara Project Leader
European Bioinformatics Institute (EMBL-EBI)
Wellcome Trust Genome Campus, Hinxton
Cambridge - CB10 1SD - UK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.ensembl.org/pipermail/dev_ensembl.org/attachments/20120420/82384451/attachment.html>
More information about the Dev
mailing list