def group_ensembles(self): groups = [] current_group = last_ensemble = None for ens in self._ensembles: # this will check for overlap if ((last_ensemble is None) or (alt_confs.get_selection_gap( last_ensemble.selection, ens.selection) > 0)): current_group = [ens] groups.append(current_group) else: current_group.append(ens) last_ensemble = ens return [ensemble_group(ensembles) for ensembles in groups]
def group_ensembles (self) : groups = [] current_group = last_ensemble = None for ens in self._ensembles : # this will check for overlap if ((last_ensemble is None) or (alt_confs.get_selection_gap(last_ensemble.selection, ens.selection) > 0)) : current_group = [ ens ] groups.append(current_group) else : current_group.append(ens) last_ensemble = ens return [ ensemble_group(ensembles) for ensembles in groups ]
def exercise_utils(): #--- coord_stats_with_flips pdb_1 = iotbx.pdb.hierarchy.input(pdb_string="""\ ATOM 1639 N PHE A 113 18.514 41.994 54.886 1.00 12.36 N ATOM 1640 CA PHE A 113 19.737 42.742 54.898 1.00 12.97 C ATOM 1641 C PHE A 113 19.514 44.206 55.111 1.00 11.88 C ATOM 1642 O PHE A 113 18.442 44.758 54.823 1.00 13.75 O ATOM 1643 CB PHE A 113 20.587 42.460 53.684 1.00 20.08 C ATOM 1644 CG PHE A 113 19.893 42.692 52.399 1.00 17.15 C ATOM 1645 CD1 PHE A 113 19.182 41.689 51.798 1.00 20.34 C ATOM 1646 CD2 PHE A 113 20.029 43.895 51.745 1.00 21.22 C ATOM 1647 CE1 PHE A 113 18.577 41.887 50.601 1.00 23.49 C ATOM 1648 CE2 PHE A 113 19.411 44.105 50.542 1.00 24.87 C ATOM 1649 CZ PHE A 113 18.675 43.097 49.976 1.00 21.81 C ATOM 1650 H PHE A 113 17.875 42.342 54.427 1.00 14.83 H ATOM 1651 HA PHE A 113 20.250 42.435 55.661 1.00 15.57 H ATOM 1652 HB2 PHE A 113 21.367 43.036 53.708 1.00 24.10 H ATOM 1653 HB3 PHE A 113 20.865 41.531 53.707 1.00 24.10 H ATOM 1654 HD1 PHE A 113 19.099 40.866 52.224 1.00 24.40 H ATOM 1655 HD2 PHE A 113 20.518 44.581 52.138 1.00 25.47 H ATOM 1656 HE1 PHE A 113 18.077 41.204 50.215 1.00 28.18 H ATOM 1657 HE2 PHE A 113 19.488 44.927 50.113 1.00 29.84 H ATOM 1658 HZ PHE A 113 18.261 43.230 49.154 1.00 26.17 H """) pdb_2 = iotbx.pdb.hierarchy.input(pdb_string="""\ ATOM 1639 N PHE A 113 18.514 41.994 54.886 1.00 12.36 N ATOM 1640 CA PHE A 113 19.737 42.742 54.898 1.00 12.97 C ATOM 1641 C PHE A 113 19.514 44.206 55.111 1.00 11.88 C ATOM 1642 O PHE A 113 18.442 44.758 54.823 1.00 13.75 O ATOM 1643 CB PHE A 113 20.587 42.460 53.684 1.00 20.08 C ATOM 1644 CG PHE A 113 19.893 42.692 52.399 1.00 17.15 C ATOM 1645 CD1 PHE A 113 20.174 43.797 51.643 1.00 20.34 C ATOM 1646 CD2 PHE A 113 18.888 41.845 51.991 1.00 21.22 C ATOM 1647 CE1 PHE A 113 19.512 44.033 50.483 1.00 23.49 C ATOM 1648 CE2 PHE A 113 18.224 42.071 50.816 1.00 24.87 C ATOM 1649 CZ PHE A 113 18.548 43.166 50.057 1.00 21.81 C ATOM 1650 H PHE A 113 17.875 42.342 54.427 1.00 14.83 H ATOM 1651 HA PHE A 113 20.250 42.435 55.661 1.00 15.57 H ATOM 1652 HB2 PHE A 113 21.367 43.036 53.708 1.00 24.10 H ATOM 1653 HB3 PHE A 113 20.865 41.531 53.707 1.00 24.10 H ATOM 1654 HD1 PHE A 113 20.840 44.386 51.919 1.00 24.40 H ATOM 1655 HD2 PHE A 113 18.681 41.096 52.501 1.00 25.47 H ATOM 1656 HE1 PHE A 113 19.730 44.776 49.967 1.00 28.18 H ATOM 1657 HE2 PHE A 113 17.560 41.484 50.533 1.00 29.84 H ATOM 1658 HZ PHE A 113 18.093 43.330 49.263 1.00 26.17 H """) hierarchy_1 = pdb_1.hierarchy hierarchy_2 = pdb_2.hierarchy pdb_atoms_1 = hierarchy_1.atoms() sites_1 = pdb_atoms_1.extract_xyz() sites_2 = hierarchy_2.atoms().extract_xyz() result = alternate_conformations.coord_stats_with_flips( sites_1, sites_2, pdb_atoms_1) assert (approx_equal(result.rmsd, 0.2, eps=0.001)) assert (approx_equal(result.max_dev, 0.452427, eps=0.00001)) #--- get_selection_gap assert (alternate_conformations.get_selection_gap([1, 2, 3, 4, 5], [6, 7, 8, 9]) == 0) assert (alternate_conformations.get_selection_gap([6, 7], [1, 2, 3, 4, 5]) == 0) assert (alternate_conformations.get_selection_gap([1, 2, 3, 4, 5], [7, 8, 9]) == 1) assert (alternate_conformations.get_selection_gap([1, 2, 3, 4, 5], [4, 5, 7, 8, 9]) == -2) assert (alternate_conformations.get_selection_gap([4, 5, 7, 8, 9], [1, 2, 3, 4]) == -1) #--- score_rotamers n_outliers = alternate_conformations.score_rotamers( hierarchy_2, flex.bool(sites_2.size(), True)) assert (n_outliers == 0) #--- get_partial_omit_map xrs = pdb_1.input.xray_structure_simple() f_calc = abs(xrs.structure_factors(d_min=1.5).f_calc()) f_calc.set_observation_type_xray_amplitude() flags = f_calc.generate_r_free_flags() fmodel = mmtbx.utils.fmodel_simple(xray_structures=[xrs], f_obs=f_calc, r_free_flags=flags, scattering_table="n_gaussian", bulk_solvent_and_scaling=False, skip_twin_detection=True) sel = pdb_1.hierarchy.atom_selection_cache().selection("name CZ") assert (sel.count(True) == 1) two_fofc_map, fofc_map = alternate_conformations.get_partial_omit_map( fmodel=fmodel, selection=sel) site = xrs.sites_frac()[sel.iselection()[0]] # CZ coordinate assert (fofc_map.tricubic_interpolation(site) > 20)
def exercise_utils () : #--- coord_stats_with_flips pdb_1 = iotbx.pdb.hierarchy.input(pdb_string="""\ ATOM 1639 N PHE A 113 18.514 41.994 54.886 1.00 12.36 N ATOM 1640 CA PHE A 113 19.737 42.742 54.898 1.00 12.97 C ATOM 1641 C PHE A 113 19.514 44.206 55.111 1.00 11.88 C ATOM 1642 O PHE A 113 18.442 44.758 54.823 1.00 13.75 O ATOM 1643 CB PHE A 113 20.587 42.460 53.684 1.00 20.08 C ATOM 1644 CG PHE A 113 19.893 42.692 52.399 1.00 17.15 C ATOM 1645 CD1 PHE A 113 19.182 41.689 51.798 1.00 20.34 C ATOM 1646 CD2 PHE A 113 20.029 43.895 51.745 1.00 21.22 C ATOM 1647 CE1 PHE A 113 18.577 41.887 50.601 1.00 23.49 C ATOM 1648 CE2 PHE A 113 19.411 44.105 50.542 1.00 24.87 C ATOM 1649 CZ PHE A 113 18.675 43.097 49.976 1.00 21.81 C ATOM 1650 H PHE A 113 17.875 42.342 54.427 1.00 14.83 H ATOM 1651 HA PHE A 113 20.250 42.435 55.661 1.00 15.57 H ATOM 1652 HB2 PHE A 113 21.367 43.036 53.708 1.00 24.10 H ATOM 1653 HB3 PHE A 113 20.865 41.531 53.707 1.00 24.10 H ATOM 1654 HD1 PHE A 113 19.099 40.866 52.224 1.00 24.40 H ATOM 1655 HD2 PHE A 113 20.518 44.581 52.138 1.00 25.47 H ATOM 1656 HE1 PHE A 113 18.077 41.204 50.215 1.00 28.18 H ATOM 1657 HE2 PHE A 113 19.488 44.927 50.113 1.00 29.84 H ATOM 1658 HZ PHE A 113 18.261 43.230 49.154 1.00 26.17 H """) pdb_2 = iotbx.pdb.hierarchy.input(pdb_string="""\ ATOM 1639 N PHE A 113 18.514 41.994 54.886 1.00 12.36 N ATOM 1640 CA PHE A 113 19.737 42.742 54.898 1.00 12.97 C ATOM 1641 C PHE A 113 19.514 44.206 55.111 1.00 11.88 C ATOM 1642 O PHE A 113 18.442 44.758 54.823 1.00 13.75 O ATOM 1643 CB PHE A 113 20.587 42.460 53.684 1.00 20.08 C ATOM 1644 CG PHE A 113 19.893 42.692 52.399 1.00 17.15 C ATOM 1645 CD1 PHE A 113 20.174 43.797 51.643 1.00 20.34 C ATOM 1646 CD2 PHE A 113 18.888 41.845 51.991 1.00 21.22 C ATOM 1647 CE1 PHE A 113 19.512 44.033 50.483 1.00 23.49 C ATOM 1648 CE2 PHE A 113 18.224 42.071 50.816 1.00 24.87 C ATOM 1649 CZ PHE A 113 18.548 43.166 50.057 1.00 21.81 C ATOM 1650 H PHE A 113 17.875 42.342 54.427 1.00 14.83 H ATOM 1651 HA PHE A 113 20.250 42.435 55.661 1.00 15.57 H ATOM 1652 HB2 PHE A 113 21.367 43.036 53.708 1.00 24.10 H ATOM 1653 HB3 PHE A 113 20.865 41.531 53.707 1.00 24.10 H ATOM 1654 HD1 PHE A 113 20.840 44.386 51.919 1.00 24.40 H ATOM 1655 HD2 PHE A 113 18.681 41.096 52.501 1.00 25.47 H ATOM 1656 HE1 PHE A 113 19.730 44.776 49.967 1.00 28.18 H ATOM 1657 HE2 PHE A 113 17.560 41.484 50.533 1.00 29.84 H ATOM 1658 HZ PHE A 113 18.093 43.330 49.263 1.00 26.17 H """) hierarchy_1 = pdb_1.hierarchy hierarchy_2 = pdb_2.hierarchy pdb_atoms_1 = hierarchy_1.atoms() sites_1 = pdb_atoms_1.extract_xyz() sites_2 = hierarchy_2.atoms().extract_xyz() result = alternate_conformations.coord_stats_with_flips(sites_1, sites_2, pdb_atoms_1) assert (approx_equal(result.rmsd, 0.2, eps=0.001)) assert (approx_equal(result.max_dev, 0.452427, eps=0.00001)) #--- get_selection_gap assert (alternate_conformations.get_selection_gap([1,2,3,4,5],[6,7,8,9]) == 0) assert (alternate_conformations.get_selection_gap([6,7], [1,2,3,4,5]) == 0) assert (alternate_conformations.get_selection_gap([1,2,3,4,5],[7,8,9]) == 1) assert (alternate_conformations.get_selection_gap([1,2,3,4,5],[4,5,7,8,9]) == -2) assert (alternate_conformations.get_selection_gap([4,5,7,8,9],[1,2,3,4]) == -1) #--- score_rotamers n_outliers = alternate_conformations.score_rotamers(hierarchy_2, flex.bool(sites_2.size(), True)) assert (n_outliers == 0) #--- get_partial_omit_map xrs = pdb_1.input.xray_structure_simple() f_calc = abs(xrs.structure_factors(d_min=1.5).f_calc()) f_calc.set_observation_type_xray_amplitude() flags = f_calc.generate_r_free_flags() fmodel = mmtbx.utils.fmodel_simple( xray_structures=[xrs], f_obs=f_calc, r_free_flags=flags, scattering_table="n_gaussian", bulk_solvent_and_scaling=False, skip_twin_detection=True) sel = pdb_1.hierarchy.atom_selection_cache().selection("name CZ") assert (sel.count(True) == 1) two_fofc_map, fofc_map = alternate_conformations.get_partial_omit_map( fmodel=fmodel, selection=sel) site = xrs.sites_frac()[sel.iselection()[0]] # CZ coordinate assert (fofc_map.tricubic_interpolation(site) > 20)