diff --git a/actions/ost-compare-structures b/actions/ost-compare-structures index 29287fb992353722c2337d7ce861a3e298291fc5..fc0e08fbf6e5655185d05cf680ff4643089e71da 100644 --- a/actions/ost-compare-structures +++ b/actions/ost-compare-structures @@ -198,8 +198,22 @@ def _ParseArgs(): default=".compare.structures.pdb", help=("Use this suffix to dump structures.\n" "Defaults to .compare.structures.pdb.")) + parser.add_argument( + "-ca", + "--c-alpha-only", + dest="c_alpha_only", + default=False, + action="store_true", + help=("Use C-alpha atoms only.")) + parser.add_argument( + "-ft", + "--fault-tolerant", + dest="fault_tolerant", + default=False, + action="store_true", + help=("Fault tolerant parsing.")) # - # QS-score options + # QS-scorer options # parser.add_argument( "-qs", @@ -242,13 +256,6 @@ def _ParseArgs(): dest="selection", default="", help=("Selection performed on reference.")) - parser.add_argument( - "-ca", - "--c-alpha-only", - dest="c_alpha_only", - default=False, - action="store_true", - help=("Use C-alpha atoms only.")) parser.add_argument( "-sc", "--structural-checks", @@ -256,13 +263,6 @@ def _ParseArgs(): default=False, action="store_true", help=("Perform structural checks and filter input data.")) - parser.add_argument( - "-ft", - "--fault-tolerant", - dest="fault_tolerant", - default=False, - action="store_true", - help=("Fault tolerant parsing.")) parser.add_argument( "-p", "--parameter-file", @@ -469,7 +469,7 @@ def _GetAlignmentsAsFasta(alignments): return strings -def _ReadStructureFile(path): +def _ReadStructureFile(path, c_alpha_only=False, fault_tolerant=False): """Safely read structure file into OST entity. The functin can read both PDB and mmCIF files. @@ -479,18 +479,25 @@ def _ReadStructureFile(path): :returns: Entity :rtype: :class:`~ost.mol.EntityHandle` """ + calpha_messag = "Selecting only C-alpha atoms" entities = list() if not os.path.isfile(path): raise IOError("%s is not a file" % path) try: - entity = LoadPDB(path) + entity = LoadPDB(path, fault_tolerant=fault_tolerant) if not entity.IsValid(): raise IOError("Provided file does not contain valid entity.") entity.SetName(os.path.basename(path)) + if c_alpha_only: + ost.LogInfo(calpha_messag) + entity = entity.Select("aname=CA") entities.append(entity) except Exception: try: - tmp_entity, cif_info = LoadMMCIF(path, info=True) + tmp_entity, cif_info = LoadMMCIF( + path, + info=True, + fault_tolerant=fault_tolerant) if len(cif_info.biounits) == 0: tbu = MMCifInfoBioUnit() tbu.id = 'ASU of ' + entity.pdb_id @@ -504,6 +511,9 @@ def _ReadStructureFile(path): entity = tbu.PDBize(tmp_entity, min_polymer_size=0) entity.SetName(os.path.basename(path) + ".au") _RevertChainNames(entity) + if c_alpha_only: + ost.LogInfo(calpha_messag) + entity = entity.Select("aname=CA") entities.append(entity) elif len(cif_info.biounits) > 1: for i, biounit in enumerate(cif_info.biounits, 1): @@ -513,6 +523,9 @@ def _ReadStructureFile(path): "Provided file does not contain valid entity.") entity.SetName(os.path.basename(path) + "." + str(i)) _RevertChainNames(entity) + if c_alpha_only: + ost.LogInfo(calpha_messag) + entity = entity.Select("aname=CA") entities.append(entity) else: biounit = cif_info.biounits[0] @@ -522,6 +535,9 @@ def _ReadStructureFile(path): "Provided file does not contain valid entity.") entity.SetName(os.path.basename(path)) _RevertChainNames(entity) + if c_alpha_only: + ost.LogInfo(calpha_messag) + entity = entity.Select("aname=CA") entities.append(entity) except Exception as exc: @@ -553,11 +569,18 @@ def _Main(): # # Read the input files ost.LogInfo("#" * 80) - ost.LogInfo("Reading input files") + ost.LogInfo("Reading input files (fault_tolerant=%s)" % + str(opts.fault_tolerant)) ost.LogInfo(" --> reading model from %s" % opts.model) - models = _ReadStructureFile(opts.model) + models = _ReadStructureFile( + opts.model, + c_alpha_only=opts.c_alpha_only, + fault_tolerant=opts.fault_tolerant) ost.LogInfo(" --> reading reference from %s" % opts.reference) - references = _ReadStructureFile(opts.reference) + references = _ReadStructureFile( + opts.reference, + c_alpha_only=opts.c_alpha_only, + fault_tolerant=opts.fault_tolerant) if opts.molck: ost.LogInfo("#" * 80) ost.LogInfo("Cleaning up input with Molck")