Esempio n. 1
0
    def test_comprehensive(self,
                           filename='enk_gm.pdb',
                           test='test_comprehensive'):
        filename = get_filename(filename)
        tests = [
            ["", "None", "None"],  # OK
            [
                """sites.rotate="1 2 3" sites.translate="4 5 6" """, "None",
                "None"
            ],  # OK
            [
                """sites.rotate="1 2 3" sites.translate="4 5 6" """,
                "chain A or resname HOH", "not (chain A or resname HOH)"
            ],  # OK
            [
                """sites.rotate="1 2 3" sites.translate="4 5 6" """,
                "chain A or chain C", "not (chain A or chain C)"
            ],  # OK
            # ["""sites.rotate="1 2 3" sites.translate="4 5 6" """, "resname HOH", "not (resname HOH)"], # FAILED
            [
                """sites.rotate="1 2 3" sites.translate="4 5 6" """, "name CA",
                "not (name CA)"
            ]  # OK
        ]
        count = 0
        for shift, shift_selection, remove_selection in tests:
            print(
                "========= shift: %s -- shift_selection: %s -- remove_selection: %s"
                % (shift, shift_selection, remove_selection))
            filename_shifted = '%s.%s.shifted.pdb' % (test, count)
            filename_fitted = '%s.%s.fitted.pdb' % (test, count)
            cmd = """phenix.pdbtools %(filename)s output.file_name=%(filename_shifted)s selection="%(shift_selection)s" remove="%(remove_selection)s" %(shift)s""" % {
                'filename': filename,
                'filename_shifted': filename_shifted,
                'shift': shift,
                'shift_selection': shift_selection,
                'remove_selection': remove_selection
            }
            libtbx.test_utils.run_command(command=cmd)

            moving = superpose.SuperposePDB(filename_shifted,
                                            selection=shift_selection)
            target = superpose.SuperposePDB(filename,
                                            selection=shift_selection)
            rmsd, lsq = moving.superpose(target)
            moving.output(lsq, filename=filename_fitted)

            xs_shifted = iotbx.pdb.input(
                file_name=filename_shifted).xray_structure_simple()
            xs_fitted = iotbx.pdb.input(
                file_name=filename_fitted).xray_structure_simple()
            check = xs_fitted.mean_distance(other=xs_shifted)
            if shift:
                self.assertGreater(check, 5.0)
            else:
                self.assertAlmostEqual(check, 0)
            count += 1
        return
Esempio n. 2
0
    def test_rna_dna(self, test='test_rna_dna', tolerance=0.7):
        filename1 = get_filename('superpose_pdbs_a.pdb')
        filename2 = get_filename('superpose_pdbs_b.pdb')
        filename_output = '%s.fitted.pdb' % test

        moving = superpose.SuperposePDB(filename2)
        target = superpose.SuperposePDB(filename1)
        rmsd, lsq = moving.superpose(target)
        rmsd_output = moving.output(lsq, filename=filename_output)

        # ["Number of atoms for LS fitting =  8142",
        # "RMSD (all matching atoms) (start): 405.009 (number of atoms: 8142)",
        # "RMSD (all matching atoms) (final): 0.607 (number of atoms: 8142)"]:
        self.assertLess(rmsd, tolerance)
Esempio n. 3
0
    def test_erik_vogan_case(self, test='test_erik_vogan_case'):
        filename1 = get_filename('rebuild03_ckpt04.pdb')
        filename2 = get_filename('2C30.pdb')
        filename_output = '%s.fitted.pdb' % test

        moving = superpose.SuperposePDB(filename2)
        target = superpose.SuperposePDB(filename1)
        rmsd, lsq = moving.superpose(target)
        moving.output(lsq, filename=filename_output)

        # ["Number of atoms for LS fitting =  36",
        # "RMSD (all matching atoms) (start): 60.830 (number of atoms: 99)",
        # "RMSD (all matching atoms) (final): 0.992 (number of atoms: 99)"]:
        self.assertLess(rmsd, 1.0)
Esempio n. 4
0
    def test_example_pairwise(self):
        result = {}
        moving = superpose.SuperposePDB(filename="1AON.pdb")
        fixed = superpose.SuperposePDB(filename="1AON.pdb")
        for moving_chain in list(moving.pdb.chains())[:7]:
            for fixed_chain in list(fixed.pdb.chains())[:7]:
                fixed.select_update(preset='ca', chain=fixed_chain.id)
                moving.select_update(preset='ca', chain=moving_chain.id)
                result[(moving_chain.id,
                        fixed_chain.id)] = moving.superpose(fixed)

        keys = set([i[0] for i in sorted(result.keys())])
        print("\t" + "\t".join(keys))
        for key1 in keys:
            rmsds = [result[(key1, key2)][0] for key2 in keys]
            print("%s:\t" % key1, "\t".join(["%0.2f" % i for i in rmsds]))
Esempio n. 5
0
    def test_altlocs_1(self, test='test_altlocs_1', tolerance=0.001):
        filename1 = get_filename("fab_1.pdb")
        filename2 = get_filename("fab_2.pdb")
        filename_output = '%s.fitted.pdb' % test

        moving = superpose.SuperposePDB(filename2)
        target = superpose.SuperposePDB(filename1)
        rmsd, lsq = moving.superpose(target)
        moving.output(lsq, filename=filename_output)

        # ["Number of atoms for LS fitting =  6",
        # "RMSD between fixed and moving atoms (start): 12.830",
        # "RMSD between fixed and moving atoms (final): 0.000",
        # "RMSD (all matching atoms) (start): 13.164 (number of atoms: 15)",
        # "RMSD (all matching atoms) (final): 0.001 (number of atoms: 15)"]:
        self.assertLess(rmsd, tolerance)
Esempio n. 6
0
 def test_assert_anisou_warning_message(
         self,
         filename='phe_a.pdb',
         test='test_assert_anisou_warning_message'):
     filename = get_filename(filename)
     filename_output = '%s.noaniso.pdb' % test
     moving = superpose.SuperposePDB(filename)
     target = superpose.SuperposePDB(filename)
     rmsd, lsq = moving.superpose(target)
     moving.output(lsq, filename=filename_output)
     pi = iotbx.pdb.input(file_name=filename_output)
     ph = pi.construct_hierarchy()
     pa = ph.atoms()
     uij = pa.extract_uij().as_double()
     print(uij.all_eq(-1.0))
     assert uij.all_eq(-1.0)
Esempio n. 7
0
    def test_same_models_many_differently_ordered_chains_2(
            self,
            test='test_same_models_many_differently_ordered_chains_2',
            tolerance=0.13):
        filename1 = get_filename("a2.pdb")
        filename2 = get_filename("b2.pdb")
        filename_output = '%s.fitted.pdb' % test

        moving = superpose.SuperposePDB(filename2)
        target = superpose.SuperposePDB(filename1)
        rmsd, lsq = moving.superpose(target)
        rmsd_output = moving.output(lsq, filename=filename_output)

        # ["Number of atoms for LS fitting =  1284",
        # "RMSD (all matching atoms) (start): 159.830 (number of atoms: 26184)",
        # "RMSD (all matching atoms) (final): 67.995 (number of atoms: 26184)"]
        self.assertLess(rmsd, tolerance)
Esempio n. 8
0
    def test_same_models_many_differently_ordered_chains_1(
            self,
            test='test_same_models_many_differently_ordered_chains_1',
            tolerance=0.03):
        filename1 = get_filename("a1.pdb")
        filename2 = get_filename("b1.pdb")
        filename_output = '%s.fitted.pdb' % test

        moving = superpose.SuperposePDB(filename2)
        target = superpose.SuperposePDB(filename1)
        rmsd, lsq = moving.superpose(target)
        rmsd_output = moving.output(lsq, filename=filename_output)

        # ["Number of atoms for LS fitting =  33",
        # "RMSD between fixed and moving atoms (start): 153.279",
        # "RMSD between fixed and moving atoms (final): 0.025"]:
        self.assertLess(rmsd, tolerance)
Esempio n. 9
0
 def test_alignment_used_1(self,
                           filename='fab_a_cut_1.pdb',
                           test='test_alignment_used_1',
                           tolerance=0.003):
     filename = get_filename(filename)
     filename_shifted = "%s.shifted.pdb" % test
     cmd = """phenix.pdbtools %(filename)s output.file_name=%(filename_shifted)s remove="%(gap_selection)s" %(shift)s""" % {
         'filename': filename,
         'filename_shifted': filename_shifted,
         'gap_selection': "chain A and (resid 5:30 or resid 32:50)",
         'shift': 'sites.rotate="10 20 30" sites.translate="10 20 30"'
     }
     libtbx.test_utils.run_command(command=cmd,
                                   result_file_names=[filename_shifted])
     moving = superpose.SuperposePDB(filename_shifted)
     target = superpose.SuperposePDB(filename)
     rmsd, lsq = moving.superpose(target)
     self.assertLess(rmsd, tolerance)
Esempio n. 10
0
 def test_example_multiple(self):
     # Open multiple models for fitting and align chain A Ca's.
     fixed = superpose.SuperposePDB(filename="1OAN.pdb",
                                    desc='fixed',
                                    preset='ca')
     models = superpose.SuperposePDB.open_models(filename="1S6N.pdb",
                                                 desc='moving',
                                                 preset='ca')
     for model in models:
         rmsd, lsq = model.superpose(fixed)
Esempio n. 11
0
    def test_example_presets(self):
        # Do a basic Ca fitting (default)
        fixed = superpose.SuperposePDB(filename="1CBS.pdb",
                                       desc='fixed',
                                       preset='ca')
        moving = superpose.SuperposePDB(filename="1HMT.pdb",
                                        desc='moving',
                                        preset='ca')
        rmsd, lsq = moving.superpose(fixed)

        # ... or will all atoms
        moving.select_update(preset="all")
        rmsd, lsq = moving.superpose(fixed)

        # ... or with a specific selection string.
        moving.select_update(selection="""pepnames and (name ca) chain A""")
        rmsd, lsq = moving.superpose(fixed)

        # ... or use the Select-o-matic.
        moving.selectomatic(fixed)
        rmsd, lsq = moving.superpose(fixed)
Esempio n. 12
0
 def test_alignment_used_2(self,
                           filename='fab_a_cut.pdb',
                           test='test_alignment_used_2',
                           tolerance=0.003):
     filename = get_filename(filename)
     for attempt in range(1):
         filename_shifted = '%s.%s.shifted.pdb' % (test, attempt)
         gap_selection = "chain A and (resid %s:%s or resid %s:%s or resid %s:%s)" % (
             tuple(
                 random_pair(0, 15) + random_pair(16, 35) +
                 random_pair(36, 50)))
         cmd = """phenix.pdbtools %(filename)s output.file_name=%(filename_shifted)s remove="%(gap_selection)s" %(shift)s""" % {
             'filename': filename,
             'filename_shifted': filename_shifted,
             'gap_selection': gap_selection,
             'shift': 'sites.rotate="10 20 30" sites.translate="10 20 30"'
         }
         libtbx.test_utils.run_command(command=cmd,
                                       result_file_names=[filename_shifted])
         moving = superpose.SuperposePDB(filename_shifted)
         target = superpose.SuperposePDB(filename)
         rmsd, lsq = moving.superpose(target)
         self.assertLess(rmsd, tolerance)
     return
Esempio n. 13
0
 def test_example_na(self):
     # Fit nucleic acid -- note the default settings will realize it's NA.
     fixed = superpose.SuperposePDB(filename="na1.pdb", desc='fixed')
     moving = superpose.SuperposePDB(filename="na2.pdb", desc='moving')
     rmsd, lsq = moving.superpose(fixed)