commit: e870de5e7451b02cb563d5567dcb7ddccced0eab
Author: Martin Mokrejš <mmokrejs <AT> fold <DOT> natur <DOT> cuni <DOT> cz>
AuthorDate: Wed Feb 10 14:50:27 2016 +0000
Commit: Martin Mokrejs <mmokrejs <AT> fold <DOT> natur <DOT> cuni <DOT> cz>
CommitDate: Wed Feb 10 14:50:27 2016 +0000
URL: https://gitweb.gentoo.org/proj/sci.git/commit/?id=e870de5e
sci-biology/full_lengther_next: version bump
Package-Manager: portage-2.2.26
.../full_lengther_next/files/download_fln_dbs.rb | 260 +++++++++++++++++++++
....0.8.ebuild => full_lengther_next-0.5.6.ebuild} | 5 +
2 files changed, 265 insertions(+)
diff --git a/sci-biology/full_lengther_next/files/download_fln_dbs.rb
b/sci-biology/full_lengther_next/files/download_fln_dbs.rb
new file mode 100644
index 0000000..90eacbb
--- /dev/null
+++ b/sci-biology/full_lengther_next/files/download_fln_dbs.rb
@@ -0,0 +1,260 @@
+#!/usr/bin/env ruby
+
+# 15-2-2011 Noe Fernandez-Pozo
+# Script to download Full-LengtherNext databases.
+# Once in UniProtKB/Swiss-Prot, a protein entry is removed from
UniProtKB/TrEMBL.
+
+require 'net/ftp'
+require 'open-uri'
+
+class FtpClient
+
+def initialize
+end
+
+def connect(server)
+ @server=server
+end
+
+def login
+
+end
+
+def chdir(dir)
+ @dir=dir
+end
+
+def getbinaryfile(file,output_file)
+ if !File.exists?(output_file) &&
!File.exists?(output_file.gsub('.gz',''))
+ puts " - Downloading"
+ cmd="wget #{@server}/#{@dir}/#{file} -O #{output_file}"
+ system(cmd)
+ else
+ puts "File #{output_file}, or #{output_file.gsub('.gz','')} already
exists. Skip download"
+ end
+
+end
+
+def close
+end
+
+end
+################################################### Functions
+
+def download_ncrna(formatted_db_path)
+
+ if !File.exists?(File.join(formatted_db_path, "nc_rna_db"))
+ Dir.mkdir(File.join(formatted_db_path, "nc_rna_db"))
+ end
+
+ puts "Downloading ncRNA database"
+ open(File.join(formatted_db_path, "nc_rna_db/ncrna_fln_100.fasta.zip"),
"wb") do |my_file|
+ my_file.print
open('http://www.scbi.uma.es/downloads/FLNDB/ncrna_fln_100.fasta.zip').read
+ end
+ puts "\nncRNA database downloaded"
+
+
ncrna_zip=File.join(formatted_db_path,'nc_rna_db','ncrna_fln_100.fasta.zip')
+ ncrna_out_dir=File.join(formatted_db_path,'nc_rna_db')
+ system("unzip", ncrna_zip, "-d", ncrna_out_dir)
+ system("rm", ncrna_zip)
+
+ puts "\nncRNA database decompressed"
+
+
ncrna_fasta=File.join(formatted_db_path,'nc_rna_db','ncrna_fln_100.fasta')
+ system("makeblastdb", "-in", ncrna_fasta, "-dbtype", "nucl",
"-parse_seqids")
+
+ puts "\nncRNA database completed"
+end
+
+def conecta_uniprot(my_array, formatted_db_path)
+
+ #$ftp = Net::FTP.new()
+ $ftp = FtpClient.new()
+
+ if !File.exists?(formatted_db_path)
+ Dir.mkdir(formatted_db_path)
+ end
+
+ $ftp.connect('ftp://ftp.uniprot.org')
+
+ $ftp.login
+
+ puts "connected to UniProt"
+
+ my_array.each do |db_group|
+ puts "Downloading #{db_group}"
+ download_uniprot(db_group, formatted_db_path)
+ end
+
+
varsplic_out=File.join(formatted_db_path,'uniprot_sprot_varsplic.fasta.gz')
+
$ftp.chdir("/pub/databases/uniprot/current_release/knowledgebase/complete")
+ $ftp.getbinaryfile("uniprot_sprot_varsplic.fasta.gz", varsplic_out)
+
+ puts "isoform files downloaded"
+
+ $ftp.close
+
+end
+
+def download_uniprot(uniprot_group, formatted_db_path)
+
+
sp_out=File.join(formatted_db_path,"uniprot_sprot_#{uniprot_group}.dat.gz")
+
tr_out=File.join(formatted_db_path,"uniprot_trembl_#{uniprot_group}.dat.gz")
+
$ftp.chdir("/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions")
+ puts " from
ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_sprot_#{uniprot_group}.dat.gz"
+ puts " from
ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_trembl_#{uniprot_group}.dat.gz"
+ $ftp.getbinaryfile("uniprot_sprot_#{uniprot_group}.dat.gz", sp_out)
+ $ftp.getbinaryfile("uniprot_trembl_#{uniprot_group}.dat.gz", tr_out)
+
+ puts "#{uniprot_group} files downloaded"
+
+end
+
+def filter_incomplete_seqs(file_name, isoform_hash, formatted_db_path)
+
+ puts "filtering sequences from #{file_name}"
+
+ # UniProtKB fragments with FT NON_CONS and FT NON_TER features.
+ #
+ # * FT NON_TER: The residue at an extremity of the sequence is not
the terminal residue. If applied to position 1, this signifies that the first
position is not the N-terminus of the complete molecule. If applied to the last
position, it means that this position is not the C-terminus of the complete
molecule. There is no description field for this key. Examples of NON_TER key
feature lines:
+ # FT NON_TER 1 1
+ # FT NON_TER 29 29
+ # * FT NON_CONS: Non-consecutive residues. Indicates that two
residues in a sequence are not consecutive and that there are a number of
unreported or missing residues between them. Example of a NON_CONS key feature
line:
+ # FT NON_CONS 1683 1684
+ #
+ # NON_CONS fragments are not indicated as non-consecutive in InterPro
and being non-consecutive the match to methods may be incorrect if the method
spans the 'break'.
+
+ newseq=false
+ print_seq=true
+ id=''
+ description = ''
+ organism_name = ''
+ seq = ''
+ organelle = ''
+
+ file_name =~ /uniprot_([a-z]+)_([a-z]+).dat/
+ db_name = $1
+ output_name = $2
+ db_name.sub!('sprot','sp')
+ db_name.sub!('trembl','tr')
+
+ if !File.exists?(File.join(formatted_db_path,
"#{db_name}_#{output_name}"))
+ Dir.mkdir(File.join(formatted_db_path,
"#{db_name}_#{output_name}"))
+ end
+
+ output_file = File.new(File.join(formatted_db_path,
"#{db_name}_#{output_name}/#{db_name}_#{output_name}.fasta"), "w")
+
+ File.open(file_name).each_line do |line|
+ if (newseq == false)
+ if (line =~ /^AC\s+(\w+);/)
+ id=$1
+ newseq = true
+ description = ''
+ organism_name = ''
+ seq = ''
+ print_seq = true
+ organelle = ''
+ end
+ else
+ if (line =~ /^DE\s+(.+)\;*/)
+ if (description == '')
+ description = $1
+ description.sub!(/RecName: Full=/,'sp=')
+ description.sub!(/SubName: Full=/,'tr=')
+ end
+ if (line =~ /Flags: Fragment/)
+ # puts "#{id} #{line}"
+ print_seq=false
+ end
+ elsif (line =~ /^OS\s+(.+)/)
+ organism_name = $1
+ elsif (line =~ /^OG\s+(.+)/)
+ organelle = $1
+ elsif (line =~ /^FT\s+NON_TER\s+/)
+ print_seq=false
+ # puts "#{id} NON_TER"
+ elsif (line =~ /^FT\s+NON_CONS\s+(\d+)\s+/)
+ print_seq=false
+ # puts "#{id} NON_CONS"
+ elsif (line =~ /^\s+([\w\s]+)/)
+ seq += $1
+ elsif (line =~ /^\/\//)
+ seq.gsub!(/\s*/,'')
+ if (seq !~ /^M/i)
+ print_seq=false
+ end
+ newseq = false
+
+ if (print_seq)
+ output_file.puts ">#{id} #{description}
#{organism_name} #{organelle}\n#{seq}"
+ if (!isoform_hash[id].nil?)
+ output_file.puts
isoform_hash[id]
+ end
+ end
+ end
+ end
+ end
+ output_file.close
+end
+
+def load_isoform_hash(file)
+
+ isoform_hash = {}
+ my_fasta = ''
+ acc = ''
+ File.open(file).each do |line|
+ line.chomp!
+ if (line =~ /(^>\w+\|(\w+)\-\d\|.+)/)
+ if (isoform_hash[acc].nil?)
+ isoform_hash[acc]= "#{my_fasta}\n"
+ else
+ isoform_hash[acc]+= "#{my_fasta}\n"
+ end
+ my_fasta = "#{$1}\n"
+ acc = $2
+ else
+ my_fasta += line
+ end
+ end
+
+ return isoform_hash
+end
+
+################################################### MAIN
+
+ROOT_PATH=File.dirname(__FILE__)
+
+if ENV['BLASTDB'] && File.exists?(ENV['BLASTDB'])
+ formatted_db_path = ENV['BLASTDB']
+else # otherwise use ROOTPATH + DB
+ formatted_db_path = File.expand_path(File.join(ROOT_PATH, "blast_dbs"))
+end
+
+ENV['BLASTDB']=formatted_db_path
+puts "Databases will be downloaded at: #{ENV['BLASTDB']}"
+puts "\nTo set the path for storing databases, execute next line in your
terminal or add it to your .bash_profile:\n\n\texport BLASTDB=/my_path/\n\n"
+
+my_array =
["human","fungi","invertebrates","mammals","plants","rodents","vertebrates"]
+# my_array = ["plants","human"] # used for a shoter test
+
+conecta_uniprot(my_array, formatted_db_path)
+system('gunzip '+File.join(formatted_db_path,'*.gz'))
+
+isoform_hash = {}
+isoform_hash = load_isoform_hash(File.join(formatted_db_path,
"uniprot_sprot_varsplic.fasta"))
+
+download_ncrna(formatted_db_path)
+
+my_array.each do |db_group|
+
+ filter_incomplete_seqs(File.join(formatted_db_path,
"uniprot_sprot_#{db_group}.dat"), isoform_hash, formatted_db_path)
+ filter_incomplete_seqs(File.join(formatted_db_path,
"uniprot_trembl_#{db_group}.dat"), isoform_hash, formatted_db_path)
+
+
sp_fasta=File.join(formatted_db_path,"sp_#{db_group}","sp_#{db_group}.fasta")
+
tr_fasta=File.join(formatted_db_path,"tr_#{db_group}","tr_#{db_group}.fasta")
+ system("makeblastdb -in #{sp_fasta} -dbtype 'prot' -parse_seqids")
+ system("makeblastdb -in #{tr_fasta} -dbtype 'prot' -parse_seqids")
+
+end
+
+puts "download_fln_dbs.rb has finished"
diff --git a/sci-biology/full_lengther_next/full_lengther_next-0.0.8.ebuild
b/sci-biology/full_lengther_next/full_lengther_next-0.5.6.ebuild
similarity index 84%
rename from sci-biology/full_lengther_next/full_lengther_next-0.0.8.ebuild
rename to sci-biology/full_lengther_next/full_lengther_next-0.5.6.ebuild
index 0465bc0..52412c0 100644
--- a/sci-biology/full_lengther_next/full_lengther_next-0.0.8.ebuild
+++ b/sci-biology/full_lengther_next/full_lengther_next-0.5.6.ebuild
@@ -28,3 +28,8 @@ RDEPEND="${DEPEND}
>=sci-biology/scbi_mapreduce-0.0.29
>=sci-biology/scbi_plot-0.0.6
>=dev-ruby/xml-simple-1.0.12"
+
+#src_prepare(){
+# cp "${FILESDIR}"/download_fln_dbs.rb all/full_lengther_next-0.0.8/bin
|| die
+# chmod a+rx all/full_lengther_next-0.0.8/bin/*.rb || die
+#}