diff --git a/actions/ost-compare-ligand-structures b/actions/ost-compare-ligand-structures index 3c33dceb50fa6378532e6066067283de524530ac..af49ef3463ea046f10b91d0700d02171f0dc828f 100644 --- a/actions/ost-compare-ligand-structures +++ b/actions/ost-compare-ligand-structures @@ -366,11 +366,24 @@ def _Process(model, model_ligands, reference, reference_ligands, args): if model_ligands is not None: # Replace model ligand by path - assert len(model_ligands) == len(scorer.model_ligands) - # Map ligand => path - model_ligands_map = {k: v for k, v in zip(scorer.model_ligands, - args.model_ligands)} - out["model_ligands"] = args.model_ligands + if len(model_ligands) == len(scorer.model_ligands): + # Map ligand => path + model_ligands_map = {k: v for k, v in zip(scorer.model_ligands, + args.model_ligands)} + out["model_ligands"] = args.model_ligands + elif len(model_ligands) < len(scorer.model_ligands): + # Multi-ligand SDF files were given + # Map ligand => path:idx + out["model_ligands"] = [] + for ligand, filename in zip(model_ligands, args.model_ligands): + assert isinstance(ligand, ost.mol.EntityHandle) + for i, residue in enumerate(ligand.residues): + out["model_ligands"].append(f"{filename}:{i}") + else: + # This should never happen and would be a bug + raise RuntimeError("Fewer ligands in the model scorer " + "(%d) than given (%d)" % ( + len(scorer.model_ligands), len(model_ligands))) else: model_ligands_map = {l: _QualifiedResidueNotation(l) for l in scorer.model_ligands} @@ -378,11 +391,25 @@ def _Process(model, model_ligands, reference, reference_ligands, args): if reference_ligands is not None: # Replace reference ligand by path - assert len(reference_ligands) == len(scorer.target_ligands) - # Map ligand => path - reference_ligands_map = {k: v for k, v in zip(scorer.target_ligands, - args.reference_ligands)} - out["reference_ligands"] = args.reference_ligands + if len(reference_ligands) == len(scorer.target_ligands): + # Map ligand => path + reference_ligands_map = {k: v for k, v in zip(scorer.target_ligands, + args.reference_ligands)} + out["reference_ligands"] = args.reference_ligands + elif len(reference_ligands) < len(scorer.target_ligands): + # Multi-ligand SDF files were given + # Map ligand => path:idx + out["reference_ligands"] = [] + for ligand, filename in zip(reference_ligands, args.reference_ligands): + assert isinstance(ligand, ost.mol.EntityHandle) + for i, residue in enumerate(ligand.residues): + out["reference_ligands"].append(f"{filename}:{i}") + else: + # This should never happen and would be a bug + raise RuntimeError("Fewer ligands in the reference scorer " + "(%d) than given (%d)" % ( + len(scorer.target_ligands), len(reference_ligands))) + else: reference_ligands_map = {l: _QualifiedResidueNotation(l) for l in scorer.target_ligands}