openforcefield / discussions

Contains organisation-wide discussions relating to science, infrastructure, etc.
MIT License
0 stars 0 forks source link

Post translational modifications example/tutorial #17

Closed DNA2RNA closed 1 year ago

DNA2RNA commented 4 years ago

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?

j-wags commented 4 years 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 :-)

DNA2RNA commented 4 years ago

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!

j-wags commented 4 years ago

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_isomorphicisn'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

davidlmobley commented 4 years ago

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.)

DNA2RNA commented 4 years ago

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:

  1. Extract an example residue and post-translational modification into a PDB file
  2. Convert to SMILES code and save the modified residue as a new PDB file
  3. Parameterize the modified residue as a detached, non-polymeric ligand with OpenFF
  4. Serialize the modified residue system to an XML file (this system contains only the modified residue and it is not part of any protein polymer)
  5. Add the parameterized modified residue to a regular protein simulation as a free-floating ligand
  6. Run the simulation to make sure nothing imploded
  7. Compare the AMBER force field XML for a vanilla ASN residue with the parameterized version.

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>
j-wags commented 4 years ago

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:

davidlmobley commented 4 years ago

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.

DNA2RNA commented 4 years ago

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!

j-wags commented 4 years ago

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)

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.

mattwthompson commented 4 years ago

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

DNA2RNA commented 4 years ago

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:

image

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?).

j-wags commented 3 years ago

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.

sncr0 commented 2 years ago

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.

j-wags commented 2 years ago

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.

sncr0 commented 2 years ago

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 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.

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.

mattwthompson commented 2 years ago

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.