summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorEric Messick <ericm@nanorex.com>2008-09-15 17:52:11 +0000
committerEric Messick <ericm@nanorex.com>2008-09-15 17:52:11 +0000
commita18c13f5263522b913ce2e072a9bf42872700539 (patch)
tree30fef287435ee47a5e45901c21b9a45f2d1c1e9a /sim
parent67f22548f66b9ad69e87058d3ae7c359984ccc4b (diff)
downloadnanoengineer-a18c13f5263522b913ce2e072a9bf42872700539.tar.gz
nanoengineer-a18c13f5263522b913ce2e072a9bf42872700539.zip
AMBER atomtype feedback
Diffstat (limited to 'sim')
-rwxr-xr-xsim/src/Makefile155
-rw-r--r--sim/src/amber_patterns.c415
-rw-r--r--sim/src/amber_patterns.h10
-rwxr-xr-xsim/src/globals.c5
-rwxr-xr-xsim/src/globals.h2
-rw-r--r--sim/src/pattern.c52
-rw-r--r--sim/src/pattern.h4
-rwxr-xr-xsim/src/sim.pyx12
-rwxr-xr-xsim/src/simhelp.c4
-rwxr-xr-xsim/src/simulator.h2
10 files changed, 583 insertions, 78 deletions
diff --git a/sim/src/Makefile b/sim/src/Makefile
index a9d210573..789a9f265 100755
--- a/sim/src/Makefile
+++ b/sim/src/Makefile
@@ -67,6 +67,7 @@ endif
COMMONOBJS=\
allocate.o \
+ amber_patterns.o \
dynamics.o \
globals.o \
hashtable.o \
@@ -88,7 +89,7 @@ COMMONOBJS=\
rigid-ode.o \
structcompare.o \
writemovie.o
-
+
ifeq ($(OS),Windows_NT)
COMMONOBJS+= strtok_r.o
endif
@@ -244,129 +245,143 @@ depends: depend
# DO NOT DELETE
allocate.o: allocate.h
+amber_patterns.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h
+amber_patterns.o: minimize.h structcompare.h part.h newtables.h interpolate.h
+amber_patterns.o: readmmp.h readxyz.h printers.h dynamics.h jigs.h
+amber_patterns.o: amber_patterns.h pam5_patterns.h pattern.h potential.h
+amber_patterns.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h
+amber_patterns.o: globals.h
dynamics.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
dynamics.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-dynamics.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-dynamics.o: potential.h minstructure.h writemovie.h rigid.h
-dynamics.o: printGromacsTopology.h globals.h
+dynamics.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+dynamics.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+dynamics.o: rigid.h printGromacsTopology.h globals.h
globals.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
globals.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-globals.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-globals.o: potential.h minstructure.h writemovie.h rigid.h
-globals.o: printGromacsTopology.h globals.h
+globals.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+globals.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+globals.o: rigid.h printGromacsTopology.h globals.h
glviewer.o: allocate.h
hashtable.o: allocate.h hashtable.h
interpolate.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h
interpolate.o: minimize.h structcompare.h part.h newtables.h interpolate.h
interpolate.o: readmmp.h readxyz.h printers.h dynamics.h jigs.h
-interpolate.o: pam5_patterns.h pattern.h potential.h minstructure.h
-interpolate.o: writemovie.h rigid.h printGromacsTopology.h globals.h
+interpolate.o: amber_patterns.h pam5_patterns.h pattern.h potential.h
+interpolate.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h
+interpolate.o: globals.h
jigs.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
jigs.o: structcompare.h part.h newtables.h interpolate.h readmmp.h readxyz.h
-jigs.o: printers.h dynamics.h jigs.h pam5_patterns.h pattern.h potential.h
-jigs.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h globals.h
+jigs.o: printers.h dynamics.h jigs.h amber_patterns.h pam5_patterns.h
+jigs.o: pattern.h potential.h minstructure.h writemovie.h rigid.h
+jigs.o: printGromacsTopology.h globals.h
lin-alg.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
lin-alg.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-lin-alg.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-lin-alg.o: potential.h minstructure.h writemovie.h rigid.h
-lin-alg.o: printGromacsTopology.h globals.h
+lin-alg.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+lin-alg.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+lin-alg.o: rigid.h printGromacsTopology.h globals.h
minimize.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
minimize.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-minimize.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-minimize.o: potential.h minstructure.h writemovie.h rigid.h
-minimize.o: printGromacsTopology.h globals.h
+minimize.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+minimize.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+minimize.o: rigid.h printGromacsTopology.h globals.h
minstructure.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h
minstructure.o: minimize.h structcompare.h part.h newtables.h interpolate.h
minstructure.o: readmmp.h readxyz.h printers.h dynamics.h jigs.h
-minstructure.o: pam5_patterns.h pattern.h potential.h minstructure.h
-minstructure.o: writemovie.h rigid.h printGromacsTopology.h globals.h
+minstructure.o: amber_patterns.h pam5_patterns.h pattern.h potential.h
+minstructure.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h
+minstructure.o: globals.h
newtables.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
newtables.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-newtables.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-newtables.o: potential.h minstructure.h writemovie.h rigid.h
-newtables.o: printGromacsTopology.h globals.h bonds.gen bends.gen
+newtables.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+newtables.o: pam5_patterns.h pattern.h potential.h minstructure.h
+newtables.o: writemovie.h rigid.h printGromacsTopology.h globals.h bonds.gen
+newtables.o: bends.gen
pam5_patterns.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h
pam5_patterns.o: minimize.h structcompare.h part.h newtables.h interpolate.h
pam5_patterns.o: readmmp.h readxyz.h printers.h dynamics.h jigs.h
-pam5_patterns.o: pam5_patterns.h pattern.h potential.h minstructure.h
-pam5_patterns.o: writemovie.h rigid.h printGromacsTopology.h globals.h
+pam5_patterns.o: amber_patterns.h pam5_patterns.h pattern.h potential.h
+pam5_patterns.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h
+pam5_patterns.o: globals.h
part.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
part.o: structcompare.h part.h newtables.h interpolate.h readmmp.h readxyz.h
-part.o: printers.h dynamics.h jigs.h pam5_patterns.h pattern.h potential.h
-part.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h globals.h
+part.o: printers.h dynamics.h jigs.h amber_patterns.h pam5_patterns.h
+part.o: pattern.h potential.h minstructure.h writemovie.h rigid.h
+part.o: printGromacsTopology.h globals.h
pattern.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
pattern.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-pattern.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-pattern.o: potential.h minstructure.h writemovie.h rigid.h
-pattern.o: printGromacsTopology.h globals.h
+pattern.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+pattern.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+pattern.o: rigid.h printGromacsTopology.h globals.h
potential.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
potential.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-potential.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-potential.o: potential.h minstructure.h writemovie.h rigid.h
-potential.o: printGromacsTopology.h globals.h
+potential.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+potential.o: pam5_patterns.h pattern.h potential.h minstructure.h
+potential.o: writemovie.h rigid.h printGromacsTopology.h globals.h
printers.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
printers.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-printers.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-printers.o: potential.h minstructure.h writemovie.h rigid.h
-printers.o: printGromacsTopology.h globals.h
+printers.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+printers.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+printers.o: rigid.h printGromacsTopology.h globals.h
printGromacsTopology.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h
printGromacsTopology.o: minimize.h structcompare.h part.h newtables.h
printGromacsTopology.o: interpolate.h readmmp.h readxyz.h printers.h
-printGromacsTopology.o: dynamics.h jigs.h pam5_patterns.h pattern.h
-printGromacsTopology.o: potential.h minstructure.h writemovie.h rigid.h
-printGromacsTopology.o: printGromacsTopology.h globals.h
+printGromacsTopology.o: dynamics.h jigs.h amber_patterns.h pam5_patterns.h
+printGromacsTopology.o: pattern.h potential.h minstructure.h writemovie.h
+printGromacsTopology.o: rigid.h printGromacsTopology.h globals.h
readers.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
readers.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-readers.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-readers.o: potential.h minstructure.h writemovie.h rigid.h
-readers.o: printGromacsTopology.h globals.h
+readers.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+readers.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+readers.o: rigid.h printGromacsTopology.h globals.h
readmmp.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
readmmp.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-readmmp.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-readmmp.o: potential.h minstructure.h writemovie.h rigid.h
-readmmp.o: printGromacsTopology.h globals.h
+readmmp.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+readmmp.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+readmmp.o: rigid.h printGromacsTopology.h globals.h
readxyz.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
readxyz.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-readxyz.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-readxyz.o: potential.h minstructure.h writemovie.h rigid.h
-readxyz.o: printGromacsTopology.h globals.h
+readxyz.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+readxyz.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+readxyz.o: rigid.h printGromacsTopology.h globals.h
rigid.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
rigid.o: structcompare.h part.h newtables.h interpolate.h readmmp.h readxyz.h
-rigid.o: printers.h dynamics.h jigs.h pam5_patterns.h pattern.h potential.h
-rigid.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h globals.h
-rigid.o: rigid-ode.h
+rigid.o: printers.h dynamics.h jigs.h amber_patterns.h pam5_patterns.h
+rigid.o: pattern.h potential.h minstructure.h writemovie.h rigid.h
+rigid.o: printGromacsTopology.h globals.h rigid-ode.h
rigid-ode.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
rigid-ode.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-rigid-ode.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-rigid-ode.o: potential.h minstructure.h writemovie.h rigid.h
-rigid-ode.o: printGromacsTopology.h globals.h rigid-ode.h
+rigid-ode.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+rigid-ode.o: pam5_patterns.h pattern.h potential.h minstructure.h
+rigid-ode.o: writemovie.h rigid.h printGromacsTopology.h globals.h
+rigid-ode.o: rigid-ode.h
sim.o: simhelp.c simulator.h debug.h lin-alg.h allocate.h hashtable.h
sim.o: minimize.h structcompare.h part.h newtables.h interpolate.h readmmp.h
-sim.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-sim.o: potential.h minstructure.h writemovie.h rigid.h printGromacsTopology.h
-sim.o: globals.h version.h
+sim.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+sim.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+sim.o: rigid.h printGromacsTopology.h globals.h version.h
simhelp.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
simhelp.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-simhelp.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-simhelp.o: potential.h minstructure.h writemovie.h rigid.h
-simhelp.o: printGromacsTopology.h globals.h version.h
+simhelp.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+simhelp.o: pam5_patterns.h pattern.h potential.h minstructure.h writemovie.h
+simhelp.o: rigid.h printGromacsTopology.h globals.h version.h
simulator.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
simulator.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-simulator.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-simulator.o: potential.h minstructure.h writemovie.h rigid.h
-simulator.o: printGromacsTopology.h globals.h version.h
+simulator.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+simulator.o: pam5_patterns.h pattern.h potential.h minstructure.h
+simulator.o: writemovie.h rigid.h printGromacsTopology.h globals.h version.h
simulator.o: debug.h lin-alg.h allocate.h hashtable.h minimize.h
simulator.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-simulator.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h pattern.h
-simulator.o: potential.h minstructure.h writemovie.h rigid.h
-simulator.o: printGromacsTopology.h globals.h
+simulator.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+simulator.o: pam5_patterns.h pattern.h potential.h minstructure.h
+simulator.o: writemovie.h rigid.h printGromacsTopology.h globals.h
structcompare.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h
structcompare.o: minimize.h structcompare.h part.h newtables.h interpolate.h
structcompare.o: readmmp.h readxyz.h printers.h dynamics.h jigs.h
-structcompare.o: pam5_patterns.h pattern.h potential.h minstructure.h
-structcompare.o: writemovie.h rigid.h printGromacsTopology.h globals.h
+structcompare.o: amber_patterns.h pam5_patterns.h pattern.h potential.h
+structcompare.o: minstructure.h writemovie.h rigid.h printGromacsTopology.h
+structcompare.o: globals.h
writemovie.o: simulator.h debug.h lin-alg.h allocate.h hashtable.h minimize.h
writemovie.o: structcompare.h part.h newtables.h interpolate.h readmmp.h
-writemovie.o: readxyz.h printers.h dynamics.h jigs.h pam5_patterns.h
-writemovie.o: pattern.h potential.h minstructure.h writemovie.h rigid.h
-writemovie.o: printGromacsTopology.h globals.h
+writemovie.o: readxyz.h printers.h dynamics.h jigs.h amber_patterns.h
+writemovie.o: pam5_patterns.h pattern.h potential.h minstructure.h
+writemovie.o: writemovie.h rigid.h printGromacsTopology.h globals.h
diff --git a/sim/src/amber_patterns.c b/sim/src/amber_patterns.c
new file mode 100644
index 000000000..440cfdd1b
--- /dev/null
+++ b/sim/src/amber_patterns.c
@@ -0,0 +1,415 @@
+// Copyright 2008 Nanorex, Inc. See LICENSE file for details.
+
+#include "simulator.h"
+
+static char const rcsid[] = "$Id$";
+
+static void
+trace_set_amber_type(struct atom *a, char *type, struct patternMatch *match)
+{
+ char buf[1024];
+
+ sprintf(buf, "# Pattern setType: [%d] %d %s\n", match->sequenceNumber, a->atomID, type);
+ write_traceline(buf);
+}
+
+static void
+set_AMBER_type(struct atom *a, char *type, struct patternMatch *match)
+{
+ if (TypeFeedback) {
+ trace_set_amber_type(a, type, match);
+ }
+}
+
+static void
+amber_match_CT_CA_CZ(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a = p->atoms[match->atomIndices[0]];
+
+ if (a->hybridization == sp3) {
+ set_AMBER_type(a, "CT", match);
+ } else if (a->hybridization == sp2) {
+ set_AMBER_type(a, "CA", match);
+ } else if (a->hybridization == sp) {
+ set_AMBER_type(a, "CZ", match);
+ }
+}
+
+static void
+amber_match_C_star_(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<5; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[5]];
+ if (strcmp(a->type->symbol, "H")) {
+ a = p->atoms[match->atomIndices[2]];
+ set_AMBER_type(a, "C*", match);
+ }
+}
+
+static void
+amber_match_CB(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<9; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[0]];
+ set_AMBER_type(a, "CB", match);
+ a = p->atoms[match->atomIndices[4]];
+ if (!strcmp(a->type->symbol, "C")) {
+ set_AMBER_type(a, "CB", match);
+ }
+}
+
+static void
+amber_match_CC_CR_CV(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<5; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[6]];
+ if (strcmp(a->type->symbol, "H")) {
+ a = p->atoms[match->atomIndices[0]];
+ set_AMBER_type(a, "CC", match);
+ a = p->atoms[match->atomIndices[2]];
+ set_AMBER_type(a, "CR", match);
+ a = p->atoms[match->atomIndices[3]];
+ if (a->num_bonds == 2) {
+ a = p->atoms[match->atomIndices[4]];
+ set_AMBER_type(a, "CV", match);
+ }
+ }
+}
+
+static void
+amber_match_C(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a = p->atoms[match->atomIndices[0]];
+
+ if (a->hybridization == sp2) {
+ set_AMBER_type(a, "C", match);
+ }
+}
+
+static void
+amber_match_CD(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a1 = p->atoms[match->atomIndices[1]];
+ struct atom *a2 = p->atoms[match->atomIndices[2]];
+
+ set_AMBER_type(a1, "CD", match);
+ set_AMBER_type(a2, "CD", match);
+}
+
+static void
+amber_match_CK(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<9; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[2]];
+ set_AMBER_type(a, "CK", match);
+}
+
+static void
+amber_match_CM(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<7; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[7]];
+ if (!strcmp(a->type->symbol, "N") || !strcmp(a->type->symbol, "O")) {
+ a = p->atoms[match->atomIndices[0]];
+ set_AMBER_type(a, "CM", match);
+ a = p->atoms[match->atomIndices[1]];
+ set_AMBER_type(a, "CM", match);
+ }
+
+}
+
+static void
+amber_match_CN(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<9; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[1]];
+ set_AMBER_type(a, "CN", match);
+}
+
+static void
+amber_match_CQ(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<9; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[6]];
+ set_AMBER_type(a, "CQ", match);
+}
+
+static void
+amber_match_CW(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a;
+ int i;
+
+ for (i=0; i<5; i++) {
+ a = p->atoms[match->atomIndices[i]];
+ if (a->hybridization != sp2) {
+ return;
+ }
+ }
+ a = p->atoms[match->atomIndices[6]];
+ if (strcmp(a->type->symbol, "H")) {
+ a = p->atoms[match->atomIndices[1]];
+ if (!strcmp(a->type->symbol, "N") || !strcmp(a->type->symbol, "C")) {
+ a = p->atoms[match->atomIndices[4]];
+ set_AMBER_type(a, "CW", match);
+ }
+ }
+}
+
+static void
+amber_match_CY(struct patternMatch *match)
+{
+ struct part *p = match->p;
+ struct atom *a = p->atoms[match->atomIndices[0]];
+
+ set_AMBER_type(a, "CY", match);
+}
+
+void
+createAMBERPatterns(void)
+{
+ struct compiledPatternTraversal *t[15];
+ struct compiledPatternAtom *a[15];
+
+ a[0] = makePatternAtom(0, "C");
+ t[0] = makeTraversal(a[0], a[0], '1');
+ makePattern("AMBER-CT-CA-CZ", amber_match_CT_CA_CZ, 1, 1, t);
+
+ a[0] = makePatternAtom(0, "N");
+ a[1] = makePatternAtom(1, "C");
+ a[2] = makePatternAtom(2, "C");
+ a[3] = makePatternAtom(3, "C");
+ a[4] = makePatternAtom(4, "C");
+ a[5] = makePatternAtom(5, "Elt"); // not H
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[0], "1ag2");
+ t[5] = makeTraversal(a[2], a[5], '1');
+ makePattern("AMBER-C*", amber_match_C_star_, 6, 6, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "Elt");
+ a[2] = makePatternAtom(2, "Elt");
+ a[3] = makePatternAtom(3, "Elt");
+ a[4] = makePatternAtom(4, "Elt");
+ a[5] = makePatternAtom(5, "Elt");
+ a[6] = makePatternAtom(6, "Elt");
+ a[7] = makePatternAtom(7, "Elt");
+ a[8] = makePatternAtom(8, "Elt");
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[0], "1ag2");
+ t[5] = makeTraversal2(a[0], a[5], "1ag2");
+ t[6] = makeTraversal2(a[5], a[6], "1ag2");
+ t[7] = makeTraversal2(a[6], a[7], "1ag2");
+ t[8] = makeTraversal2(a[7], a[8], "1ag2");
+ t[9] = makeTraversal2(a[8], a[4], "1ag2");
+ makePattern("AMBER-CB", amber_match_CB, 9, 10, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "N");
+ a[2] = makePatternAtom(2, "C");
+ a[3] = makePatternAtom(3, "N");
+ a[4] = makePatternAtom(4, "C");
+ a[5] = makePatternAtom(5, "H");
+ a[6] = makePatternAtom(6, "Elt");
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[0], "1ag2");
+ t[5] = makeTraversal(a[4], a[5], '1');
+ t[6] = makeTraversal(a[0], a[6], '1');
+ makePattern("AMBER-CC-CR-CV", amber_match_CC_CR_CV, 7, 7, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "O");
+ a[2] = makePatternAtom(2, "Elt");
+ t[0] = makeTraversal2(a[0], a[1], "ag2");
+ t[1] = makeTraversal2(a[0], a[2], "1ag");
+ makePattern("AMBER-C", amber_match_C, 3, 2, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "C");
+ a[2] = makePatternAtom(2, "C");
+ a[3] = makePatternAtom(3, "C");
+ t[0] = makeTraversal(a[0], a[1], '2');
+ t[1] = makeTraversal(a[1], a[2], '1');
+ t[2] = makeTraversal(a[2], a[3], '2');
+ makePattern("AMBER-CD", amber_match_CD, 4, 3, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "N");
+ a[2] = makePatternAtom(2, "C");
+ a[3] = makePatternAtom(3, "N");
+ a[4] = makePatternAtom(4, "C");
+ a[5] = makePatternAtom(5, "N");
+ a[6] = makePatternAtom(6, "C");
+ a[7] = makePatternAtom(7, "N");
+ a[8] = makePatternAtom(8, "C");
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[0], "1ag2");
+ t[5] = makeTraversal2(a[0], a[5], "1ag2");
+ t[6] = makeTraversal2(a[5], a[6], "1ag2");
+ t[7] = makeTraversal2(a[6], a[7], "1ag2");
+ t[8] = makeTraversal2(a[7], a[8], "1ag2");
+ t[9] = makeTraversal2(a[8], a[4], "1ag2");
+ makePattern("AMBER-CK", amber_match_CK, 9, 10, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "C");
+ a[2] = makePatternAtom(2, "N");
+ a[3] = makePatternAtom(3, "C");
+ a[4] = makePatternAtom(4, "N");
+ a[5] = makePatternAtom(5, "C");
+ a[6] = makePatternAtom(6, "O");
+ a[7] = makePatternAtom(7, "Elt");
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[5], "1ag2");
+ t[5] = makeTraversal2(a[5], a[0], "1ag2");
+ t[6] = makeTraversal2(a[3], a[6], "ag2");
+ t[7] = makeTraversal2(a[5], a[7], "1ag2");
+ makePattern("AMBER-CM", amber_match_CM, 8, 8, t);
+
+ a[0] = makePatternAtom(0, "N");
+ a[1] = makePatternAtom(1, "C");
+ a[2] = makePatternAtom(2, "C");
+ a[3] = makePatternAtom(3, "C");
+ a[4] = makePatternAtom(4, "C");
+ a[5] = makePatternAtom(5, "C");
+ a[6] = makePatternAtom(6, "C");
+ a[7] = makePatternAtom(7, "C");
+ a[8] = makePatternAtom(8, "C");
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[0], "1ag2");
+ t[5] = makeTraversal2(a[1], a[5], "1ag2");
+ t[6] = makeTraversal2(a[5], a[6], "1ag2");
+ t[7] = makeTraversal2(a[6], a[7], "1ag2");
+ t[8] = makeTraversal2(a[7], a[8], "1ag2");
+ t[9] = makeTraversal2(a[8], a[2], "1ag2");
+ makePattern("AMBER-CN", amber_match_CN, 9, 10, t);
+
+ a[0] = makePatternAtom(0, "N");
+ a[1] = makePatternAtom(1, "C");
+ a[2] = makePatternAtom(2, "C");
+ a[3] = makePatternAtom(3, "N");
+ a[4] = makePatternAtom(4, "C");
+ a[5] = makePatternAtom(5, "N");
+ a[6] = makePatternAtom(6, "C");
+ a[7] = makePatternAtom(7, "N");
+ a[8] = makePatternAtom(8, "C");
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[0], "1ag2");
+ t[5] = makeTraversal2(a[1], a[5], "1ag2");
+ t[6] = makeTraversal2(a[5], a[6], "1ag2");
+ t[7] = makeTraversal2(a[6], a[7], "1ag2");
+ t[8] = makeTraversal2(a[7], a[8], "1ag2");
+ t[9] = makeTraversal2(a[8], a[2], "1ag2");
+ makePattern("AMBER-CQ", amber_match_CQ, 9, 10, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "Elt"); // N or C
+ a[2] = makePatternAtom(2, "C");
+ a[3] = makePatternAtom(3, "N");
+ a[4] = makePatternAtom(4, "C");
+ a[5] = makePatternAtom(5, "H");
+ a[6] = makePatternAtom(6, "Elt"); // not H
+ a[7] = makePatternAtom(7, "H");
+ t[0] = makeTraversal2(a[0], a[1], "1ag2");
+ t[1] = makeTraversal2(a[1], a[2], "1ag2");
+ t[2] = makeTraversal2(a[2], a[3], "1ag2");
+ t[3] = makeTraversal2(a[3], a[4], "1ag2");
+ t[4] = makeTraversal2(a[4], a[0], "1ag2");
+ t[5] = makeTraversal(a[4], a[5], '1');
+ t[6] = makeTraversal(a[0], a[6], '1');
+ t[7] = makeTraversal(a[3], a[7], '1');
+ makePattern("AMBER-CW", amber_match_CW, 8, 8, t);
+
+ a[0] = makePatternAtom(0, "C");
+ a[1] = makePatternAtom(1, "N");
+ t[0] = makeTraversal(a[0], a[1], '3');
+ makePattern("AMBER-CY", amber_match_CY, 2, 1, t);
+}
diff --git a/sim/src/amber_patterns.h b/sim/src/amber_patterns.h
new file mode 100644
index 000000000..858e9c6d0
--- /dev/null
+++ b/sim/src/amber_patterns.h
@@ -0,0 +1,10 @@
+// Copyright 2008 Nanorex, Inc. See LICENSE file for details.
+#ifndef AMBER_PATTERNS_H_INCLUDED
+#define AMBER_PATTERNS_H_INCLUDED
+
+#define RCSID_AMBER_PATTERNS_H "$Id$"
+
+extern void createAMBERPatterns(void);
+
+#endif
+
diff --git a/sim/src/globals.c b/sim/src/globals.c
index 15d91272f..f8ab772ef 100755
--- a/sim/src/globals.c
+++ b/sim/src/globals.c
@@ -57,6 +57,8 @@ double MinimizeThresholdEndMax;
int TimeReversal;
double ThermostatGamma;
double ThermostatG1;
+int UseAMBER;
+int TypeFeedback;
// absolute distance in nm beyond which gromacs will consider vdW
// forces to be exactly zero. If less than zero, user defined tables
@@ -157,6 +159,8 @@ reinit_globals(void)
SimpleMovieForceScale = 1.0;
TimeReversal = 0;
ThermostatGamma = 0.01;
+ UseAMBER = 0;
+ TypeFeedback = 0;
MinimizeThresholdCutoverRMS = 50.0; // pN
MinimizeThresholdCutoverMax = 0.0; // set by constrainGlobals, below
@@ -237,6 +241,7 @@ printGlobals()
write_traceline("# EnableElectrostatic: %d\n", EnableElectrostatic);
write_traceline("# NeighborSearching: %d\n", NeighborSearching);
write_traceline("# ThermostatGamma: %f\n", ThermostatGamma);
+ write_traceline("# UseAMBER: %d\n", UseAMBER);
if (SystemParametersFileName != NULL && LoadedSystemParameters) {
write_traceline("# SystemParametersFileName: %s\n", SystemParametersFileName);
}
diff --git a/sim/src/globals.h b/sim/src/globals.h
index bd8f02ff5..144cbb5fc 100755
--- a/sim/src/globals.h
+++ b/sim/src/globals.h
@@ -50,6 +50,8 @@ extern int NeighborSearching;
extern int TimeReversal;
extern double ThermostatGamma;
extern double ThermostatG1;
+extern int UseAMBER;
+extern int TypeFeedback;
extern int LoadedSystemParameters;
extern char *UserParametersFileName;
diff --git a/sim/src/pattern.c b/sim/src/pattern.c
index 02f4032e9..9c64bbaf1 100644
--- a/sim/src/pattern.c
+++ b/sim/src/pattern.c
@@ -310,6 +310,25 @@ checkForDuplicateMatch(struct patternMatch *match)
return !dup;
}
+static int
+matchBondOrder(char order, struct compiledPatternTraversal *traversal)
+{
+ int i;
+ char matchBondOrder;
+
+ for (i=0; i<4; i++) {
+ matchBondOrder = traversal->bondOrder[i];
+ if (matchBondOrder) {
+ if (matchBondOrder == order) {
+ return 1;
+ }
+ } else {
+ return 0;
+ }
+ }
+ return 0;
+}
+
// Matches one traversal in a compiled pattern. See
// http://www.nanoengineer-1.net/mediawiki/index.php?title=User:Emessick/Molecular_pattern_matching
// for a description of the algorithm. Basically, each traversal
@@ -365,7 +384,7 @@ matchOneTraversal(struct patternMatch *match,
continue;
}
// build list of atoms bonded to a
- if (traversal->bondOrder == '0') {
+ if (traversal->bondOrder[0] == '0') {
// a must not be bonded to b
while ((atomB = matchOneAtom(match,
pattern,
@@ -390,7 +409,7 @@ matchOneTraversal(struct patternMatch *match,
}
for (bondNumber=atomA->num_bonds-1; bondNumber>=0; bondNumber--) {
bond = atomA->bonds[bondNumber];
- if (bond->order == traversal->bondOrder) {
+ if (matchBondOrder(bond->order, traversal)) {
if (atomA == bond->a1) {
atomB = bond->a2;
} else {
@@ -473,9 +492,9 @@ makePatternAtom(int id, char *type)
}
struct compiledPatternTraversal *
-makeTraversal(struct compiledPatternAtom *a,
- struct compiledPatternAtom *b,
- char bondOrder)
+makeTraversal2(struct compiledPatternAtom *a,
+ struct compiledPatternAtom *b,
+ char *bondOrders)
{
struct compiledPatternTraversal *t;
@@ -483,10 +502,25 @@ makeTraversal(struct compiledPatternAtom *a,
allocate(sizeof(struct compiledPatternTraversal));
t->a = a;
t->b = b;
- t->bondOrder = bondOrder;
+ t->bondOrder[0] = bondOrders[0];
+ t->bondOrder[1] = bondOrders[1];
+ t->bondOrder[2] = bondOrders[2];
+ t->bondOrder[3] = bondOrders[3];
return t;
}
+struct compiledPatternTraversal *
+makeTraversal(struct compiledPatternAtom *a,
+ struct compiledPatternAtom *b,
+ char bondOrder)
+{
+ char buf[4];
+
+ buf[0] = bondOrder;
+ buf[1] = '\0';
+ return makeTraversal2(a, b, buf);
+}
+
static int numPatterns;
static struct compiledPattern **allPatterns;
@@ -535,5 +569,9 @@ createPatterns(void)
{
numPatterns = 0;
makeUnmatchableType();
- createPam5Patterns();
+ if (UseAMBER) {
+ createAMBERPatterns();
+ } else {
+ createPam5Patterns();
+ }
}
diff --git a/sim/src/pattern.h b/sim/src/pattern.h
index af2cb4943..e6adb8d7f 100644
--- a/sim/src/pattern.h
+++ b/sim/src/pattern.h
@@ -14,7 +14,7 @@ struct compiledPatternTraversal
{
struct compiledPatternAtom *a;
struct compiledPatternAtom *b;
- char bondOrder;
+ char bondOrder[4];
};
struct patternMatch
@@ -44,6 +44,8 @@ extern int atomIsType(struct atom *a, struct atomType *type);
extern struct compiledPatternAtom *makePatternAtom(int id, char *type);
+extern struct compiledPatternTraversal *makeTraversal2(struct compiledPatternAtom *a, struct compiledPatternAtom *b, char *bondOrders);
+
extern struct compiledPatternTraversal *makeTraversal(struct compiledPatternAtom *a, struct compiledPatternAtom *b, char bondOrder);
extern void makePattern(char *name, void (*matchFunction)(struct patternMatch *match), int numAtoms, int numTraversals, struct compiledPatternTraversal **traversals);
diff --git a/sim/src/sim.pyx b/sim/src/sim.pyx
index 47bb456b5..3b339f719 100755
--- a/sim/src/sim.pyx
+++ b/sim/src/sim.pyx
@@ -48,6 +48,8 @@ cdef extern from "simhelp.c":
int EnableElectrostatic
int NeighborSearching
double ThermostatGamma
+ int UseAMBER
+ int TypeFeedback
char *IDKey
char *BaseFileName
char *InputFileName
@@ -153,6 +155,10 @@ cdef class _Simulator:
return EnableElectrostatic
elif strcmp(key, "NeighborSearching") == 0:
return NeighborSearching
+ elif strcmp(key, "UseAMBER") == 0:
+ return UseAMBER
+ elif strcmp(key, "TypeFeedback") == 0:
+ return TypeFeedback
elif strcmp(key, "ThermostatGamma") == 0:
return ThermostatGamma
elif strcmp(key, "IDKey") == 0:
@@ -269,6 +275,12 @@ cdef class _Simulator:
elif strcmp(key, "NeighborSearching") == 0:
global NeighborSearching
NeighborSearching = value
+ elif strcmp(key, "UseAMBER") == 0:
+ global UseAMBER
+ UseAMBER = value
+ elif strcmp(key, "TypeFeedback") == 0:
+ global TypeFeedback
+ TypeFeedback = value
elif strcmp(key, "ThermostatGamma") == 0:
global ThermostatGamma
ThermostatGamma = value
diff --git a/sim/src/simhelp.c b/sim/src/simhelp.c
index 8a8b322ea..a3503b7bd 100755
--- a/sim/src/simhelp.c
+++ b/sim/src/simhelp.c
@@ -370,6 +370,10 @@ everythingElse(void) // WARNING: this duplicates some code from simulator.c
matchPartToAllPatterns(part);
PYBAIL();
+ if (TypeFeedback) {
+ return finish_python_call(Py_None);
+ }
+
// ##e should print options set before run, but it's too early to do that in this code
if (IterPerFrame <= 0) IterPerFrame = 1;
diff --git a/sim/src/simulator.h b/sim/src/simulator.h
index bd061e25a..0e4810673 100755
--- a/sim/src/simulator.h
+++ b/sim/src/simulator.h
@@ -18,6 +18,7 @@
RCSID_INTERPOLATE_H \
RCSID_READMMP_H \
RCSID_READXYZ_H \
+ RCSID_AMBER_PATTERNS_H \
RCSID_PAM5_PATTERNS_H \
RCSID_PATTERN_H \
RCSID_PRINTERS_H \
@@ -148,6 +149,7 @@
#include "printers.h"
#include "dynamics.h"
#include "jigs.h"
+#include "amber_patterns.h"
#include "pam5_patterns.h"
#include "pattern.h"
#include "potential.h"