示例#1
0
def test_improper_torsion():

    patterns = [
        ['[*:1]~[#6X3:2](~[*:3])~[*:4]', 1.5341333333333333, 3.141592653589793, 2.0],
        ['[*:1]~[#6X3:2](~[#8X1:3])~[#8:4]', 99., 99., 99.],
        ['[*:1]~[#7X3$(*~[#15,#16](!-[*])):2](~[*:3])~[*:4]', 99., 99., 99.],
        ['[*:1]~[#7X3$(*~[#6X3]):2](~[*:3])~[*:4]', 1.3946666666666667, 3.141592653589793, 2.0],
        ['[*:1]~[#7X3$(*~[#7X2]):2](~[*:3])~[*:4]', 99., 99., 99.],
        ['[*:1]~[#7X3$(*@1-[*]=,:[*][*]=,:[*]@1):2](~[*:3])~[*:4]', 99., 99., 99.],
        ['[*:1]~[#6X3:2](=[#7X2,#7X3+1:3])~[#7:4]', 99., 99., 99.]
    ]

    smirks = [x[0] for x in patterns]
    params = np.array([[x[1], x[2], x[3]] for x in patterns])
    imph = bonded.ImproperTorsionHandler(smirks, params, None)

    obj = imph.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    assert len(all_handlers) == 1

    new_imph = all_handlers[0]
    np.testing.assert_equal(new_imph.smirks, imph.smirks)
    np.testing.assert_equal(new_imph.params, imph.params)
    assert new_imph.props == imph.props
示例#2
0
def test_am1ccc():

    patterns = [
        ['[#6X4:1]-[#1:2]', 0.46323257920556493],
        ['[#6X3$(*=[#8,#16]):1]-[#6a:2]', 0.24281402370571598],
        ['[#6X3$(*=[#8,#16]):1]-[#8X1,#8X2:2]', 1.0620166764992722],
        ['[#6X3$(*=[#8,#16]):1]=[#8X1$(*=[#6X3]-[#8X2]):2]', 2.227759732057297],
        ['[#6X3$(*=[#8,#16]):1]=[#8X1,#8X2:2]', 2.8182928673804217],
        ['[#6a:1]-[#8X1,#8X2:2]', 0.5315976926761063],
        ['[#6a:1]-[#1:2]', 0.0],
        ['[#6a:1]:[#6a:2]', 0.0],
        ['[#6a:1]:[#6a:2]', 0.0],
        ['[#8X1,#8X2:1]-[#1:2]', -2.3692047944101415],
        ['[#16:1]-[#8:2]', 99.]
    ]

    smirks = [x[0] for x in patterns]
    params = np.array([x[1]*np.sqrt(138.935456) for x in patterns])
    props = None
    
    am1h = nonbonded.AM1CCCHandler(smirks, params, props)
    obj = am1h.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    assert len(all_handlers) == 1

    new_am1h = all_handlers[0]
    np.testing.assert_equal(new_am1h.smirks, am1h.smirks)
    np.testing.assert_equal(new_am1h.params, am1h.params)
    assert new_am1h.props == am1h.props
示例#3
0
def test_proper_torsion():

    # proper torsions have a variadic number of terms

    patterns = [
        ['[*:1]-[#6X3:2]=[#6X3:3]-[*:4]', [[99., 99., 99.]]],
        ['[*:1]-[#6X3:2]=[#6X3:3]-[#35:4]', [[99., 99., 99.]]],
        ['[#9:1]-[#6X3:2]=[#6X3:3]-[#35:4]', [[1., 2., 3.], [4., 5., 6.]]],
        ['[#35:1]-[#6X3:2]=[#6X3:3]-[#35:4]', [[7., 8., 9.], [1., 3., 5.], [4., 4., 4.]]],
        ['[#9:1]-[#6X3:2]=[#6X3:3]-[#9:4]', [[7., 8., 9.]]],
    ]

    smirks = [x[0] for x in patterns]
    params = [x[1] for x in patterns]
    props = None

    ph = bonded.ProperTorsionHandler(smirks, params, None)
    obj = ph.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    assert len(all_handlers) == 1

    new_ph = all_handlers[0]
    np.testing.assert_equal(new_ph.smirks, ph.smirks)
    np.testing.assert_equal(new_ph.params, ph.params)
    assert new_ph.props == ph.props
示例#4
0
def test_simple_charge_handler():

    patterns = [
        ['[#1:1]', 99.],
        ['[#1:1]-[#6X4]', 99.],
        ['[#1:1]-[#6X4]-[#7,#8,#9,#16,#17,#35]', 99.],
        ['[#1:1]-[#6X4](-[#7,#8,#9,#16,#17,#35])-[#7,#8,#9,#16,#17,#35]', 99.],
        ['[#1:1]-[#6X4](-[#7,#8,#9,#16,#17,#35])(-[#7,#8,#9,#16,#17,#35])-[#7,#8,#9,#16,#17,#35]', 99.],
        ['[#1:1]-[#6X4]~[*+1,*+2]', 99.],
        ['[#1:1]-[#6X3]', 99.],
        ['[#1:1]-[#6X3]~[#7,#8,#9,#16,#17,#35]', 99.],
        ['[#1:1]-[#6X3](~[#7,#8,#9,#16,#17,#35])~[#7,#8,#9,#16,#17,#35]', 99.],
        ['[#1:1]-[#6X2]', 99.],
        ['[#1:1]-[#7]', 99.],
        ['[#1:1]-[#8]', 99.],
        ['[#1:1]-[#16]', 99.],
        ['[#6:1]', 0.7],
        ['[#6X2:1]', 99.],
        ['[#6X4:1]', 0.1],
        ['[#8:1]', 99.],
        ['[#8X2H0+0:1]', 0.5],
        ['[#8X2H1+0:1]', 99.],
        ['[#7:1]', 0.3],
        ['[#16:1]', 99.],
        ['[#15:1]', 99.],
        ['[#9:1]', 1.0],
        ['[#17:1]', 99.],
        ['[#35:1]', 99.],
        ['[#53:1]', 99.],
        ['[#3+1:1]', 99.],
        ['[#11+1:1]', 99.],
        ['[#19+1:1]', 99.],
        ['[#37+1:1]', 99.],
        ['[#55+1:1]', 99.],
        ['[#9X0-1:1]', 99.],
        ['[#17X0-1:1]', 99.],
        ['[#35X0-1:1]', 99.],
        ['[#53X0-1:1]', 99.],
    ]

    smirks = [x[0] for x in patterns]
    params = np.array([x[1] for x in patterns])
    props = None

    sch = nonbonded.SimpleChargeHandler(smirks, params, props)
    obj = sch.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    assert len(all_handlers) == 1

    new_sch = all_handlers[0]
    np.testing.assert_equal(new_sch.smirks, sch.smirks)
    np.testing.assert_equal(new_sch.params, sch.params)
    assert new_sch.props == sch.props
示例#5
0
def test_lennard_jones_handler():

    patterns = [
        ['[#1:1]', 99., 999.],
        ['[#1:1]-[#6X4]', 99., 999.],
        ['[#1:1]-[#6X4]-[#7,#8,#9,#16,#17,#35]', 99., 999.],
        ['[#1:1]-[#6X4](-[#7,#8,#9,#16,#17,#35])-[#7,#8,#9,#16,#17,#35]', 99., 999.],
        ['[#1:1]-[#6X4](-[#7,#8,#9,#16,#17,#35])(-[#7,#8,#9,#16,#17,#35])-[#7,#8,#9,#16,#17,#35]', 99., 999.],
        ['[#1:1]-[#6X4]~[*+1,*+2]', 99., 999.],
        ['[#1:1]-[#6X3]', 99., 999.],
        ['[#1:1]-[#6X3]~[#7,#8,#9,#16,#17,#35]', 99., 999.],
        ['[#1:1]-[#6X3](~[#7,#8,#9,#16,#17,#35])~[#7,#8,#9,#16,#17,#35]', 99., 999.],
        ['[#1:1]-[#6X2]', 99., 999.],
        ['[#1:1]-[#7]', 99., 999.],
        ['[#1:1]-[#8]', 99., 999.],
        ['[#1:1]-[#16]', 99., 999.],
        ['[#6:1]', 0.7, 0.8],
        ['[#6X2:1]', 99., 999.],
        ['[#6X4:1]', 0.1, 0.2],
        ['[#8:1]', 99., 999.],
        ['[#8X2H0+0:1]', 0.5, 0.6],
        ['[#8X2H1+0:1]', 99., 999.],
        ['[#7:1]', 0.3, 0.4],
        ['[#16:1]', 99., 999.],
        ['[#15:1]', 99., 999.],
        ['[#9:1]', 1.0, 1.1],
        ['[#17:1]', 99., 999.],
        ['[#35:1]', 99., 999.],
        ['[#53:1]', 99., 999.],
        ['[#3+1:1]', 99., 999.],
        ['[#11+1:1]', 99., 999.],
        ['[#19+1:1]', 99., 999.],
        ['[#37+1:1]', 99., 999.],
        ['[#55+1:1]', 99., 999.],
        ['[#9X0-1:1]', 99., 999.],
        ['[#17X0-1:1]', 99., 999.],
        ['[#35X0-1:1]', 99., 999.],
        ['[#53X0-1:1]', 99., 999.],
    ]

    smirks = [x[0] for x in patterns]
    params = np.array([[x[1], x[2]] for x in patterns])
    props = None

    ljh = nonbonded.LennardJonesHandler(smirks, params, props)
    obj = ljh.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    ljh = all_handlers[0]
    np.testing.assert_equal(ljh.smirks, ljh.smirks)
    np.testing.assert_equal(ljh.params, ljh.params)
    assert ljh.props == ljh.props
示例#6
0
def test_am1bcc():

    smirks = []
    params = []
    props = None

    am1 = nonbonded.AM1BCCHandler(smirks, params, props)
    obj = am1.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    am1 = all_handlers[0]
    np.testing.assert_equal(am1.smirks, am1.smirks)
    np.testing.assert_equal(am1.params, am1.params)
    assert am1.props == am1.props
示例#7
0
def test_gbsa_handler():

    patterns = [
       ['[*:1]', 99., 99.],
       ['[#1:1]', 99., 99.],
       ['[#1:1]~[#7]', 99., 99.],
       ['[#6:1]', 0.1, 0.2],
       ['[#7:1]', 0.3, 0.4],
       ['[#8:1]', 0.5, 0.6],
       ['[#9:1]', 0.7, 0.8],
       ['[#14:1]', 99., 99.],
       ['[#15:1]', 99., 99.],
       ['[#16:1]', 99., 99.],
       ['[#17:1]', 99., 99.]
    ]

    props = {
        'solvent_dielectric' : 78.3, # matches OBC2,
        'solute_dielectric' : 1.0,
        'probe_radius' : 0.14,
        'surface_tension' : 28.3919551,
        'dielectric_offset' : 0.009,
        # GBOBC1
        'alpha' : 0.8,
        'beta' : 0.0,
        'gamma' : 2.909125
    }

    smirks = [x[0] for x in patterns]
    params = np.array([[x[1], x[2]] for x in patterns])

    gbh = nonbonded.GBSAHandler(smirks, params, props)

    obj = gbh.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    assert len(all_handlers) == 1

    new_gbh = all_handlers[0]
    np.testing.assert_equal(new_gbh.smirks, gbh.smirks)
    np.testing.assert_equal(new_gbh.params, gbh.params)
    assert new_gbh.props == gbh.props
示例#8
0
def test_am1_differences():

    ff_raw = open("ff/params/smirnoff_1_1_0_ccc.py").read()
    ff_handlers = deserialize(ff_raw)
    for ccc in ff_handlers:
        if isinstance(ccc, nonbonded.AM1CCCHandler):
            break

    suppl = Chem.SDMolSupplier('tests/ligands_40.sdf', removeHs=False)
    am1 = nonbonded.AM1Handler([], [], None)
    bcc = nonbonded.AM1BCCHandler([], [], None)

    for mol in suppl:

        am1_params, vjp_fn = am1.parameterize(mol)
        ccc_params, vjp_fn = ccc.parameterize(mol)
        bcc_params, vjp_fn = bcc.parameterize(mol)

        if np.sum(np.abs(ccc_params - bcc_params)) > 0.1:

            print(mol.GetProp("_Name"), Chem.MolToSmiles(mol))
            print("  AM1    CCC    BCC  S ?")
            for atom_idx, atom in enumerate(mol.GetAtoms()):
                a = am1_params[atom_idx]
                b = bcc_params[atom_idx]
                c = ccc_params[atom_idx]
                print("{:6.2f}".format(a),
                      "{:6.2f}".format(c),
                      "{:6.2f}".format(b),
                      atom.GetSymbol(),
                      end="")
                if np.abs(b - c) > 0.1:
                    print(" *")
                else:
                    print(" ")

            assert 0
示例#9
0
    suppl = Chem.SDMolSupplier("tests/data/ligands_40.sdf", removeHs=False)
    for guest_mol in suppl:
        break

    guest_masses = np.array([a.GetMass() for a in guest_mol.GetAtoms()],
                            dtype=np.float64)

    host_pdbfile = "tests/data/hif2a_nowater_min.pdb"

    host_pdb = PDBFile(host_pdbfile)

    combined_pdb = Chem.CombineMols(
        Chem.MolFromPDBFile(host_pdbfile, removeHs=False), guest_mol)

    ff_handlers = deserialize(open('ff/params/smirnoff_1_1_0_ccc.py').read())

    x0, combined_masses, final_gradients = dock_setup.create_system(
        guest_mol, host_pdb, ff_handlers)

    gradients = []

    for grad_name, grad_args in final_gradients:
        op_fn = getattr(ops, grad_name)
        grad = op_fn(*grad_args, precision=np.float32)
        gradients.append(grad)

    print(gradients)

    n_steps = 20000
示例#10
0
    for guest_idx, mol in enumerate(suppl):
        mol_dG = -1 * convert_uIC50_to_kJ_per_mole(
            float(mol.GetProp(general_cfg['bind_prop'])))
        data.append((mol, mol_dG))

    full_dataset = dataset.Dataset(data)
    train_frac = float(general_cfg['train_frac'])
    train_dataset, test_dataset = full_dataset.split(train_frac)

    # process the host first
    host_pdbfile = general_cfg['protein_pdb']

    stage_dGs = []

    ff_raw = open(general_cfg['forcefield'], "r").read()
    ff_handlers = deserialize(ff_raw)

    worker_address_list = []
    for address in config['workers']['hosts'].split(','):
        worker_address_list.append(address)

    stubs = []

    for address in worker_address_list:
        print("connecting to", address)
        channel = grpc.insecure_channel(
            address,
            options=[('grpc.max_send_message_length', 500 * 1024 * 1024),
                     ('grpc.max_receive_message_length', 500 * 1024 * 1024)])

        stub = service_pb2_grpc.WorkerStub(channel)
示例#11
0
def test_harmonic_bond():

    patterns = [
        ['[#6X4:1]-[#6X4:2]', 0.1, 0.2],
        ['[#6X4:1]-[#6X3:2]', 99., 99.],
        ['[#6X4:1]-[#6X3:2]=[#8X1+0]', 99., 99.],
        ['[#6X3:1]-[#6X3:2]', 99., 99.],
        ['[#6X3:1]:[#6X3:2]', 99., 99.],
        ['[#6X3:1]=[#6X3:2]', 99., 99.],
        ['[#6:1]-[#7:2]',0.1, 0.2],
        ['[#6X3:1]-[#7X3:2]', 99., 99.],
        ['[#6X4:1]-[#7X3:2]-[#6X3]=[#8X1+0]', 99., 99.],
        ['[#6X3:1](=[#8X1+0])-[#7X3:2]', 99., 99.],
        ['[#6X3:1]-[#7X2:2]', 99., 99.],
        ['[#6X3:1]:[#7X2,#7X3+1:2]', 99., 99.],
        ['[#6X3:1]=[#7X2,#7X3+1:2]', 99., 99.],
        ['[#6:1]-[#8:2]', 99., 99.],
        ['[#6X3:1]-[#8X1-1:2]', 99., 99.],
        ['[#6X4:1]-[#8X2H0:2]', 0.3, 0.4],
        ['[#6X3:1]-[#8X2:2]', 99., 99.],
        ['[#6X3:1]-[#8X2H1:2]', 99., 99.],
        ['[#6X3a:1]-[#8X2H0:2]', 99., 99.],
        ['[#6X3:1](=[#8X1])-[#8X2H0:2]', 99., 99.],
        ['[#6:1]=[#8X1+0,#8X2+1:2]', 99., 99.],
        ['[#6X3:1](~[#8X1])~[#8X1:2]', 99., 99.],
        ['[#6X3:1]~[#8X2+1:2]~[#6X3]', 99., 99.],
        ['[#6X2:1]-[#6:2]', 99., 99.],
        ['[#6X2:1]-[#6X4:2]', 99., 99.],
        ['[#6X2:1]=[#6X3:2]', 99., 99.],
        ['[#6:1]#[#7:2]', 99., 99.],
        ['[#6X2:1]#[#6X2:2]', 99., 99.],
        ['[#6X2:1]-[#8X2:2]', 99., 99.],
        ['[#6X2:1]-[#7:2]', 99., 99.],
        ['[#6X2:1]=[#7:2]', 99., 99.],
        ['[#16:1]=[#6:2]', 99., 99.],
        ['[#6X2:1]=[#16:2]', 99., 99.],
        ['[#7:1]-[#7:2]', 99., 99.],
        ['[#7X3:1]-[#7X2:2]', 99., 99.],
        ['[#7X2:1]-[#7X2:2]', 99., 99.],
        ['[#7:1]:[#7:2]', 99., 99.],
        ['[#7:1]=[#7:2]', 99., 99.],
        ['[#7+1:1]=[#7-1:2]', 99., 99.],
        ['[#7:1]#[#7:2]', 99., 99.],
        ['[#7:1]-[#8X2:2]', 99., 99.],
        ['[#7:1]~[#8X1:2]', 99., 99.],
        ['[#8X2:1]-[#8X2:2]', 99., 99.],
        ['[#16:1]-[#6:2]', 99., 99.],
        ['[#16:1]-[#1:2]', 99., 99.],
        ['[#16:1]-[#16:2]', 99., 99.],
        ['[#16:1]-[#9:2]', 99., 99.],
        ['[#16:1]-[#17:2]', 99., 99.],
        ['[#16:1]-[#35:2]', 99., 99.],
        ['[#16:1]-[#53:2]', 99., 99.],
        ['[#16X2,#16X1-1,#16X3+1:1]-[#6X4:2]', 99., 99.],
        ['[#16X2,#16X1-1,#16X3+1:1]-[#6X3:2]', 99., 99.],
        ['[#16X2:1]-[#7:2]', 99., 99.],
        ['[#16X2:1]-[#8X2:2]', 99., 99.],
        ['[#16X2:1]=[#8X1,#7X2:2]', 99., 99.],
        ['[#16X4,#16X3!+1:1]-[#6:2]', 99., 99.],
        ['[#16X4,#16X3:1]~[#7:2]', 99., 99.],
        ['[#16X4,#16X3:1]-[#8X2:2]', 99., 99.],
        ['[#16X4,#16X3:1]~[#8X1:2]', 99., 99.],
        ['[#15:1]-[#1:2]', 99., 99.],
        ['[#15:1]~[#6:2]', 99., 99.],
        ['[#15:1]-[#7:2]', 99., 99.],
        ['[#15:1]=[#7:2]', 99., 99.],
        ['[#15:1]~[#8X2:2]', 99., 99.],
        ['[#15:1]~[#8X1:2]', 99., 99.],
        ['[#16:1]-[#15:2]', 99., 99.],
        ['[#15:1]=[#16X1:2]', 99., 99.],
        ['[#6:1]-[#9:2]', 99., 99.],
        ['[#6X4:1]-[#9:2]', 0.6, 0.7],
        ['[#6:1]-[#17:2]', 99., 99.],
        ['[#6X4:1]-[#17:2]', 99., 99.],
        ['[#6:1]-[#35:2]', 99., 99.],
        ['[#6X4:1]-[#35:2]', 99., 99.],
        ['[#6:1]-[#53:2]', 99., 99.],
        ['[#6X4:1]-[#53:2]', 99., 99.],
        ['[#7:1]-[#9:2]', 99., 99.],
        ['[#7:1]-[#17:2]', 99., 99.],
        ['[#7:1]-[#35:2]', 99., 99.],
        ['[#7:1]-[#53:2]', 99., 99.],
        ['[#15:1]-[#9:2]', 99., 99.],
        ['[#15:1]-[#17:2]', 99., 99.],
        ['[#15:1]-[#35:2]', 99., 99.],
        ['[#15:1]-[#53:2]', 99., 99.],
        ['[#6X4:1]-[#1:2]', 99., 99.],
        ['[#6X3:1]-[#1:2]', 99., 99.],
        ['[#6X2:1]-[#1:2]', 99., 99.],
        ['[#7:1]-[#1:2]', 99., 99.],
        ['[#8:1]-[#1:2]', 99., 99.1]
    ]


    smirks = [x[0] for x in patterns]
    params = np.array([[x[1], x[2]] for x in patterns])
    props = None
    hbh = bonded.HarmonicBondHandler(smirks, params, None)

    obj = hbh.serialize()
    all_handlers = deserialize(bin_to_str(obj))

    assert len(all_handlers) == 1

    new_hbh = all_handlers[0]
    np.testing.assert_equal(new_hbh.smirks, hbh.smirks)
    np.testing.assert_equal(new_hbh.params, hbh.params)

    assert new_hbh.props == hbh.props