Skip to content

Commit b40729c

Browse files
Fix issue #312
alntmscore is now normalized by the backtrace length
1 parent 69d397b commit b40729c

File tree

4 files changed

+18
-17
lines changed

4 files changed

+18
-17
lines changed

Diff for: src/strucclustutils/aln2tmscore.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,11 @@ int aln2tmscore(int argc, const char **argv, const Command& command) {
101101
float* tdata = tcoords.read(tcadata, targetLen, tCaLength);
102102

103103
// Matching residue index collection
104+
unsigned int normLen = std::min(res.dbLen, res.qLen);
104105
TMaligner::TMscoreResult tmres = tmaln.computeTMscore(tdata, &tdata[targetLen], &tdata[targetLen + targetLen], targetLen,
105-
res.qStartPos, res.dbStartPos, res.backtrace,
106-
std::min(static_cast<unsigned int>(res.backtrace.length()), std::min(res.dbLen, res.qLen)));
107-
106+
res.qStartPos, res.dbStartPos, res.backtrace, normLen);
107+
tmres.tmscore = (tmres.tmscore / static_cast<double>(normLen))
108+
* static_cast<double>(res.backtrace.size());
108109
//std::cout << TMalnScore << std::endl;
109110
resultsStr.append(SSTR(dbKey));
110111
resultsStr.push_back(' ');

Diff for: src/strucclustutils/structurealign.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@ int structurealign(int argc, const char **argv, const Command& command) {
380380
size_t tCaLength = tcadbr->sequenceReader->getEntryLen(tId);
381381
float* targetCaData = tcoords.read(tcadata, res.dbLen, tCaLength);
382382
if(needTMaligner) {
383+
unsigned int normLen = std::min(res.dbLen, res.qLen);
383384
tmres = tmaligner->computeTMscore(targetCaData,
384385
&targetCaData[res.dbLen],
385386
&targetCaData[res.dbLen +
@@ -388,7 +389,9 @@ int structurealign(int argc, const char **argv, const Command& command) {
388389
res.qStartPos,
389390
res.dbStartPos,
390391
res.backtrace,
391-
std::min(static_cast<unsigned int>(res.backtrace.size()), std::min(res.dbLen, res.qLen)));
392+
normLen);
393+
tmres.tmscore = (tmres.tmscore / static_cast<double>(normLen))
394+
* static_cast<double>(res.backtrace.size());
392395
if (tmres.tmscore < par.tmScoreThr) {
393396
continue;
394397
}

Diff for: src/strucclustutils/structureconvertalis.cpp

+6-12
Original file line numberDiff line numberDiff line change
@@ -653,12 +653,12 @@ R"html(<!DOCTYPE html>
653653
}
654654
if(needTMaligner){
655655
tmaligner->initQuery(queryCaData, &queryCaData[res.qLen], &queryCaData[res.qLen+res.qLen], NULL, res.qLen);
656+
unsigned int normlen= std::min(res.qLen, res.dbLen);
656657
tmpBt = Matcher::uncompressAlignment(res.backtrace);
657658
tmres = tmaligner->computeTMscore(targetCaData, &targetCaData[res.dbLen], &targetCaData[res.dbLen+res.dbLen], res.dbLen,
658-
res.qStartPos, res.dbStartPos, tmpBt,
659-
std::min(std::min(res.dbLen, res.qLen), static_cast<unsigned int>(tmpBt.size())));
659+
res.qStartPos, res.dbStartPos, tmpBt,normlen);
660+
tmres.tmscore = tmres.tmscore / normlen;
660661
rmsd = tmres.rmsd;
661-
662662
}
663663
LDDTCalculator::LDDTScoreResult lddtres;
664664
if(needLDDT) {
@@ -885,19 +885,13 @@ R"html(<!DOCTYPE html>
885885
result.append(SSTR(tmres.t[2]));
886886
break;
887887
case LocalParameters::OUTFMT_ALNTMSCORE:
888-
result.append(SSTR(tmres.tmscore));
888+
result.append(SSTR(tmres.tmscore * tmpBt.size()));
889889
break;
890890
case LocalParameters::OUTFMT_QTMSCORE:
891-
tmres = tmaligner->computeTMscore(targetCaData, &targetCaData[res.dbLen], &targetCaData[res.dbLen+res.dbLen], res.dbLen,
892-
res.qStartPos, res.dbStartPos, Matcher::uncompressAlignment(res.backtrace),
893-
res.qLen);
894-
result.append(SSTR(tmres.tmscore));
891+
result.append(SSTR(tmres.tmscore * res.qLen));
895892
break;
896893
case LocalParameters::OUTFMT_TTMSCORE:
897-
tmres = tmaligner->computeTMscore(targetCaData, &targetCaData[res.dbLen], &targetCaData[res.dbLen+res.dbLen], res.dbLen,
898-
res.qStartPos, res.dbStartPos, Matcher::uncompressAlignment(res.backtrace),
899-
res.dbLen);
900-
result.append(SSTR(tmres.tmscore));
894+
result.append(SSTR(tmres.tmscore * res.dbLen));
901895
break;
902896
case LocalParameters::OUTFMT_RMSD:
903897
result.append(SSTR(rmsd));

Diff for: src/strucclustutils/structurerescorediagonal.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,12 @@ int structureungappedalign(int argc, const char **argv, const Command& command)
342342
char *tcadata = tcadbr->sequenceReader->getData(tId, thread_idx);
343343
size_t tCaLength = tcadbr->sequenceReader->getEntryLen(tId);
344344
float* targetCaData = tcoords.read(tcadata, res.dbLen, tCaLength);
345+
unsigned int normLen = std::min(res.dbLen, res.qLen);
345346
TMaligner::TMscoreResult tmres = tmaligner->computeTMscore(targetCaData, &targetCaData[res.dbLen], &targetCaData[res.dbLen+res.dbLen], res.dbLen,
346347
res.qStartPos, res.dbStartPos, Matcher::uncompressAlignment(res.backtrace),
347-
std::min(static_cast<unsigned int>(res.backtrace.length()), std::min(res.dbLen, res.qLen)));
348+
normLen);
349+
tmres.tmscore = (tmres.tmscore / static_cast<double>(normLen))
350+
* static_cast<double>(res.backtrace.size());
348351
if(tmres.tmscore < par.tmScoreThr){
349352
continue;
350353
}

0 commit comments

Comments
 (0)