require 'ruby-prof' $:.unshift '.' #require 'sinatra/base' require 'yaml' require 'logger' require 'fileutils' require 'sequenceserver/helpers' require 'sequenceserver/blast' require 'sequenceserver/sequencehelpers' require 'sequenceserver/sinatralikeloggerformatter' require 'sequenceserver/customisation' require 'sequenceserver/version' require 'sequenceserver' query = '>1111883 GCTGGCGGCGTGCCTAACACATGTAAGTCGAACGGGACTGGGGGCAACTCCAGTTCAGTG GCAGACGGGTGCGTAACACGTGAGCAACTTGTCCGACGGCGGGGGATAGCCGGCCCAACG GCCGGGTAATACCGCGTACGCTCGTTTAGGGACATCCCTGAATGAGGAAAGCCGTAAGGC ACCGACGGAGAGGCTCGCGGCCTATCAGCTAGTTGGCGGGGTAACGGCCCACCAAGGCGA CGACGGGTAGCTGGTCTGAGAGGATGGCCAGCCACATTGGGACTGAGACACGGCCCAGAC TCCTACGGGAGGCAGCAGTGGGGAATCTTGCGCAATGGCCGCAAGGCTGACGCAGCGACG CCGCGTGTGGGATGACGGCCTTCGGGTTGTAAACCACTGTCGGGAGGAACGAATACTCGG CTAGTCCGAGGGTGACGGTACCTCCAAAGGAAGCACCGGCTAACTCCGTGCCAGCAGCCG CGGTAATACGGAGGGTGCGAGCGTTGTCCGGAATCACTGGGCGTAAAGGGCGCGTAGGTG GCCCGTTAAGTGGCTGGTGAAATCCCGGGGCTCAACTCCGGGGCTGCCGGTCAGACTGGC GAGCTAGAGCACGGTAGGGGCAGATGGAATTCCCGGTGTAGCGGTGGAATGCGTAGATAT CGGGAAGAATACCAGTGGCGAAGGCGTTCTGCTGGGCCGTTGCTGACACTGAGGCGCGAC AGCGTGGGGAGCAAACAGGATTAGATACCCTGGTAGTCCACGCCGTAAACGATGGACACT AGACGTCGGGGGGAGCGACCCTCCCGGTGTCGTCGCTAACGCAGTAAGTGTCCCGCCTGG GGAGTACGGCCGCAAGGCTGAAACTCAAAGGAATTGACGGGGGCCCGCACAAGCGGTGGA GCATGTGGTTTAATTCGAAGCAACGCGAAGAACCTTACCTGGGCTTGACATGCTGGTGCA AGCCGGTGGAAACATCGGCCCCTCTTCGGAGCGCCAGCACAGGTGCTGCATGGCTGTCGT CAGCTCGTGTCGTGAGATGTTGGGTTAAGTCCCGCAACGAGCGCAACTCTCGCTCCCAGT TGCCAGCGGTTCGGCCGGGGACTCTGGGGGGACTGCCGGCGTTAAGCCGGAGGAAGGTGG GGACGACGTCAAGTCATCATGGCCCTTACGTCCAGGGCGACACACGTGCTACAATGCCTG GTACAGCGCGTCGCGAACTCGCAAGAGGGAGCCAATCGCCAAAAGCCGGGCTAAGTTCGG ATTGTCGTCTGCAACTCGACGGCATGAAGCCGGAATCGCTAGTAATCGCGGATCAGCCAC GCCGCGGTGAATACGTTCCCGGGCCTTGTACACACCGCCCGTCACGCCATGGAAGCCGGA GGGACCCGAAACCGGTGGGCCAACCGCAAGGGGGCAGCCGTCTAAGGT' #blastn -db '/home/ben/git/sequenceserver/db/97_otus.fasta' -query '/tmp/sequenceserver_query20140119-10926-qt2ecp' -task blastn -num_threads 1 -html method = 'blastn'#params['method'] databases = ['/home/ben/git/sequenceserver/db/97_otus.fasta']#params[:databases] sequence = query #params[:sequence] advanced_opts = '-max_target_seqs 1'#params['advanced'] # evaluate empty sequence as nil, otherwise as fasta # sequence = sequence.empty? ? nil : to_fasta(sequence) # blastn implies blastn, not megablast; but let's not interfere if a user # specifies `task` herself if method == 'blastn' and not advanced_opts =~ /task/ #advanced_opts << ' -task blastn ' end # run blast and log blast = SequenceServer::Blast.new(method, sequence, databases.join(' '), advanced_opts) blast.run! puts('Ran: ' + blast.command) def format_blast_results(result, databases) formatted_result = '' @all_retrievable_ids = [] string_of_used_databases = databases.join(' ') blast_database_number = 0 line_number = 0 started_query = false finished_database_summary = false finished_alignments = false reference_string = '' database_summary_string = '' result.each do |line| line_number += 1 next if line_number <= 5 #skip the first 5 lines # Add the reference to the end, not the start, of the blast result if line_number >= 7 and line_number <= 15 reference_string += line next end if !finished_database_summary and line_number > 15 database_summary_string += line finished_database_summary = true if line.match(/total letters/) next end # Remove certain lines from the output skipped_lines = [/^<\/BODY>/,/^<\/HTML>/,/^<\/PRE>/] skip = false skipped_lines.each do |skippy| # $stderr.puts "`#{line}' matches #{skippy}?" if skippy.match(line) skip = true # $stderr.puts 'yes' else # $stderr.puts 'no' end end next if skip # Remove the javascript inclusion line.gsub!(/^