Closed DNA2RNA closed 1 year ago
Hi,
Automated handling of modified amino acids is one of the major items on our roadmap, however it's probably a few months out at least. This is a deceptively difficult area. We will likely take the approach of using the bespoke workflow to re-parameterize the entire AA+PTM molecule, and then merge it into an unmodified protein backbone. However, this will require
1) the bespoke parameterization workflow, which is still under development 2) a OFFXML equivalent of an established protein FF, which is still under development 3) an automated way to build, cap, and un-cap PTM-modified AAs
In the shorter term, it may be possible to do this by manually (or in a semi-automated fashion). I'd think that the trickiest part of doing this by hand would be figuring out how to patch in the bonds, angles, and torsions at the interface of the OpenFF ligand and AMBER protein with reasonable values.
An first pass at an automated solution to this might
I don't think I'll have time to implement the above algorithm any time soon, but we'd very much appreciate a PR if you're feeling up to the task :-)
Hi J-wags,
Thank you so much for your answer. I am relieved to hear that I wasn't missing something embarrassingly obvious!
I am glad to hear that this capability is under active development and really excited to see how it turns out :)
With respect to your automated solution, it looks like a great workaround! I think I follow it, except for this step:
a graph isomorphism is run on uncolored versions of both graphs, to get a map of atom indices
Would Molecule.is_isomorphic() be the right tool for this job? This seems like this thread covers the usage?
Thank you!
Molecule.is_isomorphic
probably won't be helpful here, since it can only cover full isomorphism (so, like, two instances of the same molecule, but with different atom ordering). Since the original AA is a subset of the AA+PTM molecule, I don't think our is_isomorphic
method will work. So it will be necessary to use networkX (or some other subgraph matching method) to get the mapping between the two indexing systems.
Also, apologies that the full documentation for is_isomorphic
isn't live -- It looks like our API docs aren't rendering properly. Until we get that back online, here's the full docs for that method: https://github.com/openforcefield/openforcefield/blob/8d2de6075d5a8d3c88a88c55b00e2a4b04b63c0e/openforcefield/topology/molecule.py#L2150-L2202
If you do decide to head this direction, @DNA2RNA , please keep us posted as having a worked example would probably help us get something halfway decent working.
As a postdoc, I did something like this with GAFF/AMBER FFs and tleap so I know the general idea works. Here, the interface region should be easier because you basically can just use the small molecule FF for any protein atoms it needs to cover, so you don't have to worry there will be parameters MISSING (though parameter quality won't have been assessed).
(Tangentially it's also worth noting that Hideaki Fujitani used to use GAFF for simulations of whole proteins and ligands with somewhat reasonable results, so in that sense, doing something that patches small molecule parameters onto a protein is not necessarily a crazy thing to do.)
Hi Folks,
Thank you so much for your recommendations!
I just wanted to write a quick note that I am pecking away at this. So far I have managed to:
It looks like the next steps are to parse the serialized system and then map the amino acid portion onto the amino acid scaffold (unless such a parser already exists?).
Thank you again!
PS: Just in case it's helpful to anyone, I've copy-pasted the standard AMBER FF and PDB chunk for ASN as well as an OpenFF parameterized equivalent below.
Here is the SMILE code for ASN-NAG:
# SMILES for ASN-NAG
'sPTM':'CC(=O)NC1C(O)C(O)C(CO)OC1NC(=O)CC(N)C=O'
Here is a chunk of PDB for a regular ASN and the corresponding AMBER XML:
ATOM 135 N ASN A 10 -58.622 24.525 11.500 1.00 0.00 N
ATOM 136 H ASN A 10 -58.692 25.286 10.840 1.00 0.00 H
ATOM 137 CA ASN A 10 -57.305 24.321 12.122 1.00 0.00 C
ATOM 138 HA ASN A 10 -56.753 23.675 11.438 1.00 0.00 H
ATOM 139 C ASN A 10 -57.312 23.574 13.480 1.00 0.00 C
ATOM 140 O ASN A 10 -57.512 24.171 14.536 1.00 0.00 O
ATOM 141 CB ASN A 10 -56.544 25.664 12.156 1.00 0.00 C
ATOM 142 HB2 ASN A 10 -57.084 26.427 11.594 1.00 0.00 H
ATOM 143 HB3 ASN A 10 -56.436 26.027 13.178 1.00 0.00 H
ATOM 144 CG ASN A 10 -55.169 25.513 11.539 1.00 0.00 C
ATOM 145 OD1 ASN A 10 -54.183 25.271 12.209 1.00 0.00 O
ATOM 146 ND2 ASN A 10 -55.063 25.575 10.236 1.00 0.00 N
ATOM 147 HD21 ASN A 10 -54.151 25.485 9.812 1.00 0.00 H
ATOM 148 HD22 ASN A 10 -55.897 25.674 9.674 1.00 0.00 H
<Residue name="ASN">
<Atom name="N" type="N" charge="-0.4157"/>
<Atom name="H" type="H" charge="0.2719"/>
<Atom name="CA" type="CX" charge="0.0143"/>
<Atom name="HA" type="H1" charge="0.1048"/>
<Atom name="CB" type="2C" charge="-0.2041"/>
<Atom name="HB2" type="HC" charge="0.0797"/>
<Atom name="HB3" type="HC" charge="0.0797"/>
<Atom name="CG" type="C" charge="0.713"/>
<Atom name="OD1" type="O" charge="-0.5931"/>
<Atom name="ND2" type="N" charge="-0.9191"/>
<Atom name="HD21" type="H" charge="0.4196"/>
<Atom name="HD22" type="H" charge="0.4196"/>
<Atom name="C" type="C" charge="0.5973"/>
<Atom name="O" type="O" charge="-0.5679"/>
<Bond atomName1="N" atomName2="H"/>
<Bond atomName1="N" atomName2="CA"/>
<Bond atomName1="CA" atomName2="HA"/>
<Bond atomName1="CA" atomName2="CB"/>
<Bond atomName1="CA" atomName2="C"/>
<Bond atomName1="CB" atomName2="HB2"/>
<Bond atomName1="CB" atomName2="HB3"/>
<Bond atomName1="CB" atomName2="CG"/>
<Bond atomName1="CG" atomName2="OD1"/>
<Bond atomName1="CG" atomName2="ND2"/>
<Bond atomName1="ND2" atomName2="HD21"/>
<Bond atomName1="ND2" atomName2="HD22"/>
<Bond atomName1="C" atomName2="O"/>
<ExternalBond atomName="N"/>
<ExternalBond atomName="C"/>
</Residue>
I have copied the corresponding PDB and Serialized system for ASN-NAG below:
##### ASN-NAG from RDKit/OpenFF Parameterization
HETATM 1 C1 UNL 1 58.083 -5.349 9.893 1.00 0.00 C
HETATM 2 C2 UNL 1 58.559 -6.648 9.397 1.00 0.00 C
HETATM 3 O1 UNL 1 59.222 -6.711 8.328 1.00 0.00 O
HETATM 4 N1 UNL 1 58.302 -7.849 10.078 1.00 0.00 N
HETATM 5 C3 UNL 1 58.748 -9.151 9.634 1.00 0.00 C
HETATM 6 C4 UNL 1 57.556 -9.963 9.287 1.00 0.00 C
HETATM 7 O2 UNL 1 57.801 -10.710 8.139 1.00 0.00 O
HETATM 8 C5 UNL 1 57.113 -10.903 10.369 1.00 0.00 C
HETATM 9 O3 UNL 1 56.118 -11.761 9.987 1.00 0.00 O
HETATM 10 C6 UNL 1 58.370 -11.651 10.832 1.00 0.00 C
HETATM 11 C7 UNL 1 57.911 -12.696 11.825 1.00 0.00 C
HETATM 12 O4 UNL 1 57.144 -13.634 11.164 1.00 0.00 O
HETATM 13 O5 UNL 1 59.149 -10.684 11.466 1.00 0.00 O
HETATM 14 C8 UNL 1 59.711 -9.791 10.589 1.00 0.00 C
HETATM 15 N2 UNL 1 60.755 -10.461 9.840 1.00 0.00 N
HETATM 16 C9 UNL 1 62.131 -10.126 9.974 1.00 0.00 C
HETATM 17 O6 UNL 1 62.433 -9.213 10.777 1.00 0.00 O
HETATM 18 C10 UNL 1 63.200 -10.804 9.215 1.00 0.00 C
HETATM 19 C11 UNL 1 64.527 -10.197 9.606 1.00 0.00 C
HETATM 20 N3 UNL 1 64.722 -10.385 11.012 1.00 0.00 N
HETATM 21 C12 UNL 1 65.641 -10.761 8.792 1.00 0.00 C
HETATM 22 O7 UNL 1 65.604 -10.672 7.590 1.00 0.00 O
HETATM 23 H1 UNL 1 57.311 -5.439 10.667 1.00 0.00 H
HETATM 24 H2 UNL 1 57.732 -4.730 9.038 1.00 0.00 H
HETATM 25 H3 UNL 1 58.930 -4.766 10.357 1.00 0.00 H
HETATM 26 H4 UNL 1 57.754 -7.818 10.966 1.00 0.00 H
HETATM 27 H5 UNL 1 59.311 -8.961 8.672 1.00 0.00 H
HETATM 28 H6 UNL 1 56.691 -9.301 9.054 1.00 0.00 H
HETATM 29 H7 UNL 1 57.740 -11.679 8.321 1.00 0.00 H
HETATM 30 H8 UNL 1 56.789 -10.310 11.250 1.00 0.00 H
HETATM 31 H9 UNL 1 55.823 -11.603 9.057 1.00 0.00 H
HETATM 32 H10 UNL 1 58.872 -12.116 9.960 1.00 0.00 H
HETATM 33 H11 UNL 1 58.774 -13.177 12.296 1.00 0.00 H
HETATM 34 H12 UNL 1 57.271 -12.171 12.566 1.00 0.00 H
HETATM 35 H13 UNL 1 57.534 -13.975 10.336 1.00 0.00 H
HETATM 36 H14 UNL 1 60.239 -9.019 11.226 1.00 0.00 H
HETATM 37 H15 UNL 1 60.520 -11.223 9.168 1.00 0.00 H
HETATM 38 H16 UNL 1 63.198 -11.901 9.481 1.00 0.00 H
HETATM 39 H17 UNL 1 63.000 -10.665 8.129 1.00 0.00 H
HETATM 40 H18 UNL 1 64.444 -9.102 9.411 1.00 0.00 H
HETATM 41 H19 UNL 1 64.674 -9.523 11.580 1.00 0.00 H
HETATM 42 H20 UNL 1 64.130 -11.159 11.382 1.00 0.00 H
HETATM 43 H21 UNL 1 66.463 -11.241 9.289 1.00 0.00 H
CONECT 1 2 23 24 25
CONECT 2 3 3 4
CONECT 4 5 26
CONECT 5 6 14 27
CONECT 6 7 8 28
CONECT 7 29
CONECT 8 9 10 30
CONECT 9 31
CONECT 10 11 13 32
CONECT 11 12 33 34
CONECT 12 35
CONECT 13 14
CONECT 14 15 36
CONECT 15 16 37
CONECT 16 17 17 18
CONECT 18 19 38 39
CONECT 19 20 21 40
CONECT 20 41 42
CONECT 21 22 22 43
END
##### OpenFF parameterized ligand
<?xml version="1.0" ?>
<System openmmVersion="7.4.1" type="System" version="1">
<PeriodicBoxVectors>
<A x="2" y="0" z="0"/>
<B x="0" y="2" z="0"/>
<C x="0" y="0" z="2"/>
</PeriodicBoxVectors>
<Particles>
<Particle mass="12.01078"/>
<Particle mass="12.01078"/>
<Particle mass="15.99943"/>
<Particle mass="14.00672"/>
<Particle mass="12.01078"/>
<Particle mass="12.01078"/>
<Particle mass="15.99943"/>
<Particle mass="12.01078"/>
<Particle mass="15.99943"/>
<Particle mass="12.01078"/>
<Particle mass="12.01078"/>
<Particle mass="15.99943"/>
<Particle mass="15.99943"/>
<Particle mass="12.01078"/>
<Particle mass="14.00672"/>
<Particle mass="12.01078"/>
<Particle mass="15.99943"/>
<Particle mass="12.01078"/>
<Particle mass="12.01078"/>
<Particle mass="14.00672"/>
<Particle mass="12.01078"/>
<Particle mass="15.99943"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
<Particle mass="1.007947"/>
</Particles>
<Constraints/>
<Forces>
<Force forceGroup="0" type="HarmonicAngleForce" usesPeriodic="0" version="2">
<Angles>
<Angle a="2.3153745811593245" k="642.6203447440784" p1="0" p2="1" p3="2"/>
<Angle a="2.3153745811593245" k="642.6203447440784" p1="0" p2="1" p3="3"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="1" p2="0" p3="22"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="1" p2="0" p3="23"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="1" p2="0" p3="24"/>
<Angle a="2.0729860727399743" k="470.888740863416" p1="1" p2="3" p3="4"/>
<Angle a="2.1294078815341435" k="324.3692108781647" p1="1" p2="3" p3="25"/>
<Angle a="2.3153745811593245" k="642.6203447440784" p1="2" p2="1" p3="3"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="3" p2="4" p3="5"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="3" p2="4" p3="13"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="3" p2="4" p3="26"/>
<Angle a="2.1294078815341435" k="324.3692108781647" p1="4" p2="3" p3="25"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="4" p2="5" p3="6"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="4" p2="5" p3="7"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="4" p2="5" p3="27"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="4" p2="13" p3="12"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="4" p2="13" p3="14"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="4" p2="13" p3="35"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="5" p2="4" p3="13"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="5" p2="4" p3="26"/>
<Angle a="1.9242565633185293" k="470.13469484003446" p1="5" p2="6" p3="28"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="5" p2="7" p3="8"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="5" p2="7" p3="9"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="5" p2="7" p3="29"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="6" p2="5" p3="7"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="6" p2="5" p3="27"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="7" p2="5" p3="27"/>
<Angle a="1.9242565633185293" k="470.13469484003446" p1="7" p2="8" p3="30"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="7" p2="9" p3="10"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="7" p2="9" p3="12"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="7" p2="9" p3="31"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="8" p2="7" p3="9"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="8" p2="7" p3="29"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="9" p2="7" p3="29"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="9" p2="10" p3="11"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="9" p2="10" p3="32"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="9" p2="10" p3="33"/>
<Angle a="1.9242565633185293" k="470.13469484003446" p1="9" p2="12" p3="13"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="10" p2="9" p3="12"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="10" p2="9" p3="31"/>
<Angle a="1.9242565633185293" k="470.13469484003446" p1="10" p2="11" p3="34"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="11" p2="10" p3="32"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="11" p2="10" p3="33"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="12" p2="9" p3="31"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="12" p2="13" p3="14"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="12" p2="13" p3="35"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="13" p2="4" p3="26"/>
<Angle a="2.0729860727399743" k="470.888740863416" p1="13" p2="14" p3="15"/>
<Angle a="2.1294078815341435" k="324.3692108781647" p1="13" p2="14" p3="36"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="14" p2="13" p3="35"/>
<Angle a="2.3153745811593245" k="642.6203447440784" p1="14" p2="15" p3="16"/>
<Angle a="2.3153745811593245" k="642.6203447440784" p1="14" p2="15" p3="17"/>
<Angle a="2.1294078815341435" k="324.3692108781647" p1="15" p2="14" p3="36"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="15" p2="17" p3="18"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="15" p2="17" p3="37"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="15" p2="17" p3="38"/>
<Angle a="2.3153745811593245" k="642.6203447440784" p1="16" p2="15" p3="17"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="17" p2="18" p3="19"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="17" p2="18" p3="20"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="17" p2="18" p3="39"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="18" p2="17" p3="37"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="18" p2="17" p3="38"/>
<Angle a="1.9865629161308669" k="351.96253178411695" p1="18" p2="19" p3="40"/>
<Angle a="1.9865629161308669" k="351.96253178411695" p1="18" p2="19" p3="41"/>
<Angle a="2.3153745811593245" k="642.6203447440784" p1="18" p2="20" p3="21"/>
<Angle a="2.4141195890059883" k="279.7597371776727" p1="18" p2="20" p3="42"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="19" p2="18" p3="20"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="19" p2="18" p3="39"/>
<Angle a="1.8790351242296626" k="425.6690148143528" p1="20" p2="18" p3="39"/>
<Angle a="2.4141195890059883" k="279.7597371776727" p1="21" p2="20" p3="42"/>
<Angle a="1.8779594508882096" k="310.8168718970857" p1="22" p2="0" p3="23"/>
<Angle a="1.8779594508882096" k="310.8168718970857" p1="22" p2="0" p3="24"/>
<Angle a="1.8779594508882096" k="310.8168718970857" p1="23" p2="0" p3="24"/>
<Angle a="1.8779594508882096" k="310.8168718970857" p1="32" p2="10" p3="33"/>
<Angle a="1.8779594508882096" k="310.8168718970857" p1="37" p2="17" p3="38"/>
<Angle a="1.9865629161308669" k="351.96253178411695" p1="40" p2="19" p3="41"/>
</Angles>
</Force>
<Force forceGroup="0" type="HarmonicBondForce" usesPeriodic="0" version="2">
<Bonds>
<Bond d=".1521605984526" k="256083.27147820292" p1="0" p2="1"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="0" p2="22"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="0" p2="23"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="0" p2="24"/>
<Bond d=".122768286085" k="475133.08130977117" p1="1" p2="2"/>
<Bond d=".1375176351196" k="440981.36665092956" p1="1" p2="3"/>
<Bond d=".1442186178076" k="319955.53434425767" p1="3" p2="4"/>
<Bond d=".10213702821760001" k="417460.5667401611" p1="3" p2="25"/>
<Bond d=".1520375903275" k="222227.8772234424" p1="4" p2="5"/>
<Bond d=".1520375903275" k="222227.8772234424" p1="4" p2="13"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="4" p2="26"/>
<Bond d=".1414287924481" k="279968.8107185739" p1="5" p2="6"/>
<Bond d=".1520375903275" k="222227.8772234424" p1="5" p2="7"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="5" p2="27"/>
<Bond d=".09707687589944" k="468852.0259921896" p1="6" p2="28"/>
<Bond d=".1414287924481" k="279968.8107185739" p1="7" p2="8"/>
<Bond d=".1520375903275" k="222227.8772234424" p1="7" p2="9"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="7" p2="29"/>
<Bond d=".09707687589944" k="468852.0259921896" p1="8" p2="30"/>
<Bond d=".1520375903275" k="222227.8772234424" p1="9" p2="10"/>
<Bond d=".1426488233342" k="323436.4517659667" p1="9" p2="12"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="9" p2="31"/>
<Bond d=".1414287924481" k="279968.8107185739" p1="10" p2="11"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="10" p2="32"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="10" p2="33"/>
<Bond d=".09707687589944" k="468852.0259921896" p1="11" p2="34"/>
<Bond d=".1426488233342" k="323436.4517659667" p1="12" p2="13"/>
<Bond d=".1442186178076" k="319955.53434425767" p1="13" p2="14"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="13" p2="35"/>
<Bond d=".1375176351196" k="440981.36665092956" p1="14" p2="15"/>
<Bond d=".10213702821760001" k="417460.5667401611" p1="14" p2="36"/>
<Bond d=".122768286085" k="475133.08130977117" p1="15" p2="16"/>
<Bond d=".1521605984526" k="256083.27147820292" p1="15" p2="17"/>
<Bond d=".1520375903275" k="222227.8772234424" p1="17" p2="18"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="17" p2="37"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="17" p2="38"/>
<Bond d=".1465648155674" k="301094.3155957946" p1="18" p2="19"/>
<Bond d=".1521605984526" k="256083.27147820292" p1="18" p2="20"/>
<Bond d=".1092888378383" k="317186.1853786799" p1="18" p2="39"/>
<Bond d=".10213702821760001" k="417460.5667401611" p1="19" p2="40"/>
<Bond d=".10213702821760001" k="417460.5667401611" p1="19" p2="41"/>
<Bond d=".122768286085" k="475133.08130977117" p1="20" p2="21"/>
<Bond d=".10850661293899999" k="338125.5447433327" p1="20" p2="42"/>
</Bonds>
</Force>
<Force alpha="0" cutoff="1" dispersionCorrection="1" ewaldTolerance=".0005" forceGroup="0" ljAlpha="0" ljnx="0" ljny="0" ljnz="0" method="0" nx="0" ny="0" nz="0" recipForceGroup="-1" rfDielectric="78.3" switchingDistance="-1" type="NonbondedForce" useSwitchingFunction="0" version="3">
<GlobalParameters/>
<ParticleOffsets/>
<ExceptionOffsets/>
<Particles>
<Particle eps=".4577296" q="-.1751" sig=".3399669508423535"/>
<Particle eps=".359824" q=".6551" sig=".3399669508423535"/>
<Particle eps=".87864" q="-.6021" sig=".2959921901149463"/>
<Particle eps=".7112800000000001" q="-.5559" sig=".3249998523775958"/>
<Particle eps=".4577296" q=".0357" sig=".3399669508423535"/>
<Particle eps=".4577296" q=".1041" sig=".3399669508423535"/>
<Particle eps=".8803136" q="-.5948" sig=".3066473387839048"/>
<Particle eps=".4577296" q=".0821" sig=".3399669508423535"/>
<Particle eps=".8803136" q="-.5858" sig=".3066473387839048"/>
<Particle eps=".4577296" q=".1061" sig=".3399669508423535"/>
<Particle eps=".4577296" q=".1094" sig=".3399669508423535"/>
<Particle eps=".8803136" q="-.5938" sig=".3066473387839048"/>
<Particle eps=".7112800000000001" q="-.4206" sig=".3000012343465779"/>
<Particle eps=".4577296" q=".2755" sig=".3399669508423535"/>
<Particle eps=".7112800000000001" q="-.5599" sig=".3249998523775958"/>
<Particle eps=".359824" q=".6711" sig=".3399669508423535"/>
<Particle eps=".87864" q="-.6411" sig=".2959921901149463"/>
<Particle eps=".4577296" q="-.1444" sig=".3399669508423535"/>
<Particle eps=".4577296" q=".0545" sig=".3399669508423535"/>
<Particle eps=".7112800000000001" q="-.9198" sig=".3249998523775958"/>
<Particle eps=".359824" q=".5249" sig=".3399669508423535"/>
<Particle eps=".87864" q="-.5031" sig=".2959921901149463"/>
<Particle eps=".06568879999999999" q=".069367" sig=".2649532787749369"/>
<Particle eps=".06568879999999999" q=".069367" sig=".2649532787749369"/>
<Particle eps=".06568879999999999" q=".069367" sig=".2649532787749369"/>
<Particle eps=".06568879999999999" q=".3205" sig=".10690784617684071"/>
<Particle eps=".06568879999999999" q=".1107" sig=".2471353044121301"/>
<Particle eps=".06568879999999999" q=".1087" sig=".2471353044121301"/>
<Particle eps=".0002204968" q=".412" sig=".053453923088420355"/>
<Particle eps=".06568879999999999" q=".0847" sig=".2471353044121301"/>
<Particle eps=".0002204968" q=".42" sig=".053453923088420355"/>
<Particle eps=".06568879999999999" q=".1037" sig=".2471353044121301"/>
<Particle eps=".06568879999999999" q=".0387" sig=".2471353044121301"/>
<Particle eps=".06568879999999999" q=".0387" sig=".2471353044121301"/>
<Particle eps=".0002204968" q=".403" sig=".053453923088420355"/>
<Particle eps=".06568879999999999" q=".0677" sig=".22931733004932334"/>
<Particle eps=".06568879999999999" q=".3525" sig=".10690784617684071"/>
<Particle eps=".06568879999999999" q=".0942" sig=".2649532787749369"/>
<Particle eps=".06568879999999999" q=".0942" sig=".2649532787749369"/>
<Particle eps=".06568879999999999" q=".0957" sig=".2471353044121301"/>
<Particle eps=".06568879999999999" q=".3638" sig=".10690784617684071"/>
<Particle eps=".06568879999999999" q=".3638" sig=".10690784617684071"/>
<Particle eps=".06276" q="-.0038" sig=".2510552587719476"/>
</Particles>
<Exceptions>
<Exception eps="0" p1="0" p2="1" q="0" sig="1"/>
<Exception eps="0" p1="0" p2="2" q="0" sig="1"/>
<Exception eps="0" p1="1" p2="2" q="0" sig="1"/>
<Exception eps="0" p1="0" p2="3" q="0" sig="1"/>
<Exception eps="0" p1="1" p2="3" q="0" sig="1"/>
<Exception eps="0" p1="2" p2="3" q="0" sig="1"/>
<Exception eps=".2288648" p1="0" p2="4" q="-.005209204163100001" sig=".3399669508423535"/>
<Exception eps="0" p1="1" p2="4" q="0" sig="1"/>
<Exception eps=".3170881327580709" p1="2" p2="4" q="-.017912403350099998" sig=".3179795704786499"/>
<Exception eps="0" p1="3" p2="4" q="0" sig="1"/>
<Exception eps=".20291752979375635" p1="1" p2="5" q=".0568296976803" sig=".3399669508423535"/>
<Exception eps="0" p1="3" p2="5" q="0" sig="1"/>
<Exception eps="0" p1="4" p2="5" q="0" sig="1"/>
<Exception eps=".3956480308961489" p1="3" p2="6" q=".27553999783559996" sig=".31582359558075035"/>
<Exception eps="0" p1="4" p2="6" q="0" sig="1"/>
<Exception eps="0" p1="5" p2="6" q="0" sig="1"/>
<Exception eps=".28529542140034425" p1="3" p2="7" q="-.0380326728687" sig=".3324834016099747"/>
<Exception eps="0" p1="4" p2="7" q="0" sig="1"/>
<Exception eps="0" p1="5" p2="7" q="0" sig="1"/>
<Exception eps="0" p1="6" p2="7" q="0" sig="1"/>
<Exception eps=".3173899777885874" p1="4" p2="8" q="-.017427480289800002" sig=".32330714481312917"/>
<Exception eps="0" p1="5" p2="8" q="0" sig="1"/>
<Exception eps=".4401568" p1="6" p2="8" q=".2903603718872" sig=".3066473387839048"/>
<Exception eps="0" p1="7" p2="8" q="0" sig="1"/>
<Exception eps=".2288648" p1="4" p2="9" q=".0031564623741" sig=".3399669508423535"/>
<Exception eps="0" p1="5" p2="9" q="0" sig="1"/>
<Exception eps=".3173899777885874" p1="6" p2="9" q="-.0525900229724" sig=".32330714481312917"/>
<Exception eps="0" p1="7" p2="9" q="0" sig="1"/>
<Exception eps="0" p1="8" p2="9" q="0" sig="1"/>
<Exception eps=".2288648" p1="5" p2="10" q=".009490412038199999" sig=".3399669508423535"/>
<Exception eps="0" p1="7" p2="10" q="0" sig="1"/>
<Exception eps=".3173899777885874" p1="8" p2="10" q="-.0534052197116" sig=".32330714481312917"/>
<Exception eps="0" p1="9" p2="10" q="0" sig="1"/>
<Exception eps=".3173899777885874" p1="7" p2="11" q="-.040625654163400006" sig=".32330714481312917"/>
<Exception eps="0" p1="9" p2="11" q="0" sig="1"/>
<Exception eps="0" p1="10" p2="11" q="0" sig="1"/>
<Exception eps=".35564000000000007" p1="3" p2="12" q=".19484217062819997" sig=".3125005433620869"/>
<Exception eps="0" p1="4" p2="12" q="0" sig="1"/>
<Exception eps=".28529542140034425" p1="5" p2="12" q="-.036486904051799995" sig=".3199840925944657"/>
<Exception eps="0" p1="7" p2="12" q="0" sig="1"/>
<Exception eps=".3956480308961489" p1="8" p2="12" q=".2053220787084" sig=".30332428656524135"/>
<Exception eps="0" p1="9" p2="12" q="0" sig="1"/>
<Exception eps="0" p1="10" p2="12" q="0" sig="1"/>
<Exception eps=".3956480308961489" p1="11" p2="12" q=".20812606749239998" sig=".30332428656524135"/>
<Exception eps=".20291752979375635" p1="1" p2="13" q=".15039944006650002" sig=".3399669508423535"/>
<Exception eps="0" p1="3" p2="13" q="0" sig="1"/>
<Exception eps="0" p1="4" p2="13" q="0" sig="1"/>
<Exception eps="0" p1="5" p2="13" q="0" sig="1"/>
<Exception eps=".3173899777885874" p1="6" p2="13" q="-.136555620442" sig=".32330714481312917"/>
<Exception eps=".2288648" p1="7" p2="13" q=".018848716271500005" sig=".3399669508423535"/>
<Exception eps="0" p1="9" p2="13" q="0" sig="1"/>
<Exception eps=".2288648" p1="10" p2="13" q=".025116316201000004" sig=".3399669508423535"/>
<Exception eps="0" p1="12" p2="13" q="0" sig="1"/>
<Exception eps=".35564000000000007" p1="3" p2="14" q=".25937263750529993" sig=".3249998523775958"/>
<Exception eps="0" p1="4" p2="14" q="0" sig="1"/>
<Exception eps=".28529542140034425" p1="5" p2="14" q="-.04857113071469999" sig=".3324834016099747"/>
<Exception eps=".28529542140034425" p1="9" p2="14" q="-.049504293648699994" sig=".3324834016099747"/>
<Exception eps="0" p1="12" p2="14" q="0" sig="1"/>
<Exception eps="0" p1="13" p2="14" q="0" sig="1"/>
<Exception eps=".20291752979375635" p1="4" p2="15" q=".019965145139100002" sig=".3399669508423535"/>
<Exception eps=".25295039766721067" p1="12" p2="15" q="-.23521960911780002" sig=".3199840925944657"/>
<Exception eps="0" p1="13" p2="15" q="0" sig="1"/>
<Exception eps="0" p1="14" p2="15" q="0" sig="1"/>
<Exception eps=".3170881327580709" p1="13" p2="16" q="-.14718528625650001" sig=".3179795704786499"/>
<Exception eps="0" p1="14" p2="16" q="0" sig="1"/>
<Exception eps="0" p1="15" p2="16" q="0" sig="1"/>
<Exception eps=".2288648" p1="13" p2="17" q="-.033151700726" sig=".3399669508423535"/>
<Exception eps="0" p1="14" p2="17" q="0" sig="1"/>
<Exception eps="0" p1="15" p2="17" q="0" sig="1"/>
<Exception eps="0" p1="16" p2="17" q="0" sig="1"/>
<Exception eps=".28529542140034425" p1="14" p2="18" q="-.025428689951499998" sig=".3324834016099747"/>
<Exception eps="0" p1="15" p2="18" q="0" sig="1"/>
<Exception eps=".3170881327580709" p1="16" p2="18" q="-.029116508533500004" sig=".3179795704786499"/>
<Exception eps="0" p1="17" p2="18" q="0" sig="1"/>
<Exception eps=".25295039766721067" p1="15" p2="19" q="-.5143960924074" sig=".3324834016099747"/>
<Exception eps="0" p1="17" p2="19" q="0" sig="1"/>
<Exception eps="0" p1="18" p2="19" q="0" sig="1"/>
<Exception eps=".179912" p1="15" p2="20" q=".29354915079870003" sig=".3399669508423535"/>
<Exception eps="0" p1="17" p2="20" q="0" sig="1"/>
<Exception eps="0" p1="18" p2="20" q="0" sig="1"/>
<Exception eps="0" p1="19" p2="20" q="0" sig="1"/>
<Exception eps=".3170881327580709" p1="17" p2="21" q=".0605394578412" sig=".3179795704786499"/>
<Exception eps="0" p1="18" p2="21" q="0" sig="1"/>
<Exception eps=".3952717606912996" p1="19" p2="21" q=".38562460749539995" sig=".31049602124627107"/>
<Exception eps="0" p1="20" p2="21" q="0" sig="1"/>
<Exception eps="0" p1="0" p2="22" q="0" sig="1"/>
<Exception eps="0" p1="1" p2="22" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="2" p2="22" q="-.034804753030431" sig=".2804727344449416"/>
<Exception eps=".10807766844265286" p1="3" p2="22" q="-.032134134212948993" sig=".2949765655762664"/>
<Exception eps="0" p1="0" p2="23" q="0" sig="1"/>
<Exception eps="0" p1="1" p2="23" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="2" p2="23" q="-.034804753030431" sig=".2804727344449416"/>
<Exception eps=".10807766844265286" p1="3" p2="23" q="-.032134134212948993" sig=".2949765655762664"/>
<Exception eps="0" p1="22" p2="23" q="0" sig="1"/>
<Exception eps="0" p1="0" p2="24" q="0" sig="1"/>
<Exception eps="0" p1="1" p2="24" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="2" p2="24" q="-.034804753030431" sig=".2804727344449416"/>
<Exception eps=".10807766844265286" p1="3" p2="24" q="-.032134134212948993" sig=".2949765655762664"/>
<Exception eps="0" p1="22" p2="24" q="0" sig="1"/>
<Exception eps="0" p1="23" p2="24" q="0" sig="1"/>
<Exception eps=".08670021359327784" p1="0" p2="25" q="-.0467661046015" sig=".2234373985095971"/>
<Exception eps="0" p1="1" p2="25" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="2" p2="25" q="-.1608102317565" sig=".20145001814589353"/>
<Exception eps="0" p1="3" p2="25" q="0" sig="1"/>
<Exception eps="0" p1="4" p2="25" q="0" sig="1"/>
<Exception eps=".08670021359327784" p1="5" p2="25" q=".0278032637865" sig=".2234373985095971"/>
<Exception eps=".08670021359327784" p1="13" p2="25" q=".0735811640075" sig=".2234373985095971"/>
<Exception eps=".07687068162049819" p1="1" p2="26" q=".0604327332681" sig=".2935511276272418"/>
<Exception eps="0" p1="3" p2="26" q="0" sig="1"/>
<Exception eps="0" p1="4" p2="26" q="0" sig="1"/>
<Exception eps="0" p1="5" p2="26" q="0" sig="1"/>
<Exception eps=".12023595968727492" p1="6" p2="26" q="-.054870080518800005" sig=".27689132159801744"/>
<Exception eps=".08670021359327784" p1="7" p2="26" q=".007573694705100001" sig=".2935511276272418"/>
<Exception eps=".10807766844265286" p1="12" p2="26" q="-.0388001947986" sig=".27356826937935397"/>
<Exception eps="0" p1="13" p2="26" q="0" sig="1"/>
<Exception eps=".10807766844265286" p1="14" p2="26" q="-.0516505683969" sig=".28606757839486296"/>
<Exception eps=".032844399999999996" p1="25" p2="26" q=".0295660067355" sig=".17702157529448542"/>
<Exception eps=".10807766844265286" p1="3" p2="27" q="-.0503550735789" sig=".28606757839486296"/>
<Exception eps="0" p1="4" p2="27" q="0" sig="1"/>
<Exception eps="0" p1="5" p2="27" q="0" sig="1"/>
<Exception eps="0" p1="6" p2="27" q="0" sig="1"/>
<Exception eps="0" p1="7" p2="27" q="0" sig="1"/>
<Exception eps=".12023595968727492" p1="8" p2="27" q="-.0530635044118" sig=".27689132159801744"/>
<Exception eps=".08670021359327784" p1="9" p2="27" q=".0096108532231" sig=".2935511276272418"/>
<Exception eps=".08670021359327784" p1="13" p2="27" q=".024955608510500004" sig=".2935511276272418"/>
<Exception eps=".032844399999999996" p1="26" p2="27" q=".010027534889700002" sig=".2471353044121301"/>
<Exception eps=".005023144236065694" p1="4" p2="28" q=".012256950972" sig=".19671043696538693"/>
<Exception eps="0" p1="5" p2="28" q="0" sig="1"/>
<Exception eps="0" p1="6" p2="28" q="0" sig="1"/>
<Exception eps=".005023144236065694" p1="7" p2="28" q=".028187553916000002" sig=".19671043696538693"/>
<Exception eps=".001902903715104892" p1="27" p2="28" q=".037320184052" sig=".15029461375027522"/>
<Exception eps=".08670021359327784" p1="4" p2="29" q=".0025198149207" sig=".2935511276272418"/>
<Exception eps="0" p1="5" p2="29" q="0" sig="1"/>
<Exception eps=".12023595968727492" p1="6" p2="29" q="-.0419827987348" sig=".27689132159801744"/>
<Exception eps="0" p1="7" p2="29" q="0" sig="1"/>
<Exception eps="0" p1="8" p2="29" q="0" sig="1"/>
<Exception eps="0" p1="9" p2="29" q="0" sig="1"/>
<Exception eps=".08670021359327784" p1="10" p2="29" q=".0077217857794" sig=".2935511276272418"/>
<Exception eps=".10807766844265286" p1="12" p2="29" q="-.029687231250599997" sig=".27356826937935397"/>
<Exception eps=".032844399999999996" p1="27" p2="29" q=".007672377643700001" sig=".2471353044121301"/>
<Exception eps=".005023144236065694" p1="5" p2="30" q=".036434854259999996" sig=".19671043696538693"/>
<Exception eps="0" p1="7" p2="30" q="0" sig="1"/>
<Exception eps="0" p1="8" p2="30" q="0" sig="1"/>
<Exception eps=".005023144236065694" p1="9" p2="30" q=".03713485146" sig=".19671043696538693"/>
<Exception eps=".001902903715104892" p1="29" p2="30" q=".029644881419999998" sig=".15029461375027522"/>
<Exception eps=".08670021359327784" p1="5" p2="31" q=".0089959390161" sig=".2935511276272418"/>
<Exception eps="0" p1="7" p2="31" q="0" sig="1"/>
<Exception eps=".12023595968727492" p1="8" p2="31" q="-.0506226808418" sig=".27689132159801744"/>
<Exception eps="0" p1="9" p2="31" q="0" sig="1"/>
<Exception eps="0" p1="10" p2="31" q="0" sig="1"/>
<Exception eps=".12023595968727492" p1="11" p2="31" q="-.0513140114098" sig=".27689132159801744"/>
<Exception eps="0" p1="12" p2="31" q="0" sig="1"/>
<Exception eps=".08670021359327784" p1="13" p2="31" q=".0238076964355" sig=".2935511276272418"/>
<Exception eps=".032844399999999996" p1="29" p2="31" q=".0073194623887" sig=".2471353044121301"/>
<Exception eps=".08670021359327784" p1="7" p2="32" q=".0026477144091" sig=".2935511276272418"/>
<Exception eps="0" p1="9" p2="32" q="0" sig="1"/>
<Exception eps="0" p1="10" p2="32" q="0" sig="1"/>
<Exception eps="0" p1="11" p2="32" q="0" sig="1"/>
<Exception eps=".10807766844265286" p1="12" p2="32" q="-.0135642957426" sig=".27356826937935397"/>
<Exception eps=".032844399999999996" p1="31" p2="32" q=".0033443116227" sig=".2471353044121301"/>
<Exception eps=".08670021359327784" p1="7" p2="33" q=".0026477144091" sig=".2935511276272418"/>
<Exception eps="0" p1="9" p2="33" q="0" sig="1"/>
<Exception eps="0" p1="10" p2="33" q="0" sig="1"/>
<Exception eps="0" p1="11" p2="33" q="0" sig="1"/>
<Exception eps=".10807766844265286" p1="12" p2="33" q="-.0135642957426" sig=".27356826937935397"/>
<Exception eps=".032844399999999996" p1="31" p2="33" q=".0033443116227" sig=".2471353044121301"/>
<Exception eps="0" p1="32" p2="33" q="0" sig="1"/>
<Exception eps=".005023144236065694" p1="9" p2="34" q=".035631774139000004" sig=".19671043696538693"/>
<Exception eps="0" p1="10" p2="34" q="0" sig="1"/>
<Exception eps="0" p1="11" p2="34" q="0" sig="1"/>
<Exception eps=".001902903715104892" p1="32" p2="34" q=".012996698013000001" sig=".15029461375027522"/>
<Exception eps=".001902903715104892" p1="33" p2="34" q=".012996698013000001" sig=".15029461375027522"/>
<Exception eps=".10807766844265286" p1="3" p2="35" q="-.0313618995519" sig=".2771585912134596"/>
<Exception eps="0" p1="4" p2="35" q="0" sig="1"/>
<Exception eps=".08670021359327784" p1="5" p2="35" q=".005872951508099999" sig=".2846421404458384"/>
<Exception eps=".08670021359327784" p1="9" p2="35" q=".005985784390099999" sig=".2846421404458384"/>
<Exception eps="0" p1="12" p2="35" q="0" sig="1"/>
<Exception eps="0" p1="13" p2="35" q="0" sig="1"/>
<Exception eps="0" p1="14" p2="35" q="0" sig="1"/>
<Exception eps=".07687068162049819" p1="15" p2="35" q=".037861073555099996" sig=".2846421404458384"/>
<Exception eps=".032844399999999996" p1="26" p2="35" q=".0062453000187" sig=".23822631723072674"/>
<Exception eps=".08670021359327784" p1="4" p2="36" q=".0104868330525" sig=".2234373985095971"/>
<Exception eps=".10807766844265286" p1="12" p2="36" q="-.123550755795" sig=".20345454026170928"/>
<Exception eps="0" p1="13" p2="36" q="0" sig="1"/>
<Exception eps="0" p1="14" p2="36" q="0" sig="1"/>
<Exception eps="0" p1="15" p2="36" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="16" p2="36" q="-.1883223717075" sig=".20145001814589353"/>
<Exception eps=".08670021359327784" p1="17" p2="36" q="-.042417330329999996" sig=".2234373985095971"/>
<Exception eps=".032844399999999996" p1="35" p2="36" q=".019886795452499998" sig=".16811258811308202"/>
<Exception eps=".10807766844265286" p1="14" p2="37" q="-.0439519741914" sig=".2949765655762664"/>
<Exception eps="0" p1="15" p2="37" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="16" p2="37" q="-.05032614869460001" sig=".2804727344449416"/>
<Exception eps="0" p1="17" p2="37" q="0" sig="1"/>
<Exception eps="0" p1="18" p2="37" q="0" sig="1"/>
<Exception eps=".10807766844265286" p1="19" p2="37" q="-.0722040111828" sig=".2949765655762664"/>
<Exception eps=".07687068162049819" p1="20" p2="37" q=".041204485181400005" sig=".3024601148086452"/>
<Exception eps=".10807766844265286" p1="14" p2="38" q="-.0439519741914" sig=".2949765655762664"/>
<Exception eps="0" p1="15" p2="38" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="16" p2="38" q="-.05032614869460001" sig=".2804727344449416"/>
<Exception eps="0" p1="17" p2="38" q="0" sig="1"/>
<Exception eps="0" p1="18" p2="38" q="0" sig="1"/>
<Exception eps=".10807766844265286" p1="19" p2="38" q="-.0722040111828" sig=".2949765655762664"/>
<Exception eps=".07687068162049819" p1="20" p2="38" q=".041204485181400005" sig=".3024601148086452"/>
<Exception eps="0" p1="37" p2="38" q="0" sig="1"/>
<Exception eps=".07687068162049819" p1="15" p2="39" q=".0535200109191" sig=".2935511276272418"/>
<Exception eps="0" p1="17" p2="39" q="0" sig="1"/>
<Exception eps="0" p1="18" p2="39" q="0" sig="1"/>
<Exception eps="0" p1="19" p2="39" q="0" sig="1"/>
<Exception eps="0" p1="20" p2="39" q="0" sig="1"/>
<Exception eps=".12012161257658839" p1="21" p2="39" q="-.040122064511099995" sig=".2715637472635382"/>
<Exception eps=".032844399999999996" p1="37" p2="39" q=".0075124199502000005" sig=".2560442915935335"/>
<Exception eps=".032844399999999996" p1="38" p2="39" q=".0075124199502000005" sig=".2560442915935335"/>
<Exception eps=".08670021359327784" p1="17" p2="40" q="-.043777091557600005" sig=".2234373985095971"/>
<Exception eps="0" p1="18" p2="40" q="0" sig="1"/>
<Exception eps="0" p1="19" p2="40" q="0" sig="1"/>
<Exception eps=".07687068162049819" p1="20" p2="40" q=".1591315468046" sig=".2234373985095971"/>
<Exception eps=".032844399999999996" p1="39" p2="40" q=".029012933947800003" sig=".17702157529448542"/>
<Exception eps=".08670021359327784" p1="17" p2="41" q="-.043777091557600005" sig=".2234373985095971"/>
<Exception eps="0" p1="18" p2="41" q="0" sig="1"/>
<Exception eps="0" p1="19" p2="41" q="0" sig="1"/>
<Exception eps=".07687068162049819" p1="20" p2="41" q=".1591315468046" sig=".2234373985095971"/>
<Exception eps=".032844399999999996" p1="39" p2="41" q=".029012933947800003" sig=".17702157529448542"/>
<Exception eps="0" p1="40" p2="41" q="0" sig="1"/>
<Exception eps=".08474536815661372" p1="17" p2="42" q=".0004572648376" sig=".2955111048071506"/>
<Exception eps="0" p1="18" p2="42" q="0" sig="1"/>
<Exception eps=".10564082165526734" p1="19" p2="42" q=".0029126883491999997" sig=".2880275555747717"/>
<Exception eps="0" p1="20" p2="42" q="0" sig="1"/>
<Exception eps="0" p1="21" p2="42" q="0" sig="1"/>
<Exception eps=".03210385135774211" p1="39" p2="42" q="-.00030304878780000003" sig=".24909528159203886"/>
</Exceptions>
</Force>
<Force forceGroup="0" type="PeriodicTorsionForce" usesPeriodic="0" version="2">
<Torsions>
<Torsion k="1.5341333333333336" p1="1" p2="0" p3="2" p4="3" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="1" p2="2" p3="3" p4="0" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="1" p2="3" p3="0" p4="2" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.3946666666666667" p1="3" p2="1" p3="4" p4="25" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.3946666666666667" p1="3" p2="4" p3="25" p4="1" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.3946666666666667" p1="3" p2="25" p3="1" p4="4" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.3946666666666667" p1="14" p2="13" p3="15" p4="36" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.3946666666666667" p1="14" p2="15" p3="36" p4="13" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.3946666666666667" p1="14" p2="36" p3="13" p4="15" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="15" p2="14" p3="16" p4="17" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="15" p2="16" p3="17" p4="14" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="15" p2="17" p3="14" p4="16" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="20" p2="18" p3="21" p4="42" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="20" p2="21" p3="42" p4="18" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.5341333333333336" p1="20" p2="42" p3="18" p4="21" periodicity="2" phase="3.141592653589793"/>
<Torsion k="4.342644733296944" p1="0" p2="1" p3="3" p4="4" periodicity="2" phase="3.141592653589793"/>
<Torsion k="4.342644733296944" p1="0" p2="1" p3="3" p4="25" periodicity="2" phase="3.141592653589793"/>
<Torsion k="-.12300922280687712" p1="1" p2="3" p3="4" p4="5" periodicity="4" phase="3.141592653589793"/>
<Torsion k="-.5487286603927279" p1="1" p2="3" p3="4" p4="5" periodicity="3" phase="3.141592653589793"/>
<Torsion k="1.8672795202280696" p1="1" p2="3" p3="4" p4="5" periodicity="2" phase="0"/>
<Torsion k="-2.19521089460502" p1="1" p2="3" p3="4" p4="5" periodicity="1" phase="0"/>
<Torsion k="-.12300922280687712" p1="1" p2="3" p3="4" p4="13" periodicity="4" phase="3.141592653589793"/>
<Torsion k="-.5487286603927279" p1="1" p2="3" p3="4" p4="13" periodicity="3" phase="3.141592653589793"/>
<Torsion k="1.8672795202280696" p1="1" p2="3" p3="4" p4="13" periodicity="2" phase="0"/>
<Torsion k="-2.19521089460502" p1="1" p2="3" p3="4" p4="13" periodicity="1" phase="0"/>
<Torsion k="-.13828705450940473" p1="1" p2="3" p3="4" p4="26" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="1" p2="3" p3="4" p4="26" periodicity="3" phase="0"/>
<Torsion k=".7486308604728968" p1="2" p2="1" p3="0" p4="22" periodicity="1" phase="0"/>
<Torsion k="-.1771000560140076" p1="2" p2="1" p3="0" p4="22" periodicity="2" phase="0"/>
<Torsion k="-.36594979156195095" p1="2" p2="1" p3="0" p4="22" periodicity="3" phase="3.141592653589793"/>
<Torsion k=".7486308604728968" p1="2" p2="1" p3="0" p4="23" periodicity="1" phase="0"/>
<Torsion k="-.1771000560140076" p1="2" p2="1" p3="0" p4="23" periodicity="2" phase="0"/>
<Torsion k="-.36594979156195095" p1="2" p2="1" p3="0" p4="23" periodicity="3" phase="3.141592653589793"/>
<Torsion k=".7486308604728968" p1="2" p2="1" p3="0" p4="24" periodicity="1" phase="0"/>
<Torsion k="-.1771000560140076" p1="2" p2="1" p3="0" p4="24" periodicity="2" phase="0"/>
<Torsion k="-.36594979156195095" p1="2" p2="1" p3="0" p4="24" periodicity="3" phase="3.141592653589793"/>
<Torsion k="4.342644733296944" p1="2" p2="1" p3="3" p4="4" periodicity="2" phase="3.141592653589793"/>
<Torsion k="9.817724285882496" p1="2" p2="1" p3="3" p4="25" periodicity="2" phase="3.141592653589793"/>
<Torsion k="4.761088642682424" p1="2" p2="1" p3="3" p4="25" periodicity="1" phase="0"/>
<Torsion k=".5341271293311896" p1="3" p2="1" p3="0" p4="22" periodicity="3" phase="0"/>
<Torsion k=".5341271293311896" p1="3" p2="1" p3="0" p4="23" periodicity="3" phase="0"/>
<Torsion k=".5341271293311896" p1="3" p2="1" p3="0" p4="24" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="3" p2="4" p3="5" p4="6" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="3" p2="4" p3="5" p4="7" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="3" p2="4" p3="5" p4="27" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="3" p2="4" p3="13" p4="12" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="3" p2="4" p3="13" p4="14" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="3" p2="4" p3="13" p4="35" periodicity="3" phase="0"/>
<Torsion k="2.5942222416187555" p1="4" p2="5" p3="6" p4="28" periodicity="3" phase="0"/>
<Torsion k=".6525848770213633" p1="4" p2="5" p3="6" p4="28" periodicity="1" phase="0"/>
<Torsion k=".8546593630796433" p1="4" p2="5" p3="7" p4="8" periodicity="3" phase="0"/>
<Torsion k=".2533074202303992" p1="4" p2="5" p3="7" p4="9" periodicity="3" phase="0"/>
<Torsion k="1.7121391312495295" p1="4" p2="5" p3="7" p4="9" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.7574578846549336" p1="4" p2="5" p3="7" p4="9" periodicity="1" phase="3.141592653589793"/>
<Torsion k=".445926668373392" p1="4" p2="5" p3="7" p4="29" periodicity="3" phase="0"/>
<Torsion k=".5027505156766936" p1="4" p2="13" p3="12" p4="9" periodicity="3" phase="0"/>
<Torsion k="1.0674415901463896" p1="4" p2="13" p3="12" p4="9" periodicity="2" phase="3.141592653589793"/>
<Torsion k="-.12300922280687712" p1="4" p2="13" p3="14" p4="15" periodicity="4" phase="3.141592653589793"/>
<Torsion k="-.5487286603927279" p1="4" p2="13" p3="14" p4="15" periodicity="3" phase="3.141592653589793"/>
<Torsion k="1.8672795202280696" p1="4" p2="13" p3="14" p4="15" periodicity="2" phase="0"/>
<Torsion k="-2.19521089460502" p1="4" p2="13" p3="14" p4="15" periodicity="1" phase="0"/>
<Torsion k="-.13828705450940473" p1="4" p2="13" p3="14" p4="36" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="4" p2="13" p3="14" p4="36" periodicity="3" phase="0"/>
<Torsion k="-.13828705450940473" p1="5" p2="4" p3="3" p4="25" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="5" p2="4" p3="3" p4="25" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="5" p2="4" p3="13" p4="12" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="5" p2="4" p3="13" p4="14" periodicity="3" phase="0"/>
<Torsion k=".445926668373392" p1="5" p2="4" p3="13" p4="35" periodicity="3" phase="0"/>
<Torsion k="2.5942222416187555" p1="5" p2="7" p3="8" p4="30" periodicity="3" phase="0"/>
<Torsion k=".6525848770213633" p1="5" p2="7" p3="8" p4="30" periodicity="1" phase="0"/>
<Torsion k=".2533074202303992" p1="5" p2="7" p3="9" p4="10" periodicity="3" phase="0"/>
<Torsion k="1.7121391312495295" p1="5" p2="7" p3="9" p4="10" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.7574578846549336" p1="5" p2="7" p3="9" p4="10" periodicity="1" phase="3.141592653589793"/>
<Torsion k=".8546593630796433" p1="5" p2="7" p3="9" p4="12" periodicity="3" phase="0"/>
<Torsion k=".445926668373392" p1="5" p2="7" p3="9" p4="31" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="6" p2="5" p3="4" p4="13" periodicity="3" phase="0"/>
<Torsion k=".7356182516976472" p1="6" p2="5" p3="4" p4="26" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="6" p2="5" p3="4" p4="26" periodicity="1" phase="0"/>
<Torsion k="-1.0390409031260992" p1="6" p2="5" p3="7" p4="8" periodicity="3" phase="0"/>
<Torsion k="4.719726090127176" p1="6" p2="5" p3="7" p4="8" periodicity="2" phase="0"/>
<Torsion k=".8546593630796433" p1="6" p2="5" p3="7" p4="9" periodicity="3" phase="0"/>
<Torsion k=".7356182516976472" p1="6" p2="5" p3="7" p4="29" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="6" p2="5" p3="7" p4="29" periodicity="1" phase="0"/>
<Torsion k=".2533074202303992" p1="7" p2="5" p3="4" p4="13" periodicity="3" phase="0"/>
<Torsion k="1.7121391312495295" p1="7" p2="5" p3="4" p4="13" periodicity="2" phase="3.141592653589793"/>
<Torsion k="1.7574578846549336" p1="7" p2="5" p3="4" p4="13" periodicity="1" phase="3.141592653589793"/>
<Torsion k=".445926668373392" p1="7" p2="5" p3="4" p4="26" periodicity="3" phase="0"/>
<Torsion k="2.5942222416187555" p1="7" p2="5" p3="6" p4="28" periodicity="3" phase="0"/>
<Torsion k=".6525848770213633" p1="7" p2="5" p3="6" p4="28" periodicity="1" phase="0"/>
<Torsion k=".8546593630796433" p1="7" p2="9" p3="10" p4="11" periodicity="3" phase="0"/>
<Torsion k=".445926668373392" p1="7" p2="9" p3="10" p4="32" periodicity="3" phase="0"/>
<Torsion k=".445926668373392" p1="7" p2="9" p3="10" p4="33" periodicity="3" phase="0"/>
<Torsion k=".5027505156766936" p1="7" p2="9" p3="12" p4="13" periodicity="3" phase="0"/>
<Torsion k="1.0674415901463896" p1="7" p2="9" p3="12" p4="13" periodicity="2" phase="3.141592653589793"/>
<Torsion k=".7356182516976472" p1="8" p2="7" p3="5" p4="27" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="8" p2="7" p3="5" p4="27" periodicity="1" phase="0"/>
<Torsion k=".8546593630796433" p1="8" p2="7" p3="9" p4="10" periodicity="3" phase="0"/>
<Torsion k="-1.0390409031260992" p1="8" p2="7" p3="9" p4="12" periodicity="3" phase="0"/>
<Torsion k="4.719726090127176" p1="8" p2="7" p3="9" p4="12" periodicity="2" phase="0"/>
<Torsion k=".7356182516976472" p1="8" p2="7" p3="9" p4="31" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="8" p2="7" p3="9" p4="31" periodicity="1" phase="0"/>
<Torsion k=".445926668373392" p1="9" p2="7" p3="5" p4="27" periodicity="3" phase="0"/>
<Torsion k="2.5942222416187555" p1="9" p2="7" p3="8" p4="30" periodicity="3" phase="0"/>
<Torsion k=".6525848770213633" p1="9" p2="7" p3="8" p4="30" periodicity="1" phase="0"/>
<Torsion k="2.5942222416187555" p1="9" p2="10" p3="11" p4="34" periodicity="3" phase="0"/>
<Torsion k=".6525848770213633" p1="9" p2="10" p3="11" p4="34" periodicity="1" phase="0"/>
<Torsion k="1.980587581654684" p1="9" p2="12" p3="13" p4="14" periodicity="3" phase="0"/>
<Torsion k="2.5894468414754606" p1="9" p2="12" p3="13" p4="14" periodicity="2" phase="0"/>
<Torsion k=".9047859836265209" p1="9" p2="12" p3="13" p4="35" periodicity="3" phase="0"/>
<Torsion k=".445926668373392" p1="10" p2="9" p3="7" p4="29" periodicity="3" phase="0"/>
<Torsion k=".5027505156766936" p1="10" p2="9" p3="12" p4="13" periodicity="3" phase="0"/>
<Torsion k="1.0674415901463896" p1="10" p2="9" p3="12" p4="13" periodicity="2" phase="3.141592653589793"/>
<Torsion k="-1.0390409031260992" p1="11" p2="10" p3="9" p4="12" periodicity="3" phase="0"/>
<Torsion k="4.719726090127176" p1="11" p2="10" p3="9" p4="12" periodicity="2" phase="0"/>
<Torsion k=".7356182516976472" p1="11" p2="10" p3="9" p4="31" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="11" p2="10" p3="9" p4="31" periodicity="1" phase="0"/>
<Torsion k=".7356182516976472" p1="12" p2="9" p3="7" p4="29" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="12" p2="9" p3="7" p4="29" periodicity="1" phase="0"/>
<Torsion k=".7356182516976472" p1="12" p2="9" p3="10" p4="32" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="12" p2="9" p3="10" p4="32" periodicity="1" phase="0"/>
<Torsion k=".7356182516976472" p1="12" p2="9" p3="10" p4="33" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="12" p2="9" p3="10" p4="33" periodicity="1" phase="0"/>
<Torsion k=".7356182516976472" p1="12" p2="13" p3="4" p4="26" periodicity="3" phase="0"/>
<Torsion k="-2.020274253385594" p1="12" p2="13" p3="4" p4="26" periodicity="1" phase="0"/>
<Torsion k=".02751173056215075" p1="12" p2="13" p3="14" p4="15" periodicity="2" phase="0"/>
<Torsion k="10.5257287061552" p1="12" p2="13" p3="14" p4="15" periodicity="1" phase="0"/>
<Torsion k="-.13828705450940473" p1="12" p2="13" p3="14" p4="36" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="12" p2="13" p3="14" p4="36" periodicity="3" phase="0"/>
<Torsion k="-.13828705450940473" p1="13" p2="4" p3="3" p4="25" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="13" p2="4" p3="3" p4="25" periodicity="3" phase="0"/>
<Torsion k=".445926668373392" p1="13" p2="4" p3="5" p4="27" periodicity="3" phase="0"/>
<Torsion k=".9047859836265209" p1="13" p2="12" p3="9" p4="31" periodicity="3" phase="0"/>
<Torsion k="4.342644733296944" p1="13" p2="14" p3="15" p4="16" periodicity="2" phase="3.141592653589793"/>
<Torsion k="4.342644733296944" p1="13" p2="14" p3="15" p4="17" periodicity="2" phase="3.141592653589793"/>
<Torsion k=".8546593630796433" p1="14" p2="13" p3="4" p4="26" periodicity="3" phase="0"/>
<Torsion k="-.08588275286755775" p1="14" p2="15" p3="17" p4="18" periodicity="4" phase="0"/>
<Torsion k=".33174738165020123" p1="14" p2="15" p3="17" p4="18" periodicity="2" phase="0"/>
<Torsion k=".5341271293311896" p1="14" p2="15" p3="17" p4="37" periodicity="3" phase="0"/>
<Torsion k=".5341271293311896" p1="14" p2="15" p3="17" p4="38" periodicity="3" phase="0"/>
<Torsion k="-.13828705450940473" p1="15" p2="14" p3="13" p4="35" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="15" p2="14" p3="13" p4="35" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="15" p2="17" p3="18" p4="19" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="15" p2="17" p3="18" p4="20" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="15" p2="17" p3="18" p4="39" periodicity="3" phase="0"/>
<Torsion k="9.817724285882496" p1="16" p2="15" p3="14" p4="36" periodicity="2" phase="3.141592653589793"/>
<Torsion k="4.761088642682424" p1="16" p2="15" p3="14" p4="36" periodicity="1" phase="0"/>
<Torsion k="-2.499634777501248" p1="16" p2="15" p3="17" p4="18" periodicity="2" phase="0"/>
<Torsion k=".7486308604728968" p1="16" p2="15" p3="17" p4="37" periodicity="1" phase="0"/>
<Torsion k="-.1771000560140076" p1="16" p2="15" p3="17" p4="37" periodicity="2" phase="0"/>
<Torsion k="-.36594979156195095" p1="16" p2="15" p3="17" p4="37" periodicity="3" phase="3.141592653589793"/>
<Torsion k=".7486308604728968" p1="16" p2="15" p3="17" p4="38" periodicity="1" phase="0"/>
<Torsion k="-.1771000560140076" p1="16" p2="15" p3="17" p4="38" periodicity="2" phase="0"/>
<Torsion k="-.36594979156195095" p1="16" p2="15" p3="17" p4="38" periodicity="3" phase="3.141592653589793"/>
<Torsion k="4.342644733296944" p1="17" p2="15" p3="14" p4="36" periodicity="2" phase="3.141592653589793"/>
<Torsion k=".9713955850995585" p1="17" p2="18" p3="19" p4="40" periodicity="3" phase="0"/>
<Torsion k=".9713955850995585" p1="17" p2="18" p3="19" p4="41" periodicity="3" phase="0"/>
<Torsion k="-2.499634777501248" p1="17" p2="18" p3="20" p4="21" periodicity="2" phase="0"/>
<Torsion k=".5341271293311896" p1="17" p2="18" p3="20" p4="42" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="19" p2="18" p3="17" p4="37" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="19" p2="18" p3="17" p4="38" periodicity="3" phase="0"/>
<Torsion k="-2.499634777501248" p1="19" p2="18" p3="20" p4="21" periodicity="2" phase="0"/>
<Torsion k=".5341271293311896" p1="19" p2="18" p3="20" p4="42" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="20" p2="18" p3="17" p4="37" periodicity="3" phase="0"/>
<Torsion k=".8546593630796433" p1="20" p2="18" p3="17" p4="38" periodicity="3" phase="0"/>
<Torsion k=".9713955850995585" p1="20" p2="18" p3="19" p4="40" periodicity="3" phase="0"/>
<Torsion k=".9713955850995585" p1="20" p2="18" p3="19" p4="41" periodicity="3" phase="0"/>
<Torsion k=".7486308604728968" p1="21" p2="20" p3="18" p4="39" periodicity="1" phase="0"/>
<Torsion k="-.1771000560140076" p1="21" p2="20" p3="18" p4="39" periodicity="2" phase="0"/>
<Torsion k="-.36594979156195095" p1="21" p2="20" p3="18" p4="39" periodicity="3" phase="3.141592653589793"/>
<Torsion k="-.13828705450940473" p1="25" p2="3" p3="4" p4="26" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="25" p2="3" p3="4" p4="26" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="26" p2="4" p3="5" p4="27" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="26" p2="4" p3="13" p4="35" periodicity="3" phase="0"/>
<Torsion k=".9452409620490081" p1="27" p2="5" p3="6" p4="28" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="27" p2="5" p3="7" p4="29" periodicity="3" phase="0"/>
<Torsion k=".9452409620490081" p1="29" p2="7" p3="8" p4="30" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="29" p2="7" p3="9" p4="31" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="31" p2="9" p3="10" p4="32" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="31" p2="9" p3="10" p4="33" periodicity="3" phase="0"/>
<Torsion k=".9452409620490081" p1="32" p2="10" p3="11" p4="34" periodicity="3" phase="0"/>
<Torsion k=".9452409620490081" p1="33" p2="10" p3="11" p4="34" periodicity="3" phase="0"/>
<Torsion k="-.13828705450940473" p1="35" p2="13" p3="14" p4="36" periodicity="2" phase="0"/>
<Torsion k="-.2316348228729601" p1="35" p2="13" p3="14" p4="36" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="37" p2="17" p3="18" p4="39" periodicity="3" phase="0"/>
<Torsion k=".4371885647050472" p1="38" p2="17" p3="18" p4="39" periodicity="3" phase="0"/>
<Torsion k=".9713955850995585" p1="39" p2="18" p3="19" p4="40" periodicity="3" phase="0"/>
<Torsion k=".9713955850995585" p1="39" p2="18" p3="19" p4="41" periodicity="3" phase="0"/>
<Torsion k=".5341271293311896" p1="39" p2="18" p3="20" p4="42" periodicity="3" phase="0"/>
</Torsions>
</Force>
</Forces>
</System>
Congrats on the progress you've made!
Extract an example residue and post-translational modification into a PDB file Convert to SMILES code and save the modified residue as a new PDB file
I'd be a bit wary of starting with PDB -- A SMILES contains more information than a PDB (like bond orders), so something in the toolchain would have to be using a heuristic to do the PDB --> SMILES conversion. An illustrative example is that a carbon bound to an oxygen could either have the SMILES [C]-[O-]
or [C]=[O]
. Reading a PDB that has a single CONECT record for that bond doesn't clarify which is meant. In some cases the bond orders can be inferred from context and the surrounding graph, but for others it's complex and/or ambiguous. We've been bitten by this before :-/
AMBER force field XML
Ahh, I see. There are two parameter-generation strategies that could be pursued here:
A) Treat the entire modified AA as a small molecule, just pulling in backbone/peptide bond parameters from the parent FF B) Treat as much of the modified AA as possible using the protein FF, only using small molecule parameters for interactions the protein FF doesn't cover.
B would seem to be more accurate to me, since it uses more of the original protein FF. But achieving either would be an accomplishment.
@davidlmobley may have some input on which of these is preferable. He's on vacation this week so we may not hear from him for a while
There are also two parameter application strategies that could be pursued:
1) Define a new residue that OpenMM can read (in XML format), alongside the rest of a protein FF. Then this could apply the new parameters to structures with arbitrary number of the modified AA, though they'll be required to have the correct atom names. 2) Do OpenFF parameterization of the modified AA as a small molecule, and then automate the process of mixing the two final systems.
My initial comment was assuming approach 2, though now I see you might be pursuing approach 1. Either one should work in the long run, and in fact openforcefield/openff-toolkit#676 may have some hints for approach 1.
It looks like the next steps are to parse the serialized system and then map the amino acid portion onto the amino acid scaffold (unless such a parser already exists?).
Yes, I think this is right. I'd strongly recommend using ParmEd for this -- Handling the XML directly will be really hard.
Two important questions to answer are:
Sorry for the huge delay, but what the normal approach is for modified sidechains, etc., is to chop the sidechain off of the backbone, cap with a methyl, then charge/parameterize the small molecule. Then remove the methyl and graft it back on to the backbone.
However, I think this roughly describes both approaches (A) AND (B). When I've confronted this before, I've never had to make the choice between those two approaches (or gotten to make the choice) because my modified sidechain used GAFF types and teh backbone used AMBER protein FF types and I didn't have a way to switch one set of types to the other set of types, even if I wanted to.
Here, I suppose, one has more liberty. I think the approach you would canonically want to use is to use the protein parameters (which supposedly are better) for as much as possible, and use the small molecule parameters more sparingly -- at least, I believe that'd be the AMBER philosophy. This would primarily apply to dihedrals.
Hi Folks,
Sorry for the delay!
I have been slowly pecking away at this.
I have managed to parameterize canonical amino acids as well as post-translationally modified amino acids then used networkx to match the atoms up to one another. Credit goes to these folks:
https://github.com/Networks-Learning/nevae/blob/master/nevae_rl/convert_to_nx.py
However, I am having trouble with some of the more basic topology editing. Specifically, I am having trouble with the mechanics of deleting atoms/bonds and forming new bonds between custom ligands and openMM amino acids. I got the sense that this requires use of ParmEd and openMM? I had trouble finding any examples. Do any good examples come to mind?
In the meantime, I used the approach described here as a temporary measure: https://github.com/openmm/openmm/issues/2731
with open('new_LIGs/PTM_FF.xml','r') as FH:
xmlsystem = FH.read()
HET_system = XmlSerializer.deserialize(xmlsystem)
HET_pdbfile = PDBFile('new_LIGs/LIG_PTM_0.pdb')
HET_structure = parmed.openmm.load_topology(HET_pdbfile.topology,
HET_system,
xyz=HET_pdbfile.positions)
complex_structure=prot_structure+HET_structure
complex_system = complex_structure.createSystem(nonbondedMethod=NoCutoff,
nonbondedCutoff=9.0*unit.angstrom,
constraints=HBonds,
removeCMMotion=False)
atom1 = 1079
atom2 = len(list_of_atoms)+1
length_bond = 0.122
force_constant = 198321.0
force = HarmonicBondForce()
force.addBond(atom1, atom2, length_bond, force_constant)
complex_system.addForce(force)
Thanks!
This is really cool. I'm not that much of an expert in modifying ParmEd systems, but could try to reproduce your work if you attach the files for your example above (you should be able to drag+drop into the comment text box). Two breadcrumbs that I can provide, though:
I got the sense that this requires use of ParmEd and openMM?
I kinda get the sense that OpenMM will be easiest for this task after ParmEd has combined the systems (so basivally in the way that you're showing above). In my experience, ParmEd gets hung up on atom types -- Like, if I try to modify a bond, it sometimes tries to modify all bonds of that type and/or all bonds between atoms of those types, which is really confusing. It becomes even moreso for angles and torsions, which involve even more atom types.
force = HarmonicBondForce()
force.addBond(atom1, atom2, length_bond, force_constant)
complex_system.addForce(force)
HarmonicBondForce
using something like
existing = [complex_system.getForce(i) for i in range(complex_system.getNumForces())]
existing = [f for f in existing if type(f) == HarmonicBondForce]
Also, not directly related to your approach, but maybe an easier alternative: We've released our first shot at representing AMBER's ff14SB in offxml format. It can be found here. This opens up a new approach of simply loading both Parsley and ff14SB into the same force field, and letting the toolkit handle everything. However, I'm pretty sure this will fail on protein structures, since it'll need charges for the unnatural AA, and will attempt to run AM1-BCC on the whole molecule. So one would need to at least generate a LibraryCharge
for the unnatural AA.
I got the sense that this requires use of ParmEd and openMM?
There's probably a way to do it with only OpenMM, but this would be the route I take as somebody more familiar with ParmEd. I can't say for sure which route is better ahead of time. (Something built off of the amber-ff-porting
repo linked above may automagically get all of this working with fewer steps, but that is future work.)
Unlike the linked OpenMM issue, I think you actually do want to make a new bond on the topology - that is to say, the chemical connectivity graph, without physics - before adding a force in.
I think the place to put this would be in between the steps where you combine the ParmEd structures and convert them back into OpenMM world.
import parmed as pmd
...
complex_structure=prot_structure+HET_structure
# New stuff here
new_bond_type = pmd.BondType(k=force_constant, req=length_bond)
atom1 = # look up one of the atoms in the ParmEd structure to get an Atom object (not an int or index)
atom2 = # same but for the other atom
new_bond = pmd.Bond(atom1=atom2, atom2=atom2, type=new_bond_type)
complex_structure.bonds.append(new_bond) # there is an add_atom method but no add_bond, it seems
complex_system = complex_structure.createSystem( ... )
This should handle adding a new bond between atoms in the case that you know which atoms you want to make a new bond between, you know what parameters to use for that bond, etc. If you're already in a state in which the non-natural amino acids are parametrized, and a ligand is parametrized, I think this is the last remaining step? As Jeff hints at above, doing too much topology modification with ParmEd gets tricky, but if you're just trying to add a single bond in, I'd be fairly hopeful that could work.
https://parmed.github.io/ParmEd/html/api/parmed/parmed.html?highlight=bondtype#parmed.BondType https://parmed.github.io/ParmEd/html/topobj/parmed.topologyobjects.Bond.html#parmed.topologyobjects.Bond
Thank you both so much @j-wags, @davidlmobley, and @mattwthompson! The Parmed approach worked!!! This is super exciting!
Using that approach, I was able to:
Here is the basic approach I am taking:
# This for loop adds however N copies of a single pre-paramed OpenFF ligand into a ParmEd system
for index, PTM in enumerate(PTM_list):
print('PTM_list',PTM) # Sanity check
lig=PTM.split('-')[5] # To find pre-paramed OpenFF files
with open(f'input/forcefields/ligand_ff_{lig}.xml','r') as FH: # Load OpenFF system
xmlsystem = FH.read()
HET_system = XmlSerializer.deserialize(xmlsystem)
coord_trans=parmed_residue_coord_dict['-'.join(PTM.split('-')[:3])] # crudely shift coords to avoid clashes
coord_trans = [a+1.5*(b-a) for a,b in zip(global_centroid,coord_trans)] # crudely shift coords to avoid clashes
translate_PTMS(lig,index,coord_trans) # crudely shift coords to avoid clashes
HET_pdbfile = PDBFile(f'intermediate/LIG_dock/LIG_{lig}_{index}.pdb') # load up a copy of post-trans-mod ligand
HET_structure = parmed.openmm.load_topology(HET_pdbfile.topology,
HET_system,
xyz=HET_pdbfile.positions)
complex_structure=complex_structure+HET_structure # add ligand to previously loaded protein structure
After loading up the system comes a bunch of regex and text parsing in order to sift through the ParmEd system (still a work in progress). As stated above, the basic approach is to loop through the ParmEd bonds, regex match the amino acids and ligands we want to link, figure out the indices of those bonds in the ParmEd system, stuff all of that into a dictionary, then loop through that dictionary and apply the bonds and delete the extra hydrogens. Here is the critical piece of code, which is a copy-paste of @mattwthompson example code with a few extra bits tacked on:
for PTM_key, PTM_dict in bond_add_dict.items():
try:
input_PTM = PTM_dict['input_PTM']
aa_bond_tar = int(PTM_dict['aa_bond_tar'])
lig_bond_tar = int(PTM_dict['lig_bond_tar'])
aa_H_del = PTM_dict['aa_H_del']
lig_H_del = PTM_dict['lig_H_del']
H_del_command_list.append(aa_H_del)
H_del_command_list.append(lig_H_del)
length_bond = 1.522
force_constant = 313.0
new_bond_type = parmed.BondType(k=force_constant, req=length_bond)
atom1 = parmed_atom_list[aa_bond_tar]
atom2 = parmed_atom_list[lig_bond_tar]
new_bond = parmed.Bond(atom1=atom1, atom2=atom2, type=new_bond_type)
complex_structure.bonds.append(new_bond)
except: pass
H_del_command_list.sort(key=lambda x:int(x[1:]),reverse=True)
for H_del in H_del_command_list:
complex_structure.strip(H_del)
From there, everything follows the standard workflow for OpenMM/OpenFF simulations. Et voila! MD sims of spike protein with post translational modifications of arbitrary molecules:
Referencing an earlier comment, it looks like the challenge ahead is parsing the system and keeping track of which bonds/atoms to add/delete. The working code requires close supervision. What could be helpful would be something kind of like PDBfixer.py (PTMfixer.py perhaps?).
Sorry for the slow response -- it's been a crazy few weeks.
This is super cool, and I'm glad it's starting to work for you!
One question I have is where this combined system is getting the angle and torsion parameters that involve the new bond. It's possible that no such angle and torsion parameters are being assigned. This would cause there to be missing physics at the connection points, which could be visible in the trajectories as unphysical angle bending or twisting around the new bond. It may be hard to spot since this effect would be subtle, especially since sterics will keep anything too-obviously-weird from happening. But this case would be trouble because the underlying energetics would be badly inaccurate (ie. entirely absent).
Unfortunately, the solution to this might be somewhat hard. One way or another, it'll require parameterizing a fragment that includes the new bond, and a substantial amount of the chemical environment around it.
What could be helpful would be something kind of like PDBfixer.py (PTMfixer.py perhaps?).
This would be really neat. We usually start off new functionality like this in a notebook so that it's easy for lots of folks to tinker with, and package it into a more stable tool as time goes on.
Hello,
I am trying to simulate modified gelatin strands and have run into much of the same problems. Using SMIRNOFF template generator, a .XML file was generated for the parameters of the custom residue based on the non-polymerized amino acid and now the issue is to patch this new forcefield with the existing AMBER forcefield. I was wondering how if it would be possible to get an estimate on the release date of the openff-toolkit release 1.0? Will this include biopolymer forcefield support which can handle parameter generation for non-canonical residues?
Thank you in advance.
Hi @sncr0,
The OpenFF Toolkit release with biopolymer support will be version 0.11.0. I'm hoping to have an alpha out in the next few weeks, followed by a release candidate which will be available for at least a month, and then finally the full release.
The 0.11.0 toolkit release will provide the machinery to apply OFFXML force fields to biopolymers. In terms of protein force fields, we currently have a port of the AMBER ff14sb to OFFXML format here: https://github.com/openforcefield/amber-ff-porting/releases. In the future (tentatively late 2022 if things go well), Open Force Field will release the Rosemary force field, which will be applicable to both small molecules and biopolymers, and this will provide valence terms for modified amino acids.
In the shorter term, you'll be able to load both the openff-2.0.0
and ff14sb_off_impropers
force fields at the same time, and the resulting combination will provide a way to assign all valence and vdW parameters to a polypeptide containing a modified amino acid. However, the user will still need to provide a LibraryCharge for the entire modified AA, which may be tricky. Since this is of such high interest, we will probably provide an example notebook of this workflow either with the 0.11.0 release, or shortly after it.
Hi j-wags,
How far along are you with the development of biopolymer support for the OpenFF Toolkit (0.11.0)? We were able to generate library charges for non-canonical amino acids in the meanwhile, but we would still be interested in an example notebook of the recommended workflow as described in your previous post. Is it possible to give an indication when this will be available?
In the shorter term, you'll be able to load both the
openff-2.0.0
andff14sb_off_impropers
force fields at the same time, and the resulting combination will provide a way to assign all valence and vdW parameters to a polypeptide containing a modified amino acid. However, the user will still need to provide a LibraryCharge for the entire modified AA, which may be tricky. Since this is of such high interest, we will probably provide an example notebook of this workflow either with the 0.11.0 release, or shortly after it.
We tried to load in ff14sb_off_impropers_0.0.2.offxml
and openff-2.0.0-custom
which includes the newly generated parameters. This resulted in an error message: fractional_bondorder_method values are not identical. (handler value: AM1-Wiberg, incompatible value: overridden in init
. This issue is resolved by changing the fractional_bondorder_method in the amber port to AM1-Wiberg, but I was wondering if this is a good idea? Does this introduce a new underlying error?
In case anything is unclear or extra input is required, feel free to ask.
Thank you in advance for your help.
I'll let @j-wags handle the question the alpha testing notebook, but
... I was wondering if this is a good idea?
This is the right thing to do - we're actually soon going to have a release of our ff14SB port that does exactly that.
Hi Folks,
Is your feature request related to a problem? Please describe.
Feature/documentation request
We are running simulations of various SARS-CoV-2 proteins. There are certain simulations in which a covalent bond between a standard amino acid and an OpenFF parameterized ligand might be necessary. Examples include the spike protein glycosylations or covalent inhibitors.
Describe the solution you'd like
Parameterizing either a molecule that gets added onto an amino acid as a post translational modification or parameterizing the entire modified residue is clearly possible. However, in both cases, these molecules need to be covalently coupled to the standard amino acids. A simple example showing how to setup such a simulation with Amber would be very helpful.
These examples were particularly helpful: https://github.com/openforcefield/openforcefield/tree/master/examples/using_smirnoff_with_amber_protein_forcefield
Describe alternatives you've considered
I have considered parameterizing the entire post translationally modified residue, then converting it to a system, then serializing the system to XML, then attempting to manually reformat the ligand system's XML into Amber format protein XML file and saving it as amber14/protein_posttransmod.ff14SB.xml. This seemed rather error prone.
Another option that seems possible (and which might also benefit from a simple or easier to find example) could be plugging OpenFF into OpenMM's residue generator.
Another option could be LibraryChargeHandler?