"...amoeba/platforms/cuda/src/CudaAmoebaKernelSources.cpp.in" did not exist on "ad4e12035451b108334fe1fdad549d55a4ce4892"
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) ...@@ -164,10 +164,10 @@ ENDIF (NOT CMAKE_CXX_FLAGS_RELEASE)
SET(OPENMM_LIBRARY_NAME OpenMM) SET(OPENMM_LIBRARY_NAME OpenMM)
SET(OPENMM_MAJOR_VERSION 6) SET(OPENMM_MAJOR_VERSION 6)
SET(OPENMM_MINOR_VERSION 2) SET(OPENMM_MINOR_VERSION 3)
SET(OPENMM_BUILD_VERSION 0) 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 # underbar separated list of dotted authors, no spaces or commas
SET(OPENMM_AUTHORS "Peter.Eastman") 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 ...@@ -6,9 +6,9 @@ import sys
from datetime import datetime from datetime import datetime
from optparse import OptionParser 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.""" """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) context.getState(getEnergy=True)
start = datetime.now() start = datetime.now()
context.getIntegrator().step(steps) context.getIntegrator().step(steps)
...@@ -79,11 +79,14 @@ def runOneTest(testName, options): ...@@ -79,11 +79,14 @@ def runOneTest(testName, options):
system = ff.createSystem(pdb.topology, nonbondedMethod=method, nonbondedCutoff=cutoff, constraints=constraints, hydrogenMass=hydrogenMass) system = ff.createSystem(pdb.topology, nonbondedMethod=method, nonbondedCutoff=cutoff, constraints=constraints, hydrogenMass=hydrogenMass)
print('Step Size: %g fs' % dt.value_in_unit(unit.femtoseconds)) print('Step Size: %g fs' % dt.value_in_unit(unit.femtoseconds))
properties = {} properties = {}
initialSteps = 5
if options.device is not None: if options.device is not None:
if platform.getName() == 'CUDA': if platform.getName() == 'CUDA':
properties['CudaDeviceIndex'] = options.device properties['CudaDeviceIndex'] = options.device
elif platform.getName() == 'OpenCL': elif platform.getName() == 'OpenCL':
properties['OpenCLDeviceIndex'] = options.device properties['OpenCLDeviceIndex'] = options.device
if ',' in options.device or ' ' in options.device:
initialSteps = 250
if options.precision is not None: if options.precision is not None:
if platform.getName() == 'CUDA': if platform.getName() == 'CUDA':
properties['CudaPrecision'] = options.precision properties['CudaPrecision'] = options.precision
...@@ -102,7 +105,7 @@ def runOneTest(testName, options): ...@@ -102,7 +105,7 @@ def runOneTest(testName, options):
context.setVelocitiesToTemperature(300*unit.kelvin) context.setVelocitiesToTemperature(300*unit.kelvin)
steps = 20 steps = 20
while True: while True:
time = timeIntegration(context, steps) time = timeIntegration(context, steps, initialSteps)
if time >= 0.5*options.seconds: if time >= 0.5*options.seconds:
break break
if time < 0.5: if time < 0.5:
......
...@@ -83,7 +83,7 @@ typedef StringStringVectorMap::const_iterator StringStringVectorMapCI; ...@@ -83,7 +83,7 @@ typedef StringStringVectorMap::const_iterator StringStringVectorMapCI;
class ValidateOpenMM { class ValidateOpenMM {
public: public:
ValidateOpenMM( void ); ValidateOpenMM();
~ValidateOpenMM(); ~ValidateOpenMM();
// force names // force names
...@@ -166,7 +166,7 @@ public: ...@@ -166,7 +166,7 @@ public:
* @return log * @return log
* *
*/ */
FILE* getLog( ) const; FILE* getLog() const;
/** /**
* *
......
...@@ -41,7 +41,7 @@ typedef MapIntInt::const_iterator MapIntIntCI; ...@@ -41,7 +41,7 @@ typedef MapIntInt::const_iterator MapIntIntCI;
class ForceValidationResult { class ForceValidationResult {
public: public:
ForceValidationResult( const Context& context1, const Context& context2, StringUIntMap& forceNamesMap ); ForceValidationResult(const Context& context1, const Context& context2, StringUIntMap& forceNamesMap);
~ForceValidationResult(); ~ForceValidationResult();
/** /**
...@@ -51,7 +51,7 @@ public: ...@@ -51,7 +51,7 @@ public:
* *
* @throws OpenMMException if energyIndex is not 0 or 1 * @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) * Get array of forces at specified platform index (0 || 1)
...@@ -60,7 +60,7 @@ public: ...@@ -60,7 +60,7 @@ public:
* *
* @throws OpenMMException if forceIndex is not 0 or 1 * @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) * Get array of forces at platform index (0 || 1)
...@@ -69,7 +69,7 @@ public: ...@@ -69,7 +69,7 @@ public:
* *
* @throws OpenMMException if forceIndex is not 0 or 1 * @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 * Get maximum delta in force norm
...@@ -78,7 +78,7 @@ public: ...@@ -78,7 +78,7 @@ public:
* *
* @return max delta in norm of forces * @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 * Get maximum relative delta in force norm
...@@ -87,7 +87,7 @@ public: ...@@ -87,7 +87,7 @@ public:
* *
* @return max relative delta in norm of forces * @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 * Get maximum dot product between forces
...@@ -96,7 +96,7 @@ public: ...@@ -96,7 +96,7 @@ public:
* *
* @return max dot product between forces * @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 * Get name of force associated w/ computed results
...@@ -104,7 +104,7 @@ public: ...@@ -104,7 +104,7 @@ public:
* @return force name(s); if more than one force active in computation, * @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') * 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 * Get platform name
...@@ -115,7 +115,7 @@ public: ...@@ -115,7 +115,7 @@ public:
* *
* @throws OpenMMException if index is not 0 or 1 * @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 * Register index of two entries that differ by a specified tolerance
...@@ -123,46 +123,46 @@ public: ...@@ -123,46 +123,46 @@ public:
* @param index inconsistent index * @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 * 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 * 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 * 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
* *
* @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 * Determine if force norms are valid
* *
* @param tolerance tolerance * @param tolerance tolerance
*/ */
void compareForceNorms( double tolerance ); void compareForceNorms(double tolerance);
/** /**
* Determine if forces are valid * Determine if forces are valid
* *
* @param tolerance tolerance * @param tolerance tolerance
*/ */
void compareForces( double tolerance ); void compareForces(double tolerance);
private: private:
...@@ -193,13 +193,13 @@ private: ...@@ -193,13 +193,13 @@ private:
* Calculate norms of vectors * Calculate norms of vectors
* *
*/ */
void _calculateNorms( void ); void _calculateNorms();
/** /**
* Calculate norms of specified vector * Calculate norms of specified vector
* *
*/ */
void _calculateNormOfForceVector( int forceIndex ); void _calculateNormOfForceVector(int forceIndex);
// stat indices // stat indices
...@@ -216,7 +216,7 @@ private: ...@@ -216,7 +216,7 @@ private:
* Find vector stats * 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 // Class used to compare forces/potential energies on two platforms
...@@ -224,7 +224,7 @@ private: ...@@ -224,7 +224,7 @@ private:
class ValidateOpenMMForces : public ValidateOpenMM { class ValidateOpenMMForces : public ValidateOpenMM {
public: public:
OPENMM_VALIDATE_EXPORT ValidateOpenMMForces( void ); OPENMM_VALIDATE_EXPORT ValidateOpenMMForces();
OPENMM_VALIDATE_EXPORT ~ValidateOpenMMForces(); OPENMM_VALIDATE_EXPORT ~ValidateOpenMMForces();
/** /**
...@@ -236,7 +236,7 @@ public: ...@@ -236,7 +236,7 @@ public:
* *
* @return number of inconsistent entries * @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 * Validate force/energy by comparing the results between the forces/energies computed on two different platforms
...@@ -250,7 +250,7 @@ public: ...@@ -250,7 +250,7 @@ public:
* on the two input platforms * on the two input platforms
*/ */
ForceValidationResult* compareForce(Context& context, std::vector<int>& compareForces, 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 * Compare individual forces by comparing calculations across two platforms (platform associated w/ input context and
...@@ -261,42 +261,42 @@ public: ...@@ -261,42 +261,42 @@ public:
* @param forceValidationResults output vector of ForceValidationResult ptrs (user is responsible for deleting * @param forceValidationResults output vector of ForceValidationResult ptrs (user is responsible for deleting
* individual ForceValidationResult objects) * 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 * Determine if results are consistent
* *
* @param forceValidationResults vector of ForceValidationResult ptrs to check if forces 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 * Get total number of force entries that are inconsistent
* *
* @param forceValidationResults vector of ForceValidationResult ptrs to check if forces are consistent * @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 * Get summary string of results
* *
* @param forceValidationResults vector of ForceValidationResult ptrs * @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 * Set force tolerance
* *
* @param tolerance force tolerance * @param tolerance force tolerance
*/ */
void setForceTolerance( double tolerance ); void setForceTolerance(double tolerance);
/** /**
* Get force tolerance * Get force tolerance
* *
* @return force tolerance * @return force tolerance
*/ */
double getForceTolerance( void ) const; double getForceTolerance() const;
/* /*
* Get force tolerance for specified force * Get force tolerance for specified force
...@@ -307,7 +307,7 @@ public: ...@@ -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 * Get max errors to print in summary string
...@@ -316,7 +316,7 @@ public: ...@@ -316,7 +316,7 @@ public:
* *
* */ * */
int getMaxErrorsToPrint( void ) const; int getMaxErrorsToPrint() const;
/* /*
* Set max errors to print in summary string * Set max errors to print in summary string
...@@ -325,7 +325,7 @@ public: ...@@ -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, ...) * Return true if force is not to be validated (Andersen thermostat, CM motion remover, ...)
...@@ -335,13 +335,13 @@ public: ...@@ -335,13 +335,13 @@ public:
* @return true if force is not currently validated * @return true if force is not currently validated
**/ **/
int isExcludedForce( std::string forceName ) const; int isExcludedForce(std::string forceName) const;
private: private:
// initialize class entries // initialize class entries
void _initialize( void ); void _initialize();
/* /*
* Format output line * Format output line
...@@ -354,9 +354,9 @@ private: ...@@ -354,9 +354,9 @@ private:
* *
* */ * */
std::string _getLine( const std::string& tab, std::string _getLine(const std::string& tab,
const std::string& description, const std::string& description,
const std::string& value ) const; const std::string& value) const;
std::vector<ForceValidationResult*> _forceValidationResults; std::vector<ForceValidationResult*> _forceValidationResults;
......
...@@ -54,7 +54,7 @@ const std::string ValidateOpenMM::CUSTOM_EXTERNAL_FORCE = "CustomExter ...@@ -54,7 +54,7 @@ const std::string ValidateOpenMM::CUSTOM_EXTERNAL_FORCE = "CustomExter
const std::string ValidateOpenMM::CUSTOM_NONBONDED_FORCE = "CustomNonBonded"; const std::string ValidateOpenMM::CUSTOM_NONBONDED_FORCE = "CustomNonBonded";
ValidateOpenMM::ValidateOpenMM( void ) { ValidateOpenMM::ValidateOpenMM() {
_log = NULL; _log = NULL;
...@@ -82,7 +82,7 @@ int ValidateOpenMM::isNanOrInfinity( double number ){ ...@@ -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; 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; return _log;
} }
......
...@@ -68,7 +68,7 @@ ForceValidationResult::ForceValidationResult( const Context& context1, const Con ...@@ -68,7 +68,7 @@ ForceValidationResult::ForceValidationResult( const Context& context1, const Con
ForceValidationResult::~ForceValidationResult( ){ ForceValidationResult::~ForceValidationResult( ){
} }
void ForceValidationResult::_calculateNorms( void ){ void ForceValidationResult::_calculateNorms(){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -195,7 +195,7 @@ std::vector<double> ForceValidationResult::getForceNorms( int forceIndex ) cons ...@@ -195,7 +195,7 @@ std::vector<double> ForceValidationResult::getForceNorms( int forceIndex ) cons
} }
} }
int ForceValidationResult::nansDetected( void ) const { int ForceValidationResult::nansDetected() const {
return _nansDetected; return _nansDetected;
} }
...@@ -203,7 +203,7 @@ void ForceValidationResult::registerInconsistentForceIndex( int index, int value ...@@ -203,7 +203,7 @@ void ForceValidationResult::registerInconsistentForceIndex( int index, int value
_inconsistentForceIndicies[index] = value; _inconsistentForceIndicies[index] = value;
} }
void ForceValidationResult::clearInconsistentForceIndexList( void ){ void ForceValidationResult::clearInconsistentForceIndexList(){
_inconsistentForceIndicies.clear(); _inconsistentForceIndicies.clear();
} }
...@@ -213,7 +213,7 @@ void ForceValidationResult::getInconsistentForceIndexList( std::vector<int>& inc ...@@ -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() ); return static_cast<int>(_inconsistentForceIndicies.size() );
} }
...@@ -329,7 +329,7 @@ double ForceValidationResult::getMaxDotProduct( int* maxIndex ) const { ...@@ -329,7 +329,7 @@ double ForceValidationResult::getMaxDotProduct( int* maxIndex ) const {
return maxDotProduct; return maxDotProduct;
} }
std::string ForceValidationResult::getForceName( void ) const { std::string ForceValidationResult::getForceName() const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -376,7 +376,7 @@ void ForceValidationResult::compareForces( double tolerance ){ ...@@ -376,7 +376,7 @@ void ForceValidationResult::compareForces( double tolerance ){
std::vector<Vec3> forces2 = getForces( 1 ); std::vector<Vec3> forces2 = getForces( 1 );
std::vector<double> forceNorms2 = getForceNorms( 1 ); std::vector<double> forceNorms2 = getForceNorms( 1 );
clearInconsistentForceIndexList( ); clearInconsistentForceIndexList();
for( unsigned int jj = 0; jj < forces1.size(); jj++ ){ for( unsigned int jj = 0; jj < forces1.size(); jj++ ){
if( ValidateOpenMM::isNanOrInfinity( forceNorms1[jj] ) || ValidateOpenMM::isNanOrInfinity( forceNorms2[jj] ) ){ if( ValidateOpenMM::isNanOrInfinity( forceNorms1[jj] ) || ValidateOpenMM::isNanOrInfinity( forceNorms2[jj] ) ){
registerInconsistentForceIndex( jj ); registerInconsistentForceIndex( jj );
...@@ -406,7 +406,7 @@ void ForceValidationResult::compareForceNorms( double tolerance ){ ...@@ -406,7 +406,7 @@ void ForceValidationResult::compareForceNorms( double tolerance ){
std::vector<double> forceNorms0 = getForceNorms( 0 ); std::vector<double> forceNorms0 = getForceNorms( 0 );
std::vector<double> forceNorms1 = getForceNorms( 1 ); std::vector<double> forceNorms1 = getForceNorms( 1 );
clearInconsistentForceIndexList( ); clearInconsistentForceIndexList();
for( unsigned int jj = 0; jj < forceNorms0.size(); jj++ ){ for( unsigned int jj = 0; jj < forceNorms0.size(); jj++ ){
if( ValidateOpenMM::isNanOrInfinity( forceNorms0[jj] ) || ValidateOpenMM::isNanOrInfinity( forceNorms1[jj] ) ){ if( ValidateOpenMM::isNanOrInfinity( forceNorms0[jj] ) || ValidateOpenMM::isNanOrInfinity( forceNorms1[jj] ) ){
registerInconsistentForceIndex( jj ); registerInconsistentForceIndex( jj );
...@@ -420,11 +420,11 @@ void ForceValidationResult::compareForceNorms( double tolerance ){ ...@@ -420,11 +420,11 @@ void ForceValidationResult::compareForceNorms( double tolerance ){
} }
} }
ValidateOpenMMForces::ValidateOpenMMForces( void ) { ValidateOpenMMForces::ValidateOpenMMForces() {
_initialize(); _initialize();
} }
void ValidateOpenMMForces::_initialize( void ){ void ValidateOpenMMForces::_initialize(){
_forceTolerance = 1.0e-02; _forceTolerance = 1.0e-02;
_maxErrorsToPrint = 25; _maxErrorsToPrint = 25;
...@@ -450,7 +450,7 @@ void ValidateOpenMMForces::_initialize( void ){ ...@@ -450,7 +450,7 @@ void ValidateOpenMMForces::_initialize( void ){
_forcesToBeExcluded[ANDERSEN_THERMOSTAT] = 1; _forcesToBeExcluded[ANDERSEN_THERMOSTAT] = 1;
} }
ValidateOpenMMForces::~ValidateOpenMMForces( ){ ValidateOpenMMForces::~ValidateOpenMMForces(){
for( unsigned int ii = 0; ii < _forceValidationResults.size(); ii++ ){ for( unsigned int ii = 0; ii < _forceValidationResults.size(); ii++ ){
delete _forceValidationResults[ii]; delete _forceValidationResults[ii];
...@@ -459,7 +459,7 @@ ValidateOpenMMForces::~ValidateOpenMMForces( ){ ...@@ -459,7 +459,7 @@ ValidateOpenMMForces::~ValidateOpenMMForces( ){
} }
double ValidateOpenMMForces::getForceTolerance( void ) const { double ValidateOpenMMForces::getForceTolerance() const {
return _forceTolerance; return _forceTolerance;
} }
...@@ -706,7 +706,7 @@ double ValidateOpenMMForces::getForceTolerance( const std::string& forceName ) c ...@@ -706,7 +706,7 @@ double ValidateOpenMMForces::getForceTolerance( const std::string& forceName ) c
return _forceTolerance; return _forceTolerance;
} }
int ValidateOpenMMForces::getMaxErrorsToPrint( void ) const { int ValidateOpenMMForces::getMaxErrorsToPrint() const {
return _maxErrorsToPrint; return _maxErrorsToPrint;
} }
......
...@@ -103,11 +103,13 @@ public: ...@@ -103,11 +103,13 @@ public:
* @param includeForce true if forces should be computed * @param includeForce true if forces should be computed
* @param includeEnergy true if potential energy 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 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' * @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 * 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. * 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: ...@@ -157,7 +157,7 @@ public:
* *
* @return number of bonds * @return number of bonds
*/ */
int getNumBonds( void ) const; int getNumBonds() const;
/** /**
* Get the dielectric constant for the solvent. * Get the dielectric constant for the solvent.
...@@ -208,7 +208,7 @@ public: ...@@ -208,7 +208,7 @@ public:
/** /**
* Get Born radius scaling method * Get Born radius scaling method
*/ */
BornRadiusScalingMethod getBornRadiusScalingMethod( void ) const; BornRadiusScalingMethod getBornRadiusScalingMethod() const;
/** /**
* Set Born radius scaling method * Set Born radius scaling method
*/ */
...@@ -216,7 +216,7 @@ public: ...@@ -216,7 +216,7 @@ public:
/** /**
* Get the lower limit factor used in the quintic spline scaling method (typically 0.5-0.8) * 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) * Set the lower limit factor used in the quintic spline scaling method (typically 0.5-0.8)
*/ */
...@@ -224,7 +224,7 @@ public: ...@@ -224,7 +224,7 @@ public:
/** /**
* Get the upper limit used in the quintic spline scaling method, measured in nm (~5.0) * 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) * Set the upper limit used in the quintic spline scaling method, measured in nm (~5.0)
*/ */
......
...@@ -108,6 +108,10 @@ public: ...@@ -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. * 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; 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: private:
State(double time); State(double time);
void setPositions(const std::vector<Vec3>& pos); void setPositions(const std::vector<Vec3>& pos);
......
...@@ -168,6 +168,12 @@ public: ...@@ -168,6 +168,12 @@ public:
* @param distance the required distance between the two particles, measured in nm * @param distance the required distance between the two particles, measured in nm
*/ */
void setConstraintParameters(int index, int particle1, int particle2, double distance); 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 * 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 * "new" operator. The System takes over ownership of it, and deletes the Force when the
...@@ -198,6 +204,13 @@ public: ...@@ -198,6 +204,13 @@ public:
* @param index the index of the Force to get * @param index the index of the Force to get
*/ */
Force& getForce(int index); 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 * 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 * created Context will have its box vectors set to these. They will affect
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for * * Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. * * 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 * * Authors: Peter Eastman *
* Contributors: * * Contributors: *
* * * *
...@@ -109,24 +109,12 @@ public: ...@@ -109,24 +109,12 @@ public:
fvec4 operator|(const fvec4& other) const { fvec4 operator|(const fvec4& other) const {
return (fvec4) (((__m128i)val)|((__m128i)other.val)); return (fvec4) (((__m128i)val)|((__m128i)other.val));
} }
fvec4 operator==(const fvec4& other) const { ivec4 operator==(const fvec4& other) const;
return (val==other.val); ivec4 operator!=(const fvec4& other) const;
} ivec4 operator>(const fvec4& other) const;
fvec4 operator!=(const fvec4& other) const { ivec4 operator<(const fvec4& other) const;
return (val!=other.val); ivec4 operator>=(const fvec4& other) const;
} ivec4 operator<=(const fvec4& other) const;
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);
}
operator ivec4() const; operator ivec4() const;
}; };
...@@ -207,42 +195,42 @@ public: ...@@ -207,42 +195,42 @@ public:
// Conversion operators. // Conversion operators.
inline fvec4::operator ivec4() const { inline ivec4 fvec4::operator==(const fvec4& other) const {
return __builtin_convertvector(val, __m128i); return (__m128i) (val==other.val);
} }
inline ivec4::operator fvec4() const { inline ivec4 fvec4::operator!=(const fvec4& other) const {
return __builtin_convertvector(val, __m128); return (__m128i) (val!=other.val);
} }
// Functions that operate on fvec4s. inline ivec4 fvec4::operator>(const fvec4& other) const {
return (__m128i) (val>other.val);
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]));
} }
static inline fvec4 ceil(const fvec4& v) { inline ivec4 fvec4::operator<(const fvec4& other) const {
return fvec4(std::ceil(v[0]), std::ceil(v[1]), std::ceil(v[2]), std::ceil(v[3])); return (__m128i) (val<other.val);
} }
static inline fvec4 round(const fvec4& v) { inline ivec4 fvec4::operator>=(const fvec4& other) const {
return fvec4(std::round(v[0]), std::round(v[1]), std::round(v[2]), std::round(v[3])); return (__m128i) (val>=other.val);
} }
static inline fvec4 min(const fvec4& v1, const fvec4& v2) { inline ivec4 fvec4::operator<=(const fvec4& other) const {
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])); return (__m128i) (val<=other.val);
} }
static inline fvec4 max(const fvec4& v1, const fvec4& v2) { inline fvec4::operator ivec4() const {
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])); return __builtin_convertvector(val, __m128i);
} }
static inline fvec4 abs(const fvec4& v) { inline ivec4::operator fvec4() const {
return fvec4(std::abs(v[0]), std::abs(v[1]), std::abs(v[2]), std::abs(v[3])); return __builtin_convertvector(val, __m128);
} }
static inline fvec4 sqrt(const fvec4& v) { // Functions that operate on fvec4s.
return fvec4(std::sqrt(v[0]), std::sqrt(v[1]), std::sqrt(v[2]), std::sqrt(v[3]));
static inline fvec4 abs(const fvec4& v) {
return v&(__m128) ivec4(0x7FFFFFFF);
} }
static inline float dot3(const fvec4& v1, const fvec4& v2) { static inline float dot3(const fvec4& v1, const fvec4& v2) {
...@@ -252,7 +240,8 @@ 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) { static inline float dot4(const fvec4& v1, const fvec4& v2) {
fvec4 r = v1*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) { static inline fvec4 cross(const fvec4& v1, const fvec4& v2) {
...@@ -287,7 +276,8 @@ static inline ivec4 abs(const ivec4& v) { ...@@ -287,7 +276,8 @@ static inline ivec4 abs(const ivec4& v) {
} }
static inline bool any(const __m128i& 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. // Mathematical operators involving a scalar and a vector.
...@@ -311,7 +301,49 @@ static inline fvec4 operator/(float v1, const fvec4& v2) { ...@@ -311,7 +301,49 @@ static inline fvec4 operator/(float v1, const fvec4& v2) {
// Operations for blending fvec4s based on an ivec4. // Operations for blending fvec4s based on an ivec4.
static inline fvec4 blend(const fvec4& v1, const fvec4& v2, const __m128i& mask) { 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_*/ #endif /*OPENMM_VECTORIZE_PNACL_H_*/
......
...@@ -143,42 +143,15 @@ State Context::getState(int types, bool enforcePeriodicBox, int groups) const { ...@@ -143,42 +143,15 @@ State Context::getState(int types, bool enforcePeriodicBox, int groups) const {
} }
void Context::setState(const State& state) { 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()); setTime(state.getTime());
Vec3 a, b, c; Vec3 a, b, c;
state.getPeriodicBoxVectors(a, b, c); state.getPeriodicBoxVectors(a, b, c);
setPeriodicBoxVectors(a, b, c); setPeriodicBoxVectors(a, b, c);
if (hasPositions) if ((state.getDataTypes()&State::Positions) != 0)
setPositions(state.getPositions()); setPositions(state.getPositions());
if (hasVelocities) if ((state.getDataTypes()&State::Velocities) != 0)
setVelocities(state.getVelocities()); 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) for (map<string, double>::const_iterator iter = state.getParameters().begin(); iter != state.getParameters().end(); ++iter)
setParameter(iter->first, iter->second); setParameter(iter->first, iter->second);
} }
......
...@@ -260,12 +260,16 @@ double ContextImpl::calcForcesAndEnergy(bool includeForces, bool includeEnergy, ...@@ -260,12 +260,16 @@ double ContextImpl::calcForcesAndEnergy(bool includeForces, bool includeEnergy,
throw OpenMMException("Particle positions have not been set"); throw OpenMMException("Particle positions have not been set");
lastForceGroups = groups; lastForceGroups = groups;
CalcForcesAndEnergyKernel& kernel = initializeForcesKernel.getAs<CalcForcesAndEnergyKernel>(); CalcForcesAndEnergyKernel& kernel = initializeForcesKernel.getAs<CalcForcesAndEnergyKernel>();
while (true) {
double energy = 0.0; double energy = 0.0;
kernel.beginComputation(*this, includeForces, includeEnergy, groups); kernel.beginComputation(*this, includeForces, includeEnergy, groups);
for (int i = 0; i < (int) forceImpls.size(); ++i) for (int i = 0; i < (int) forceImpls.size(); ++i)
energy += forceImpls[i]->calcForcesAndEnergy(*this, includeForces, includeEnergy, groups); energy += forceImpls[i]->calcForcesAndEnergy(*this, includeForces, includeEnergy, groups);
energy += kernel.finishComputation(*this, includeForces, includeEnergy, groups); bool valid = true;
energy += kernel.finishComputation(*this, includeForces, includeEnergy, groups, valid);
if (valid)
return energy; return energy;
}
} }
int ContextImpl::getLastForceGroups() const { int ContextImpl::getLastForceGroups() const {
......
...@@ -77,7 +77,7 @@ void GBVIForce::setCutoffDistance(double distance) { ...@@ -77,7 +77,7 @@ void GBVIForce::setCutoffDistance(double distance) {
cutoffDistance = distance; cutoffDistance = distance;
} }
GBVIForce::BornRadiusScalingMethod GBVIForce::getBornRadiusScalingMethod( void ) const { GBVIForce::BornRadiusScalingMethod GBVIForce::getBornRadiusScalingMethod() const {
return scalingMethod; return scalingMethod;
} }
...@@ -85,7 +85,7 @@ void GBVIForce::setBornRadiusScalingMethod(BornRadiusScalingMethod method) { ...@@ -85,7 +85,7 @@ void GBVIForce::setBornRadiusScalingMethod(BornRadiusScalingMethod method) {
scalingMethod = method; scalingMethod = method;
} }
double GBVIForce::getQuinticLowerLimitFactor( void ) const { double GBVIForce::getQuinticLowerLimitFactor() const {
return quinticLowerLimitFactor; return quinticLowerLimitFactor;
} }
...@@ -93,7 +93,7 @@ void GBVIForce::setQuinticLowerLimitFactor(double inputQuinticLowerLimitFactor ) ...@@ -93,7 +93,7 @@ void GBVIForce::setQuinticLowerLimitFactor(double inputQuinticLowerLimitFactor )
quinticLowerLimitFactor = inputQuinticLowerLimitFactor; quinticLowerLimitFactor = inputQuinticLowerLimitFactor;
} }
double GBVIForce::getQuinticUpperBornRadiusLimit( void ) const { double GBVIForce::getQuinticUpperBornRadiusLimit() const {
return quinticUpperBornRadiusLimit; return quinticUpperBornRadiusLimit;
} }
...@@ -113,7 +113,7 @@ void GBVIForce::setBondParameters( int index, int particle1, int particle2, doub ...@@ -113,7 +113,7 @@ void GBVIForce::setBondParameters( int index, int particle1, int particle2, doub
bonds[index].bondLength = bondLength; bonds[index].bondLength = bondLength;
} }
int GBVIForce::getNumBonds( void ) const { int GBVIForce::getNumBonds() const {
return (int) bonds.size(); return (int) bonds.size();
} }
......
...@@ -145,8 +145,6 @@ int GBVIForceImpl::getBondsFromForces(ContextImpl& context) { ...@@ -145,8 +145,6 @@ int GBVIForceImpl::getBondsFromForces(ContextImpl& context) {
} }
*/ */
#define GBVIDebug 0
void GBVIForceImpl::findScaledRadii( int numberOfParticles, const std::vector<std::vector<int> >& bondIndices, void GBVIForceImpl::findScaledRadii( int numberOfParticles, const std::vector<std::vector<int> >& bondIndices,
const std::vector<double> & bondLengths, std::vector<double> & scaledRadii) const { const std::vector<double> & bondLengths, std::vector<double> & scaledRadii) const {
...@@ -219,26 +217,6 @@ void GBVIForceImpl::findScaledRadii( int numberOfParticles, const std::vector<st ...@@ -219,26 +217,6 @@ void GBVIForceImpl::findScaledRadii( int numberOfParticles, const std::vector<st
if( errors ){ if( errors ){
throw OpenMMException("GBVIForceImpl::findScaledRadii errors -- aborting"); 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) { double GBVIForceImpl::calcForcesAndEnergy(ContextImpl& context, bool includeForces, bool includeEnergy, int groups) {
......
...@@ -76,6 +76,9 @@ const map<string, double>& State::getParameters() const { ...@@ -76,6 +76,9 @@ const map<string, double>& State::getParameters() const {
throw OpenMMException("Invoked getParameters() on a State which does not contain parameters."); throw OpenMMException("Invoked getParameters() on a State which does not contain parameters.");
return parameters; return parameters;
} }
int State::getDataTypes() const {
return types;
}
State::State(double time) : types(0), time(time), ke(0), pe(0) { State::State(double time) : types(0), time(time), ke(0), pe(0) {
} }
State::State() : types(0), time(0.0), 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) { ...@@ -61,10 +61,11 @@ void System::setParticleMass(int index, double mass) {
masses[index] = mass; masses[index] = mass;
} }
void System::setVirtualSite(int index, VirtualSite* virtualSite) { void System::setVirtualSite(int index, VirtualSite* virtualSite) {
if (index >= (int) virtualSites.size()) if (index >= (int) virtualSites.size())
virtualSites.resize(getNumParticles(), NULL); virtualSites.resize(getNumParticles(), NULL);
if (virtualSites[index] != NULL)
delete virtualSites[index];
virtualSites[index] = virtualSite; virtualSites[index] = virtualSite;
} }
...@@ -93,6 +94,11 @@ void System::setConstraintParameters(int index, int particle1, int particle2, do ...@@ -93,6 +94,11 @@ void System::setConstraintParameters(int index, int particle1, int particle2, do
constraints[index].distance = distance; 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 { const Force& System::getForce(int index) const {
ASSERT_VALID_INDEX(index, forces); ASSERT_VALID_INDEX(index, forces);
return *forces[index]; return *forces[index];
...@@ -103,6 +109,12 @@ Force& System::getForce(int index) { ...@@ -103,6 +109,12 @@ Force& System::getForce(int index) {
return *forces[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 { void System::getDefaultPeriodicBoxVectors(Vec3& a, Vec3& b, Vec3& c) const {
a = periodicBoxVectors[0]; a = periodicBoxVectors[0];
b = periodicBoxVectors[1]; b = periodicBoxVectors[1];
......
...@@ -80,11 +80,13 @@ public: ...@@ -80,11 +80,13 @@ public:
* @param includeForce true if forces should be computed * @param includeForce true if forces should be computed
* @param includeEnergy true if potential energy 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 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' * @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 * 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. * 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: private:
CpuPlatform::PlatformData& data; CpuPlatform::PlatformData& data;
Kernel referenceKernel; Kernel referenceKernel;
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include "openmm/internal/ThreadPool.h" #include "openmm/internal/ThreadPool.h"
#include "sfmt/SFMT.h" #include "sfmt/SFMT.h"
// --------------------------------------------------------------------------------------- namespace OpenMM {
class CpuLangevinDynamics : public ReferenceStochasticDynamics { class CpuLangevinDynamics : public ReferenceStochasticDynamics {
public: public:
...@@ -95,6 +95,6 @@ private: ...@@ -95,6 +95,6 @@ private:
OpenMM::RealVec* xPrime; OpenMM::RealVec* xPrime;
}; };
// --------------------------------------------------------------------------------------- } // namespace OpenMM
#endif // __CPU_LANGEVIN_DYNAMICS_H__ #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