def __init__(self, res:Residue): fullid = list( res.get_full_id() ) self.structure = fullid[0] self.model = fullid[1] self.strand_id = fullid[2] self.chemicalName = res.get_resname() self.residue_id = [*fullid[3]][1]
def __init__(self, res: Residue): fid = list(res.get_full_id()) self.model: int = fid[1] self.resname: str = fid[3][0] self.struct: str = fid[0] self.chemicalName: str = res.get_resname() self.strand_id: str = fid[2] self.residue_id: int = [*fid[3]][1] self.banClass: str = ""
def _cmp_atm(r0: Residue, r1: Residue, a0: Atom, a1: Atom, verbose: bool, cmpdict: Dict) -> None: cmpdict["aCount"] += 1 if a0 is None: if verbose: print(r1.get_full_id(), "None !=", a1.get_full_id(), a1.parent.resname) elif a1 is None: if verbose: print(r0.get_full_id(), a0.get_full_id(), a0.parent.resname, "!= None") else: if a0.get_full_id() == a1.get_full_id(): cmpdict["aFullIdMatchCount"] += 1 elif verbose: print( r0.get_full_id(), a0.get_full_id(), a0.parent.resname, "!=", a1.get_full_id(), ) a0c = a0.get_coord() a1c = a1.get_coord() if numpy.allclose(a0c, a1c, rtol=1e-05, atol=1e-08): cmpdict["aCoordMatchCount"] += 1 elif verbose: print( "atom coords disagree:", r0.get_full_id(), a0.get_full_id(), a1.get_full_id(), a0c, "!=", a1c, )
def _cmp_res(r0: Residue, r1: Residue, verbose: bool, cmpdict: Dict) -> None: r0id, r0fid, r1fid = r0.id, r0.full_id, r1.full_id chn = r0.parent.id if chn not in cmpdict["chains"]: cmpdict["chains"].append(chn) cmpdict["rCount"] += 1 if r0fid == r1fid: cmpdict["rMatchCount"] += 1 elif verbose: print(r0fid, "!=", r1fid) if " " == r0id[0] and not (" " == r0.resname[0] or 2 == len(r0.resname)): # skip water, DNA (' ' == [0] for pdb, 2 == len() for mmcif) cmpdict["residues"] += 1 longer = r0 if len(r0.child_dict) >= len(r1.child_dict) else r1 for ak in longer.child_dict: a0 = r0.child_dict.get(ak, None) if a0 is None: aknd = re.sub("D", "H", ak, count=1) a0 = r0.child_dict.get(aknd, None) a1 = r1.child_dict.get(ak, None) if a1 is None: aknd = re.sub("D", "H", ak, count=1) a1 = r1.child_dict.get(aknd, None) if (a0 is None or a1 is None or 0 == a0.is_disordered() == a1.is_disordered()): _cmp_atm(r0, r1, a0, a1, verbose, cmpdict) elif 2 == a0.is_disordered() == a1.is_disordered(): cmpdict["disAtmCount"] += 1 for da0k in a0.child_dict: _cmp_atm( r0, r1, a0.child_dict.get(da0k, None), a1.child_dict.get(da0k, None), verbose, cmpdict, ) else: if verbose: print("disorder disagreement:", r0.get_full_id(), ak) cmpdict["aCount"] += 1
def __init__(self, res:Residue): fid = list(res.get_full_id()) self.resn = fid[3][0] self.struct = fid[0] self.strand_id = fid[2] self.residue_id = [*fid[3]][1]
def _cmp_res( r0: Residue, r1: Residue, verbose: bool, cmpdict: Dict, rtol: float = None, atol: float = None, ) -> None: r0id, r0fid, r1fid = r0.id, r0.full_id, r1.full_id chn = r0.parent.id if chn not in cmpdict["chains"]: cmpdict["chains"].append(chn) cmpdict["rCount"] += 1 if r0fid == r1fid: cmpdict["rMatchCount"] += 1 elif verbose: print(r0fid, "!=", r1fid) if hasattr(r0, "internal_coord") and r0.internal_coord is not None: ric0 = r0.internal_coord ric1 = r1.internal_coord r0prev = sorted((ric.rbase for ric in ric0.rprev)) r1prev = sorted((ric.rbase for ric in ric1.rprev)) r0next = sorted((ric.rbase for ric in ric0.rnext)) r1next = sorted((ric.rbase for ric in ric1.rnext)) if r0prev != r1prev: if verbose: print(r0, "rprev error:", r0prev, "!=", r1prev) cmpdict["rpnMismatchCount"] += 1 if r0next != r1next: if verbose: print(r0, "rnext error", r0next, "!=", r1next) cmpdict["rpnMismatchCount"] += 1 if " " == r0id[0] and not (" " == r0.resname[0] or 2 == len(r0.resname)): # skip water, DNA (' ' == [0] for pdb, 2 == len() for mmcif) cmpdict["residues"] += 1 longer = r0 if len(r0.child_dict) >= len(r1.child_dict) else r1 for ak in longer.child_dict: a0 = r0.child_dict.get(ak, None) if a0 is None: aknd = re.sub("D", "H", ak, count=1) a0 = r0.child_dict.get(aknd, None) a1 = r1.child_dict.get(ak, None) if a1 is None: aknd = re.sub("D", "H", ak, count=1) a1 = r1.child_dict.get(aknd, None) if (a0 is None or a1 is None or 0 == a0.is_disordered() == a1.is_disordered()): _cmp_atm(r0, r1, a0, a1, verbose, cmpdict, rtol=rtol, atol=atol) elif 2 == a0.is_disordered() == a1.is_disordered(): cmpdict["disAtmCount"] += 1 for da0k in a0.child_dict: _cmp_atm( r0, r1, a0.child_dict.get(da0k, None), a1.child_dict.get(da0k, None), verbose, cmpdict, rtol=rtol, atol=atol, ) else: if verbose: print("disorder disagreement:", r0.get_full_id(), ak) cmpdict["aCount"] += 1
def _cmp_atm( r0: Residue, r1: Residue, a0: Atom, a1: Atom, verbose: bool, cmpdict: Dict, rtol: float = None, atol: float = None, ) -> None: cmpdict["aCount"] += 1 if a0 is None: if verbose: print( r1.get_full_id(), "None !=", a1.get_full_id(), a1.parent.resname, ) elif a1 is None: if verbose: print( r0.get_full_id(), a0.get_full_id(), a0.parent.resname, "!= None", ) else: if a0.get_full_id() == a1.get_full_id() or _atmfid_d2h( a0) == a1.get_full_id(): cmpdict["aFullIdMatchCount"] += 1 elif verbose: print( r0.get_full_id(), a0.get_full_id(), a0.parent.resname, "!=", a1.get_full_id(), ) ac_rslt = False if rtol is None and atol is None: a0c = numpy.round(a0.get_coord(), 3) a1c = numpy.round(a1.get_coord(), 3) ac_rslt = numpy.array_equal(a0c, a1c) else: a0c = a0.get_coord() a1c = a1.get_coord() ac_rslt = numpy.allclose(a0c, a1c, rtol=rtol, atol=atol) if ac_rslt: cmpdict["aCoordMatchCount"] += 1 elif verbose: print( "atom coords disagree:", r0.get_full_id(), a0.get_full_id(), a1.get_full_id(), a0c, "!=", a1c, )