diff options
author | Eric Messick <ericm@nanorex.com> | 2008-09-15 17:52:11 +0000 |
---|---|---|
committer | Eric Messick <ericm@nanorex.com> | 2008-09-15 17:52:11 +0000 |
commit | a18c13f5263522b913ce2e072a9bf42872700539 (patch) | |
tree | 30fef287435ee47a5e45901c21b9a45f2d1c1e9a /sim | |
parent | 67f22548f66b9ad69e87058d3ae7c359984ccc4b (diff) | |
download | nanoengineer-a18c13f5263522b913ce2e072a9bf42872700539.tar.gz nanoengineer-a18c13f5263522b913ce2e072a9bf42872700539.zip |
AMBER atomtype feedback
Diffstat (limited to 'sim')
-rwxr-xr-x | sim/src/Makefile | 155 | ||||
-rw-r--r-- | sim/src/amber_patterns.c | 415 | ||||
-rw-r--r-- | sim/src/amber_patterns.h | 10 | ||||
-rwxr-xr-x | sim/src/globals.c | 5 | ||||
-rwxr-xr-x | sim/src/globals.h | 2 | ||||
-rw-r--r-- | sim/src/pattern.c | 52 | ||||
-rw-r--r-- | sim/src/pattern.h | 4 | ||||
-rwxr-xr-x | sim/src/sim.pyx | 12 | ||||
-rwxr-xr-x | sim/src/simhelp.c | 4 | ||||
-rwxr-xr-x | sim/src/simulator.h | 2 |
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" |