openforcefield / amber-ff-porting

Scratch space for porting amber FFs into SMIRNOFF format
1 stars 3 forks source link

CYX dihedral energies are wrong #13

Closed j-wags closed 4 years ago

j-wags commented 4 years ago

I suspect this is because impropers are being double-defined as a result of the symmetry of the SMARTS.

(off-dev) jeffreywagner@JW-MBP$ python test_parameterize.py 

MainChain/CYX/CYX
HarmonicBondForce 3.0117080211639404 kJ/mol
HarmonicAngleForce 8.231612205505371 kJ/mol
PeriodicTorsionForce 106.6832046508789 kJ/mol
NonbondedForce -313.14813232421875 kJ/mol
-195.22152709960938 kJ/mol
[H][C@@](C(=O)N([H])C([H])([H])[H])(C([H])([H])SSC([H])([H])[C@@]([H])(C(=O)N([H])C([H])([H])[H])N([H])C(=O)C([H])([H])[H])N([H])C(=O)C([H])([H])[H]
HarmonicAngleForce 8.23157024383545 kJ/mol
HarmonicBondForce 3.0117082595825195 kJ/mol
NonbondedForce -313.1494140625 kJ/mol
PeriodicTorsionForce 198.45724487304688 kJ/mol
-103.44891357421875 kJ/mol

CTerminal/CYX/CYX
HarmonicBondForce 3.022153615951538 kJ/mol
HarmonicAngleForce 13.915948867797852 kJ/mol
PeriodicTorsionForce 98.44212341308594 kJ/mol
NonbondedForce -294.66009521484375 kJ/mol
-179.27972412109375 kJ/mol
[H][C@@](C(=O)N([H])C([H])([H])[H])(C([H])([H])SSC([H])([H])[C@@]([H])(C(=O)[O-])N([H])C(=O)C([H])([H])[H])N([H])C(=O)C([H])([H])[H]
HarmonicAngleForce 13.915891647338867 kJ/mol
HarmonicBondForce 3.022153377532959 kJ/mol
NonbondedForce -294.662109375 kJ/mol
PeriodicTorsionForce 153.41476440429688 kJ/mol
-124.3094482421875 kJ/mol

NTerminal/CYX/CYX
HarmonicBondForce 2.7038345336914062 kJ/mol
HarmonicAngleForce 9.699190139770508 kJ/mol
PeriodicTorsionForce 90.61141967773438 kJ/mol
NonbondedForce -260.06146240234375 kJ/mol
-157.0469970703125 kJ/mol
[H][C@@](C(=O)N([H])C([H])([H])[H])(C([H])([H])SSC([H])([H])[C@@]([H])(C(=O)N([H])C([H])([H])[H])[N+]([H])([H])[H])N([H])C(=O)C([H])([H])[H]
HarmonicAngleForce 9.699169158935547 kJ/mol
HarmonicBondForce 2.7038345336914062 kJ/mol
NonbondedForce -260.0627746582031 kJ/mol
PeriodicTorsionForce 138.77908325195312 kJ/mol
-108.88064575195312 kJ/mol
j-wags commented 4 years ago

Yeah, here's a serialized OMM system showing duplicates of some impropers:

<Torsion k="8.368" p1="33" p2="32" p3="34" p4="35" periodicity="1" phase="0"/>
<Torsion k="10.46" p1="33" p2="32" p3="34" p4="35" periodicity="2" phase="3.141592653589793"/>
<Torsion k="8.368" p1="33" p2="32" p3="34" p4="35" periodicity="1" phase="0"/>
<Torsion k="10.46" p1="33" p2="32" p3="34" p4="35" periodicity="2" phase="3.141592653589793"/>
<Torsion k="10.46" p1="33" p2="32" p3="34" p4="36" periodicity="2" phase="3.141592653589793"/>
<Torsion k="10.46" p1="33" p2="32" p3="34" p4="36" periodicity="2" phase="3.141592653589793"/>
j-wags commented 4 years ago

Actually, I'm seeing duplicates of all torsions (both propers and impropers)

j-wags commented 4 years ago

I'm noticing that some impropers are defined with two perioditicty entires, both of which are the same

<Improper 
smirks="[H][C@@:3]([C]=O)(C([H])([H])[S])[N:2]([H:4])[C:1](=O)C([H])([H])[H]" 
periodicity1="1" 
periodicity2="1" 
phase1="180.0 * degree" 
phase2="180.0 * degree" 
k1="0.3666666666666667 * mole**-1 * kilocalorie" 
k2="0.3666666666666667 * mole**-1 * kilocalorie" 
id="A14SB-MainChain-CYX-C_CX_N_H" 
idivf1="1.0" 
idivf2="1.0">
</Improper>

This is probably because we're finding it twice in each structure (since each has two CYXs), and we're getting confused and thinking it's a multi-term dihedral, so we're "stacking" them.

dscerutti commented 4 years ago

I am monitoring this as I develop the sugars workflow. I will probably be doing many of those calculations locally, until I have something I am happy with. It looks like we are close to having a solution to the CYX problem.