Skip to content

Commit 0310e6b

Browse files
committed
Merge branch 'skip_orf'
2 parents 266c894 + a804518 commit 0310e6b

File tree

7 files changed

+148
-69
lines changed

7 files changed

+148
-69
lines changed

data/workflow/createindex.sh

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,15 @@ INPUT="$1"
1818
if [ -n "$TRANSLATED" ]; then
1919
# 1. extract orf
2020
if notExists "$2/orfs_aa.dbtype"; then
21-
# shellcheck disable=SC2086
22-
"$MMSEQS" extractorfs "$INPUT" "$2/orfs_aa" ${ORF_PAR} \
23-
|| fail "extractorfs died"
21+
if [ -n "$ORF_SKIP" ]; then
22+
# shellcheck disable=SC2086
23+
"$MMSEQS" extractframes "$INPUT" "$2/orfs_aa" ${EXTRACT_FRAMES_PAR} \
24+
|| fail "extractframes died"
25+
else
26+
# shellcheck disable=SC2086
27+
"$MMSEQS" extractorfs "$INPUT" "$2/orfs_aa" ${ORF_PAR} \
28+
|| fail "extractorfs died"
29+
fi
2430
fi
2531

2632
# shellcheck disable=SC2086
@@ -33,7 +39,7 @@ if [ -n "$TRANSLATED" ]; then
3339
rm -f "$2/createindex.sh"
3440
fi
3541
elif [ -n "$LIN_NUCL" ] || [ -n "$NUCL" ]; then
36-
# 1. extract orf
42+
# 1. extract orf
3743
if notExists "$2/nucl_split_seq.dbtype"; then
3844
# shellcheck disable=SC2086
3945
"$MMSEQS" splitsequence "$INPUT" "$2/nucl_split_seq" ${SPLIT_SEQ_PAR} \

data/workflow/translated_search.sh

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,18 @@ TMP_PATH="$4"
2121
QUERY="$1"
2222
QUERY_ORF="$1"
2323
if [ -n "$QUERY_NUCL" ]; then
24-
if notExists "${TMP_PATH}/q_orfs_aa.dbtype"; then
25-
# shellcheck disable=SC2086
26-
"$MMSEQS" extractorfs "$1" "${TMP_PATH}/q_orfs_aa" ${ORF_PAR} \
27-
|| fail "extract orfs step died"
24+
if [ -n "$ORF_SKIP" ]; then
25+
if notExists "${TMP_PATH}/q_orfs_aa.dbtype"; then
26+
# shellcheck disable=SC2086
27+
"$MMSEQS" extractframes "$1" "${TMP_PATH}/q_orfs_aa" ${EXTRACT_FRAMES_PAR} \
28+
|| fail "extractframes died"
29+
fi
30+
else
31+
if notExists "${TMP_PATH}/q_orfs_aa.dbtype"; then
32+
# shellcheck disable=SC2086
33+
"$MMSEQS" extractorfs "$1" "${TMP_PATH}/q_orfs_aa" ${ORF_PAR} \
34+
|| fail "extract orfs step died"
35+
fi
2836
fi
2937
QUERY="${TMP_PATH}/q_orfs_aa"
3038
QUERY_ORF="${TMP_PATH}/q_orfs_aa"
@@ -34,10 +42,19 @@ TARGET="$2"
3442
TARGET_ORF="$2"
3543
if [ -n "$TARGET_NUCL" ]; then
3644
if [ -n "$NO_TARGET_INDEX" ]; then
37-
if notExists "${TMP_PATH}/t_orfs_aa.dbtype"; then
38-
# shellcheck disable=SC2086
39-
"$MMSEQS" extractorfs "$2" "${TMP_PATH}/t_orfs_aa" ${ORF_PAR} \
40-
|| fail "extract target orfs step died"
45+
if [ -n "$ORF_SKIP" ]; then
46+
if notExists "${TMP_PATH}/t_orfs_aa.dbtype"; then
47+
# shellcheck disable=SC2086
48+
"$MMSEQS" extractframes "$2" "${TMP_PATH}/t_orfs_aa" ${EXTRACT_FRAMES_PAR} \
49+
|| fail "extractframes died"
50+
fi
51+
else
52+
if notExists "${TMP_PATH}/t_orfs_aa.dbtype"; then
53+
# same here
54+
# shellcheck disable=SC2086
55+
"$MMSEQS" extractorfs "$2" "${TMP_PATH}/t_orfs_aa" ${ORF_PAR} \
56+
|| fail "extract target orfs step died"
57+
fi
4158
fi
4259
TARGET="${TMP_PATH}/t_orfs_aa"
4360
TARGET_ORF="${TMP_PATH}/t_orfs_aa"

src/commons/Parameters.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ Parameters::Parameters():
175175
PARAM_ORF_FILTER_S(PARAM_ORF_FILTER_S_ID, "--orf-filter-s", "ORF filter sensitivity", "Sensitivity used for query ORF prefiltering", typeid(float), (void *) &orfFilterSens, "^[0-9]*(\\.[0-9]+)?$"),
176176
PARAM_ORF_FILTER_E(PARAM_ORF_FILTER_E_ID, "--orf-filter-e", "ORF filter e-value", "E-value threshold used for query ORF prefiltering", typeid(double), (void *) &orfFilterEval, "^([-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)|[0-9]*(\\.[0-9]+)?$"),
177177
PARAM_LCA_SEARCH(PARAM_LCA_SEARCH_ID, "--lca-search", "LCA search mode", "Efficient search for LCA candidates", typeid(bool), (void *) &lcaSearch, "", MMseqsParameter::COMMAND_PROFILE | MMseqsParameter::COMMAND_EXPERT),
178+
PARAM_TRANSLATION_MODE(PARAM_TRANSLATION_MODE_ID, "--translation-mode", "Translation mode", "Translation AA seq from nucleotide by 0: ORFs, 1: full reading frames", typeid(int), (void *) &translationMode, "^[0-1]{1}$"),
178179
// easysearch
179180
PARAM_GREEDY_BEST_HITS(PARAM_GREEDY_BEST_HITS_ID, "--greedy-best-hits", "Greedy best hits", "Choose the best hits greedily to cover the query", typeid(bool), (void *) &greedyBestHits, ""),
180181
// extractorfs
@@ -733,7 +734,9 @@ Parameters::Parameters():
733734
734735
// extract frames
735736
extractframes.push_back(&PARAM_ORF_FORWARD_FRAMES);
736-
extractframes.push_back(&PARAM_ORF_REVERSE_FRAMES);
737+
extractframes.push_back(&PARAM_ORF_REVERSE_FRAMES);
738+
extractframes.push_back(&PARAM_TRANSLATION_TABLE);
739+
extractframes.push_back(&PARAM_TRANSLATE);
737740
extractframes.push_back(&PARAM_CREATE_LOOKUP);
738741
extractframes.push_back(&PARAM_THREADS);
739742
extractframes.push_back(&PARAM_COMPRESSED);
@@ -1268,7 +1271,7 @@ Parameters::Parameters():
12681271
searchworkflow = combineList(searchworkflow, rescorediagonal);
12691272
searchworkflow = combineList(searchworkflow, result2profile);
12701273
searchworkflow = combineList(searchworkflow, extractorfs);
1271-
searchworkflow = combineList(searchworkflow, translatenucs);
1274+
searchworkflow = combineList(searchworkflow, extractframes);
12721275
searchworkflow = combineList(searchworkflow, splitsequence);
12731276
searchworkflow = combineList(searchworkflow, offsetalignment);
12741277
// needed for slice search, however all its parameters are already present in searchworkflow
@@ -1284,6 +1287,7 @@ Parameters::Parameters():
12841287
searchworkflow.push_back(&PARAM_RUNNER);
12851288
searchworkflow.push_back(&PARAM_REUSELATEST);
12861289
searchworkflow.push_back(&PARAM_REMOVE_TMP_FILES);
1290+
searchworkflow.push_back(&PARAM_TRANSLATION_MODE);
12871291
12881292
linsearchworkflow = combineList(align, kmersearch);
12891293
linsearchworkflow = combineList(linsearchworkflow, swapresult);
@@ -1307,8 +1311,9 @@ Parameters::Parameters():
13071311
13081312
// createindex workflow
13091313
createindex = combineList(indexdb, extractorfs);
1310-
createindex = combineList(createindex, translatenucs);
1314+
createindex = combineList(createindex, extractframes);
13111315
createindex = combineList(createindex, splitsequence);
1316+
createindex.push_back(&PARAM_TRANSLATION_MODE);
13121317
createindex.push_back(&PARAM_STRAND);
13131318
createindex.push_back(&PARAM_REMOVE_TMP_FILES);
13141319
@@ -2318,6 +2323,7 @@ void Parameters::setDefaults() {
23182323
orfFilterSens = 2.0;
23192324
orfFilterEval = 100;
23202325
lcaSearch = false;
2326+
translationMode = PARAM_TRANSLATION_MODE_ORF;
23212327

23222328
greedyBestHits = false;
23232329

src/commons/Parameters.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,10 @@ class Parameters {
323323
static const int PARAM_RESULT_DIRECTION_QUERY = 0;
324324
static const int PARAM_RESULT_DIRECTION_TARGET = 1;
325325

326+
// translation mode
327+
static const int PARAM_TRANSLATION_MODE_ORF = 0;
328+
static const int PARAM_TRANSLATION_MODE_FRAME = 1;
329+
326330
// path to databases
327331
std::string db1;
328332
std::string db1Index;
@@ -471,6 +475,7 @@ class Parameters {
471475
float orfFilterSens;
472476
double orfFilterEval;
473477
bool lcaSearch;
478+
int translationMode;
474479

475480
// easysearch
476481
bool greedyBestHits;
@@ -892,6 +897,7 @@ class Parameters {
892897
PARAMETER(PARAM_ORF_FILTER_S)
893898
PARAMETER(PARAM_ORF_FILTER_E)
894899
PARAMETER(PARAM_LCA_SEARCH)
900+
PARAMETER(PARAM_TRANSLATION_MODE)
895901

896902
// easysearch
897903
PARAMETER(PARAM_GREEDY_BEST_HITS)

src/util/extractframes.cpp

Lines changed: 82 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
#include "DBWriter.h"
55
#include "Matcher.h"
66
#include "Util.h"
7-
#include "itoa.h"
8-
7+
#include "TranslateNucl.h"
98
#include "Orf.h"
109

1110
#include <unistd.h>
@@ -16,23 +15,63 @@
1615
#include <omp.h>
1716
#endif
1817

18+
void handleSingleFrame(TranslateNucl& translateNucl, DBWriter& sequenceWriter, DBWriter& headerWriter, unsigned int key, char* headerBuffer, const char* data, size_t seqLen, int frame, bool reverse, bool translate, char*& aaBuffer, size_t& aaBufferSize, int thread_idx) {
19+
data = data + frame;
20+
seqLen = seqLen - frame;
21+
if (translate == true) {
22+
if (seqLen < 3) {
23+
return;
24+
}
25+
size_t codonLength = (seqLen / 3) * 3;
26+
if ((codonLength + 1) > aaBufferSize) {
27+
aaBufferSize = codonLength * 1.5 + 1;
28+
aaBuffer = (char*)realloc(aaBuffer, aaBufferSize * sizeof(char));
29+
}
30+
translateNucl.translate(aaBuffer, data, codonLength);
31+
aaBuffer[codonLength / 3] = '\n';
32+
sequenceWriter.writeData(aaBuffer, (codonLength / 3) + 1, key, thread_idx);
33+
size_t bufferLen;
34+
if (reverse) {
35+
bufferLen = Orf::writeOrfHeader(headerBuffer, key, frame + codonLength, static_cast<size_t>(frame), 0, 0);
36+
} else {
37+
bufferLen = Orf::writeOrfHeader(headerBuffer, key, static_cast<size_t>(frame), frame + codonLength, 0, 0);
38+
}
39+
headerWriter.writeData(headerBuffer, bufferLen, key, thread_idx);
40+
} else {
41+
// +1: add newline, but remove it from the end pos
42+
sequenceWriter.writeData(data, seqLen + 1, key, thread_idx);
43+
size_t bufferLen;
44+
if (reverse) {
45+
bufferLen = Orf::writeOrfHeader(headerBuffer, key, seqLen - 1, static_cast<size_t>(frame), 0, 0);
46+
} else {
47+
bufferLen = Orf::writeOrfHeader(headerBuffer, key, static_cast<size_t>(frame), seqLen - 1, 0, 0);
48+
}
49+
headerWriter.writeData(headerBuffer, bufferLen, key, thread_idx);
50+
}
51+
}
52+
1953
int extractframes(int argc, const char **argv, const Command& command) {
2054
Parameters& par = Parameters::getInstance();
2155
par.parseParameters(argc, argv, command, true, 0, 0);
2256

2357
DBReader<unsigned int> reader(par.db1.c_str(), par.db1Index.c_str(), par.threads, DBReader<unsigned int>::USE_INDEX|DBReader<unsigned int>::USE_DATA);
2458
reader.open(DBReader<unsigned int>::NOSORT);
2559

26-
DBWriter sequenceWriter(par.db2.c_str(), par.db2Index.c_str(), par.threads, par.compressed, reader.getDbtype());
60+
int outputDbtype = reader.getDbtype();
61+
if (par.translate) {
62+
outputDbtype = Parameters::DBTYPE_AMINO_ACIDS;
63+
}
64+
DBWriter sequenceWriter(par.db2.c_str(), par.db2Index.c_str(), par.threads, par.compressed, outputDbtype);
2765
sequenceWriter.open();
2866

2967
DBWriter headerWriter(par.hdr2.c_str(), par.hdr2Index.c_str(), par.threads, false, Parameters::DBTYPE_GENERIC_DB);
3068
headerWriter.open();
3169

3270
unsigned int forwardFrames = Orf::getFrames(par.forwardFrames);
3371
unsigned int reverseFrames = Orf::getFrames(par.reverseFrames);
34-
Debug::Progress progress(reader.getSize());
3572

73+
Debug::Progress progress(reader.getSize());
74+
TranslateNucl translateNucl(static_cast<TranslateNucl::GenCode>(par.translationTable));
3675
#pragma omp parallel
3776
{
3877
int thread_idx = 0;
@@ -46,70 +85,66 @@ int extractframes(int argc, const char **argv, const Command& command) {
4685
queryFrom = 0;
4786
}
4887

88+
size_t aaBufferSize = par.maxSeqLen + 3 + 1;
89+
char* aa = NULL;
90+
if (par.translate == true) {
91+
aa = (char*)malloc(aaBufferSize * sizeof(char));
92+
}
93+
4994
char buffer[1024];
95+
5096
std::string reverseComplementStr;
5197
reverseComplementStr.reserve(32000);
98+
5299
for (unsigned int i = queryFrom; i < (queryFrom + querySize); ++i){
53100
progress.updateProgress();
54101

55102
unsigned int key = reader.getDbKey(i);
56103
const char* data = reader.getData(i, thread_idx);
57-
size_t dataLength = reader.getEntryLen(i);
58-
59-
size_t bufferLen;
60-
switch (forwardFrames){
61-
case Orf::FRAME_1:
62-
// -1 to ignore the null byte copy the new line
63-
sequenceWriter.writeData(data, dataLength - 1, key, thread_idx);
64-
bufferLen = Orf::writeOrfHeader(buffer, key, static_cast<size_t >(0), dataLength - 3, 0, 0);
65-
headerWriter.writeData(buffer, bufferLen, key, thread_idx);
66-
break;
67-
case Orf::FRAME_2:
68-
sequenceWriter.writeData(data + 1, dataLength - 2, key, thread_idx);
69-
bufferLen = Orf::writeOrfHeader(buffer, key, static_cast<size_t >(1), dataLength - 4, 0, 0);
70-
headerWriter.writeData(buffer, bufferLen, key, thread_idx);
71-
break;
72-
case Orf::FRAME_3:
73-
sequenceWriter.writeData(data + 2, dataLength - 3, key, thread_idx);
74-
bufferLen = Orf::writeOrfHeader(buffer, key, static_cast<size_t >(2), dataLength - 5, 0, 0);
75-
headerWriter.writeData(buffer, bufferLen, key, thread_idx);
76-
break;
104+
size_t seqLen = reader.getSeqLen(i);
105+
106+
if (forwardFrames & Orf::FRAME_1) {
107+
handleSingleFrame(translateNucl, sequenceWriter, headerWriter, key, buffer, data, seqLen, 0, false, par.translate, aa, aaBufferSize, thread_idx);
108+
}
109+
if (forwardFrames & Orf::FRAME_2) {
110+
handleSingleFrame(translateNucl, sequenceWriter, headerWriter, key, buffer, data, seqLen, 1, false, par.translate, aa, aaBufferSize, thread_idx);
111+
}
112+
if (forwardFrames & Orf::FRAME_3) {
113+
handleSingleFrame(translateNucl, sequenceWriter, headerWriter, key, buffer, data, seqLen, 2, false, par.translate, aa, aaBufferSize, thread_idx);
77114
}
78115

79-
if(reverseFrames != 0){
80-
size_t sequenceLength = dataLength -2;
116+
if (reverseFrames != 0) {
81117
// bool hasWrongChar = false;
82-
for(size_t pos = 0; pos < sequenceLength; ++pos) {
83-
char reverseComplement = Orf::complement(data[sequenceLength - pos - 1]);
118+
for (size_t pos = 0; pos < seqLen; ++pos) {
119+
char reverseComplement = Orf::complement(data[seqLen - pos - 1]);
84120
reverseComplement = (reverseComplement == '.') ? 'N' : reverseComplement;
85121
reverseComplementStr.push_back(reverseComplement);
86122
// hasWrongChar |= (reverseComplement == '.');
87123
}
88-
// if(hasWrongChar == true){
89-
// continue;
90-
// }
124+
// if (hasWrongChar == true) {
125+
// continue;
126+
// }
91127
reverseComplementStr.push_back('\n');
128+
seqLen = reverseComplementStr.size() - 1;
129+
data = reverseComplementStr.c_str();
92130
}
93131

94-
switch (reverseFrames){
95-
case Orf::FRAME_1:
96-
sequenceWriter.writeData(reverseComplementStr.c_str(), reverseComplementStr.size(), key, thread_idx);
97-
bufferLen = Orf::writeOrfHeader(buffer, key, reverseComplementStr.size() - 2, static_cast<size_t >(0), 0, 0);
98-
headerWriter.writeData(buffer, bufferLen, key, thread_idx);
99-
break;
100-
case Orf::FRAME_2:
101-
sequenceWriter.writeData(reverseComplementStr.c_str()+1, reverseComplementStr.size()-1, key, thread_idx);
102-
bufferLen = Orf::writeOrfHeader(buffer, key, reverseComplementStr.size() - 3, static_cast<size_t >(1), 0, 0);
103-
headerWriter.writeData(buffer, bufferLen, key, thread_idx);
104-
break;
105-
case Orf::FRAME_3:
106-
sequenceWriter.writeData(reverseComplementStr.c_str()+2, reverseComplementStr.size()-2, key, thread_idx);
107-
bufferLen = Orf::writeOrfHeader(buffer, key, reverseComplementStr.size() - 4, static_cast<size_t >(2), 0, 0);
108-
headerWriter.writeData(buffer, bufferLen, key, thread_idx);
109-
break;
132+
if (reverseFrames & Orf::FRAME_1) {
133+
handleSingleFrame(translateNucl, sequenceWriter, headerWriter, key, buffer, data, seqLen, 0, true, par.translate, aa, aaBufferSize, thread_idx);
134+
}
135+
136+
if (reverseFrames & Orf::FRAME_2) {
137+
handleSingleFrame(translateNucl, sequenceWriter, headerWriter, key, buffer, data, seqLen, 1, true, par.translate, aa, aaBufferSize, thread_idx);
138+
}
139+
140+
if (reverseFrames & Orf::FRAME_3) {
141+
handleSingleFrame(translateNucl, sequenceWriter, headerWriter, key, buffer, data, seqLen, 2, true, par.translate, aa, aaBufferSize, thread_idx);
110142
}
111143
reverseComplementStr.clear();
112144
}
145+
if (aa != NULL) {
146+
free(aa);
147+
}
113148
}
114149
headerWriter.close(true);
115150
sequenceWriter.close(true);

src/workflow/CreateIndex.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,12 @@ int createindex(Parameters &par, const Command &command, const std::string &inde
4242
cmd.addVariable("INDEXER", indexerModule.c_str());
4343
cmd.addVariable("REMOVE_TMP", par.removeTmpFiles ? "TRUE" : NULL);
4444
par.translate = 1;
45-
cmd.addVariable("ORF_PAR", par.createParameterString(par.extractorfs).c_str());
46-
cmd.addVariable("EXTRACT_FRAMES_PAR", par.createParameterString(par.extractframes).c_str());
45+
cmd.addVariable("ORF_SKIP", par.translationMode == Parameters::PARAM_TRANSLATION_MODE_FRAME ? "TRUE" : NULL);
46+
if (par.translationMode == Parameters::PARAM_TRANSLATION_MODE_FRAME) {
47+
cmd.addVariable("EXTRACT_FRAMES_PAR", par.createParameterString(par.extractframes).c_str());
48+
} else {
49+
cmd.addVariable("ORF_PAR", par.createParameterString(par.extractorfs).c_str());
50+
}
4751
cmd.addVariable("SPLIT_SEQ_PAR", par.createParameterString(par.splitsequence).c_str());
4852
if(indexerModule == "kmerindexdb"){
4953
cmd.addVariable("INDEX_PAR", par.createParameterString(par.kmerindexdb).c_str());

src/workflow/Search.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@ int search(int argc, const char **argv, const Command& command) {
208208
for (size_t i = 0; i < par.extractorfs.size(); i++) {
209209
par.extractorfs[i]->addCategory(MMseqsParameter::COMMAND_EXPERT);
210210
}
211-
for (size_t i = 0; i < par.translatenucs.size(); i++) {
212-
par.translatenucs[i]->addCategory(MMseqsParameter::COMMAND_EXPERT);
211+
for (size_t i = 0; i < par.extractframes.size(); i++) {
212+
par.extractframes[i]->addCategory(MMseqsParameter::COMMAND_EXPERT);
213213
}
214214
for (size_t i = 0; i < par.splitsequence.size(); i++) {
215215
par.splitsequence[i]->addCategory(MMseqsParameter::COMMAND_EXPERT);
@@ -564,17 +564,22 @@ int search(int argc, const char **argv, const Command& command) {
564564

565565
if (searchMode & (Parameters::SEARCH_MODE_FLAG_QUERY_TRANSLATED|Parameters::SEARCH_MODE_FLAG_TARGET_TRANSLATED)) {
566566
cmd.addVariable("NO_TARGET_INDEX", (indexStr == "") ? "TRUE" : NULL);
567-
FileUtil::writeFile(tmpDir + "/translated_search.sh", translated_search_sh, translated_search_sh_len);
568567
cmd.addVariable("QUERY_NUCL", (searchMode & Parameters::SEARCH_MODE_FLAG_QUERY_TRANSLATED) ? "TRUE" : NULL);
569-
cmd.addVariable("TARGET_NUCL", (searchMode & Parameters::SEARCH_MODE_FLAG_TARGET_TRANSLATED) ? "TRUE" : NULL);
568+
cmd.addVariable("TARGET_NUCL", (searchMode & Parameters::SEARCH_MODE_FLAG_TARGET_TRANSLATED) ? "TRUE" : NULL);
570569
cmd.addVariable("THREAD_COMP_PAR", par.createParameterString(par.threadsandcompression).c_str());
571570
par.subDbMode = 1;
572571
cmd.addVariable("CREATESUBDB_PAR", par.createParameterString(par.createsubdb).c_str());
573572
par.translate = 1;
574-
cmd.addVariable("ORF_PAR", par.createParameterString(par.extractorfs).c_str());
575573
cmd.addVariable("OFFSETALIGNMENT_PAR", par.createParameterString(par.offsetalignment).c_str());
574+
cmd.addVariable("ORF_SKIP", par.translationMode == Parameters::PARAM_TRANSLATION_MODE_FRAME ? "TRUE" : NULL);
575+
if (par.translationMode == Parameters::PARAM_TRANSLATION_MODE_FRAME) {
576+
cmd.addVariable("EXTRACT_FRAMES_PAR", par.createParameterString(par.extractframes).c_str());
577+
} else {
578+
cmd.addVariable("ORF_PAR", par.createParameterString(par.extractorfs).c_str());
579+
}
576580
cmd.addVariable("SEARCH", program.c_str());
577581
program = std::string(tmpDir + "/translated_search.sh");
582+
FileUtil::writeFile(program.c_str(), translated_search_sh, translated_search_sh_len);
578583
}else if(searchMode & Parameters::SEARCH_MODE_FLAG_QUERY_NUCLEOTIDE &&
579584
searchMode & Parameters::SEARCH_MODE_FLAG_TARGET_NUCLEOTIDE){
580585
if (par.gpu != 0) {

0 commit comments

Comments
 (0)