diff --git a/actions/ost-compare-structures b/actions/ost-compare-structures index a4a821a5a2dbc6d257c7fa568e83d68b4ddac392..b1d2ed816e917cd921fa4c5a673003261926174f 100644 --- a/actions/ost-compare-structures +++ b/actions/ost-compare-structures @@ -450,6 +450,25 @@ def _CheckConsistency(reference, model, chain_mapping, log_error): return is_cons +def _GetAlignmentsAsFasta(alignments): + """Get the alignments as FASTA formated string. + + :param alignments: Alignments + :type alignments: list of AlignmentHandle + :returns: list of alignments in FASTA format + :rtype: list of strings + """ + strings = list() + for alignment in alignments: + aln_str = ">reference:%s\n%s\n>model:%s\n%s" % ( + alignment.GetSequence(0).name, + alignment.GetSequence(0).GetString(), + alignment.GetSequence(1).name, + alignment.GetSequence(1).GetString()) + strings.append(aln_str) + return strings + + def _ReadStructureFile(path): """Safely read structure file into OST entity. @@ -618,6 +637,9 @@ def _Main(): qs_scorer.chain_mapping, opts.consistency_checks) reference_results["info"]["residue_names_consistent"] = is_cons + reference_results["info"]["mapping"] = { + "chain_mapping": qs_scorer.chain_mapping, + "alignments": _GetAlignmentsAsFasta(qs_scorer.alignments)} skip_score = False if opts.consistency_checks: if not is_cons: @@ -653,8 +675,7 @@ def _Main(): "model_name": model_name, "reference_name": reference_name, "global_score": 0.0, - "best_score": 0.0, - "chain_mapping": qs_scorer.chain_mapping} + "best_score": 0.0} else: ost.LogInfo("Computing QS-score") try: @@ -664,8 +685,7 @@ def _Main(): "model_name": model_name, "reference_name": reference_name, "global_score": qs_scorer.global_score, - "best_score": qs_scorer.best_score, - "chain_mapping": qs_scorer.chain_mapping} + "best_score": qs_scorer.best_score} except qsscoring.QSscoreError as ex: # default handling: report failure and set score to 0 ost.LogError('QSscore failed:', str(ex)) @@ -675,8 +695,7 @@ def _Main(): "model_name": model_name, "reference_name": reference_name, "global_score": 0.0, - "best_score": 0.0, - "chain_mapping": qs_scorer.chain_mapping} + "best_score": 0.0} # Calculate lDDT if opts.lddt: ost.LogInfo("-" * 80)