forked from soedinglab/MMseqs2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Taxonomy.cpp
81 lines (71 loc) · 3.05 KB
/
Taxonomy.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "Parameters.h"
#include "FileUtil.h"
#include "Debug.h"
#include "Util.h"
#include "CommandCaller.h"
#include "taxonomy.sh.h"
void setTaxonomyDefaults(Parameters *p) {
p->spacedKmer = true;
p->alignmentMode = Parameters::ALIGNMENT_MODE_SCORE_COV;
p->sensitivity = 5.7;
p->evalThr = 1;
p->orfStartMode = 1;
p->orfMinLength = 30;
p->orfMaxLength = 32734;
}
int taxonomy(int argc, const char **argv, const Command& command) {
Parameters& par = Parameters::getInstance();
setTaxonomyDefaults(&par);
par.parseParameters(argc, argv, command, 4);
if(FileUtil::directoryExists(par.db4.c_str())==false){
Debug(Debug::INFO) << "Tmp " << par.db4 << " folder does not exist or is not a directory.\n";
if(FileUtil::makeDir(par.db4.c_str()) == false){
Debug(Debug::ERROR) << "Can not create tmp folder " << par.db4 << ".\n";
EXIT(EXIT_FAILURE);
}else{
Debug(Debug::INFO) << "Created dir " << par.db4 << "\n";
}
}
std::string hash = SSTR(par.hashParameter(par.filenames, par.taxonomy));
if(par.reuseLatest){
hash = FileUtil::getHashFromSymLink(par.db4+"/latest");
}
std::string tmpDir = par.db4+"/"+hash;
if(FileUtil::directoryExists(tmpDir.c_str())==false) {
if (FileUtil::makeDir(tmpDir.c_str()) == false) {
Debug(Debug::ERROR) << "Can not create sub tmp folder " << tmpDir << ".\n";
EXIT(EXIT_FAILURE);
}
}
par.filenames.pop_back();
par.filenames.push_back(tmpDir);
FileUtil::symlinkAlias(tmpDir, "latest");
CommandCaller cmd;
cmd.addVariable("REMOVE_TMP", par.removeTmpFiles ? "TRUE" : NULL);
cmd.addVariable("RUNNER", par.runner.c_str());
int alignmentMode = par.alignmentMode;
if (par.taxonomySearchMode == Parameters::TAXONOMY_2BLCA) {
// at least cov must be set for extractalignedregion
int targetMode = (int)Parameters::ALIGNMENT_MODE_SCORE_COV;
par.alignmentMode = std::max(par.alignmentMode, targetMode);
}
cmd.addVariable("SEARCH1_PAR", par.createParameterString(par.searchworkflow).c_str());
par.alignmentMode = alignmentMode;
if (par.taxonomySearchMode == Parameters::TAXONOMY_TOP_HIT) {
cmd.addVariable("TOP_HIT", "1");
}else if (par.taxonomySearchMode == Parameters::TAXONOMY_2BLCA){
par.sensSteps = 1;
cmd.addVariable("SEARCH2_PAR", par.createParameterString(par.searchworkflow).c_str());
}else if(par.taxonomySearchMode == Parameters::TAXONOMY_2BLCA_APPROX){
cmd.addVariable("APPROX_2BLCA", "1");
cmd.addVariable("SEARCH2_PAR", par.createParameterString(par.align).c_str());
}
if (par.taxonomyOutpuMode == Parameters::TAXONOMY_OUTPUT_LCA) {
cmd.addVariable("TAX_OUTPUT_LCA", "1" );
cmd.addVariable("LCA_PAR", par.createParameterString(par.lca).c_str());
}
FileUtil::writeFile(tmpDir + "/taxonomy.sh", taxonomy_sh, taxonomy_sh_len);
std::string program(tmpDir + "/taxonomy.sh");
cmd.execProgram(program.c_str(), par.filenames);
return EXIT_SUCCESS;
}