def setUp(self): self.top = md.load(test_filenames.top_pdb).top self.fragments_by_resSeqplus = mdcfragments.get_fragments( self.top, method="resSeq+", verbose=False) self.fragments_by_resSeq = mdcfragments.get_fragments(self.top, method="resSeq", verbose=False)
def test_works_3CAP_vs_1U19_just_runs(self): geom_3CAP = md.load(test_filenames.pdb_3CAP) geom_1U19 = md.load(test_filenames.pdb_1U19) frag_3CAP = get_fragments(geom_3CAP.top, verbose=True, atoms=True )[0] frag_1U19 = get_fragments(geom_1U19.top, verbose=False, atoms=True )[0] geom_3CAP = geom_3CAP.atom_slice(frag_3CAP) geom_1U19 = geom_1U19.atom_slice(frag_1U19) seq_3CAP = sequence.top2seq(geom_3CAP.top) seq_1U19 = sequence.top2seq(geom_1U19.top) ialg = sequence.my_bioalign(seq_3CAP, seq_1U19, )[0] sequence.alignment_result_to_list_of_dicts(ialg, _np.arange(geom_3CAP.n_residues), _np.arange(geom_1U19.n_residues), topology_0=geom_3CAP.top, topology_1=geom_1U19.top, #verbose=True )
def test_atoms(self): for imethod in _allowed_fragment_methods: fragments_residxs = mdcfragments.get_fragments(self.geom.top, method=imethod) fragments_atom_idxs = mdcfragments.get_fragments(self.geom.top, atoms=True, method=imethod) for rfrag, afrag in zip(fragments_residxs, fragments_atom_idxs): ridxs_by_atom = _np.unique( [self.geom.top.atom(aa).residue.index for aa in afrag]) assert _np.allclose(ridxs_by_atom, rfrag)
def test_resSeq(self): by_resSeq = mdcfragments.get_fragments(self.geom.top, method='resSeq') assert _np.allclose(by_resSeq[0], [0, 1, 2]) assert _np.allclose(by_resSeq[1], [3, 4]) assert _np.allclose(by_resSeq[2], [5]) assert _np.allclose(by_resSeq[3], [6, 7])
def sites_to_res_pairs( site_dicts, top, fragments=None, **get_fragments_kwargs, ): r"""Return the pairs of res_idxs needed to compute all the contacts contained in all the input sites. The idea is to join all needed pairs of res_idxs in one list regardless of where they come from. Parameters ---------- site_dicts : list of dicts Check :obj:`x2site` for how these dicts look like top : :obj:`~mdtraj.Topology` fragments : list, default is None You can pass along fragment definitions so that it's easier to de-duplicate any AA in your input. Otherwise, these will be created on-the-fly by :obj:`mdciao.fragments.get_fragments` get_fragments_kwargs : see :obj:`fragments.get_fragments` Returns ------- res_idxs_pairs : 2D np.ndarray Unique residue pairs contained in the :obj:`site_dicts`, expressed as residue indices of :obj:`top` [0,1] is considered != [0,1] site_maps : list For each site, a list with the indices of :obj:`res_idxs_pairs` that match the site's pairs. """ if fragments is None: fragments = _mdcfrg.get_fragments(top, **get_fragments_kwargs) get_pair_lambda = { "AAresSeq": lambda bond: _mdcu.residue_and_atom.residues_from_descriptors( bond, fragments, top)[0], "residx": lambda bond: bond } res_idxs_pairs = [] pair2idx = {} site_maps = [] for ii, site in enumerate(site_dicts): imap = [] for bond_type, bonds in site["pairs"].items(): for bond in bonds: pair = tuple(get_pair_lambda[bond_type](bond)) if pair not in res_idxs_pairs: res_idxs_pairs.append(pair) pair2idx[pair] = len(res_idxs_pairs) - 1 imap.append(pair2idx[pair]) site_maps.append(imap) #print(site_maps) return _np.vstack(res_idxs_pairs), site_maps
def test_resSeqplus(self): by_resSeqplus = mdcfragments.get_fragments(self.geom.top, verbose=True, method='resSeq+') assert _np.allclose(by_resSeqplus[0], [0, 1, 2]) assert _np.allclose(by_resSeqplus[1], [3, 4, 5, 6, 7])
def test_bonds(self): by_bonds = mdcfragments.get_fragments(self.geom.top, method='bonds') assert _np.allclose(by_bonds[0], [0, 1, 2]) assert _np.allclose(by_bonds[1], [3, 4, 5]) assert _np.allclose(by_bonds[2], [6]) assert _np.allclose(by_bonds[3], [7])
def test_resSeq_file(self): by_resSeq = mdcfragments.get_fragments(test_filenames.small_monomer, method='resSeq') assert _np.allclose(by_resSeq[0], [0, 1, 2]) assert _np.allclose(by_resSeq[1], [3, 4]) assert _np.allclose(by_resSeq[2], [5]) assert _np.allclose(by_resSeq[3], [6, 7])
def test_join_fragments_normal(self): by_bonds = mdcfragments.get_fragments(self.geom.top, join_fragments=[[1, 2]], verbose=True, method='bonds') assert _np.allclose(by_bonds[0], [0, 1, 2]) assert _np.allclose(by_bonds[1], [3, 4, 5, 6]) assert _np.allclose(by_bonds[2], [7])
def test_join_fragments_special_cases(self): # Checking if redundant fragment ids are removed from the inner list for the argument "join_fragments" by_bonds = mdcfragments.get_fragments(self.geom.top, join_fragments=[[1, 2, 2]], verbose=True, method='bonds') assert _np.allclose(by_bonds[0], [0, 1, 2]) assert _np.allclose(by_bonds[1], [3, 4, 5, 6]) assert _np.allclose(by_bonds[2], [7]) # Checking for error from the overlapping ids in the argument "join_fragments" with pytest.raises(AssertionError): mdcfragments.get_fragments(self.geom.top, join_fragments=[[1, 2], [2, 3]], verbose=True, method='bonds')
def test_resSeq_bonds(self): by_both = mdcfragments.get_fragments( self.geom.top, method='resSeq_bonds') #method is both assert _np.allclose(by_both[0], [0, 1, 2]) assert _np.allclose(by_both[1], [3, 4]) assert _np.allclose(by_both[2], [5]) assert _np.allclose(by_both[3], [6]) assert _np.allclose(by_both[4], [7])
def setUpClass(cls): BW_file = path.relpath(test_filenames.adrb2_human_xlsx, test_filenames.RSCB_pdb_path) cls.BW_local_w_pdb = nomenclature.LabelerBW( BW_file, ref_PDB="3SN6", local_path=test_filenames.RSCB_pdb_path, format="%s", ) cls.fragments = get_fragments(cls.BW_local_w_pdb.top, verbose=False)
def test_break_fragments_special_cases_breaker_not_present(self): # No new fragments are created if residue id is not present anywhere by_bonds = mdcfragments.get_fragments( self.geom.top, fragment_breaker_fullresname=["Glu30"], # not a valid id verbose=True, method='bonds') assert _np.allclose(by_bonds[0], [0, 1, 2]) assert _np.allclose(by_bonds[1], [3, 4, 5]) assert _np.allclose(by_bonds[2], [6]) assert _np.allclose(by_bonds[3], [7])
def test_with_BW(self): fragments = mdcfragments.get_fragments(self.geom.top) input_values = (val for val in [""]) option = test_filenames.adrb2_human_xlsx with mock.patch('builtins.input', lambda *x: next(input_values)): residx2conlab, lblr = cli._parse_consensus_option(option, "BW", self.geom.top, fragments, return_Labeler=True, try_web_lookup=False) self.assertIsInstance(lblr, LabelerBW) self.assertIsInstance(residx2conlab,list)
def test_break_fragments_special_cases_already_breaker_passed_as_string( self): # Also works if input is a string instead of an iterable of strings by_bonds = mdcfragments.get_fragments( self.geom.top, fragment_breaker_fullresname= "GLU30", # GLU30 is already a fragment breaker verbose=True, method='bonds') assert _np.allclose(by_bonds[0], [0, 1, 2]) assert _np.allclose(by_bonds[1], [3, 4, 5]) assert _np.allclose(by_bonds[2], [6]) assert _np.allclose(by_bonds[3], [7])
def test_break_fragments_special_cases_already_breaker(self): # No new fragments are created if an existing fragment breaker is passed by_bonds = mdcfragments.get_fragments( self.geom.top, fragment_breaker_fullresname=[ "GLU30" ], # GLU30 is already a fragment breaker verbose=True, method='bonds') assert _np.allclose(by_bonds[0], [0, 1, 2]) assert _np.allclose(by_bonds[1], [3, 4, 5]) assert _np.allclose(by_bonds[2], [6]) assert _np.allclose(by_bonds[3], [7])
def test_with_BW_already_instantiated(self): fragments = mdcfragments.get_fragments(self.geom.top) BW = LabelerBW(test_filenames.adrb2_human_xlsx) input_values = (val for val in [""]) with mock.patch('builtins.input', lambda *x: next(input_values)): residx2conlab, lblr = cli._parse_consensus_option(BW, "BW", self.geom.top, fragments, return_Labeler=True) self.assertIsInstance(lblr, LabelerBW) self.assertEqual(lblr,BW) self.assertIsInstance(residx2conlab,list)
def test_break_fragments(self): # Checking if the fragments are breaking correctly for the argument "fragment_breaker_fullresname" by_bonds = mdcfragments.get_fragments( self.geom.top, fragment_breaker_fullresname=["VAL31", "GLU27" ], # two fragment breakers passed verbose=True, method='bonds') assert _np.allclose(by_bonds[0], [0]) assert _np.allclose(by_bonds[1], [1, 2]) assert _np.allclose(by_bonds[2], [3]) assert _np.allclose(by_bonds[3], [4, 5]) assert _np.allclose(by_bonds[4], [6]) assert _np.allclose(by_bonds[5], [7])
def test_chains(self): by_chains = mdcfragments.get_fragments(self.geom.top, method="chains") assert _np.allclose(by_chains[0], [0, 1, 2]) assert _np.allclose(by_chains[1], [3, 4, 5]) assert _np.allclose(by_chains[2], [6, 7]), by_chains
def setUp(self): self.top = md.load(test_filenames.small_monomer).top self.fragments = _mdcfrg.get_fragments(self.top, method="resSeq+", verbose=False)
def setUp(self): self.geom2frags = md.load(test_filenames.small_dimer) self.by_bonds_geom2frags = _mdcfrg.get_fragments(self.geom2frags.top, verbose=True, method='bonds')
def test_Nonestr(self): nonefrags = mdcfragments.get_fragments(self.geom.top, method="None") _np.testing.assert_array_equal(nonefrags[0], _np.arange(self.geom.top.n_residues)) self.assertEqual(len(nonefrags), 1)
def setUp(self): self.geom = md.load(test_filenames.top_pdb) self.fragments = mdcfragments.get_fragments(self.geom.top, verbose=False)
def test_dont_know_method(self): with pytest.raises(AssertionError): mdcfragments.get_fragments(self.geom.top, method='xyz')
def test_ions_and_water(self): geom = md.load(test_filenames.ions_and_water) frags = mdcfragments.get_fragments(geom.top, verbose=False) assert len(frags) == 3 assert len(frags[1]) == 5 assert len(frags[2]) == 10
def test_molecule_resSeqplus_raises_not_imp(self): with pytest.raises(NotImplementedError): mdcfragments.get_fragments(self.geom.top, method="molecules_resSeq+")
def test_completeness(self): for imethod in _allowed_fragment_methods: frags = mdcfragments.get_fragments(self.geom.top, method=imethod) assert _np.allclose(_np.hstack(frags), _np.arange(self.geom.top.n_residues))