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