[Bioperl-l] Fwd: Fwd: gene extraction script
Adam Witney
awitney at sgul.ac.uk
Wed Jul 21 05:43:35 EDT 2010
forwarding to the original poster and the list...
Begin forwarded message:
> From: Laurent MANCHON <lmanchon at univ-montp2.fr>
> Date: 21 July 2010 10:05:16 GMT+01:00
> To: Adam Witney <awitney at sgul.ac.uk>
> Subject: Re: [Bioperl-l] Fwd: gene extraction script
> Reply-To: lmanchon at univ-montp2.fr
>
> another program you can use.
>
>
> #!/usr/bin/perl
> # retrieve sequences from genbank
> # read list of GenBank access number from a file and write to output.txt file
>
> use LWP::UserAgent;
> use Bio::SeqIO;
> use Bio::DB::GenBank;
> $cpt=0;
> $outfile = "outfile.txt";
> chomp($outfile);
> $gb = new Bio::DB::GenBank;
> while (<>) {
> ($Fld1) = split(' ', $_, 9999);
> $out = Bio::SeqIO->new('-file' => ">>$outfile",'-format' => 'fasta');
> $acc = $Fld1;
> $cpt++;
> print $acc,"\t$cpt"," retrieved\n";
> $seqio = $gb->get_Stream_by_acc([$acc]);
> while( $seq = $seqio->next_seq() ) {
> open(LOG,">>$outfile");
> printf LOG '%s ', ">" . $acc;
> $out->write_seq($seq);
> close(LOG);
> }
>
>
>
>
>
> Adam Witney a écrit :
>>
>> Hi Nicholas,
>>
>> If you just want to retrieve sequences from GenBank, try this:
>>
>> http://github.com/bioperl/bioperl-live/blob/master/examples/db/getGenBank.pl
>>
>> HTH
>>
>> adam
>>
>>
>> On 20 Jul 2010, at 23:05, Florent Angly wrote:
>>
>>
>>> -------- Original Message --------
>>> Subject: gene extraction script
>>> Date: Tue, 20 Jul 2010 15:56:36 +0100
>>> From: Nicholas Brown <n.brown at nhm.ac.uk>
>>> To: <florent.angly at gmail.com>
>>>
>>>
>>>
>>> Hi,
>>>
>>> Sorry to distrub, I'm currently working at the natural history museum on some DNA sequencing techniques and I came accross a script you posted ( see below) which I think maybe helpful. The problem I have is that I have lots of sequnces of the same Mitochondrial genomes of different species aligned and I would like to extract the genes from each of the sequences easily, I wondered if there was an easy modificaiton to your script that I could perform that would allow me to do this? The sequences for the genes are already submitted to genbank, so i was just wondering if this would be a quicker simplier way than doing it manually?
>>> Thanks so much for your time in reading this.
>>>
>>> Kind Regards,
>>>
>>> Nicholas Brown
>>>
>>> Script
>>> http://github.com/bioperl/bioperl-live/blob/master/examples/tools/extract_genes.pl<https://webmail.nhm.ac.uk/exchweb/bin/redir.asp?URL=http://github.com/bioperl/bioperl-live/blob/master/examples/tools/extract_genes.pl>
>>> #!/usr/bin/perl -w
>>> # $Id$
>>> =pod
>>>
>>>
>>> =head1 NAME
>>>
>>>
>>> extract_genes.pl - extract genomic sequences from NCBI files
>>> using BioPerl
>>>
>>>
>>> =head1 DESCRIPTION
>>>
>>>
>>> This script is a simple solution to the problem of
>>> extracting genomic regions corresponding to genes. There are other
>>> solutions, this particular approach uses genomic sequence
>>> files from NCBI and gene coordinates from Entrez Gene.
>>>
>>>
>>> The first time this script is run it will be slow as it will
>>> extract species-specific data from the gene2accession file and create
>>> a storable hash (retrieving the positional data from this hash is
>>> significantly faster than reading gene2accession each time the script
>>> runs). The subsequent runs should be fast.
>>>
>>>
>>> =head1 INSTALLATION
>>>
>>>
>>> =head2
>>>
>>>
>>> Install BioPerl, full instructions at http://bioperl.org.
>>>
>>>
>>> =head2 Download gene2accession.gz
>>>
>>>
>>> Download this file from ftp://ftp.ncbi.nlm.nih.gov/gene/DATA into
>>> your working directory and gunzip it.
>>>
>>>
>>> =head2 Download sequence files
>>>
>>>
>>> Create one or more species directories in the working directory, the
>>> directory names do not have to match those at NCBI (e.g. "Sc", "Hs").
>>>
>>>
>>> Download the nucleotide fasta files for a given species from its CHR*
>>> directories at ftp://ftp.ncbi.nlm.nih.gov/genomes and put these files into a
>>> species directory. The sequence files will have the suffix ".fna" or
>>> "fa.gz", gunzip if necessary.
>>>
>>>
>>> =head2 Determine Taxon id
>>>
>>>
>>> Determine the taxon id for the given species. This id is the first column
>>> in the gene2accession file. Modify the %species hash in this script
>>> such that name of your species directory is a key and the taxon id is the
>>> value.
>>>
>>>
>>> =head2 Command-line options
>>>
>>>
>>> -i Gene id
>>> -s Name of species directory
>>> -h Help
>>>
>>>
>>> Example:
>>>
>>>
>>> extract_genes.pl -i 850302 -s Sc
>>>
>>>
>>> =cut
>>>
>>>
>>> use strict;
>>> use Bio::DB::Fasta;
>>> use Getopt::Long;
>>> use Storable;
>>>
>>> my %species = ( "Sc" => 4932, # Saccharomyces cerevisiae
>>> "Ec" => 83333, # Escherichia coli K12
>>> "Hs" => 9606 # H. sapiens
>>> );
>>>
>>> my ($help,$id,$name);
>>>
>>> GetOptions( "s=s" => \$name,
>>> "i=i" => \$id,
>>> "h" => \$help );
>>>
>>> usage() if ($help || !$id || !$name);
>>>
>>> my $storedHash = $name . ".dump";
>>>
>>> # create index for a directory of fasta files
>>> my $db = Bio::DB::Fasta->new($name, -makeid => \&make_my_id);
>>>
>>> # extract species-specific data from gene2accession
>>> unless (-e $storedHash) {
>>> my $ref;
>>> # extract species-specific information from gene2accession
>>> open MYIN,"gene2accession" or die "No gene2accession file\n";
>>> while (<MYIN>) {
>>> my @arr = split "\t",$_;
>>> if ($arr[0] == $species{$name}&& $arr[9] =~ /\d+/&& $arr[10] =~ /\d+/) {
>>> ($ref->{$arr[1]}->{"start"}, $ref->{$arr[1]}->{"end"},
>>> $ref->{$arr[1]}->{"strand"}, $ref->{$arr[1]}->{"id"}) =
>>> ($arr[9], $arr[10], $arr[11], $arr[7]);
>>> }
>>> }
>>> # save species-specific information using Storable
>>> store $ref, $storedHash;
>>> }
>>>
>>> # retrieve the species-specific data from a stored hash
>>> my $ref = retrieve($storedHash);
>>>
>>> # retrieve sequence and sub-sequence
>>> if (defined $ref->{$id}) {
>>> my $chr = $db->get_Seq_by_id($ref->{$id}->{"id"});
>>> my $seq = $chr->trunc($ref->{$id}->{"start"},$ref->{$id}->{"end"});
>>> $seq = $seq->revcom if ($ref->{$id}->{"strand"} eq "-");
>>>
>>> # Insert SeqIO options here...
>>> print $seq->seq,"\n";
>>> } else {
>>> print "Cannot find id: $id\n";
>>> }
>>>
>>> sub make_my_id {
>>> my $line = shift;
>>> $line =~ /ref\|([^|]+)/;
>>> $1;
>>> }
>>>
>>> sub usage {
>>> system "perldoc $0";
>>> exit;
>>> }
>>>
>>> __END__
>>>
>>>
>>> _______________________________________________
>>> Bioperl-l mailing list
>>> Bioperl-l at lists.open-bio.org
>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>>
>>
>>
>> _______________________________________________
>> Bioperl-l mailing list
>> Bioperl-l at lists.open-bio.org
>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>
>
>
More information about the Bioperl-l
mailing list