diff --git a/actions/ost-compare-ligand-structures b/actions/ost-compare-ligand-structures index 5ab31eb07ba32a27dba16cea91af55f26727d750..ec32f3119e904e05d9f4254fdd8ce1e4bf6a7666 100644 --- a/actions/ost-compare-ligand-structures +++ b/actions/ost-compare-ligand-structures @@ -36,12 +36,12 @@ options, this is a dictionary with three keys: * "model_ligands": A list of ligands in the model. If ligands were provided explicitly with --model-ligands, elements of the list will be the paths to - the ligand SDF file(s). Otherwise, they will be the chain name and residue - number of the ligand, separated by a dot. + the ligand SDF file(s). Otherwise, they will be the chain name, residue + number and insertion code of the ligand, separated by a dot. * "reference_ligands": A list of ligands in the reference. If ligands were provided explicitly with --reference-ligands, elements of the list will be - the paths to the ligand SDF file(s). Otherwise, they will be the chain name - and residue number of the ligand, separated by a dot. + the paths to the ligand SDF file(s). Otherwise, they will be the chain name, + residue number and insertion code of the ligand, separated by a dot. * "status": SUCCESS if everything ran through. In case of failure, the only content of the JSON output will be \"status\" set to FAILURE and an additional key: "traceback". @@ -300,6 +300,12 @@ def _Validate(structure, ligands, legend, fault_tolerant=False): raise ValueError(msg) +def _QualifiedResidueNotation(r): + """Return a parsable string of the residue in the format: + ChainName.ResidueNumber.InsertionCode.""" + return f"{r.chain.name}.{r.number.num}.{r.number.ins_code}" + + def _Process(model, model_ligands, reference, reference_ligands, args): scorer = ligand_scoring.LigandScorer( @@ -314,7 +320,7 @@ def _Process(model, model_ligands, reference, reference_ligands, args): global_chain_mapping=args.global_chain_mapping, radius=args.radius, lddt_pli_radius=args.lddt_pli_radius, - lddt_lp_radius=args.lddt_lp_radius + lddt_lp_radius=args.lddt_lp_radius, ) out = dict() @@ -327,7 +333,7 @@ def _Process(model, model_ligands, reference, reference_ligands, args): args.model_ligands)} out["model_ligands"] = args.model_ligands else: - model_ligands_map = {l: "%s.%s" % (l.chain.name, l.number) + model_ligands_map = {l: _QualifiedResidueNotation(l) for l in scorer.model_ligands} out["model_ligands"] = list(model_ligands_map.values()) @@ -339,7 +345,7 @@ def _Process(model, model_ligands, reference, reference_ligands, args): args.reference_ligands)} out["reference_ligands"] = args.reference_ligands else: - reference_ligands_map = {l: "%s.%s" % (l.chain.name, l.number) + reference_ligands_map = {l: _QualifiedResidueNotation(l) for l in scorer.target_ligands} out["reference_ligands"] = list(reference_ligands_map.values()) @@ -355,14 +361,14 @@ def _Process(model, model_ligands, reference, reference_ligands, args): lddt_pli["transform"] = [transform_data[i:i + 4] for i in range(0, len(transform_data), 4)] - lddt_pli["bs_ref_res"] = [r.qualified_name for r in + lddt_pli["bs_ref_res"] = [_QualifiedResidueNotation(r) for r in lddt_pli["bs_ref_res"]] - lddt_pli["bs_ref_res_mapped"] = [r.qualified_name for r in + lddt_pli["bs_ref_res_mapped"] = [_QualifiedResidueNotation(r) for r in lddt_pli["bs_ref_res_mapped"]] - lddt_pli["bs_mdl_res_mapped"] = [r.qualified_name for r in + lddt_pli["bs_mdl_res_mapped"] = [_QualifiedResidueNotation(r) for r in lddt_pli["bs_mdl_res_mapped"]] lddt_pli["inconsistent_residues"] = ["%s-%s" %( - x.qualified_name, y.qualified_name) for x,y in lddt_pli[ + _QualifiedResidueNotation(x), _QualifiedResidueNotation(y)) for x,y in lddt_pli[ "inconsistent_residues"]] out["lddt_pli"][model_key] = lddt_pli @@ -377,14 +383,14 @@ def _Process(model, model_ligands, reference, reference_ligands, args): transform_data = rmsd["transform"].data rmsd["transform"] = [transform_data[i:i + 4] for i in range(0, len(transform_data), 4)] - rmsd["bs_ref_res"] = [r.qualified_name for r in + rmsd["bs_ref_res"] = [_QualifiedResidueNotation(r) for r in rmsd["bs_ref_res"]] - rmsd["bs_ref_res_mapped"] = [r.qualified_name for r in + rmsd["bs_ref_res_mapped"] = [_QualifiedResidueNotation(r) for r in rmsd["bs_ref_res_mapped"]] - rmsd["bs_mdl_res_mapped"] = [r.qualified_name for r in + rmsd["bs_mdl_res_mapped"] = [_QualifiedResidueNotation(r) for r in rmsd["bs_mdl_res_mapped"]] rmsd["inconsistent_residues"] = ["%s-%s" %( - x.qualified_name, y.qualified_name) for x,y in rmsd[ + _QualifiedResidueNotation(x), _QualifiedResidueNotation(y)) for x,y in rmsd[ "inconsistent_residues"]] out["rmsd"][model_key] = rmsd