Commit eb232608 authored by John Chodera (MSKCC)'s avatar John Chodera (MSKCC)
Browse files

Merge remote-tracking branch 'upstream/master'

parents 62581e9c 7f8c5089
......@@ -164,10 +164,10 @@ ENDIF (NOT CMAKE_CXX_FLAGS_RELEASE)
SET(OPENMM_LIBRARY_NAME OpenMM)
SET(OPENMM_MAJOR_VERSION 6)
SET(OPENMM_MINOR_VERSION 2)
SET(OPENMM_MINOR_VERSION 3)
SET(OPENMM_BUILD_VERSION 0)
SET(OPENMM_COPYRIGHT_YEARS "2008-2014")
SET(OPENMM_COPYRIGHT_YEARS "2008-2015")
# underbar separated list of dotted authors, no spaces or commas
SET(OPENMM_AUTHORS "Peter.Eastman")
......
<Residues>
<Residue abbreviation="ALA" loc="middle" type="protein" tinkerLookupName="Alanine" fullName="Alanine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB1" tinkerLookupName="HB" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="HB1" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="ARG" loc="middle" type="protein" tinkerLookupName="Arginine" fullName="Arginine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD" tinkerLookupName="CD" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="CZ" tinkerLookupName="CZ" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD" bonds="1" />
<Atom name="HD3" tinkerLookupName="HD" bonds="1" />
<Atom name="HE" tinkerLookupName="HE" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="HH11" tinkerLookupName="HH" bonds="1" />
<Atom name="HH12" tinkerLookupName="HH" bonds="1" />
<Atom name="HH21" tinkerLookupName="HH" bonds="1" />
<Atom name="HH22" tinkerLookupName="HH" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="NE" tinkerLookupName="NE" bonds="3" />
<Atom name="NH1" tinkerLookupName="NH" bonds="3" />
<Atom name="NH2" tinkerLookupName="NH" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD" to="HD3" />
<Bond from="CD" to="CG" />
<Bond from="CD" to="NE" />
<Bond from="CD" to="HD2" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
<Bond from="CZ" to="NH1" />
<Bond from="CZ" to="NE" />
<Bond from="CZ" to="NH2" />
<Bond from="H" to="N" />
<Bond from="HE" to="NE" />
<Bond from="HH11" to="NH1" />
<Bond from="HH12" to="NH1" />
<Bond from="HH21" to="NH2" />
<Bond from="HH22" to="NH2" />
</Residue>
<Residue abbreviation="ASN" loc="middle" type="protein" tinkerLookupName="Asparagine" fullName="Asparagine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD21" tinkerLookupName="HD2" bonds="1" />
<Atom name="HD22" tinkerLookupName="HD2" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="ND2" tinkerLookupName="ND2" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OD1" tinkerLookupName="OD1" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CG" to="ND2" />
<Bond from="CG" to="OD1" />
<Bond from="H" to="N" />
<Bond from="HD21" to="ND2" />
<Bond from="HD22" to="ND2" />
</Residue>
<Residue abbreviation="ASP" loc="middle" type="protein" tinkerLookupName="Aspartic Acid" fullName="Aspartic Acid">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OD1" tinkerLookupName="OD" bonds="1" />
<Atom name="OD2" tinkerLookupName="OD" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CG" to="OD2" />
<Bond from="CG" to="OD1" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="ASH" loc="middle" type="protein" tinkerLookupName="Aspartic Acid (COOH)" fullName="Aspartic Acid">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD2" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OD1" tinkerLookupName="OD1" bonds="1" />
<Atom name="OD2" tinkerLookupName="OD2" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CG" to="OD2" />
<Bond from="CG" to="OD1" />
<Bond from="H" to="N" />
<Bond from="HD2" to="OD2" />
</Residue>
<Residue abbreviation="CYS" loc="middle" type="protein" tinkerLookupName="Cysteine (SH)" fullName="Cysteine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HG" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="SG" tinkerLookupName="SG" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="SG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="H" to="N" />
<Bond from="HG" to="SG" />
</Residue>
<Residue abbreviation="CYD" loc="middle" type="protein" tinkerLookupName="Cysteine (S-)" fullName="Cysteine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="SG" tinkerLookupName="SG" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="SG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="CYX" loc="middle" type="protein" tinkerLookupName="Cystine (SS)" fullName="Cystine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="SG" tinkerLookupName="SG" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="SG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="GLN" loc="middle" type="protein" tinkerLookupName="Glutamine" fullName="Glutamine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD" tinkerLookupName="CD" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HE21" tinkerLookupName="HE2" bonds="1" />
<Atom name="HE22" tinkerLookupName="HE2" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="NE2" tinkerLookupName="NE2" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OE1" tinkerLookupName="OE1" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD" to="NE2" />
<Bond from="CD" to="OE1" />
<Bond from="CD" to="CG" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
<Bond from="H" to="N" />
<Bond from="HE21" to="NE2" />
<Bond from="HE22" to="NE2" />
</Residue>
<Residue abbreviation="GLU" loc="middle" type="protein" tinkerLookupName="Glutamic Acid" fullName="Glutamic Acid">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD" tinkerLookupName="CD" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OE1" tinkerLookupName="OE" bonds="1" />
<Atom name="OE2" tinkerLookupName="OE" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD" to="OE2" />
<Bond from="CD" to="OE1" />
<Bond from="CD" to="CG" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="GLH" loc="middle" type="protein" tinkerLookupName="Glutamic Acid (COOH)" fullName="Glutamic Acid">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD" tinkerLookupName="CD" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE2" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OE1" tinkerLookupName="OE1" bonds="1" />
<Atom name="OE2" tinkerLookupName="OE2" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD" to="OE2" />
<Bond from="CD" to="OE1" />
<Bond from="CD" to="CG" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
<Bond from="H" to="N" />
<Bond from="HE2" to="OE2" />
</Residue>
<Residue abbreviation="GLY" loc="middle" type="protein" tinkerLookupName="Glycine" fullName="Glycine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA2" tinkerLookupName="HA" bonds="1" />
<Atom name="HA3" tinkerLookupName="HA" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="HA3" />
<Bond from="CA" to="HA2" />
<Bond from="CA" to="N" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="HIS" loc="middle" type="protein" tinkerLookupName="Histidine (+)" fullName="Histidine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD2" tinkerLookupName="CD2" bonds="3" />
<Atom name="CE1" tinkerLookupName="CE1" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD1" tinkerLookupName="HD1" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD2" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE1" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE2" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="ND1" tinkerLookupName="ND1" bonds="3" />
<Atom name="NE2" tinkerLookupName="NE2" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="NE2" />
<Bond from="CD2" to="HD2" />
<Bond from="CE1" to="ND1" />
<Bond from="CE1" to="NE2" />
<Bond from="CE1" to="HE1" />
<Bond from="CG" to="ND1" />
<Bond from="H" to="N" />
<Bond from="HD1" to="ND1" />
<Bond from="HD2" to="CD2" />
<Bond from="HE2" to="NE2" />
</Residue>
<Residue abbreviation="HID" loc="middle" type="protein" tinkerLookupName="Histidine (HD)" fullName="Histidine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD2" tinkerLookupName="CD2" bonds="3" />
<Atom name="CE1" tinkerLookupName="CE1" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD1" tinkerLookupName="HD1" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD2" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE1" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="ND1" tinkerLookupName="ND1" bonds="3" />
<Atom name="NE2" tinkerLookupName="NE2" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="NE2" />
<Bond from="CD2" to="HD2" />
<Bond from="CE1" to="ND1" />
<Bond from="CE1" to="NE2" />
<Bond from="CE1" to="HE1" />
<Bond from="CG" to="ND1" />
<Bond from="H" to="N" />
<Bond from="HD1" to="ND1" />
</Residue>
<Residue abbreviation="HIE" loc="middle" type="protein" tinkerLookupName="Histidine (HE)" fullName="Histidine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD2" tinkerLookupName="CD2" bonds="3" />
<Atom name="CE1" tinkerLookupName="CE1" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD2" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE1" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE2" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="ND1" tinkerLookupName="ND1" bonds="3" />
<Atom name="NE2" tinkerLookupName="NE2" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="NE2" />
<Bond from="CD2" to="HD2" />
<Bond from="CE1" to="ND1" />
<Bond from="CE1" to="NE2" />
<Bond from="CE1" to="HE1" />
<Bond from="CG" to="ND1" />
<Bond from="H" to="N" />
<Bond from="HE2" to="NE2" />
</Residue>
<Residue abbreviation="HOH" loc="middle" type="AmoebaWater" tinkerLookupName="Water" fullName="Water">
<Atom name="H1" tinkerLookupName="H" bonds="1" />
<Atom name="H2" tinkerLookupName="H" bonds="1" />
<Atom name="O" tinkerLookupName="O" bonds="2" />
<Bond from="O" to="H1" />
<Bond from="O" to="H2" />
</Residue>
<Residue abbreviation="ILE" loc="middle" type="protein" tinkerLookupName="Isoleucine" fullName="Isoleucine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD1" tinkerLookupName="CD" bonds="4" />
<Atom name="CG1" tinkerLookupName="CG1" bonds="4" />
<Atom name="CG2" tinkerLookupName="CG2" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB" tinkerLookupName="HB" bonds="1" />
<Atom name="HD11" tinkerLookupName="HD" bonds="1" />
<Atom name="HD12" tinkerLookupName="HD" bonds="1" />
<Atom name="HD13" tinkerLookupName="HD" bonds="1" />
<Atom name="HG12" tinkerLookupName="HG1" bonds="1" />
<Atom name="HG13" tinkerLookupName="HG1" bonds="1" />
<Atom name="HG21" tinkerLookupName="HG2" bonds="1" />
<Atom name="HG22" tinkerLookupName="HG2" bonds="1" />
<Atom name="HG23" tinkerLookupName="HG2" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG1" />
<Bond from="CB" to="HB" />
<Bond from="CB" to="CG2" />
<Bond from="CD1" to="CG1" />
<Bond from="CD1" to="HD12" />
<Bond from="CD1" to="HD11" />
<Bond from="CD1" to="HD13" />
<Bond from="CG1" to="HG12" />
<Bond from="CG1" to="HG13" />
<Bond from="CG2" to="HG21" />
<Bond from="CG2" to="HG23" />
<Bond from="CG2" to="HG22" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="LEU" loc="middle" type="protein" tinkerLookupName="Leucine" fullName="Leucine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD1" tinkerLookupName="CD1" bonds="4" />
<Atom name="CD2" tinkerLookupName="CD2" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD11" tinkerLookupName="HD1" bonds="1" />
<Atom name="HD12" tinkerLookupName="HD1" bonds="1" />
<Atom name="HD13" tinkerLookupName="HD1" bonds="1" />
<Atom name="HD21" tinkerLookupName="HD2" bonds="1" />
<Atom name="HD22" tinkerLookupName="HD2" bonds="1" />
<Atom name="HD23" tinkerLookupName="HD2" bonds="1" />
<Atom name="HG" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD1" to="HD13" />
<Bond from="CD1" to="HD12" />
<Bond from="CD1" to="HD11" />
<Bond from="CD1" to="CG" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="HD22" />
<Bond from="CD2" to="HD23" />
<Bond from="CD2" to="HD21" />
<Bond from="CG" to="HG" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="LYS" loc="middle" type="protein" tinkerLookupName="Lysine" fullName="Lysine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD" tinkerLookupName="CD" bonds="4" />
<Atom name="CE" tinkerLookupName="CE" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD" bonds="1" />
<Atom name="HD3" tinkerLookupName="HD" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE" bonds="1" />
<Atom name="HE3" tinkerLookupName="HE" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="HZ1" tinkerLookupName="HZ" bonds="1" />
<Atom name="HZ2" tinkerLookupName="HZ" bonds="1" />
<Atom name="HZ3" tinkerLookupName="HZ" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="NZ" tinkerLookupName="NZ" bonds="4" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD" to="HD3" />
<Bond from="CD" to="CG" />
<Bond from="CD" to="HD2" />
<Bond from="CD" to="CE" />
<Bond from="CE" to="NZ" />
<Bond from="CE" to="HE2" />
<Bond from="CE" to="HE3" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
<Bond from="H" to="N" />
<Bond from="HZ1" to="NZ" />
<Bond from="HZ2" to="NZ" />
<Bond from="HZ3" to="NZ" />
</Residue>
<Residue abbreviation="LYD" loc="middle" type="protein" tinkerLookupName="Lysine (NH2)" fullName="Lysine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD" tinkerLookupName="CD" bonds="4" />
<Atom name="CE" tinkerLookupName="CE" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD" bonds="1" />
<Atom name="HD3" tinkerLookupName="HD" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE" bonds="1" />
<Atom name="HE3" tinkerLookupName="HE" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="HZ1" tinkerLookupName="HZ" bonds="1" />
<Atom name="HZ2" tinkerLookupName="HZ" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="NZ" tinkerLookupName="NZ" bonds="4" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD" to="HD3" />
<Bond from="CD" to="CG" />
<Bond from="CD" to="HD2" />
<Bond from="CD" to="CE" />
<Bond from="CE" to="NZ" />
<Bond from="CE" to="HE2" />
<Bond from="CE" to="HE3" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
<Bond from="H" to="N" />
<Bond from="HZ1" to="NZ" />
<Bond from="HZ2" to="NZ" />
</Residue>
<Residue abbreviation="MET" loc="middle" type="protein" tinkerLookupName="Methionine" fullName="Methionine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CE" tinkerLookupName="CE" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE" bonds="1" />
<Atom name="HE3" tinkerLookupName="HE" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="SD" tinkerLookupName="SD" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CE" to="SD" />
<Bond from="CE" to="HE1" />
<Bond from="CE" to="HE2" />
<Bond from="CE" to="HE3" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
<Bond from="CG" to="SD" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="PHE" loc="middle" type="protein" tinkerLookupName="Phenylalanine" fullName="Phenylalanine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD1" tinkerLookupName="CD" bonds="3" />
<Atom name="CD2" tinkerLookupName="CD" bonds="3" />
<Atom name="CE1" tinkerLookupName="CE" bonds="3" />
<Atom name="CE2" tinkerLookupName="CE" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="CZ" tinkerLookupName="CZ" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD1" tinkerLookupName="HD" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE" bonds="1" />
<Atom name="HZ" tinkerLookupName="HZ" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD1" to="CG" />
<Bond from="CD1" to="CE1" />
<Bond from="CD1" to="HD1" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="CE2" />
<Bond from="CD2" to="HD2" />
<Bond from="CE1" to="CZ" />
<Bond from="CE1" to="HE1" />
<Bond from="CE2" to="CZ" />
<Bond from="CE2" to="HE2" />
<Bond from="CZ" to="HZ" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="PRO" loc="middle" type="protein" tinkerLookupName="Proline" fullName="Proline">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD" tinkerLookupName="CD" bonds="4" />
<Atom name="CG" tinkerLookupName="CG" bonds="4" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD" bonds="1" />
<Atom name="HD3" tinkerLookupName="HD" bonds="1" />
<Atom name="HG2" tinkerLookupName="HG" bonds="1" />
<Atom name="HG3" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="4" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD" to="CG" />
<Bond from="CD" to="HD3" />
<Bond from="CD" to="HD2" />
<Bond from="CD" to="N" />
<Bond from="CG" to="HG2" />
<Bond from="CG" to="HG3" />
</Residue>
<Residue abbreviation="SER" loc="middle" type="protein" tinkerLookupName="Serine" fullName="Serine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HG" tinkerLookupName="HG" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OG" tinkerLookupName="OG" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="OG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="H" to="N" />
<Bond from="HG" to="OG" />
</Residue>
<Residue abbreviation="THR" loc="middle" type="protein" tinkerLookupName="Threonine" fullName="Threonine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CG2" tinkerLookupName="CG2" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB" tinkerLookupName="HB" bonds="1" />
<Atom name="HG1" tinkerLookupName="HG1" bonds="1" />
<Atom name="HG21" tinkerLookupName="HG2" bonds="1" />
<Atom name="HG22" tinkerLookupName="HG2" bonds="1" />
<Atom name="HG23" tinkerLookupName="HG2" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OG1" tinkerLookupName="OG1" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="HB" />
<Bond from="CB" to="CG2" />
<Bond from="CB" to="OG1" />
<Bond from="CG2" to="HG21" />
<Bond from="CG2" to="HG23" />
<Bond from="CG2" to="HG22" />
<Bond from="H" to="N" />
<Bond from="HG1" to="OG1" />
</Residue>
<Residue abbreviation="TRP" loc="middle" type="protein" tinkerLookupName="Tryptophan" fullName="Tryptophan">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD1" tinkerLookupName="CD1" bonds="3" />
<Atom name="CD2" tinkerLookupName="CD2" bonds="3" />
<Atom name="CE2" tinkerLookupName="CE2" bonds="3" />
<Atom name="CE3" tinkerLookupName="CE3" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="CH2" tinkerLookupName="CH2" bonds="3" />
<Atom name="CZ2" tinkerLookupName="CZ2" bonds="3" />
<Atom name="CZ3" tinkerLookupName="CZ3" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD1" tinkerLookupName="HD1" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE1" bonds="1" />
<Atom name="HE3" tinkerLookupName="HE3" bonds="1" />
<Atom name="HH2" tinkerLookupName="HH2" bonds="1" />
<Atom name="HZ2" tinkerLookupName="HZ2" bonds="1" />
<Atom name="HZ3" tinkerLookupName="HZ3" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="NE1" tinkerLookupName="NE1" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD1" to="CG" />
<Bond from="CD1" to="HD1" />
<Bond from="CD1" to="NE1" />
<Bond from="CD2" to="CE3" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="CE2" />
<Bond from="CE2" to="CZ2" />
<Bond from="CE2" to="NE1" />
<Bond from="CE3" to="CZ3" />
<Bond from="CE3" to="HE3" />
<Bond from="CH2" to="CZ2" />
<Bond from="CH2" to="HH2" />
<Bond from="CH2" to="CZ3" />
<Bond from="CZ2" to="HZ2" />
<Bond from="CZ3" to="HZ3" />
<Bond from="H" to="N" />
<Bond from="HE1" to="NE1" />
</Residue>
<Residue abbreviation="TYR" loc="middle" type="protein" tinkerLookupName="Tyrosine" fullName="Tyrosine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD1" tinkerLookupName="CD" bonds="3" />
<Atom name="CD2" tinkerLookupName="CD" bonds="3" />
<Atom name="CE1" tinkerLookupName="CE" bonds="3" />
<Atom name="CE2" tinkerLookupName="CE" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="CZ" tinkerLookupName="CZ" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD1" tinkerLookupName="HD" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE" bonds="1" />
<Atom name="HH" tinkerLookupName="HH" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OH" tinkerLookupName="OH" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD1" to="CG" />
<Bond from="CD1" to="CE1" />
<Bond from="CD1" to="HD1" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="CE2" />
<Bond from="CD2" to="HD2" />
<Bond from="CE1" to="CZ" />
<Bond from="CE1" to="HE1" />
<Bond from="CE2" to="CZ" />
<Bond from="CE2" to="HE2" />
<Bond from="CZ" to="OH" />
<Bond from="H" to="N" />
<Bond from="HH" to="OH" />
</Residue>
<Residue abbreviation="TYD" loc="middle" type="protein" tinkerLookupName="Tyrosine (O-)" fullName="Tyrosine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CD1" tinkerLookupName="CD" bonds="3" />
<Atom name="CD2" tinkerLookupName="CD" bonds="3" />
<Atom name="CE1" tinkerLookupName="CE" bonds="3" />
<Atom name="CE2" tinkerLookupName="CE" bonds="3" />
<Atom name="CG" tinkerLookupName="CG" bonds="3" />
<Atom name="CZ" tinkerLookupName="CZ" bonds="3" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB2" tinkerLookupName="HB" bonds="1" />
<Atom name="HB3" tinkerLookupName="HB" bonds="1" />
<Atom name="HD1" tinkerLookupName="HD" bonds="1" />
<Atom name="HD2" tinkerLookupName="HD" bonds="1" />
<Atom name="HE1" tinkerLookupName="HE" bonds="1" />
<Atom name="HE2" tinkerLookupName="HE" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Atom name="OH" tinkerLookupName="OH" bonds="2" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG" />
<Bond from="CB" to="HB3" />
<Bond from="CB" to="HB2" />
<Bond from="CD1" to="CG" />
<Bond from="CD1" to="CE1" />
<Bond from="CD1" to="HD1" />
<Bond from="CD2" to="CG" />
<Bond from="CD2" to="CE2" />
<Bond from="CD2" to="HD2" />
<Bond from="CE1" to="CZ" />
<Bond from="CE1" to="HE1" />
<Bond from="CE2" to="CZ" />
<Bond from="CE2" to="HE2" />
<Bond from="CZ" to="OH" />
<Bond from="H" to="N" />
</Residue>
<Residue abbreviation="VAL" loc="middle" type="protein" tinkerLookupName="Valine" fullName="Valine">
<Atom name="C" tinkerLookupName="C" bonds="3" />
<Atom name="CA" tinkerLookupName="CA" bonds="4" />
<Atom name="CB" tinkerLookupName="CB" bonds="4" />
<Atom name="CG1" tinkerLookupName="CG1" bonds="4" />
<Atom name="CG2" tinkerLookupName="CG2" bonds="4" />
<Atom name="H" tinkerLookupName="HN" bonds="1" />
<Atom name="HA" tinkerLookupName="HA" bonds="1" />
<Atom name="HB" tinkerLookupName="HB" bonds="1" />
<Atom name="HG11" tinkerLookupName="HG1" bonds="1" />
<Atom name="HG12" tinkerLookupName="HG1" bonds="1" />
<Atom name="HG13" tinkerLookupName="HG1" bonds="1" />
<Atom name="HG21" tinkerLookupName="HG2" bonds="1" />
<Atom name="HG22" tinkerLookupName="HG2" bonds="1" />
<Atom name="HG23" tinkerLookupName="HG2" bonds="1" />
<Atom name="N" tinkerLookupName="N" bonds="3" />
<Atom name="O" tinkerLookupName="O" bonds="1" />
<Bond from="C" to="CA" />
<Bond from="C" to="O" />
<Bond from="CA" to="CB" />
<Bond from="CA" to="HA" />
<Bond from="CA" to="N" />
<Bond from="CB" to="CG1" />
<Bond from="CB" to="HB" />
<Bond from="CB" to="CG2" />
<Bond from="CG1" to="HG11" />
<Bond from="CG1" to="HG12" />
<Bond from="CG1" to="HG13" />
<Bond from="CG2" to="HG21" />
<Bond from="CG2" to="HG23" />
<Bond from="CG2" to="HG22" />
<Bond from="H" to="N" />
</Residue>
</Residues>
......@@ -6,9 +6,9 @@ import sys
from datetime import datetime
from optparse import OptionParser
def timeIntegration(context, steps):
def timeIntegration(context, steps, initialSteps):
"""Integrate a Context for a specified number of steps, then return how many seconds it took."""
context.getIntegrator().step(5) # Make sure everything is fully initialized
context.getIntegrator().step(initialSteps) # Make sure everything is fully initialized
context.getState(getEnergy=True)
start = datetime.now()
context.getIntegrator().step(steps)
......@@ -79,11 +79,14 @@ def runOneTest(testName, options):
system = ff.createSystem(pdb.topology, nonbondedMethod=method, nonbondedCutoff=cutoff, constraints=constraints, hydrogenMass=hydrogenMass)
print('Step Size: %g fs' % dt.value_in_unit(unit.femtoseconds))
properties = {}
initialSteps = 5
if options.device is not None:
if platform.getName() == 'CUDA':
properties['CudaDeviceIndex'] = options.device
elif platform.getName() == 'OpenCL':
properties['OpenCLDeviceIndex'] = options.device
if ',' in options.device or ' ' in options.device:
initialSteps = 250
if options.precision is not None:
if platform.getName() == 'CUDA':
properties['CudaPrecision'] = options.precision
......@@ -102,7 +105,7 @@ def runOneTest(testName, options):
context.setVelocitiesToTemperature(300*unit.kelvin)
steps = 20
while True:
time = timeIntegration(context, steps)
time = timeIntegration(context, steps, initialSteps)
if time >= 0.5*options.seconds:
break
if time < 0.5:
......
......@@ -83,7 +83,7 @@ typedef StringStringVectorMap::const_iterator StringStringVectorMapCI;
class ValidateOpenMM {
public:
ValidateOpenMM( void );
ValidateOpenMM();
~ValidateOpenMM();
// force names
......@@ -166,7 +166,7 @@ public:
* @return log
*
*/
FILE* getLog( ) const;
FILE* getLog() const;
/**
*
......
......@@ -41,7 +41,7 @@ typedef MapIntInt::const_iterator MapIntIntCI;
class ForceValidationResult {
public:
ForceValidationResult( const Context& context1, const Context& context2, StringUIntMap& forceNamesMap );
ForceValidationResult(const Context& context1, const Context& context2, StringUIntMap& forceNamesMap);
~ForceValidationResult();
/**
......@@ -51,7 +51,7 @@ public:
*
* @throws OpenMMException if energyIndex is not 0 or 1
*/
double getPotentialEnergy( int energyIndex ) const;
double getPotentialEnergy(int energyIndex) const;
/**
* Get array of forces at specified platform index (0 || 1)
......@@ -60,7 +60,7 @@ public:
*
* @throws OpenMMException if forceIndex is not 0 or 1
*/
std::vector<double> getForceNorms( int forceIndex ) const;
std::vector<double> getForceNorms(int forceIndex) const;
/**
* Get array of forces at platform index (0 || 1)
......@@ -69,7 +69,7 @@ public:
*
* @throws OpenMMException if forceIndex is not 0 or 1
*/
std::vector<Vec3> getForces( int forceIndex ) const;
std::vector<Vec3> getForces(int forceIndex) const;
/**
* Get maximum delta in force norm
......@@ -78,7 +78,7 @@ public:
*
* @return max delta in norm of forces
*/
double getMaxDeltaForceNorm( int* maxIndex = NULL ) const;
double getMaxDeltaForceNorm(int* maxIndex = NULL) const;
/**
* Get maximum relative delta in force norm
......@@ -87,7 +87,7 @@ public:
*
* @return max relative delta in norm of forces
*/
double getMaxRelativeDeltaForceNorm( int* maxIndex = NULL ) const;
double getMaxRelativeDeltaForceNorm(int* maxIndex = NULL) const;
/**
* Get maximum dot product between forces
......@@ -96,7 +96,7 @@ public:
*
* @return max dot product between forces
*/
double getMaxDotProduct( int* maxIndex = NULL ) const;
double getMaxDotProduct(int* maxIndex = NULL) const;
/**
* Get name of force associated w/ computed results
......@@ -104,7 +104,7 @@ public:
* @return force name(s); if more than one force active in computation,
* then names are concatenated and separated by '::' (e.g., 'NB_FORCE::GBSA_OBC_FORCE')
*/
std::string getForceName( void ) const;
std::string getForceName() const;
/**
* Get platform name
......@@ -115,7 +115,7 @@ public:
*
* @throws OpenMMException if index is not 0 or 1
*/
std::string getPlatformName( int index ) const;
std::string getPlatformName(int index) const;
/**
* Register index of two entries that differ by a specified tolerance
......@@ -123,46 +123,46 @@ public:
* @param index inconsistent index
*
*/
void registerInconsistentForceIndex( int index, int value = 1 );
void registerInconsistentForceIndex(int index, int value = 1);
/**
* Clear list of entries that differ by a specified tolerance
*
*/
void clearInconsistentForceIndexList( void );
void clearInconsistentForceIndexList();
/**
* Get list of entries that differ by a specified tolerance
*
*/
void getInconsistentForceIndexList( std::vector<int>& inconsistentIndices ) const;
void getInconsistentForceIndexList(std::vector<int>& inconsistentIndices) const;
/**
* Get number of entries in inconsistent index list
*
*/
int getNumberOfInconsistentForceEntries( void ) const;
int getNumberOfInconsistentForceEntries() const;
/**
* Return true if nans were detected
*
* @return true if nans were detected
*/
int nansDetected( void ) const;
int nansDetected() const;
/**
* Determine if force norms are valid
*
* @param tolerance tolerance
*/
void compareForceNorms( double tolerance );
void compareForceNorms(double tolerance);
/**
* Determine if forces are valid
*
* @param tolerance tolerance
*/
void compareForces( double tolerance );
void compareForces(double tolerance);
private:
......@@ -193,13 +193,13 @@ private:
* Calculate norms of vectors
*
*/
void _calculateNorms( void );
void _calculateNorms();
/**
* Calculate norms of specified vector
*
*/
void _calculateNormOfForceVector( int forceIndex );
void _calculateNormOfForceVector(int forceIndex);
// stat indices
......@@ -216,7 +216,7 @@ private:
* Find vector stats
*
*/
void _findStatsForDouble( const std::vector<double>& array, std::vector<double>& statVector ) const;
void _findStatsForDouble(const std::vector<double>& array, std::vector<double>& statVector) const;
};
// Class used to compare forces/potential energies on two platforms
......@@ -224,7 +224,7 @@ private:
class ValidateOpenMMForces : public ValidateOpenMM {
public:
OPENMM_VALIDATE_EXPORT ValidateOpenMMForces( void );
OPENMM_VALIDATE_EXPORT ValidateOpenMMForces();
OPENMM_VALIDATE_EXPORT ~ValidateOpenMMForces();
/**
......@@ -236,7 +236,7 @@ public:
*
* @return number of inconsistent entries
*/
int OPENMM_VALIDATE_EXPORT compareWithReferencePlatform(Context& context, std::string* summaryString = NULL );
int OPENMM_VALIDATE_EXPORT compareWithReferencePlatform(Context& context, std::string* summaryString = NULL);
/**
* Validate force/energy by comparing the results between the forces/energies computed on two different platforms
......@@ -250,7 +250,7 @@ public:
* on the two input platforms
*/
ForceValidationResult* compareForce(Context& context, std::vector<int>& compareForces,
Platform& platform1, Platform& platform2 ) const;
Platform& platform1, Platform& platform2) const;
/**
* Compare individual forces by comparing calculations across two platforms (platform associated w/ input context and
......@@ -261,42 +261,42 @@ public:
* @param forceValidationResults output vector of ForceValidationResult ptrs (user is responsible for deleting
* individual ForceValidationResult objects)
*/
void compareOpenMMForces(Context& context, Platform& comparisonPlatform, std::vector<ForceValidationResult*>& forceValidationResults ) const;
void compareOpenMMForces(Context& context, Platform& comparisonPlatform, std::vector<ForceValidationResult*>& forceValidationResults) const;
/**
* Determine if results are consistent
*
* @param forceValidationResults vector of ForceValidationResult ptrs to check if forces are consistent
*/
void checkForInconsistentForceEntries( std::vector<ForceValidationResult*>& forceValidationResults ) const;
void checkForInconsistentForceEntries(std::vector<ForceValidationResult*>& forceValidationResults) const;
/**
* Get total number of force entries that are inconsistent
*
* @param forceValidationResults vector of ForceValidationResult ptrs to check if forces are consistent
*/
int getTotalNumberOfInconsistentForceEntries( std::vector<ForceValidationResult*>& forceValidationResults ) const;
int getTotalNumberOfInconsistentForceEntries(std::vector<ForceValidationResult*>& forceValidationResults) const;
/**
* Get summary string of results
*
* @param forceValidationResults vector of ForceValidationResult ptrs
*/
std::string getSummary( std::vector<ForceValidationResult*>& forceValidationResults ) const;
std::string getSummary(std::vector<ForceValidationResult*>& forceValidationResults) const;
/**
* Set force tolerance
*
* @param tolerance force tolerance
*/
void setForceTolerance( double tolerance );
void setForceTolerance(double tolerance);
/**
* Get force tolerance
*
* @return force tolerance
*/
double getForceTolerance( void ) const;
double getForceTolerance() const;
/*
* Get force tolerance for specified force
......@@ -307,7 +307,7 @@ public:
*
* */
double getForceTolerance( const std::string& forceName ) const;
double getForceTolerance(const std::string& forceName) const;
/*
* Get max errors to print in summary string
......@@ -316,7 +316,7 @@ public:
*
* */
int getMaxErrorsToPrint( void ) const;
int getMaxErrorsToPrint() const;
/*
* Set max errors to print in summary string
......@@ -325,7 +325,7 @@ public:
*
* */
void setMaxErrorsToPrint( int maxErrorsToPrint );
void setMaxErrorsToPrint(int maxErrorsToPrint);
/*
* Return true if force is not to be validated (Andersen thermostat, CM motion remover, ...)
......@@ -335,13 +335,13 @@ public:
* @return true if force is not currently validated
**/
int isExcludedForce( std::string forceName ) const;
int isExcludedForce(std::string forceName) const;
private:
// initialize class entries
void _initialize( void );
void _initialize();
/*
* Format output line
......@@ -354,9 +354,9 @@ private:
*
* */
std::string _getLine( const std::string& tab,
const std::string& description,
const std::string& value ) const;
std::string _getLine(const std::string& tab,
const std::string& description,
const std::string& value) const;
std::vector<ForceValidationResult*> _forceValidationResults;
......
......@@ -54,7 +54,7 @@ const std::string ValidateOpenMM::CUSTOM_EXTERNAL_FORCE = "CustomExter
const std::string ValidateOpenMM::CUSTOM_NONBONDED_FORCE = "CustomNonBonded";
ValidateOpenMM::ValidateOpenMM( void ) {
ValidateOpenMM::ValidateOpenMM() {
_log = NULL;
......@@ -82,7 +82,7 @@ int ValidateOpenMM::isNanOrInfinity( double number ){
return (number != number || number == std::numeric_limits<double>::infinity() || number == -std::numeric_limits<double>::infinity()) ? 1 : 0;
}
FILE* ValidateOpenMM::getLog( void ) const {
FILE* ValidateOpenMM::getLog() const {
return _log;
}
......
......@@ -68,7 +68,7 @@ ForceValidationResult::ForceValidationResult( const Context& context1, const Con
ForceValidationResult::~ForceValidationResult( ){
}
void ForceValidationResult::_calculateNorms( void ){
void ForceValidationResult::_calculateNorms(){
// ---------------------------------------------------------------------------------------
......@@ -195,7 +195,7 @@ std::vector<double> ForceValidationResult::getForceNorms( int forceIndex ) cons
}
}
int ForceValidationResult::nansDetected( void ) const {
int ForceValidationResult::nansDetected() const {
return _nansDetected;
}
......@@ -203,7 +203,7 @@ void ForceValidationResult::registerInconsistentForceIndex( int index, int value
_inconsistentForceIndicies[index] = value;
}
void ForceValidationResult::clearInconsistentForceIndexList( void ){
void ForceValidationResult::clearInconsistentForceIndexList(){
_inconsistentForceIndicies.clear();
}
......@@ -213,7 +213,7 @@ void ForceValidationResult::getInconsistentForceIndexList( std::vector<int>& inc
}
}
int ForceValidationResult::getNumberOfInconsistentForceEntries( void ) const {
int ForceValidationResult::getNumberOfInconsistentForceEntries() const {
return static_cast<int>(_inconsistentForceIndicies.size() );
}
......@@ -329,7 +329,7 @@ double ForceValidationResult::getMaxDotProduct( int* maxIndex ) const {
return maxDotProduct;
}
std::string ForceValidationResult::getForceName( void ) const {
std::string ForceValidationResult::getForceName() const {
// ---------------------------------------------------------------------------------------
......@@ -376,7 +376,7 @@ void ForceValidationResult::compareForces( double tolerance ){
std::vector<Vec3> forces2 = getForces( 1 );
std::vector<double> forceNorms2 = getForceNorms( 1 );
clearInconsistentForceIndexList( );
clearInconsistentForceIndexList();
for( unsigned int jj = 0; jj < forces1.size(); jj++ ){
if( ValidateOpenMM::isNanOrInfinity( forceNorms1[jj] ) || ValidateOpenMM::isNanOrInfinity( forceNorms2[jj] ) ){
registerInconsistentForceIndex( jj );
......@@ -406,7 +406,7 @@ void ForceValidationResult::compareForceNorms( double tolerance ){
std::vector<double> forceNorms0 = getForceNorms( 0 );
std::vector<double> forceNorms1 = getForceNorms( 1 );
clearInconsistentForceIndexList( );
clearInconsistentForceIndexList();
for( unsigned int jj = 0; jj < forceNorms0.size(); jj++ ){
if( ValidateOpenMM::isNanOrInfinity( forceNorms0[jj] ) || ValidateOpenMM::isNanOrInfinity( forceNorms1[jj] ) ){
registerInconsistentForceIndex( jj );
......@@ -420,11 +420,11 @@ void ForceValidationResult::compareForceNorms( double tolerance ){
}
}
ValidateOpenMMForces::ValidateOpenMMForces( void ) {
ValidateOpenMMForces::ValidateOpenMMForces() {
_initialize();
}
void ValidateOpenMMForces::_initialize( void ){
void ValidateOpenMMForces::_initialize(){
_forceTolerance = 1.0e-02;
_maxErrorsToPrint = 25;
......@@ -450,7 +450,7 @@ void ValidateOpenMMForces::_initialize( void ){
_forcesToBeExcluded[ANDERSEN_THERMOSTAT] = 1;
}
ValidateOpenMMForces::~ValidateOpenMMForces( ){
ValidateOpenMMForces::~ValidateOpenMMForces(){
for( unsigned int ii = 0; ii < _forceValidationResults.size(); ii++ ){
delete _forceValidationResults[ii];
......@@ -459,7 +459,7 @@ ValidateOpenMMForces::~ValidateOpenMMForces( ){
}
double ValidateOpenMMForces::getForceTolerance( void ) const {
double ValidateOpenMMForces::getForceTolerance() const {
return _forceTolerance;
}
......@@ -706,7 +706,7 @@ double ValidateOpenMMForces::getForceTolerance( const std::string& forceName ) c
return _forceTolerance;
}
int ValidateOpenMMForces::getMaxErrorsToPrint( void ) const {
int ValidateOpenMMForces::getMaxErrorsToPrint() const {
return _maxErrorsToPrint;
}
......
......@@ -103,11 +103,13 @@ public:
* @param includeForce true if forces should be computed
* @param includeEnergy true if potential energy should be computed
* @param groups a set of bit flags for which force groups to include
* @param valid the method may set this to false to indicate the results are invalid and the force/energy
* calculation should be repeated
* @return the potential energy of the system. This value is added to all values returned by ForceImpls'
* calcForcesAndEnergy() methods. That is, each force kernel may <i>either</i> return its contribution to the
* energy directly, <i>or</i> add it to an internal buffer so that it will be included here.
*/
virtual double finishComputation(ContextImpl& context, bool includeForce, bool includeEnergy, int groups) = 0;
virtual double finishComputation(ContextImpl& context, bool includeForce, bool includeEnergy, int groups, bool& valid) = 0;
};
/**
......
......@@ -157,7 +157,7 @@ public:
*
* @return number of bonds
*/
int getNumBonds( void ) const;
int getNumBonds() const;
/**
* Get the dielectric constant for the solvent.
......@@ -208,7 +208,7 @@ public:
/**
* Get Born radius scaling method
*/
BornRadiusScalingMethod getBornRadiusScalingMethod( void ) const;
BornRadiusScalingMethod getBornRadiusScalingMethod() const;
/**
* Set Born radius scaling method
*/
......@@ -216,7 +216,7 @@ public:
/**
* Get the lower limit factor used in the quintic spline scaling method (typically 0.5-0.8)
*/
double getQuinticLowerLimitFactor( void ) const;
double getQuinticLowerLimitFactor() const;
/**
* Set the lower limit factor used in the quintic spline scaling method (typically 0.5-0.8)
*/
......@@ -224,7 +224,7 @@ public:
/**
* Get the upper limit used in the quintic spline scaling method, measured in nm (~5.0)
*/
double getQuinticUpperBornRadiusLimit( void ) const;
double getQuinticUpperBornRadiusLimit() const;
/**
* Set the upper limit used in the quintic spline scaling method, measured in nm (~5.0)
*/
......
......@@ -108,6 +108,10 @@ public:
* Get a map containing the values of all parameters. If this State does not contain parameters, this will throw an exception.
*/
const std::map<std::string, double>& getParameters() const;
/**
* Get which data types are stored in this State. The return value is a sum of DataType flags.
*/
int getDataTypes() const;
private:
State(double time);
void setPositions(const std::vector<Vec3>& pos);
......
......@@ -168,6 +168,12 @@ public:
* @param distance the required distance between the two particles, measured in nm
*/
void setConstraintParameters(int index, int particle1, int particle2, double distance);
/**
* Remove a constraint from the System.
*
* @param index the index of the constraint to remove
*/
void removeConstraint(int index);
/**
* Add a Force to the System. The Force should have been created on the heap with the
* "new" operator. The System takes over ownership of it, and deletes the Force when the
......@@ -198,6 +204,13 @@ public:
* @param index the index of the Force to get
*/
Force& getForce(int index);
/**
* Remove a Force from the System. The memory associated with the removed Force
* object is deleted.
*
* @param index the index of the Force to remove
*/
void removeForce(int index);
/**
* Get the default values of the vectors defining the axes of the periodic box (measured in nm). Any newly
* created Context will have its box vectors set to these. They will affect
......
......@@ -9,7 +9,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2013-2014 Stanford University and the Authors. *
* Portions copyright (c) 2013-2015 Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
......@@ -109,24 +109,12 @@ public:
fvec4 operator|(const fvec4& other) const {
return (fvec4) (((__m128i)val)|((__m128i)other.val));
}
fvec4 operator==(const fvec4& other) const {
return (val==other.val);
}
fvec4 operator!=(const fvec4& other) const {
return (val!=other.val);
}
fvec4 operator>(const fvec4& other) const {
return (val>other.val);
}
fvec4 operator<(const fvec4& other) const {
return (val<other.val);
}
fvec4 operator>=(const fvec4& other) const {
return (val>=other.val);
}
fvec4 operator<=(const fvec4& other) const {
return (val<=other.val);
}
ivec4 operator==(const fvec4& other) const;
ivec4 operator!=(const fvec4& other) const;
ivec4 operator>(const fvec4& other) const;
ivec4 operator<(const fvec4& other) const;
ivec4 operator>=(const fvec4& other) const;
ivec4 operator<=(const fvec4& other) const;
operator ivec4() const;
};
......@@ -207,42 +195,42 @@ public:
// Conversion operators.
inline fvec4::operator ivec4() const {
return __builtin_convertvector(val, __m128i);
inline ivec4 fvec4::operator==(const fvec4& other) const {
return (__m128i) (val==other.val);
}
inline ivec4::operator fvec4() const {
return __builtin_convertvector(val, __m128);
inline ivec4 fvec4::operator!=(const fvec4& other) const {
return (__m128i) (val!=other.val);
}
// Functions that operate on fvec4s.
static inline fvec4 floor(const fvec4& v) {
return fvec4(std::floor(v[0]), std::floor(v[1]), std::floor(v[2]), std::floor(v[3]));
inline ivec4 fvec4::operator>(const fvec4& other) const {
return (__m128i) (val>other.val);
}
static inline fvec4 ceil(const fvec4& v) {
return fvec4(std::ceil(v[0]), std::ceil(v[1]), std::ceil(v[2]), std::ceil(v[3]));
inline ivec4 fvec4::operator<(const fvec4& other) const {
return (__m128i) (val<other.val);
}
static inline fvec4 round(const fvec4& v) {
return fvec4(std::round(v[0]), std::round(v[1]), std::round(v[2]), std::round(v[3]));
inline ivec4 fvec4::operator>=(const fvec4& other) const {
return (__m128i) (val>=other.val);
}
static inline fvec4 min(const fvec4& v1, const fvec4& v2) {
return fvec4(std::min(v1[0], v2[0]), std::min(v1[1], v2[1]), std::min(v1[2], v2[2]), std::min(v1[3], v2[3]));
inline ivec4 fvec4::operator<=(const fvec4& other) const {
return (__m128i) (val<=other.val);
}
static inline fvec4 max(const fvec4& v1, const fvec4& v2) {
return fvec4(std::max(v1[0], v2[0]), std::max(v1[1], v2[1]), std::max(v1[2], v2[2]), std::max(v1[3], v2[3]));
inline fvec4::operator ivec4() const {
return __builtin_convertvector(val, __m128i);
}
static inline fvec4 abs(const fvec4& v) {
return fvec4(std::abs(v[0]), std::abs(v[1]), std::abs(v[2]), std::abs(v[3]));
inline ivec4::operator fvec4() const {
return __builtin_convertvector(val, __m128);
}
static inline fvec4 sqrt(const fvec4& v) {
return fvec4(std::sqrt(v[0]), std::sqrt(v[1]), std::sqrt(v[2]), std::sqrt(v[3]));
// Functions that operate on fvec4s.
static inline fvec4 abs(const fvec4& v) {
return v&(__m128) ivec4(0x7FFFFFFF);
}
static inline float dot3(const fvec4& v1, const fvec4& v2) {
......@@ -252,7 +240,8 @@ static inline float dot3(const fvec4& v1, const fvec4& v2) {
static inline float dot4(const fvec4& v1, const fvec4& v2) {
fvec4 r = v1*v2;
return r[0]+r[1]+r[2]+r[3];
fvec4 temp = __builtin_shufflevector(r.val, r.val, 0, 1, -1, -1)+__builtin_shufflevector(r.val, r.val, 2, 3, -1, -1);
return temp[0]+temp[1];
}
static inline fvec4 cross(const fvec4& v1, const fvec4& v2) {
......@@ -287,7 +276,8 @@ static inline ivec4 abs(const ivec4& v) {
}
static inline bool any(const __m128i& v) {
return (v[0] || v[1] || v[2] || v[3]);
ivec4 temp = __builtin_shufflevector(v, v, 0, 1, -1, -1) | __builtin_shufflevector(v, v, 2, 3, -1, -1);
return (temp[0] || temp[1]);
}
// Mathematical operators involving a scalar and a vector.
......@@ -311,7 +301,49 @@ static inline fvec4 operator/(float v1, const fvec4& v2) {
// Operations for blending fvec4s based on an ivec4.
static inline fvec4 blend(const fvec4& v1, const fvec4& v2, const __m128i& mask) {
return fvec4(mask[0] ? v2[0] : v1[0], mask[1] ? v2[1] : v1[1], mask[2] ? v2[2] : v1[2], mask[3] ? v2[3] : v1[3]);
return (__m128) ((mask&(__m128i)v2) + ((ivec4(0xFFFFFFFF)-ivec4(mask))&(__m128i)v1));
}
// These are at the end since they involve other functions defined above.
static inline fvec4 min(const fvec4& v1, const fvec4& v2) {
return blend(v1, v2, v1 > v2);
}
static inline fvec4 max(const fvec4& v1, const fvec4& v2) {
return blend(v1, v2, v1 < v2);
}
static inline fvec4 round(const fvec4& v) {
fvec4 shift(0x1.0p23f);
fvec4 absResult = (abs(v)+shift)-shift;
return (__m128) ((ivec4(0x80000000)&(__m128i)v) + (ivec4(0x7FFFFFFF)&(__m128i)absResult));
}
static inline fvec4 floor(const fvec4& v) {
fvec4 truncated = __builtin_convertvector(__builtin_convertvector(v.val, __m128i), __m128);
return truncated + blend(0.0f, -1.0f, truncated>v);
}
static inline fvec4 ceil(const fvec4& v) {
fvec4 truncated = __builtin_convertvector(__builtin_convertvector(v.val, __m128i), __m128);
return truncated + blend(0.0f, 1.0f, truncated<v);
}
static inline fvec4 sqrt(const fvec4& v) {
// Initial estimate of rsqrt().
ivec4 i = (__m128i) v;
i = ivec4(0x5f375a86)-ivec4(i.val>>ivec4(1).val);
fvec4 y = (__m128) i;
// Perform three iterations of Newton refinement.
fvec4 x2 = 0.5f*v;
y *= 1.5f-x2*y*y;
y *= 1.5f-x2*y*y;
y *= 1.5f-x2*y*y;
return y*v;
}
#endif /*OPENMM_VECTORIZE_PNACL_H_*/
......
......@@ -143,42 +143,15 @@ State Context::getState(int types, bool enforcePeriodicBox, int groups) const {
}
void Context::setState(const State& state) {
// Determine what information the state contains.
bool hasPositions = false, hasVelocities = false, hasParameters = false;
try {
state.getPositions();
hasPositions = true;
}
catch (OpenMMException& ex) {
// The State does not include positions.
}
try {
state.getVelocities();
hasVelocities = true;
}
catch (OpenMMException& ex) {
// The State does not include velocities.
}
try {
state.getParameters();
hasParameters = true;
}
catch (OpenMMException& ex) {
// The State does not include parameters.
}
// Copy it over.
setTime(state.getTime());
Vec3 a, b, c;
state.getPeriodicBoxVectors(a, b, c);
setPeriodicBoxVectors(a, b, c);
if (hasPositions)
if ((state.getDataTypes()&State::Positions) != 0)
setPositions(state.getPositions());
if (hasVelocities)
if ((state.getDataTypes()&State::Velocities) != 0)
setVelocities(state.getVelocities());
if (hasParameters)
if ((state.getDataTypes()&State::Parameters) != 0)
for (map<string, double>::const_iterator iter = state.getParameters().begin(); iter != state.getParameters().end(); ++iter)
setParameter(iter->first, iter->second);
}
......
......@@ -260,12 +260,16 @@ double ContextImpl::calcForcesAndEnergy(bool includeForces, bool includeEnergy,
throw OpenMMException("Particle positions have not been set");
lastForceGroups = groups;
CalcForcesAndEnergyKernel& kernel = initializeForcesKernel.getAs<CalcForcesAndEnergyKernel>();
double energy = 0.0;
kernel.beginComputation(*this, includeForces, includeEnergy, groups);
for (int i = 0; i < (int) forceImpls.size(); ++i)
energy += forceImpls[i]->calcForcesAndEnergy(*this, includeForces, includeEnergy, groups);
energy += kernel.finishComputation(*this, includeForces, includeEnergy, groups);
return energy;
while (true) {
double energy = 0.0;
kernel.beginComputation(*this, includeForces, includeEnergy, groups);
for (int i = 0; i < (int) forceImpls.size(); ++i)
energy += forceImpls[i]->calcForcesAndEnergy(*this, includeForces, includeEnergy, groups);
bool valid = true;
energy += kernel.finishComputation(*this, includeForces, includeEnergy, groups, valid);
if (valid)
return energy;
}
}
int ContextImpl::getLastForceGroups() const {
......
......@@ -77,7 +77,7 @@ void GBVIForce::setCutoffDistance(double distance) {
cutoffDistance = distance;
}
GBVIForce::BornRadiusScalingMethod GBVIForce::getBornRadiusScalingMethod( void ) const {
GBVIForce::BornRadiusScalingMethod GBVIForce::getBornRadiusScalingMethod() const {
return scalingMethod;
}
......@@ -85,7 +85,7 @@ void GBVIForce::setBornRadiusScalingMethod(BornRadiusScalingMethod method) {
scalingMethod = method;
}
double GBVIForce::getQuinticLowerLimitFactor( void ) const {
double GBVIForce::getQuinticLowerLimitFactor() const {
return quinticLowerLimitFactor;
}
......@@ -93,7 +93,7 @@ void GBVIForce::setQuinticLowerLimitFactor(double inputQuinticLowerLimitFactor )
quinticLowerLimitFactor = inputQuinticLowerLimitFactor;
}
double GBVIForce::getQuinticUpperBornRadiusLimit( void ) const {
double GBVIForce::getQuinticUpperBornRadiusLimit() const {
return quinticUpperBornRadiusLimit;
}
......@@ -113,7 +113,7 @@ void GBVIForce::setBondParameters( int index, int particle1, int particle2, doub
bonds[index].bondLength = bondLength;
}
int GBVIForce::getNumBonds( void ) const {
int GBVIForce::getNumBonds() const {
return (int) bonds.size();
}
......
......@@ -145,8 +145,6 @@ int GBVIForceImpl::getBondsFromForces(ContextImpl& context) {
}
*/
#define GBVIDebug 0
void GBVIForceImpl::findScaledRadii( int numberOfParticles, const std::vector<std::vector<int> >& bondIndices,
const std::vector<double> & bondLengths, std::vector<double> & scaledRadii) const {
......@@ -219,26 +217,6 @@ void GBVIForceImpl::findScaledRadii( int numberOfParticles, const std::vector<st
if( errors ){
throw OpenMMException("GBVIForceImpl::findScaledRadii errors -- aborting");
}
#if GBVIDebug
(void) fprintf( stderr, " R q gamma scaled radii no. bnds\n" );
double totalQ = 0.0;
for( int i = 0; i < (int) scaledRadii.size(); i++ ){
double charge;
double gamma;
double radiusI;
owner.getParticleParameters(i, charge, radiusI, gamma);
totalQ += charge;
(void) fprintf( stderr, "%4d %14.5e %14.5e %14.5e %14.5e %d\n", i, radiusI, charge, gamma, scaledRadii[i], (int) bonded12[i].size() );
}
(void) fprintf( stderr, "Total charge=%e\n", totalQ );
(void) fflush( stderr );
#endif
#undef GBVIDebug
}
double GBVIForceImpl::calcForcesAndEnergy(ContextImpl& context, bool includeForces, bool includeEnergy, int groups) {
......
......@@ -76,6 +76,9 @@ const map<string, double>& State::getParameters() const {
throw OpenMMException("Invoked getParameters() on a State which does not contain parameters.");
return parameters;
}
int State::getDataTypes() const {
return types;
}
State::State(double time) : types(0), time(time), ke(0), pe(0) {
}
State::State() : types(0), time(0.0), ke(0), pe(0) {
......
......@@ -61,10 +61,11 @@ void System::setParticleMass(int index, double mass) {
masses[index] = mass;
}
void System::setVirtualSite(int index, VirtualSite* virtualSite) {
if (index >= (int) virtualSites.size())
virtualSites.resize(getNumParticles(), NULL);
if (virtualSites[index] != NULL)
delete virtualSites[index];
virtualSites[index] = virtualSite;
}
......@@ -93,6 +94,11 @@ void System::setConstraintParameters(int index, int particle1, int particle2, do
constraints[index].distance = distance;
}
void System::removeConstraint(int index) {
ASSERT_VALID_INDEX(index, constraints);
constraints.erase(constraints.begin()+index);
}
const Force& System::getForce(int index) const {
ASSERT_VALID_INDEX(index, forces);
return *forces[index];
......@@ -103,6 +109,12 @@ Force& System::getForce(int index) {
return *forces[index];
}
void System::removeForce(int index) {
ASSERT_VALID_INDEX(index, forces);
delete forces[index];
forces.erase(forces.begin()+index);
}
void System::getDefaultPeriodicBoxVectors(Vec3& a, Vec3& b, Vec3& c) const {
a = periodicBoxVectors[0];
b = periodicBoxVectors[1];
......
......@@ -80,11 +80,13 @@ public:
* @param includeForce true if forces should be computed
* @param includeEnergy true if potential energy should be computed
* @param groups a set of bit flags for which force groups to include
* @param valid the method may set this to false to indicate the results are invalid and the force/energy
* calculation should be repeated
* @return the potential energy of the system. This value is added to all values returned by ForceImpls'
* calcForcesAndEnergy() methods. That is, each force kernel may <i>either</i> return its contribution to the
* energy directly, <i>or</i> add it to an internal buffer so that it will be included here.
*/
double finishComputation(ContextImpl& context, bool includeForce, bool includeEnergy, int groups);
double finishComputation(ContextImpl& context, bool includeForce, bool includeEnergy, int groups, bool& valid);
private:
CpuPlatform::PlatformData& data;
Kernel referenceKernel;
......
......@@ -31,7 +31,7 @@
#include "openmm/internal/ThreadPool.h"
#include "sfmt/SFMT.h"
// ---------------------------------------------------------------------------------------
namespace OpenMM {
class CpuLangevinDynamics : public ReferenceStochasticDynamics {
public:
......@@ -95,6 +95,6 @@ private:
OpenMM::RealVec* xPrime;
};
// ---------------------------------------------------------------------------------------
} // namespace OpenMM
#endif // __CPU_LANGEVIN_DYNAMICS_H__
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment