: $Id: field.mod,v 1.5 2009/12/24 02:25:27 samn Exp $ VERBATIM #include "misc.h" #define NSW 5 // store into this many ww field vecs static IvocVect* ww[NSW]; static double* wwo[NSW]; static int ixp1; ENDVERBATIM NEURON { POINT_PROCESS FIELD POINTER p1 RANGE fldID } PARAMETER { } ASSIGNED { nsw wwsz p1 fldID } CONSTRUCTOR { VERBATIM { fldID = ifarg(2)?(int)*getarg(2):1; // assign a field ID so can record > 1 field if (fldID>=NSW) { printf("FIELD CONSTRUCTOR WARN: can only store %d ww vecs\n",NSW); hxe();} } ENDVERBATIM } INITIAL { VERBATIM ixp1=0; ENDVERBATIM } :** initwrec(veclist) sets up recording of sim field potential PROCEDURE initwrec () { VERBATIM {int i, k, num, cap; Object* ob; ob = *hoc_objgetarg(1); // list of vectors num = ivoc_list_count(ob); if (num>NSW) { printf("FIELD initwrec() WARN: can only store %d ww vecs\n",NSW); hxe();} nsw=(double)num; for (k=0;kwwo[0][ixp1]) { // time has moved on ixp1++; wwo[0][ixp1]=t; } if (ixp1>=wwsz) { // grow if (wwsz==0) wwsz=1e4; else wwsz*=2; for (k=0;k<(int)nsw;k++) wwo[k]=vector_newsize(ww[k],wwsz); } wwo[(int)fldID][ixp1]+=(v-p1); ENDVERBATIM } PROCEDURE global_fini () { VERBATIM int k; for (k=0;k<(int)nsw;k++) vector_resize(ww[k], ixp1); ENDVERBATIM }