Skip to content

Commit

Permalink
add a separate entry point for generating JSON in msa2lddt
Browse files Browse the repository at this point in the history
  • Loading branch information
gamcil committed Jul 29, 2024
1 parent 4d67ddd commit e19eb74
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 31 deletions.
1 change: 1 addition & 0 deletions src/LocalCommandDeclarations.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ extern int structuremsa(int argc, const char** argv, const Command &command);
extern int structuremsacluster(int argc, const char** argv, const Command &command);
extern int msa2lddt(int argc, const char** argv, const Command &command);
extern int msa2lddtreport(int argc, const char** argv, const Command &command);
extern int msa2lddtjson(int argc, const char** argv, const Command &command);
extern int refinemsa(int argc, const char** argv, const Command &command);
extern int convert2pdb(int argc, const char** argv, const Command &command);
extern int compressca(int argc, const char** argv, const Command &command);
Expand Down
3 changes: 2 additions & 1 deletion src/commons/FoldmasonParameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ FoldmasonParameters::FoldmasonParameters() :
refinemsa = combineList(refinemsa, structuremsa);
// easymsa
PARAM_REPORT_MODE.description = "MSA report mode 0: AA/3Di FASTA files only, 1: Compute LDDT and generate HTML report";
PARAM_REPORT_MODE.description = "MSA report mode 0: AA/3Di FASTA files only, 1: Compute LDDT and generate HTML report, 2: Compute LDDT and generate JSON";
PARAM_REPORT_MODE.regex = "^[0-2]{1}$";
easymsaworkflow = combineList(easymsaworkflow, structurecreatedb);
easymsaworkflow = combineList(easymsaworkflow, structuremsa);
easymsaworkflow = combineList(easymsaworkflow, msa2lddt);
Expand Down
8 changes: 8 additions & 0 deletions src/foldmason.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@ std::vector<struct Command> foldmasonCommands = {
CITATION_FOLDMASON, {{"queryDB", DbType::ACCESS_MODE_INPUT, DbType::NEED_DATA, &DbValidator::sequenceDb },
{"msaFile", DbType::ACCESS_MODE_INPUT, DbType::NEED_DATA, &DbValidator::flatfileAndStdin },
{"htmlFile", DbType::ACCESS_MODE_OUTPUT, DbType::NEED_DATA, &DbValidator::flatfile }}},
{"msa2lddtjson", msa2lddtjson, &foldmasonPar.msa2lddt, COMMAND_ALIGNMENT,
"Calculate LDDT of a MSA and generate HTML report",
NULL,
"Cameron Gilchrist <[email protected]> & Martin Steinegger <[email protected]>",
"<i:queryDB> <i:msaFile> <o:jsonFile>",
CITATION_FOLDMASON, {{"queryDB", DbType::ACCESS_MODE_INPUT, DbType::NEED_DATA, &DbValidator::sequenceDb },
{"msaFile", DbType::ACCESS_MODE_INPUT, DbType::NEED_DATA, &DbValidator::flatfileAndStdin },
{"jsonFile", DbType::ACCESS_MODE_OUTPUT, DbType::NEED_DATA, &DbValidator::flatfile }}},
{"refinemsa", refinemsa, &foldmasonPar.refinemsa, COMMAND_ALIGNMENT,
"Iteratively refine a MSA using structural information",
NULL,
Expand Down
69 changes: 40 additions & 29 deletions src/strucclustutils/msa2lddt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ float getLDDTScore(
return lddtScore;
}

int msa2lddt(int argc, const char **argv, const Command& command, bool makeReport) {
int msa2lddt(int argc, const char **argv, const Command& command, int makeReport) {
FoldmasonParameters &par = FoldmasonParameters::getFoldmasonInstance();

const bool touch = (par.preloadMode != Parameters::PRELOAD_MODE_MMAP);
Expand Down Expand Up @@ -419,12 +419,13 @@ int msa2lddt(int argc, const char **argv, const Command& command, bool makeRepor
resultWriter.writeData(dst, realSize, 0, 0, false, false);
*/

size_t dstSize = ZSTD_findDecompressedSize(vendor_foldmason_js_zst, vendor_foldmason_js_zst_len);
char* dst = (char*)malloc(sizeof(char) * dstSize);
size_t realSize = ZSTD_decompress(dst, dstSize, vendor_foldmason_js_zst, vendor_foldmason_js_zst_len);

std::string mainJS(const_cast<char *>(reinterpret_cast<const char *>(main_foldmason_js)), main_foldmason_js_len);
std::string htmlTemplate(
if (makeReport == 1) {
size_t dstSize = ZSTD_findDecompressedSize(vendor_foldmason_js_zst, vendor_foldmason_js_zst_len);
char* dst = (char*)malloc(sizeof(char) * dstSize);
size_t realSize = ZSTD_decompress(dst, dstSize, vendor_foldmason_js_zst, vendor_foldmason_js_zst_len);

std::string mainJS(const_cast<char *>(reinterpret_cast<const char *>(main_foldmason_js)), main_foldmason_js_len);
std::string htmlTemplate(
R"html(<!DOCTYPE html>
<html lang="en">
<head>
Expand All @@ -436,26 +437,30 @@ R"html(<!DOCTYPE html>
<div id="app"></div>
)html");

resultWriter.writeData(htmlTemplate.c_str(), htmlTemplate.size(), 0, 0, false, false);

std::string scriptStart = "<script>";
std::string scriptEnd = "</script>";
resultWriter.writeData(htmlTemplate.c_str(), htmlTemplate.size(), 0, 0, false, false);

// vendor.js
resultWriter.writeData(scriptStart.c_str(), scriptStart.size(), 0, 0, false, false);
resultWriter.writeData(dst, realSize, 0, 0, false, false);
resultWriter.writeData(scriptEnd.c_str(), scriptEnd.size(), 0, 0, false, false);

// main.js
resultWriter.writeData(scriptStart.c_str(), scriptStart.size(), 0, 0, false, false);
resultWriter.writeData(mainJS.c_str(), mainJS.size(), 0, 0, false, false);
resultWriter.writeData(scriptEnd.c_str(), scriptEnd.size(), 0, 0, false, false);

// Data <div>
const char* dataStart = "<div id=\"data\" style=\"display: none;\">\n{\"entries\": [";
resultWriter.writeData(dataStart, strlen(dataStart), 0, 0, false, false);
std::string scriptStart = "<script>";
std::string scriptEnd = "</script>";

free(dst);
// vendor.js
resultWriter.writeData(scriptStart.c_str(), scriptStart.size(), 0, 0, false, false);
resultWriter.writeData(dst, realSize, 0, 0, false, false);
resultWriter.writeData(scriptEnd.c_str(), scriptEnd.size(), 0, 0, false, false);

// main.js
resultWriter.writeData(scriptStart.c_str(), scriptStart.size(), 0, 0, false, false);
resultWriter.writeData(mainJS.c_str(), mainJS.size(), 0, 0, false, false);
resultWriter.writeData(scriptEnd.c_str(), scriptEnd.size(), 0, 0, false, false);

// Data <div>
const char* dataStart = "<div id=\"data\" style=\"display: none;\">\n{\"entries\": [";
resultWriter.writeData(dataStart, strlen(dataStart), 0, 0, false, false);

free(dst);
} else if (makeReport == 2) {
const char* dataStart = "{\"entries\": [";
resultWriter.writeData(dataStart, strlen(dataStart), 0, 0, false, false);
}

// tree: string (optional, from --guide-tree)
// entries: [ { name, aa, ss, ca }, ... ]
Expand Down Expand Up @@ -519,8 +524,11 @@ R"html(<!DOCTYPE html>
end.append(par.reportCommand);
end.append("\"");
}
end.append("}}</script>");

end.append("}}");

if (makeReport == 1) {
end.append("</script>");
}
resultWriter.writeData(end.c_str(), end.length(), 0, 0, false, false);
resultWriter.writeEnd(0, 0, false, 0);
resultWriter.close(true);
Expand All @@ -540,8 +548,11 @@ R"html(<!DOCTYPE html>


int msa2lddt(int argc, const char **argv, const Command& command) {
return msa2lddt(argc, argv, command, false);
return msa2lddt(argc, argv, command, 0);
}
int msa2lddtreport(int argc, const char **argv, const Command& command) {
return msa2lddt(argc, argv, command, true);
return msa2lddt(argc, argv, command, 1);
}
int msa2lddtjson(int argc, const char **argv, const Command& command) {
return msa2lddt(argc, argv, command, 2);
}
2 changes: 1 addition & 1 deletion src/workflow/EasyMSA.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ int easymsa(int argc, const char **argv, const Command &command) {
cmd.addVariable("THREADS_PAR", par.createParameterString(par.onlythreads).c_str());
cmd.addVariable("VERBOSITY", par.createParameterString(par.onlyverbosity).c_str());
cmd.addVariable("PRECLUSTER", par.precluster ? "TRUE" : NULL);
cmd.addVariable("MAKE_REPORT", (par.reportMode == 1) ? "TRUE" : NULL);
cmd.addVariable("MAKE_REPORT", std::to_string(par.reportMode).c_str());
cmd.addVariable("CREATEDB_PAR", par.createParameterString(par.structurecreatedb).c_str());

// needs to be last
Expand Down

0 comments on commit e19eb74

Please sign in to comment.