diff --git a/actions/ost-compare-structures b/actions/ost-compare-structures index 0014f7dd3802ba1f97dee4d26142e02bc64e2cec..629a1de7d61b5a434963b4c375e9fdb1af3a6fa5 100644 --- a/actions/ost-compare-structures +++ b/actions/ost-compare-structures @@ -487,11 +487,15 @@ def _Main(): PushVerbosityLevel(opts.verbosity) # # Read the input files - ost.LogInfo("Reading model from %s" % opts.model) + ost.LogInfo("#" * 80) + ost.LogInfo("Reading input files") + ost.LogInfo(" --> reading model from %s" % opts.model) models = _ReadStructureFile(opts.model) - ost.LogInfo("Reading reference from %s" % opts.reference) + ost.LogInfo(" --> reading reference from %s" % opts.reference) references = _ReadStructureFile(opts.reference) if opts.molck: + ost.LogInfo("#" * 80) + ost.LogInfo("Cleaning up input with Molck") for i in range(len(references)): _MolckEntity(references[i], opts) references[i] = references[i].CreateFullView() @@ -504,28 +508,32 @@ def _Main(): for i in range(len(models)): models[i] = models[i].CreateFullView() if opts.structural_checks: + ost.LogInfo("#" * 80) + ost.LogInfo("Performing structural checks") stereochemical_parameters = ReadStereoChemicalPropsFile( opts.parameter_file) - ost.LogInfo("Performing structural checks for reference(s)") + ost.LogInfo(" --> for reference(s)") for reference in references: + ost.LogInfo("Checking %s" % reference.GetName()) CheckStructure(reference, stereochemical_parameters.bond_table, stereochemical_parameters.angle_table, stereochemical_parameters.nonbonded_table, opts.bond_tolerance, opts.angle_tolerance) - ost.LogInfo("Performing structural checks for model(s)") + ost.LogInfo(" --> for model(s)") for model in models: + ost.LogInfo("Checking %s" % model.GetName()) CheckStructure(model, stereochemical_parameters.bond_table, stereochemical_parameters.angle_table, stereochemical_parameters.nonbonded_table, opts.bond_tolerance, opts.angle_tolerance) - if len(models) > 1 or len(references) > 1: + ost.LogInfo("#" * 80) ost.LogInfo( - "Multiple complexes detected. All combinations will be tried.") + "Multiple complexes mode ON. All combinations will be tried.") result = { "result": {}, @@ -533,13 +541,15 @@ def _Main(): result["options"]["cwd"] = os.path.abspath(os.getcwd()) # # Perform scoring + ost.LogInfo("Performing scoring") for model in models: model_name = model.GetName() model_results = dict() for reference in references: reference_name = reference.GetName() reference_results = dict() - ost.LogInfo("#\nComparing %s to %s" % ( + ost.LogInfo("#" * 80) + ost.LogInfo("Comparing %s to %s" % ( model_name, reference_name)) qs_scorer = qsscoring.QSscorer(reference, @@ -551,7 +561,7 @@ def _Main(): opts.chain_mapping)) qs_scorer.chain_mapping = opts.chain_mapping if opts.qs_score: - ost.LogInfo("Computing QS-score") + ost.LogInfo("-> Computing QS-score") try: reference_results["qs_score"] = { "status": "SUCCESS", @@ -576,7 +586,6 @@ def _Main(): } # Calculate lDDT if opts.lddt: - ost.LogInfo("Computing lDDT") lddt_results = { "single_chain_lddt": list() } @@ -604,14 +613,26 @@ def _Main(): model_chain = lddt_scorer.model.chains[0].GetName() reference_chain = \ lddt_scorer.references[0].chains[0].GetName() + ost.LogInfo((" --> Computing lDDT between model " + "chain %s and reference chain %s") % ( + model_chain, + reference_chain)) lddt_results["single_chain_lddt"].append({ "status": "SUCCESS", "error": "", "model_chain": model_chain, "reference_chain": reference_chain, "global_score": lddt_scorer.global_score, - "conserved_contacts": lddt_scorer.conserved_contacts, + "conserved_contacts": + lddt_scorer.conserved_contacts, "total_contacts": lddt_scorer.total_contacts}) + ost.LogInfo("Global LDDT score: %.4f" % + lddt_scorer.global_score) + ost.LogInfo( + "(%i conserved distances out of %i checked, over " + "%i thresholds)" % (lddt_scorer.conserved_contacts, + lddt_scorer.total_contacts, + len(lddt_settings.cutoffs))) except Exception as ex: ost.LogError('Single chain lDDT failed:', str(ex)) lddt_results["single_chain_lddt"].append({ @@ -624,10 +645,14 @@ def _Main(): "total_contacts": 0.0}) # perform oligo lddt scoring try: + ost.LogInfo(' --> Computing oligomeric lDDT score') lddt_results["oligo_lddt"] = { "status": "SUCCESS", "error": "", "global_score": oligo_lddt_scorer.oligo_lddt} + ost.LogInfo( + "Oligo lDDT score: %.4f" % + oligo_lddt_scorer.oligo_lddt) except Exception as ex: ost.LogError('Oligo lDDT failed:', str(ex)) lddt_results["oligo_lddt"] = { @@ -635,11 +660,16 @@ def _Main(): "error": str(ex), "global_score": 0.0} try: + ost.LogInfo(' --> Computing weighted lDDT score') lddt_results["weighted_lddt"] = { "status": "SUCCESS", "error": "", "global_score": oligo_lddt_scorer.weighted_lddt} + ost.LogInfo( + "Weighted lDDT score: %.4f" % + oligo_lddt_scorer.weighted_lddt) except Exception as ex: + ost.LogError('Weighted lDDT failed:', str(ex)) lddt_results["weighted_lddt"] = { "status": "FAILURE", "error": str(ex), diff --git a/modules/mol/alg/pymod/qsscoring.py b/modules/mol/alg/pymod/qsscoring.py index 9c1da337832d290bb497001e4d5dd921d55cada2..16e4357c8cf4d9e03ba9be3253fe8ad04fc8c37d 100644 --- a/modules/mol/alg/pymod/qsscoring.py +++ b/modules/mol/alg/pymod/qsscoring.py @@ -16,7 +16,7 @@ Scoring of quaternary structures as in Martino's 2017 paper. Authors: Gerardo Tauriello, Martino Bertoni """ -from ost import mol, geom, conop, seq, settings +from ost import mol, geom, conop, seq, settings, PushVerbosityLevel from ost import LogError, LogWarning, LogScript, LogInfo, LogVerbose, LogDebug from ost.bindings.clustalw import ClustalW from ost.mol.alg import lDDTScorer @@ -870,7 +870,6 @@ class OligoLDDTScorer(object): def oligo_lddt(self): """Fills cached lddt_score, lddt_mdl and lddt_ref.""" if self._oligo_lddt is None: - LogInfo('Computing oligomeric lDDT score') LogInfo('Reference %s has: %s chains' % (self.ref.GetName(), self.ref.chain_count)) LogInfo('Model %s has: %s chains' % (self.mdl.GetName(), self.mdl.chain_count)) @@ -893,12 +892,8 @@ class OligoLDDTScorer(object): self._sc_lddt_scorers = list() for aln in self.alignments: # Get chains and renumber according to alignment (for lDDT) - ch_ref = aln.GetSequence(0).GetName() reference = Renumber(aln.GetSequence(0)).CreateFullView() - ch_mdl = aln.GetSequence(1).GetName() model = Renumber(aln.GetSequence(1)).CreateFullView() - LogInfo(("Computing lDDT between model chain %s and " - "reference chain %s") % (ch_mdl, ch_ref)) lddt_scorer = lDDTScorer( references=[reference], model=model, diff --git a/modules/mol/alg/src/lddt.cc b/modules/mol/alg/src/lddt.cc index 29d1aabfb395304464c8013a2207c590dd7902aa..19c24c01882d5bcb9fc3fcea09d779fbd81a16c1 100644 --- a/modules/mol/alg/src/lddt.cc +++ b/modules/mol/alg/src/lddt.cc @@ -291,6 +291,11 @@ int main (int argc, char **argv) } } CleanlDDTReferences(ref_list); + if (ref_list.size()==1) { + std::cout << "Multi-reference mode: Off" << std::endl; + } else { + std::cout << "Multi-reference mode: On" << std::endl; + } glob_dist_list = PreparelDDTGlobalRDMap(ref_list, settings.cutoffs, settings.sequence_separation, diff --git a/modules/mol/alg/src/local_dist_diff_test.cc b/modules/mol/alg/src/local_dist_diff_test.cc index 321f27e28a60a485c407021df3274d8db4ecd319..949e2fb5af8211cd43a8e7482ea3c984c9af8a8d 100644 --- a/modules/mol/alg/src/local_dist_diff_test.cc +++ b/modules/mol/alg/src/local_dist_diff_test.cc @@ -655,13 +655,14 @@ void lDDTScorer::_CheckConsistency(){ void lDDTScorer::_ComputelDDT(){ std::pair<int,int> cov = ComputeCoverage(model_view,glob_dist_list); if (cov.second == -1) { - std::cout << "Coverage: 0 (0 out of 0 residues)" << std::endl; + LOG_INFO("Coverage: 0 (0 out of 0 residues)"); } else { - std::cout << "Coverage: " << (float(cov.first)/float(cov.second)) << " (" << cov.first << " out of " << cov.second << " residues)" << std::endl; + std::stringstream sout; + sout << "Coverage: " << (float(cov.first)/float(cov.second)) << " (" << cov.first << " out of " << cov.second << " residues)"; + LOG_INFO(sout.str()); } if (cov.first == 0) { - std::cout << "Global LDDT score: 0.0" << std::endl; _num_tot_con = 0; _num_cons_con = 0; _global_score = 0.0; @@ -671,9 +672,6 @@ void lDDTScorer::_ComputelDDT(){ std::pair<int,int> total_ov=alg::LocalDistDiffTest(model_view, glob_dist_list, settings.cutoffs, settings.sequence_separation, settings.label); Real lddt = static_cast<Real>(total_ov.first)/(static_cast<Real>(total_ov.second) ? static_cast<Real>(total_ov.second) : 1); - std::cout << "Global LDDT score: " << std::setprecision(4) << lddt << std::endl; - std::cout << "(" << std::fixed << total_ov.first << " conserved distances out of " << total_ov.second - << " checked, over " << settings.cutoffs.size() << " thresholds)" << std::endl; _num_tot_con = total_ov.second ? total_ov.second : 1; _num_cons_con = total_ov.first; _global_score = lddt; @@ -943,10 +941,8 @@ GlobalRDMap PreparelDDTGlobalRDMap(const std::vector<EntityView>& ref_list, Real max_dist){ GlobalRDMap glob_dist_list; if (ref_list.size()==1) { - std::cout << "Multi-reference mode: Off" << std::endl; glob_dist_list = CreateDistanceList(ref_list[0], max_dist); } else { - std::cout << "Multi-reference mode: On" << std::endl; glob_dist_list = CreateDistanceListFromMultipleReferences(ref_list, cutoff_list, sequence_separation,