Hi,
I am having problems with integrating sequenceserver (v. 1.14) that I am using on apache server with my own jbrowse on the same apache server. I did all (it seems so at least) what is written here .
Still - no links! Obviously, I am missing something basic here and will be very glad for your help!!!! I am not an expert (to say the least) in ruby. Here is my links.rb file -
Hope I will find my mistake here... THANKS!
module SequenceServer
# Module to contain methods for generating sequence retrieval links.
module Links
require 'erb'
# Provide a method to URL encode _query parameters_. See [1].
include ERB::Util
#
alias_method :encode, :url_encode
NCBI_ID_PATTERN = /gi\|(\d+)\|/
UNIPROT_ID_PATTERN = /sp\|(\w+)\|/
require 'json'
# Link generators return a Hash like below.
#
# {
# # Required. Display title.
# :title => "title",
#
# # Required. Generated url.
# :url => url,
#
# # Optional. Left-right order in which the link should appear.
# :order => num,
#
# # Optional. Classes, if any, to apply to the link.
# :class => "class1 class2",
#
# # Optional. Class name of a FontAwesome icon to use.
# :icon => "fa-icon-class"
# }
#
# If no url could be generated, return nil.
#
# Helper methods
# --------------
#
# Following helper methods are available to help with link generation.
#
# encode:
# URL encode query params.
#
# Don't use this function to encode the entire URL. Only params.
#
# e.g:
# sequence_id = encode sequence_id
# url = "http://www.ncbi.nlm.nih.gov/nucleotide/#{sequence_id}"
#
# querydb:
# Returns an array of databases that were used for BLASTing.
#
# whichdb:
# Returns the database from which the given hit came from.
#
# e.g:
#
# hit_database = whichdb
#
# Examples:
# ---------
# See methods provided by default for an example implementation.
def sequence_viewer
accession = encode self.accession
database_ids = encode querydb.map(&:id).join(' ')
url = "get_sequence/?sequence_ids=#{accession}" \
"&database_ids=#{database_ids}"
{
:order => 0,
:url => url,
:title => 'Sequence',
:class => 'view-sequence',
:icon => 'fa-eye'
}
end
def fasta_download
accession = encode self.accession
database_ids = encode querydb.map(&:id).join(' ')
url = "get_sequence/?sequence_ids=#{accession}" \
"&database_ids=#{database_ids}&download=fasta"
{
:order => 1,
:title => 'FASTA',
:url => url,
:class => 'download',
:icon => 'fa-download'
}
end
def ncbi
return nil unless id.match(NCBI_ID_PATTERN)
ncbi_id = Regexp.last_match[1]
ncbi_id = encode ncbi_id
url = "http://www.ncbi.nlm.nih.gov/#{querydb.first.type}/#{ncbi_id}"
{
:order => 2,
:title => 'NCBI',
:url => url,
:icon => 'fa-external-link'
}
end
def uniprot
return nil unless id.match(UNIPROT_ID_PATTERN)
uniprot_id = Regexp.last_match[1]
uniprot_id = encode uniprot_id
url = "http://www.uniprot.org/uniprot/#{uniprot_id}"
{
:order => 2,
:title => 'Uniprot',
:url => url,
:icon => 'fa-external-link'
}
end
def jbrowse
qstart = hsps.map(&:qstart).min
sstart = hsps.map(&:sstart).min
qend = hsps.map(&:qend).max
send = hsps.map(&:send).max
first_hit_start = hsps.map(&:sstart).at(0)
first_hit_end = hsps.map(&:send).at(0)
my_features = ERB::Util.url_encode(JSON.generate([{
:seq_id => accession,
:start => sstart,
:end => send,
:type => "match",
:subfeatures => hsps.map {
|hsp| {
:start => hsp.send < hsp.sstart ? hsp.send : hsp.sstart,
:end => hsp.send < hsp.sstart ? hsp.sstart : hsp.send,
:type => "match_part"
}
}
}]))
my_track = ERB::Util.url_encode(JSON.generate([
{
:label => "BLAST",
:key => "BLAST hits",
:type => "JBrowse/View/Track/CanvasFeatures",
:store => "url",
:glyph => "JBrowse/View/FeatureGlyph/Segments"
}
]))
url = "<http://http://mysite/pomegranate/>" \
"?loc=#{accession}:#{first_hit_start-500}..#{first_hit_start+500}" \
"&addFeatures=#{my_features}" \
"&addTracks=#{my_track}" \
"&tracks=BLAST" \
"&highlight=#{accession}:#{first_hit_start}..#{first_hit_end}"
{
:order => 2,
:title => 'JBrowse',
:url => url,
:icon => 'fa-external-link'
}
end
end
end
# [1]: https://stackoverflow.com/questions/2824126/whats-the-difference-between-uri-escape-and-cgi-escape
Tagging: cmdcolin
Thanks for tagging me @GenoMax . @alslonik do you think that you are loading the links.rb file properly for sequence server? e.g. using
sequenceserver -D database_dir -r links.rb
(different setup if using passenger phusion, etc but can use that command for simple local dev)Hi, Thanks for getting back. I am not sure that I load the file properly. This is what I get when I use sequenceserver -D database_dir -r links.rb
I am not too experienced with the sequenceserver side of things and don't have a great internet connection right now, you might try asking the sequenceserver mailing list if you think it is related to the links.rb file not working
Thanks, I do think it is sequenceserver. I used their mailing list, of course. Hope will find the solution there. Thank you!