module NeuroHmmerApp::RunNeuroHmmer
Module that runs NeuroHmmer
Attributes
gv_dir[R]
input_file[R]
params[R]
raw_seq[R]
unique_id[R]
xml_file[R]
Public Class Methods
init(_base_url, params)
click to toggle source
Setting the scene
# File lib/neurohmmerapp/neurohmmer.rb, line 30 def init(_base_url, params) create_unique_id create_run_dir @params = params validate_params # @url = produce_result_url_link(base_url) end
run()
click to toggle source
Runs genevalidator & Returns parsed JSON, or link to JSON/results file
# File lib/neurohmmerapp/neurohmmer.rb, line 39 def run write_seqs_to_file run_neurohmmer end
Private Class Methods
assert_input_file_present()
click to toggle source
Asserts that the input file has been generated and is not empty
# File lib/neurohmmerapp/neurohmmer.rb, line 135 def assert_input_file_present return if File.exist?(@input_file) && !File.zero?(@input_file) fail 'NeuroHmmerApp was unable to create the input file.' end
check_nps_param_present()
click to toggle source
# File lib/neurohmmerapp/neurohmmer.rb, line 93 def check_nps_param_present return if @params[:neuropeptides] fail ArgumentError, 'No neuropeptides groups specified' end
check_seq_length()
click to toggle source
# File lib/neurohmmerapp/neurohmmer.rb, line 87 def check_seq_length return unless config[:max_characters] != 'undefined' return if @params[:seq].length < config[:max_characters] fail ArgumentError, 'The input sequence is too long.' end
check_seq_param_present()
click to toggle source
Simply asserts whether that the seq param is present
# File lib/neurohmmerapp/neurohmmer.rb, line 82 def check_seq_param_present return if @params[:seq] fail ArgumentError, 'No input sequence provided.' end
create_log_file()
click to toggle source
# File lib/neurohmmerapp/neurohmmer.rb, line 153 def create_log_file @log_file = File.join(@run_dir, 'log_file.txt') logger.debug("Log file: #{@log_file}") end
create_run_dir()
click to toggle source
Create a sub_dir in the Tempdir (name is based on unique id)
# File lib/neurohmmerapp/neurohmmer.rb, line 66 def create_run_dir logger.debug("NeuroHmmerApp Tempdir = #{@run_dir}") FileUtils.mkdir_p(@run_dir) end
create_unique_id()
click to toggle source
Creates a unique run ID (based on time),
# File lib/neurohmmerapp/neurohmmer.rb, line 47 def create_unique_id @unique_id = Time.new.strftime('%Y-%m-%d_%H-%M-%S_%L-%N') @run_dir = File.join(NeuroHmmerApp.public_dir, 'NeuroHmmer', @unique_id) ensure_unique_id end
ensure_fasta_valid()
click to toggle source
Adds a ID (based on the time when submitted) to sequences that are not
in fasta format.
# File lib/neurohmmerapp/neurohmmer.rb, line 114 def ensure_fasta_valid logger.debug('Adding an ID to sequences that are not in fasta format.') unique_queries = {} sequence = @params[:seq].lstrip if sequence[0] != '>' sequence.insert(0, '>Submitted:'\ "#{Time.now.strftime('%H:%M-%B_%d_%Y')}\n") end sequence.gsub!(/^\>(\S+)/) do |s| if unique_queries.key?(s) unique_queries[s] += 1 s + '_' + (unique_queries[s] - 1).to_s else unique_queries[s] = 1 s end end @params[:seq] = sequence end
ensure_unique_id()
click to toggle source
Ensures that the Unique id is unique (if a sub dir is present in the
temp dir with the unique id, it simply creates a new one)
# File lib/neurohmmerapp/neurohmmer.rb, line 56 def ensure_unique_id while File.exist?(@run_dir) @unique_id = create_unique_id @run_dir = File.join(NeuroHmmerApp.public_dir, 'NeuroHmmer', @unique_id) end logger.debug("Unique ID = #{@unique_id}") end
ensure_unix_line_ending()
click to toggle source
# File lib/neurohmmerapp/neurohmmer.rb, line 108 def ensure_unix_line_ending @params[:seq].gsub!(/\r\n?/, "\n") end
run_neurohmmer()
click to toggle source
# File lib/neurohmmerapp/neurohmmer.rb, line 140 def run_neurohmmer opt = { temp_dir: File.join(@run_dir, 'tmp'), input_file: @input_file, num_threads: config[:num_threads], signalp_path: config[:signalp_path] } Neurohmmer.init(opt) Neurohmmer::Hmmer.search hmm_results = Neurohmmer::Hmmer.analyse_output Neurohmmer::Output.format_seqs_for_html(hmm_results) end
validate_params()
click to toggle source
Validates the paramaters provided via the app.
Only important if POST request is sent via API - Web APP also validates all params via Javascript.
# File lib/neurohmmerapp/neurohmmer.rb, line 74 def validate_params logger.debug("Input Paramaters: #{@params}") check_seq_param_present check_seq_length check_nps_param_present end
write_seqs_to_file()
click to toggle source
Writes the input sequences to a file with the sub_dir in the temp_dir
# File lib/neurohmmerapp/neurohmmer.rb, line 99 def write_seqs_to_file @input_file = File.join(@run_dir, 'input_file.fa') logger.debug("Writing input seqs to: '#{@input_file}'") ensure_unix_line_ending ensure_fasta_valid File.open(@input_file, 'w+') { |f| f.write(@params[:seq]) } assert_input_file_present end