示例#1
0
 def test_overwritten_prm(self):
     qprm = QPrm("amber", ignore_errors=True)  # duplicates
     qprm.read_amber_parm("data/ff-amber14/parm/parm10.dat")
     ow = qprm.read_amber_frcmod("data/ff-amber14/parm/frcmod.ff14SB")
     # check overwritten parm
     assert ow[0].prm_id == "C N CX CT"
     assert ow[0].fcs == [0.0, 0.4, 2.0, 2.0]
示例#2
0
    def test_amber_conversion(self):
        qp_str = open("data/qamber14.prm", "r").read()
        qp_str = re.sub("(\*|\!|#).*", "", qp_str)
        qp_str = re.sub("\s+$", "", qp_str, 0, re.MULTILINE)
        qp_str = re.sub("^\n", "", qp_str, 0, re.MULTILINE)

        qprm = QPrm("amber", ignore_errors=True)  # duplicates
        qprm.read_amber_parm("data/ff-amber14/parm/parm10.dat")
        ow = qprm.read_amber_frcmod("data/ff-amber14/parm/frcmod.ff14SB")

        # add options section manually and compare with official lib
        for line in """\
name                           Q-Amber14SB
type                           AMBER
vdw_rule                       arithmetic
scale_14                       0.8333
switch_atoms                   off
improper_potential             periodic
improper_definition            explicit\
""".splitlines():
            lf = line.split()
            qprm.options[lf[0]] = " ".join(lf[1:])

        qp_str2 = qprm.get_string()
        qp_str2 = re.sub("\s+$", "", qp_str2, 0, re.MULTILINE)
        qp_str2 = re.sub("^\n", "", qp_str2, 0, re.MULTILINE)

        assert qp_str == qp_str2
示例#3
0
 def test_wrong_ff_fail(self):
     qprm = QPrm("amber")
     with pytest.raises(QPrmError):
         qprm.read_ffld("data/ace_ash_nma.ffld11", None)
     qprm = QPrm("oplsaa")
     with pytest.raises(QPrmError):
         qprm.read_amber_parm("data/ff-amber14/parm/parm10.dat")
     with pytest.raises(QPrmError):
         qprm.read_amber_frcmod("data/ff-amber14/parm/frcmod.ff14SB")
示例#4
0
 def test_read_amber_parm(self):
     qprm = QPrm("amber")
     qprm.read_amber_parm("data/gaff.dat")
     assert len(qprm.atom_types) == 71
     assert len(qprm.bonds) == 832
     assert len(qprm.angles) == 4618
     assert len(qprm.generic_torsions) == 587
     assert len(qprm.torsions) == 66
     assert len(qprm.generic_impropers) == 8
     assert len(qprm.impropers) == 27
示例#5
0
 def test_overwritten_prm_fail(self):
     qprm = QPrm("amber")  # no ignore_errors
     qprm.read_amber_parm("data/ff-amber14/parm/parm10.dat")
     with pytest.raises(QPrmError):
         qprm.read_amber_frcmod("data/ff-amber14/parm/frcmod.ff14SB")
示例#6
0
 def test_read_amber_parm_fail(self):
     qprm = QPrm("amber")
     with pytest.raises(QPrmError):
         qprm.read_amber_parm("data/ff-amber14/parm/frcmod.ff14SB")
示例#7
0
def test_ff14sb_conversion():
    # Amber14FF to Qamber14
    #
    # Convert Amber14 lib (+prepin for impropers) and parm+frcmod to Q lib/prm
    # Load the structure 'all_amino_acids.pdb' and build the topology
    # Check the total bonding energy contributions and number of bonding terms
    # and compare the library and parameter set with official qamber14.
    #
    qal = QLib("amber")
    qap = QPrm("amber", ignore_errors=True)  # duplicates
    qal.read_amber_lib("data/ff-amber14/amber12_mod.lib")
    qal.read_amber_lib("data/ff-amber14/arn.lib")
    qal.read_prepin_impropers("data/ff-amber14/prep/amino12.in")
    qal.read_prepin_impropers("data/ff-amber14/arn.prepi")
    qap.read_amber_parm("data/ff-amber14/parm/parm10.dat")
    qap.read_amber_frcmod("data/ff-amber14/parm/frcmod.ff14SB")

    # add options to parameters
    for line in """\
name                           Q-Amber14SB
type                           AMBER
vdw_rule                       arithmetic !vdW combination rule (geometric or arithmetic)
scale_14                       0.8333 ! electrostatic 1-4 scaling factor
switch_atoms                   off
improper_potential             periodic
improper_definition            explicit\
""".splitlines():
        lf = line.split()
        qap.options[lf[0]] = " ".join(lf[1:])

    # remove head from ACE and tail from NME
    cons = qal.residue_dict["ACE"].connections
    cons = [con for con in cons if "head" not in con]
    qal.residue_dict["ACE"].connections = cons

    cons = qal.residue_dict["NME"].connections
    cons = [con for con in cons if "tail" not in con]
    qal.residue_dict["NME"].connections = cons

    qas1 = QStruct("data/all_amino_acids.pdb", "pdb", ignore_errors=True)
    qat = QTopology(qal, qap, qas1)
    q_tors = sum([len(list(tor.prm.get_prms())) for tor in qat.torsions])

    assert len(qat.bonds) == 464
    assert len(qat.angles) == 829
    assert len(qat.torsions) == 1221
    assert q_tors == 1950
    assert len(qat.impropers) == 102

    be = sum([bond.calc()[0] for bond in qat.bonds])
    ae = sum([ang.calc()[0] for ang in qat.angles])
    te = sum([tor.calc()[0] for tor in qat.torsions])
    ie = sum([imp.calc()[0] for imp in qat.impropers])

    assert is_close(be, 181.2572830)
    assert is_close(ae, 212.8539304)
    assert is_close(te, 417.2919960)
    assert is_close(ie, 22.8171235)

    # compare with official lib
    qa14_lib = open("data/qamber14.lib", "r").read()
    qa14_prm = open("data/qamber14.prm", "r").read()

    assert qal.get_string() in qa14_lib
    assert qap.get_string() in qa14_prm
示例#8
0
qlib = QLib("amber", ignore_errors=args.ignore_errors)
qprm = QPrm("amber", ignore_errors=args.ignore_errors)
try:
    qlib.read_mol2(args.mol2[0])
except QLibError as e:
    print("FATAL! Problem with mol2: {}".format(str(e)))
    sys.exit(1)
try:
    qlib.read_prepin_impropers(args.prepi[0])
except QLibError as e:
    print("FATAL! Problem with prepi: {}".format(str(e)))
    sys.exit(1)

for parm in args.parms:
    try:
        qprm.read_amber_parm(parm)
    except QPrmError as e:
        print("FATAL! Problem with parm: {}".format(str(e)))
        sys.exit(1)

for frcmod in args.frcmods:
    try:
        qprm.read_amber_frcmod(frcmod)
    except QPrmError as e:
        print("FATAL! Problem with frcmod: {}".format(str(e)))
        sys.exit(1)

try:
    qstruct = QStruct(args.mol2[0], "mol2")
except QStructError as e:
    print("FATAL! Problem with mol2: {}".format(str(e)))
示例#9
0
#
# Amber14FF to Qamber14
#
# Convert Amber14 lib (+prepin for impropers) and parm+frcmod to Q lib/prm
# Load all_amino_acids.pdb and all_amino_acids.mol2 and build topology
# separately.
#
# ignore_errors=True is needed because frcmod.ff14SB overwrites some parameters
#
qal = QLib("amber")
qap = QPrm("amber", ignore_errors=True)
qal.read_amber_lib("../Amber/ff-amber14/amber12_mod.lib")
qal.read_amber_lib("../Amber/ff-amber14/arn.lib")
qal.read_prepin_impropers("../Amber/ff-amber14/prep/amino12.in")
qal.read_prepin_impropers("../Amber/ff-amber14/arn.prepi")
log_dups(qap.read_amber_parm("../Amber/ff-amber14/parm/parm10.dat"))
log_dups(qap.read_amber_parm("../Amber/ff-amber14/parm/parm10.dat"))
log_dups(qap.read_amber_frcmod("../Amber/ff-amber14/parm/frcmod.ff14SB"))

# add options to parameters
for line in """name		Q-Amber14SB
type		AMBER
vdw_rule    arithmetic !vdW combination rule (geometric or arithmetic)
scale_14	0.8333 ! electrostatic 1-4 scaling factor
switch_atoms	off
improper_potential	periodic
improper_definition explicit""".splitlines():
    lf = line.split()
    qap.options[lf[0]] = " ".join(lf[1:])

# remove head from ACE and tail from NME