Exemplo n.º 1
0
def exercise(args):
    if find_rotarama_data_dir(optional=True) is None:
        print "Skipping exercise(): rotarama_data directory not available"
    else:
        from mmtbx.command_line import rebuild_rotarama_cache

        rebuild_rotarama_cache.run()
        #
        from libtbx.test_utils import approx_equal

        #
        verbose = "--verbose" in args
        #
        r = RotamerEval()
        tbl = r.aaTables["val"]
        assert RotamerEval().aaTables["val"] is tbl
        #
        assert tbl.whereIs([0.5]) == [0]
        assert tbl.bin2index([0]) == 0
        if r.data_version == "8000":
            aeql = [
                0.0000000,
                0.8926509,
                0.8296402,
                0.7876331,
                0.7351242,
                0.6721136,
                0.6511100,
                0.6406083,
                0.5670958,
                0.4620781,
                0.4200710,
                0.3885657,
                0.3570603,
                0.2625444,
                0.1785302,
                0.1155195,
                0.0945160,
                0.0945160,
                0.0735124,
                0.0735124,
            ]
        assert approx_equal([(y * 1000) for y in tbl.lookupTable[0:20]], aeql)
        assert approx_equal(r.evaluate("SER", [60]), 0.759436935186)
        #
        # Based off new (March 2015) NDFTs built from top8000-angles Makefile
        # Remaining inaccuracies are due to dihedrals being rounded off to
        # one decimal place!
        assert r.data_version == "8000"
        for aminoAcid, chiAngles, molpValue in [
            ("MET", [80.4, -172.2, 177.5], 9.7),
            ("GLN", [166.0, 178.0, -107.4], 9.7),
            ("ILE", [60.3, 162.4], 24.2),
            ("PHE", [-60.7, 97.9], 94.4),
            ("VAL", [-179.8], 58.2),
            ("LYS", [-175.6, 176.2, -172.0, -174.2], 81.8),
            ("THR", [76.7], 10.3),
            ("LEU", [-68.2, -165.8], 9.1),
            ("THR", [70.7], 25.9),
            ("LYS", [-179.3, -179.4, -151.1, -49.3], 13.1),
            ("THR", [-63.4], 83.9),
            ("ILE", [125.7, -175.4], 0.0),
            ("THR", [66.5], 45.3),
            ("LEU", [-117.8, 30.2], 0.0),
            ("GLU", [-75.1, -167.9, 139.8], 34.9),
            ("VAL", [-62.5], 32.5),
            ("GLU", [-73.9, -54.5, -18.4], 29.9),
            ("PRO", [-29.0], 90.6),
            ("SER", [35.7], 0.5),
            ("ASP", [-80.6, -19.8], 55.0),
            ("THR", [60.6], 79.8),
            ("ILE", [-60.9, -54.6], 35.5),
            ("GLU", [-169.6, -175.1, 72.8], 30.3),
            ("ASN", [177.5, 53.8], 30.3),
            ("VAL", [168.2], 42.4),
            ("LYS", [-71.7, -173.9, 179.2, 179.4], 94.0),
            ("LYS", [-60.8, 169.3, 148.9, -89.1], 5.7),
            ("ILE", [-70.9, 166.5], 75.5),
            ("GLN", [176.9, 171.9, 35.2], 55.5),
            ("ASP", [-150.1, 65.5], 1.0),
            ("LYS", [78.3, 138.2, 62.4, -165.4], 0.7),
            ("GLU", [-60.1, -76.8, -36.2], 36.3),
            ("ILE", [-54.4, 161.0], 30.8),
            ("PRO", [-31.6], 60.3),
            ("PRO", [-28.4], 96.3),
            ("ASP", [134.6, -61.7], 0.0),
            ("GLN", [-61.9, -179.0, -165.3], 13.0),
            ("GLN", [-53.1, -179.9, 28.0], 47.2),
            ("ARG", [161.7, 173.6, 174.2, -106.7], 20.5),
            ("LEU", [-68.3, 166.9], 81.8),
            ("ILE", [-48.9, -58.1], 29.8),
            ("PHE", [178.0, 78.2], 93.1),
            ("LYS", [-61.5, 173.7, -111.9, -58.8], 2.2),
            ("GLN", [-172.6, 177.3, 118.5], 9.7),
            ("LEU", [-50.8, -172.7], 17.3),
            ("GLU", [173.0, 141.4, 172.4], 2.4),
            ("ASP", [-78.0, 177.6], 74.9),
            ("ARG", [-55.9, -71.7, 114.2, -128.0], 0.4),
            ("THR", [59.8], 74.3),
            ("LEU", [-60.3, -179.2], 78.5),
            ("SER", [59.4], 73.3),
            ("ASP", [-73.0, 157.0], 84.8),
            ("TYR", [-63.3, 103.6], 90.4),
            ("ASN", [-159.1, -145.0], 1.2),
            ("ILE", [-69.6, 176.4], 57.3),
            ("GLN", [-79.4, -161.7, -148.4], 2.4),
            ("LYS", [49.7, 165.7, 154.3, 72.9], 3.2),
            ("GLU", [-72.2, 126.6, 36.7], 0.6),
            ("SER", [-73.2], 18.8),
            ("THR", [-60.6], 94.7),
            ("LEU", [-43.5, -170.9], 4.6),
            ("HIS", [-69.1, -88.8], 80.8),
            ("LEU", [172.8, 65.9], 43.9),
            ("VAL", [177.0], 83.7),
            ("LEU", [-108.1, 39.2], 0.0),
            ("ARG", [133.9, -155.8, 27.2, -152.9], 0.0),
            ("LEU", [-92.5, 37.5], 0.1),
            ("ARG", [-146.6, 157.6, 92.9, -95.5], 0.9),
        ]:
            r_eval = 100 * r.evaluate(aminoAcid, chiAngles)
            if verbose:
                print aminoAcid, "%4.1f %4.1f %4.1f" % (r_eval, molpValue, r_eval - molpValue)
                # print '      ("%s",' % aminoAcid, chiAngles, ',', "%4.1f)," % r_eval
        # assert approx_equal(r_eval, molpValue, eps=0.9)
        #
        # check if tables are cleared from memory if all RotamerEval instances
        # are gone
        for aa, ndt_weakref in RotamerEval.aaTables.items():
            assert ndt_weakref() is not None
        del r
        del tbl
        for aa, ndt_weakref in RotamerEval.aaTables.items():
            assert ndt_weakref() is None
        #
    print "OK"
def exercise(args):
    if (find_rotarama_data_dir(optional=True) is None):
        print "Skipping exercise(): rotarama_data directory not available"
    else:
        from mmtbx.command_line import rebuild_rotarama_cache
        rebuild_rotarama_cache.run()
        #
        from libtbx.test_utils import approx_equal
        #
        verbose = ("--verbose" in args)
        #
        r = RamachandranEval()
        tbl = r.aaTables['glycine']
        assert RamachandranEval().aaTables['glycine'] is tbl
        #
        # Based off new (Oct 2006) NDFTs built from top500-angles Makefile
        # Remaining inaccuracies are due to dihedrals being rounded off to
        # one decimal place!
        for aminoAcid, phiPsi, molpValue in [  #{{{
            ("general", [-91.17, 131.33], 40.94),
            ("general", [-139.95, 81.92], 1.47),
            ("general", [51.22, 23.16], 2.52),
            ("glycine", [-151.55, 88.38], 0.07),
            ("general", [-82.35, 160.71], 23.71),
            ("general", [-101.76, 135.67], 45.14),
            ("general", [-110.13, 120.96], 58.46),
            ("general", [-81.78, 128.43], 39.44),
            ("glycine", [-133.39, 160.58], 21.73),
            ("general", [-133.33, 127.68], 42.30),
            ("general", [-108.38, 126.39], 61.01),
            ("general", [-113.08, 126.63], 62.09),
            ("general", [-143.87, 166.78], 25.67),
            ("prepro", [-124.82, 120.58], 26.77),
            ("proline", [-64.55, 145.64], 94.90),
            ("general", [-45.79, -40.17], 10.23),
            ("general", [-63.09, 7.01], 0.47),
            ("general", [-100.14, -45.65], 7.66),
            ("general", [-86.64, -15.77], 36.67),
            ("general", [-154.47, 93.16], 1.42),
            ("general", [-112.91, 154.29], 27.39),
            ("prepro", [-164.30, 153.09], 10.20),
            ("proline", [-40.03, -62.10], 1.14),
            ("general", [-88.23, 54.64], 2.88),
            ("glycine", [-150.33, 8.77], 0.99),
            ("general", [-106.19, 65.65], 0.93),
            ("general", [-79.57, 41.90], 0.63),
            ("general", [-11.57, -82.78], 0.00),
            ("general", [54.67, 49.83], 15.13),
            ("general", [-31.21, 156.35], 0.00),
            ("general", [-5.62, -53.35], 0.00),
            ("general", [-60.03, -22.48], 63.20),
            ("general", [-71.41, -17.83], 64.40),
            ("general", [-80.18, -5.88], 44.61),
            ("general", [-90.33, -159.55], 0.66),
            ("glycine", [64.34, -132.09], 34.98),
            ("general", [-107.31, 27.71], 8.67),
            ("general", [-69.18, -45.50], 74.08),
            ("general", [-131.17, 129.92], 53.87),
            ("general", [-125.57, 136.49], 60.53),
            ("general", [-118.28, 151.90], 34.88),
            ("general", [-136.27, 122.13], 24.86),
            ("general", [-72.52, 148.04], 44.34),
            ("general", [-123.41, 135.11], 61.62),
            ("general", [-81.31, 137.39], 36.95),
            ("general", [-94.11, -22.71], 18.73),
            ("general", [-104.08, -30.86], 8.84),
            ("general", [-106.27, 124.65], 59.71),
            ("general", [-113.44, 157.11], 24.96),
            ("general", [-80.13, -171.26], 2.60),
            ("general", [-67.90, -10.85], 53.15),
            ("general", [-98.82, -6.37], 26.15),
            ("glycine", [92.77, -6.55], 73.68),
            ("general", [-88.65, 139.40], 33.51),
            ("glycine", [-53.72, 145.75], 24.34),
            ("general", [-69.26, 144.42], 48.55),
            ("general", [-107.68, 133.12], 57.79),
            ("glycine", [-77.98, -161.75], 22.90),
            ("general", [-88.43, 159.48], 18.09),
            ("general", [-69.18, 118.06], 13.32),
            ("general", [-118.20, 130.15], 63.55),
            ("general", [-101.63, 154.20], 20.70),
            ("general", [-60.43, 139.20], 53.08),
            ("general", [-98.65, -39.53], 9.62),
            ("glycine", [-170.85, 172.86], 45.91),
            ("general", [-83.58, 114.39], 22.07),
            ("general", [-86.93, 127.35], 36.67),
            ("general", [-133.54, 58.50], 1.43),
            ("general", [-104.10, -54.11], 3.80),
            ("prepro", [-95.84, 135.89], 33.59),
            ("proline", [-61.91, -44.54], 28.37),
            ("general", [-62.64, 83.24], 0.07),
            ("general", [-171.76, 111.15], 0.41),
            ("glycine", [-136.70, -139.20], 3.57),
            ("general", [42.42, 42.27], 3.32),
            ("glycine", [55.77, 28.48], 55.42),
            ("general", [-90.29, 157.93], 16.97),
            ("general", [-135.18, 139.86], 47.95),
            ("general", [-102.72, 137.51], 41.91),
            ("general", [-127.29, 134.66], 60.92),
            ("general", [-83.54, 142.97], 31.55),
            ("general", [-155.14, 146.33], 20.07),
            ("general", [-128.99, 131.88], 59.20),
            ("general", [-107.06, 146.26], 31.12),
            ("general", [-92.24, 97.79], 11.98),
            ("general", [-134.18, 101.62], 6.01),
            ("general", [-78.17, 152.18], 31.34),
            ("glycine", [-50.36, -27.45], 22.99),
            ("general", [-66.02, -20.32], 67.44),
            ("general", [-77.76, -2.10], 27.17),
            ("glycine", [81.90, -156.46], 41.39),
            ("prepro", [-107.81, 128.95], 28.69),
            ("proline", [-70.18, 133.33], 26.27),
            ("glycine", [-126.36, 3.87], 6.77),
            ("general", [-167.92, 174.97], 6.79),
            ("general", [-159.77, 150.09], 17.32),
            ("general", [-99.29, 152.73], 20.45),
            ("general", [-145.08, 134.33], 21.62),
            ("general", [-125.58, 126.16], 58.63),
            ("general", [-100.31, 110.18], 27.07),
            ("general", [-88.81, -7.47], 49.70),
            ("general", [-75.67, 160.16], 28.16),
        ]:  #}}}
            r_eval = 100 * r.evaluate(aminoAcid, phiPsi)
            if (verbose):
                print aminoAcid, "%4.1f %4.1f %4.1f" % (r_eval, molpValue,
                                                        r_eval - molpValue)
            assert approx_equal(r_eval, molpValue, eps=0.9)
        #
        # check if tables are cleared from memory if all RamachandranEval instances
        # are gone
        for aa, ndt_weakref in RamachandranEval.aaTables.items():
            assert ndt_weakref() is not None
        del r
        del tbl
        for aa, ndt_weakref in RamachandranEval.aaTables.items():
            assert ndt_weakref() is None
        #
    print "OK"
Exemplo n.º 3
0
def exercise(args):
    if (find_rotarama_data_dir(optional=True) is None):
        print "Skipping exercise(): rotarama_data directory not available"
    else:
        from mmtbx.command_line import rebuild_rotarama_cache
        rebuild_rotarama_cache.run()
        #
        from libtbx.test_utils import approx_equal
        #
        verbose = ("--verbose" in args)
        #
        r = RotamerEval()
        tbl = r.aaTables['val']
        assert RotamerEval().aaTables['val'] is tbl
        #
        assert tbl.whereIs([0.5]) == [0]
        assert tbl.bin2index([0]) == 0
        if r.data_version == '8000':
            aeql = [
                0.9346579, 0.8926509, 0.8296402, 0.7876331, 0.7351242,
                0.6721136, 0.6511100, 0.6406083, 0.5670958, 0.4620781,
                0.4200710, 0.3885657, 0.3570603, 0.2625444, 0.1785302,
                0.1155195, 0.0945160, 0.0945160, 0.0735124, 0.0735124
            ]
        assert approx_equal([(y * 1000) for y in tbl.lookupTable[0:20]], aeql)
        assert approx_equal(r.evaluate("SER", [60]), 0.759436935186)
        #
        # Based off new (March 2015) NDFTs built from top8000-angles Makefile
        # Remaining inaccuracies are due to dihedrals being rounded off to
        # one decimal place!
        assert r.data_version == '8000'
        for aminoAcid, chiAngles, molpValue in [
            ("MET", [80.4, -172.2, 177.5], 9.7),
            ("GLN", [166.0, 178.0, -107.4], 9.7),
            ("ILE", [60.3, 162.4], 24.2),
            ("PHE", [-60.7, 97.9], 94.4),
            ("VAL", [-179.8], 58.2),
            ("LYS", [-175.6, 176.2, -172.0, -174.2], 81.8),
            ("THR", [76.7], 10.3),
            ("LEU", [-68.2, -165.8], 9.1),
            ("THR", [70.7], 25.9),
            ("LYS", [-179.3, -179.4, -151.1, -49.3], 13.1),
            ("THR", [-63.4], 83.9),
            ("ILE", [125.7, -175.4], 0.0),
            ("THR", [66.5], 45.3),
            ("LEU", [-117.8, 30.2], 0.0),
            ("GLU", [-75.1, -167.9, 139.8], 34.9),
            ("VAL", [-62.5], 32.5),
            ("GLU", [-73.9, -54.5, -18.4], 29.9),
            ("PRO", [-29.0], 90.6),
            ("SER", [35.7], 0.5),
            ("ASP", [-80.6, -19.8], 55.0),
            ("THR", [60.6], 79.8),
            ("ILE", [-60.9, -54.6], 35.5),
            ("GLU", [-169.6, -175.1, 72.8], 30.3),
            ("ASN", [177.5, 53.8], 30.3),
            ("VAL", [168.2], 42.4),
            ("LYS", [-71.7, -173.9, 179.2, 179.4], 94.0),
            ("LYS", [-60.8, 169.3, 148.9, -89.1], 5.7),
            ("ILE", [-70.9, 166.5], 75.5),
            ("GLN", [176.9, 171.9, 35.2], 55.5),
            ("ASP", [-150.1, 65.5], 1.0),
            ("LYS", [78.3, 138.2, 62.4, -165.4], 0.7),
            ("GLU", [-60.1, -76.8, -36.2], 36.3),
            ("ILE", [-54.4, 161.0], 30.8),
            ("PRO", [-31.6], 60.3),
            ("PRO", [-28.4], 96.3),
            ("ASP", [134.6, -61.7], 0.0),
            ("GLN", [-61.9, -179.0, -165.3], 13.0),
            ("GLN", [-53.1, -179.9, 28.0], 47.2),
            ("ARG", [161.7, 173.6, 174.2, -106.7], 20.5),
            ("LEU", [-68.3, 166.9], 81.8),
            ("ILE", [-48.9, -58.1], 29.8),
            ("PHE", [178.0, 78.2], 93.1),
            ("LYS", [-61.5, 173.7, -111.9, -58.8], 2.2),
            ("GLN", [-172.6, 177.3, 118.5], 9.7),
            ("LEU", [-50.8, -172.7], 17.3),
            ("GLU", [173.0, 141.4, 172.4], 2.4),
            ("ASP", [-78.0, 177.6], 74.9),
            ("ARG", [-55.9, -71.7, 114.2, -128.0], 0.4),
            ("THR", [59.8], 74.3),
            ("LEU", [-60.3, -179.2], 78.5),
            ("SER", [59.4], 73.3),
            ("ASP", [-73.0, 157.0], 84.8),
            ("TYR", [-63.3, 103.6], 90.4),
            ("ASN", [-159.1, -145.0], 1.2),
            ("ILE", [-69.6, 176.4], 57.3),
            ("GLN", [-79.4, -161.7, -148.4], 2.4),
            ("LYS", [49.7, 165.7, 154.3, 72.9], 3.2),
            ("GLU", [-72.2, 126.6, 36.7], 0.6),
            ("SER", [-73.2], 18.8),
            ("THR", [-60.6], 94.7),
            ("LEU", [-43.5, -170.9], 4.6),
            ("HIS", [-69.1, -88.8], 80.8),
            ("LEU", [172.8, 65.9], 43.9),
            ("VAL", [177.0], 83.7),
            ("LEU", [-108.1, 39.2], 0.0),
            ("ARG", [133.9, -155.8, 27.2, -152.9], 0.0),
            ("LEU", [-92.5, 37.5], 0.1),
            ("ARG", [-146.6, 157.6, 92.9, -95.5], 0.9),
        ]:
            r_eval = 100 * r.evaluate(aminoAcid, chiAngles)
            if (verbose):
                print aminoAcid, "%4.1f %4.1f %4.1f" % (r_eval, molpValue,
                                                        r_eval - molpValue)
                #print '      ("%s",' % aminoAcid, chiAngles, ',', "%4.1f)," % r_eval
        # assert approx_equal(r_eval, molpValue, eps=0.9)
        #
        # check if tables are cleared from memory if all RotamerEval instances
        # are gone
        for aa, ndt_weakref in RotamerEval.aaTables.items():
            assert ndt_weakref() is not None
        del r
        del tbl
        for aa, ndt_weakref in RotamerEval.aaTables.items():
            assert ndt_weakref() is None
        #
    print "OK"
def exercise(args):
    if find_rotarama_data_dir(optional=True) is None:
        print "Skipping exercise(): rotarama_data directory not available"
    else:
        from mmtbx.command_line import rebuild_rotarama_cache

        rebuild_rotarama_cache.run()
        #
        from libtbx.test_utils import approx_equal

        #
        verbose = "--verbose" in args
        #
        r = RamachandranEval()
        tbl = r.aaTables["glycine"]
        assert RamachandranEval().aaTables["glycine"] is tbl
        #
        # Based off new (Oct 2006) NDFTs built from top500-angles Makefile
        # Remaining inaccuracies are due to dihedrals being rounded off to
        # one decimal place!
        for aminoAcid, phiPsi, molpValue in [  # {{{
            ("general", [-91.17, 131.33], 40.94),
            ("general", [-139.95, 81.92], 1.47),
            ("general", [51.22, 23.16], 2.52),
            ("glycine", [-151.55, 88.38], 0.07),
            ("general", [-82.35, 160.71], 23.71),
            ("general", [-101.76, 135.67], 45.14),
            ("general", [-110.13, 120.96], 58.46),
            ("general", [-81.78, 128.43], 39.44),
            ("glycine", [-133.39, 160.58], 21.73),
            ("general", [-133.33, 127.68], 42.30),
            ("general", [-108.38, 126.39], 61.01),
            ("general", [-113.08, 126.63], 62.09),
            ("general", [-143.87, 166.78], 25.67),
            ("prepro", [-124.82, 120.58], 26.77),
            ("proline", [-64.55, 145.64], 94.90),
            ("general", [-45.79, -40.17], 10.23),
            ("general", [-63.09, 7.01], 0.47),
            ("general", [-100.14, -45.65], 7.66),
            ("general", [-86.64, -15.77], 36.67),
            ("general", [-154.47, 93.16], 1.42),
            ("general", [-112.91, 154.29], 27.39),
            ("prepro", [-164.30, 153.09], 10.20),
            ("proline", [-40.03, -62.10], 1.14),
            ("general", [-88.23, 54.64], 2.88),
            ("glycine", [-150.33, 8.77], 0.99),
            ("general", [-106.19, 65.65], 0.93),
            ("general", [-79.57, 41.90], 0.63),
            ("general", [-11.57, -82.78], 0.00),
            ("general", [54.67, 49.83], 15.13),
            ("general", [-31.21, 156.35], 0.00),
            ("general", [-5.62, -53.35], 0.00),
            ("general", [-60.03, -22.48], 63.20),
            ("general", [-71.41, -17.83], 64.40),
            ("general", [-80.18, -5.88], 44.61),
            ("general", [-90.33, -159.55], 0.66),
            ("glycine", [64.34, -132.09], 34.98),
            ("general", [-107.31, 27.71], 8.67),
            ("general", [-69.18, -45.50], 74.08),
            ("general", [-131.17, 129.92], 53.87),
            ("general", [-125.57, 136.49], 60.53),
            ("general", [-118.28, 151.90], 34.88),
            ("general", [-136.27, 122.13], 24.86),
            ("general", [-72.52, 148.04], 44.34),
            ("general", [-123.41, 135.11], 61.62),
            ("general", [-81.31, 137.39], 36.95),
            ("general", [-94.11, -22.71], 18.73),
            ("general", [-104.08, -30.86], 8.84),
            ("general", [-106.27, 124.65], 59.71),
            ("general", [-113.44, 157.11], 24.96),
            ("general", [-80.13, -171.26], 2.60),
            ("general", [-67.90, -10.85], 53.15),
            ("general", [-98.82, -6.37], 26.15),
            ("glycine", [92.77, -6.55], 73.68),
            ("general", [-88.65, 139.40], 33.51),
            ("glycine", [-53.72, 145.75], 24.34),
            ("general", [-69.26, 144.42], 48.55),
            ("general", [-107.68, 133.12], 57.79),
            ("glycine", [-77.98, -161.75], 22.90),
            ("general", [-88.43, 159.48], 18.09),
            ("general", [-69.18, 118.06], 13.32),
            ("general", [-118.20, 130.15], 63.55),
            ("general", [-101.63, 154.20], 20.70),
            ("general", [-60.43, 139.20], 53.08),
            ("general", [-98.65, -39.53], 9.62),
            ("glycine", [-170.85, 172.86], 45.91),
            ("general", [-83.58, 114.39], 22.07),
            ("general", [-86.93, 127.35], 36.67),
            ("general", [-133.54, 58.50], 1.43),
            ("general", [-104.10, -54.11], 3.80),
            ("prepro", [-95.84, 135.89], 33.59),
            ("proline", [-61.91, -44.54], 28.37),
            ("general", [-62.64, 83.24], 0.07),
            ("general", [-171.76, 111.15], 0.41),
            ("glycine", [-136.70, -139.20], 3.57),
            ("general", [42.42, 42.27], 3.32),
            ("glycine", [55.77, 28.48], 55.42),
            ("general", [-90.29, 157.93], 16.97),
            ("general", [-135.18, 139.86], 47.95),
            ("general", [-102.72, 137.51], 41.91),
            ("general", [-127.29, 134.66], 60.92),
            ("general", [-83.54, 142.97], 31.55),
            ("general", [-155.14, 146.33], 20.07),
            ("general", [-128.99, 131.88], 59.20),
            ("general", [-107.06, 146.26], 31.12),
            ("general", [-92.24, 97.79], 11.98),
            ("general", [-134.18, 101.62], 6.01),
            ("general", [-78.17, 152.18], 31.34),
            ("glycine", [-50.36, -27.45], 22.99),
            ("general", [-66.02, -20.32], 67.44),
            ("general", [-77.76, -2.10], 27.17),
            ("glycine", [81.90, -156.46], 41.39),
            ("prepro", [-107.81, 128.95], 28.69),
            ("proline", [-70.18, 133.33], 26.27),
            ("glycine", [-126.36, 3.87], 6.77),
            ("general", [-167.92, 174.97], 6.79),
            ("general", [-159.77, 150.09], 17.32),
            ("general", [-99.29, 152.73], 20.45),
            ("general", [-145.08, 134.33], 21.62),
            ("general", [-125.58, 126.16], 58.63),
            ("general", [-100.31, 110.18], 27.07),
            ("general", [-88.81, -7.47], 49.70),
            ("general", [-75.67, 160.16], 28.16),
        ]:  # }}}
            r_eval = 100 * r.evaluate(aminoAcid, phiPsi)
            if verbose:
                print aminoAcid, "%4.1f %4.1f %4.1f" % (r_eval, molpValue, r_eval - molpValue)
            assert approx_equal(r_eval, molpValue, eps=0.9)
        #
        # check if tables are cleared from memory if all RamachandranEval instances
        # are gone
        for aa, ndt_weakref in RamachandranEval.aaTables.items():
            assert ndt_weakref() is not None
        del r
        del tbl
        for aa, ndt_weakref in RamachandranEval.aaTables.items():
            assert ndt_weakref() is None
        #
    print "OK"