1 #include <../../nrnconf.h> 20 #include <InterViews/glyph.h> 21 #include <InterViews/hit.h> 22 #include <InterViews/event.h> 23 #include <InterViews/color.h> 24 #include <InterViews/brush.h> 25 #include <InterViews/window.h> 26 #include <InterViews/printer.h> 27 #include <InterViews/label.h> 28 #include <InterViews/font.h> 29 #include <InterViews/background.h> 30 #include <InterViews/style.h> 33 #include <IV-look/kit.h> 40 extern void exit(
int status);
57 #define M_PI 3.14159265358979323846 61 #define BrainDamaged 0 //The Sun CC compiler but it doesn't hurt to leave it in 63 #define FWrite(arg1,arg2,arg3,arg4) if (fwrite((arg1),arg2,arg3,arg4) != arg3) { hoc_execerror("fwrite error", 0); } 64 #define FRead(arg1,arg2,arg3,arg4) if (fread((arg1),arg2,arg3,arg4) != arg3) { hoc_execerror("fread error", 0); } 66 #define FWrite(arg1,arg2,arg3,arg4) if (fwrite(arg1,arg2,arg3,arg4) != arg3){} 67 #define FRead(arg1,arg2,arg3,arg4) if (fread(arg1,arg2,arg3,arg4) != arg3) {} 98 #define BYTEHEADER int _II__; char *_IN__; char _OUT__[16]; int BYTESWAP_FLAG=0; 99 #define BYTESWAP(_X__,_TYPE__) \ 100 if (BYTESWAP_FLAG == 1) { \ 101 _IN__ = (char *) &(_X__); \ 102 for (_II__=0;_II__<sizeof(_TYPE__);_II__++) { \ 103 _OUT__[_II__] = _IN__[sizeof(_TYPE__)-_II__-1]; } \ 104 (_X__) = *((_TYPE__ *) &_OUT__); \ 124 Object** (*nrnpy_vec_to_python_p_)(
void*);
141 #define MAX_FIT_PARAMS 20 143 #define TWO_BYTE_HIGH 65535. 144 #define ONE_BYTE_HIGH 255. 145 #define ONE_BYTE_HALF 128. 150 int cmpfcn(
double a,
double b) {
return ((a) <= (b))? (((a) == (b))? 0 : -1) : 1; }
183 label_ =
new char[strlen(label) + 1];
196 return (
const char**)&x->label_;
223 virtual ~GraphMarkItem(){};
233 double fill_value = 0.;
240 vec =
new Vect(n,fill_value, o);
245 vec = (*nrnpy_vec_from_python_p_)(
new Vect(0, 0, o));
248 vec =
new Vect(0, 0, o);
280 #if !defined(USEMATRIX) || USEMATRIX == 0 281 #include "../windll/dll.h" 284 void load_ocmatrix() {
285 struct DLL* dll =
NULL;
295 printf(
"No Matrix class.\n");
317 hoc_execerror(name,
" already a method in the Vector class");
321 #define PUBLIC_TYPE 1 334 if (!ob || ob->ctemplate != svec_->
u.
ctemplate) {
342 if (!ob || ob->ctemplate != svec_->
u.
ctemplate) {
375 int x_max = vp->size()-1;
383 s = (
void*)(&vp->elem(start));
384 const char* x = (
const char*)s;
395 return (
double)fwrite(x,
sizeof(
double),n,fp);
421 if (n > 0)
switch (type) {
425 short *xs = (
short *)malloc(n * (
unsigned)
sizeof(short));
426 FRead(xs,
sizeof(
short),n,fp);
428 vp->elem(i) = double(xs[i]);
435 FRead(&(vp->elem(0)),
sizeof(
double),
n,
fp);
440 float *xf = (
float *)malloc(n * (
unsigned)
sizeof(float));
441 FRead(xf,
sizeof(
float),n,fp);
443 vp->elem(i) = double(xf[i]);
452 unsigned short *xi = (
unsigned short *)malloc(n * (
unsigned)
sizeof(
unsigned short));
453 FRead(xi,
sizeof(
unsigned short),n,fp);
455 vp->elem(i) = double(xi[i]);
463 char *
xc = (
char *)malloc(n * (
unsigned)
sizeof(char));
464 FRead(xc,
sizeof(
char),n,fp);
466 vp->elem(i) = double(xc[i]);
490 FWrite(&n,
sizeof(
int),1,fp);
497 FWrite(&type,
sizeof(
int),1,fp);
504 double min,
max, r,sf,sub,intermed;
509 int* xi = (
int *)malloc(n *
sizeof(
int));
511 xi[
i] = (
int)(vp->elem(i));
513 FWrite(xi,
sizeof(
int),n,fp);
520 s = (
void*)(&(vp->elem(0)));
522 FWrite(x,
sizeof(
double),n,fp);
528 float* xf = (
float *)malloc(n * (
unsigned)
sizeof(float));
530 xf[
i] = float(vp->elem(i));
532 FWrite(xf,
sizeof(
float),n,fp);
540 auto minmax = std::minmax_element(vp->begin(), vp->end());
542 max = *minmax.second;
549 unsigned short* xi = (
unsigned short *)malloc(n * (
unsigned)
sizeof(
unsigned short));
551 intermed = (vp->elem(i)-
min)*sf;
552 xi[
i] = (
unsigned short)intermed;
557 FWrite(&sf,
sizeof(
double),1,fp);
558 FWrite(&min,
sizeof(
double),1,fp);
560 FWrite(x,
sizeof(
unsigned short),n,fp);
568 auto minmax = std::minmax_element(vp->begin(), vp->end());
570 max = *minmax.second;
578 char*
xc = (
char *)malloc(n * (
unsigned)
sizeof(char));
580 xc[
i] = char(((vp->elem(i)-
min)*sf)-sub);
585 FWrite(&sf,
sizeof(
double),1,fp);
586 FWrite(&min,
sizeof(
double),1,fp);
587 FWrite(x,
sizeof(
char),n,fp);
599 void*
s = (
void*)(vp->data());
613 FRead(&n,
sizeof(
int),1,fp);
616 FRead(&type,
sizeof(
int),1,fp);
620 if (type < 1 || type > 5) {
628 if (type < 1 || type > 5) {
return 0.;}
629 if (vp->size() !=
n) vp->resize(n);
642 int *xi = (
int *)malloc(n *
sizeof(
int));
643 FRead(xi,
sizeof(
int),n,fp);
646 vp->elem(i) = double(xi[i]);
653 FRead(&(vp->elem(0)),
sizeof(
double),
n,
fp);
654 if (BYTESWAP_FLAG == 1) {
655 for (i=0;i<
n;++
i) {
BYTESWAP(vp->elem(i),double) }
661 float *xf = (
float *)malloc(n * (
unsigned)
sizeof(float));
662 FRead(xf,
sizeof(
float),n,fp);
665 vp->elem(i) = double(xf[i]);
673 FRead(&sf,
sizeof(
double),1,fp);
674 FRead(&min,
sizeof(
double),1,fp);
678 unsigned short *xi = (
unsigned short *)malloc(n * (
unsigned)
sizeof(
unsigned short));
679 FRead(xi,
sizeof(
unsigned short),n,fp);
682 vp->elem(i) = double(xi[i]/sf +min);
690 FRead(&sf,
sizeof(
double),1,fp);
691 FRead(&min,
sizeof(
double),1,fp);
694 char *
xc = (
char *)malloc(n * (
unsigned)
sizeof(char));
695 FRead(xc,
sizeof(
char),n,fp);
698 vp->elem(i) = double((xc[i]+add)/sf +min);
711 int top = x->size()-1;
715 const char *
format =
"%g\t";
717 int extra_newline = 1;
733 if (
ifarg(next_arg)) {
739 for (
int i=start;
i<=
end;
i++) {
744 for (
int i=start;
i<=
end;
i++) {
746 if (extra_newline && !((
i-start+1)%5)){
Printf(
"\n");}
748 if(extra_newline) {
Printf(
"\n");}
751 return double(end-start+1);
771 }
else if (
ifarg(3)) {
774 }
else if (
ifarg(2)) {
789 while((n < 0 || i<n) && ! f->
eof()) {
813 if (x->size() !=
i) x->resize(i);
874 hoc_execerror(
"Vector.record:",
"A number was provided instead of a pointer.\nDid you forget an _ref_ (Python) or an & (HOC)?");
878 return vp->temp_objvar();
884 return vp->temp_objvar();
894 double* y = vp->data();
909 }
else if (
narg() == 4) {
920 for (i=0; i <
n; ++
i) gv->
add(vp2->elem(i), y +
i);
923 double interval = *
getarg(2);
924 for (i=0; i <
n; ++
i) gv->
add(i * interval, y + i);
928 for (i=0; i <
n; ++
i) gv->
add(i, y + i);
941 return vp->temp_objvar();
959 const ivBrush * brush = g->
brush();
966 if (vp2->size() <
n) n = vp2->size();
969 if (vp3->size() <
n) n = vp3->size();
971 for (
int i=0;
i <
n; ++
i) {
974 g->
line(vp2->elem(
i),vp->elem(
i) - vp3->elem(
i));
975 g->
line(vp2->elem(
i),vp->elem(
i) + vp3->elem(
i));
976 g->
mark(vp2->elem(
i), vp->elem(
i) - vp3->elem(
i), style,
size,
color, brush);
977 g->
mark(vp2->elem(
i), vp->elem(
i) + vp3->elem(
i), style,
size,
color, brush);
983 return vp->temp_objvar();
997 char*
s = vp->label_;
1005 }
else if (
narg() == 4) {
1018 for (i=0; i <
n; ++
i) g->
line(vp2->elem(i), vp->elem(i));
1021 double interval = *
getarg(2);
1022 for (i=0; i <
n; ++
i) g->
line(i * interval, vp->elem(i));
1026 for (i=0; i <
n; ++
i) g->
line(i, vp->elem(i));
1032 return vp->temp_objvar();
1053 style = char(
chkarg(3,0,10));
1060 const ivBrush * brush = g->
brush();
1067 for (i=0; i <
n; ++
i) {
1068 g->
mark(vp2->elem(i), vp->elem(i), style,
size,
color, brush);
1073 double interval = *
getarg(2);
1074 for (i=0; i <
n; ++
i) {
1075 g->
mark(i*interval, vp->elem(i), style,
size,
color, brush);
1081 return vp->temp_objvar();
1088 double high =
chkarg(2,low,1e99);
1089 double width =
chkarg(3,0,high-low);
1097 int n =
int(
floor((high - low)/width)) + 2;
1099 std::fill(y->begin(), y->end(), 0.);
1102 for (i=0; i < x->size(); ++
i) {
1103 int ind =
int(
floor((x->elem(i) - low)/width)) + 1;
1104 if (ind >= 0 && ind < y->
size()) {
1105 y->elem(ind) += 1.0;
1108 return y->temp_objvar();
1120 double high = start+step*
size;
1125 if (hv->size() !=
size) hv->resize(size);
1126 std::fill(hv->begin(), hv->end(), 0.);
1127 for (
int i=0;
i< data->size();
i++) {
1129 if (ind >=0 && ind < hv->
size()) hv->elem(ind) += 1;
1134 return hv->temp_objvar();
1143 double high =
chkarg(2,low,1e99);
1151 w =
new Vect(x->size());
1152 std::fill(w->begin(), w->end(), 1);
1159 double svar = var/(step*
step);
1164 for (
int i=0;
i<x->size();
i++) {
1165 double xv =
int((x->elem(
i)-low)/step);
1167 double arg = -(
j-xv)*(
j-xv)/(2.*svar);
1168 if (arg > -20.) sum->elem(
j) +=
hoc_Exp(arg) * scale * w->elem(
i);
1174 return sum->temp_objvar();
1192 if (w->size() != data->size()) {
1193 hoc_execerror(
"Vector.smhist: weight Vector must be same size as source Vector.", 0);
1202 double svar = 2*var/(step*
step);
1209 while(n<size+g) n*=2;
1211 double *
gauss = (
double *)calloc(n,(
unsigned)
sizeof(double));
1213 for (i=0;i<= g2;i++) gauss[i] = scale *
hoc_Exp(-i*i/svar);
1214 for (i=1;i<= g2;i++) gauss[g-i] = scale *
hoc_Exp(-i*i/svar);
1217 double *series = (
double *)calloc(n,(
unsigned)
sizeof(double));
1219 double high = start + n*
step;
1221 for (i=0;i<data->size();i++) {
1222 if (data->elem(i) >= start && data->elem(i) < high) {
1223 series[
int((data->elem(i)-
start)/step)] += w->elem(i);
1227 for (i=0;i<data->size();i++) {
1228 if (data->elem(i) >= start && data->elem(i) < high) {
1229 series[
int((data->elem(i)-
start)/step)] += 1.;
1235 double *ans = (
double *)calloc(2*n,(
unsigned)
sizeof(double));
1241 if (v1->size() !=
size) v1->resize(size);
1242 std::fill(v1->begin(), v1->end(), 0.);
1243 for (i=0;i<size;i++) if (ans[i] >
EPSILON) v1->elem(i) = ans[
i];
1249 return v1->temp_objvar();
1260 int top = x->size();
1261 z->resize(y->size()); z->resize(0);
1262 for (
int i=0;
i<y->size();
i++) {
1263 yv =
int(y->elem(
i));
1264 if ((yv < top) && (yv >= 0)) {
1266 z->elem(ztop-1) = x->elem(yv);
1269 return z->temp_objvar();
1276 return double(x->size());
1286 return x->buffer_size();
1290 return vec_.capacity();
1300 return x->temp_objvar();
1306 return x->temp_objvar();
1311 return x->elem(
int(
chkarg(1,0,x->size()-1)));
1317 return x->temp_objvar();
1326 x->push_back(*
getarg(i));
1330 x->buffer_size(x->size() + y->size());
1331 x->vec().insert(x->end(), y->begin(), y->end());
1335 return x->temp_objvar();
1343 m = x->size() -
indx;
1347 for (j=0; j < m; ++
j) {
1348 z[
j] = x->elem(indx + j);
1354 x->push_back(*
getarg(i));
1359 x->buffer_size(n+y->size());
1360 x->vec().insert(x->end(), y->begin(), y->end());
1367 for (j=0; j < m; ++
j) {
1368 x->elem(n + j) = z[
j];
1372 return x->temp_objvar();
1380 end = (
int)
chkarg(2, start, x->size()-1);
1385 for (i=start, j=end+1; j <
n; ++
i, ++
j) {
1386 x->elem(i) = x->elem(j);
1389 return x->temp_objvar();
1396 for (
int i=0;
i<x->size();
i++) {
1408 int top = x->size()-1;
1418 int ns = srcind->size();
1422 if (destind->size() < ns) {
1423 ns = destind->size();
1426 for (
int i=0;
i < ns; ++
i) {
1429 if (ix >= 0 && iy >= 0 && ix < nx && iy < ny) {
1430 y->elem(iy) = x->elem(ix);
1434 if (y->size() < nx) {
1437 for (
int i=0;
i < ns; ++
i) {
1439 if (ii >= 0 && ii < nx) {
1440 y->elem(ii) = x->elem(ii);
1444 return y->temp_objvar();
1458 }
else if (
ifarg(3)) {
1465 }
else if (srcend < srcstart) {
1466 hoc_execerror(
"Vector.copy: src_end arg smaller than src_start", 0);
1468 int size = (srcend-srcstart)/srcinc;
1470 size += deststart+1;
1471 if (y->size() <
size) {
1473 }
else if (y->size() > size && !
ifarg(2)) {
1477 for (i=srcstart, j=deststart; i<=srcend; i+=srcinc, j+=destinc) {
1478 y->elem(j) = x->elem(i);
1481 return y->temp_objvar();
1488 int top = x->size()-1;
1497 int size = end-start+1;
1500 for (
int i=0;
i<
size;
i++) y->elem(
i) = x->elem(
i+start);
1502 return y->temp_objvar();
1510 if (x > y)
return (1);
1511 if (x < y)
return (-1);
1525 for (i=0; i <
n; ++
i) {
1527 si[
i].
x = x->elem(i);
1534 for (i=0; i<
n; i++) y->elem(i) = (double)si[i].i;
1537 return y->temp_objvar();
1555 int flag, is,
id,
nd, ns;
1568 for (
id = 0;
id < nd && xd->elem(
id) <= xs->elem(0); ++
id) {
1569 yd->elem(
id) = ys->elem(0);
1572 for (is = 1; is < ns &&
id <
nd; ++is) {
1573 if (xs->elem(is) <= xs->elem(is-1)) {
1576 while (xd->elem(
id) <= xs->elem(is)) {
1577 thet = (xd->elem(
id) - xs->elem(is-1))/(xs->elem(is) - xs->elem(is-1));
1578 yd->elem(
id) = (1.-thet)*(ys->elem(is-1)) + thet*(ys->elem(is));
1586 for (;
id <
nd; ++
id) {
1587 yd->elem(
id) = ys->elem(ns-1);
1594 return yd->temp_objvar();
1603 src =
new Vect(*dest);
1626 if (!strcmp(op,
"==")) {
1627 for (i=0; i<
n; i++) {
1631 y->push_back(x->elem(i));
1634 }
else if (!strcmp(op,
"!=")) {
1635 for (i=0; i<
n; i++) {
1637 y->push_back(x->elem(i));
1640 }
else if (!strcmp(op,
">")) {
1641 for (i=0; i<
n; i++) {
1643 y->push_back(x->elem(i));
1646 }
else if (!strcmp(op,
"<")) {
1647 for (i=0; i<
n; i++) {
1649 y->push_back(x->elem(i));
1652 }
else if (!strcmp(op,
">=")) {
1653 for (i=0; i<
n; i++) {
1655 y->push_back(x->elem(i));
1658 }
else if (!strcmp(op,
"<=")) {
1659 for (i=0; i<
n; i++) {
1661 y->push_back(x->elem(i));
1664 }
else if (!strcmp(op,
"()")) {
1666 for (i=0; i<
n; i++) {
1668 y->push_back(x->elem(i));
1671 }
else if (!strcmp(op,
"[]")) {
1673 for (i=0; i<
n; i++) {
1675 y->push_back(x->elem(i));
1678 }
else if (!strcmp(op,
"[)")) {
1680 for (i=0; i<
n; i++) {
1682 y->push_back(x->elem(i));
1685 }
else if (!strcmp(op,
"(]")) {
1687 for (i=0; i<
n; i++) {
1689 y->push_back(x->elem(i));
1698 return y->temp_objvar();
1706 double value,value2;
1715 if (!strcmp(op,
"==")) {
1716 for (i=0; i<
n; i++) {
1721 }
else if (!strcmp(op,
"!=")) {
1722 for (i=0; i<
n; i++) {
1727 }
else if (!strcmp(op,
">")) {
1728 for (i=0; i<
n; i++) {
1733 }
else if (!strcmp(op,
"<")) {
1734 for (i=0; i<
n; i++) {
1739 }
else if (!strcmp(op,
">=")) {
1740 for (i=0; i<
n; i++) {
1745 }
else if (!strcmp(op,
"<=")) {
1746 for (i=0; i<
n; i++) {
1751 }
else if (!strcmp(op,
"()")) {
1753 for (i=0; i<
n; i++) {
1758 }
else if (!strcmp(op,
"[]")) {
1760 for (i=0; i<
n; i++) {
1765 }
else if (!strcmp(op,
"[)")) {
1767 for (i=0; i<
n; i++) {
1772 }
else if (!strcmp(op,
"(]")) {
1774 for (i=0; i<
n; i++) {
1780 hoc_execerror(
"Vector",
"Invalid comparator in .indwhere()\n");
1790 int i, iarg, m=0, flag;
1792 double value,value2;
1802 if (!strcmp(op,
"==")) {
1803 for (i=0; i<
n; i++) {
1808 }
else if (!strcmp(op,
"!=")) {
1809 for (i=0; i<
n; i++) {
1814 }
else if (!strcmp(op,
">")) {
1815 for (i=0; i<
n; i++) {
1820 }
else if (!strcmp(op,
"<")) {
1821 for (i=0; i<
n; i++) {
1826 }
else if (!strcmp(op,
">=")) {
1827 for (i=0; i<
n; i++) {
1832 }
else if (!strcmp(op,
"<=")) {
1833 for (i=0; i<
n; i++) {
1838 }
else if (!strcmp(op,
"()")) {
1840 for (i=0; i<
n; i++) {
1845 }
else if (!strcmp(op,
"[]")) {
1847 for (i=0; i<
n; i++) {
1852 }
else if (!strcmp(op,
"[)")) {
1854 for (i=0; i<
n; i++) {
1859 }
else if (!strcmp(op,
"(]")) {
1861 for (i=0; i<
n; i++) {
1867 hoc_execerror(
"Vector",
"Invalid comparator in .indvwhere()\n");
1873 return y->temp_objvar();
1879 int top = x->size()-1;
1886 std::fill(x->begin()+
start,x->begin()+end+1, *
getarg(1));
1887 return x->temp_objvar();
1898 double end = double(n-1);
1908 }
else if (xn < 0) {
1912 if (n != x->size()) x->resize(n);
1913 }
else if (
ifarg(2)) {
1920 for (
int i=0;
i<
n;
i++) {
1921 x->elem(
i) = double(
i)*step+
start;
1923 return x->temp_objvar();
1932 int top = x->size()-1;
1939 for (
int i=start;
i<=
end;
i++) x->elem(
i) += (*(r->
rand))();
1940 return x->temp_objvar();
1949 int top = x->size()-1;
1956 for (
int i=start;
i<=
end;
i++) x->elem(
i) = (*(r->
rand))();
1957 return x->temp_objvar();
1968 int top = x->size()-1;
1985 for (
int i=start;
i<=
end;
i++) {
1989 return x->temp_objvar();
1996 int top = x->size()-1;
2009 for (
int i=start;
i<=
end;
i++) {
2020 if (x->size() == 0) {
2023 int x_max = x->size()-1;
2027 return *std::min_element(x->begin()+
start, x->begin()+end+1);
2029 return *std::min_element(x->begin(), x->end());
2036 if (x->size() == 0) {
2039 int x_max = x->size()-1;
2044 return std::min_element(x->begin()+
start, x->begin()+end+1) - x->begin()+
start;
2046 return std::min_element(x->begin(), x->end()) - x->begin();
2053 if(x->size() == 0) {
2056 int x_max = x->size()-1;
2060 return *std::max_element(x->begin()+
start, x->begin()+end+1);
2062 return *std::max_element(x->begin(), x->end());
2069 if(x->size() == 0) {
2072 int x_max = x->size()-1;
2077 return std::max_element(x->begin()+
start,x->begin()+end+1) - x->begin()+
start;
2079 return std::max_element(x->begin(),x->end()) - x->begin();
2086 int x_max = x->size()-1;
2090 return std::accumulate(x->begin()+
start, x->begin()+end+1,0.);
2092 return std::accumulate(x->begin(), x->end(),0.);
2099 int x_max = x->size()-1;
2103 return std::inner_product( x->begin()+
start, x->begin()+end+1, x->begin()+
start, 0. );
2105 return std::inner_product( x->begin(), x->end(), x->begin(), 0.);
2112 int x_max = x->size()-1;
2116 if (end - start < 1) {
2119 const double sum = std::accumulate(x->begin()+
start, x->begin()+end+1, 0.0);
2120 return sum / end-start+1;
2122 if (x->size() < 1) {
2125 const double sum = std::accumulate(x->begin(), x->end(), 0.0);
2126 return sum / x->size();
2133 int x_max = x->size()-1;
2137 if (end - start < 1) {
2140 return var(x->begin()+
start, x->begin()+end+1);
2142 if (x->size() < 2) {
2145 return var(x->begin(), x->end());
2152 int x_max = x->size()-1;
2156 if (end - start < 1) {
2159 return stdDev(x->begin()+
start, x->begin()+end+1);
2161 if (x->size() < 2) {
2164 return stdDev(x->begin(), x->end());
2171 int x_max = x->size()-1;
2175 if (end - start < 1) {
2180 if (x->size() < 2) {
2198 int size = x->size();
2199 if (size > y->size() || !
size) {
2203 if (size > w->size()) {
2207 double diff = x->elem(
i) - y->elem(
i);
2208 err += diff*diff*w->elem(
i);
2212 double diff = x->elem(
i) - y->elem(
i);
2224 return std::inner_product( x->begin(), x->end(), y->begin(), 0.);
2230 return hoc_Sqrt(std::inner_product( x->begin(), x->end(), x->begin(), 0.));
2239 for (i=0; i <
n; ++
i) {
2242 return x->temp_objvar();
2249 std::for_each(x->begin(), x->end(), [](
double& d) { d += *
getarg(1); } );
2253 if (x->size() != y->size()) {
2254 hoc_execerror(
"Vector",
"Vector argument to .add() wrong size\n");
2256 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::plus<double>());
2259 return x->temp_objvar();
2267 std::for_each(x->begin(), x->end(), [](
double& d) { d -= *
getarg(1); } );
2271 if (x->size() != y->size()) {
2272 hoc_execerror(
"Vector",
"Vector argument to .sub() wrong size\n");
2274 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::minus<double>());
2277 return x->temp_objvar();
2284 std::for_each(x->begin(), x->end(), [](
double& d) { d *= *
getarg(1); } );
2288 if (x->size() != y->size()) {
2289 hoc_execerror(
"Vector",
"Vector argument to .mult() wrong size\n");
2291 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::multiplies<double>());
2294 return x->temp_objvar();
2302 std::for_each(x->begin(), x->end(), [](
double& d) { d /= *
getarg(1); } );
2306 if (x->size() != y->size()) {
2307 hoc_execerror(
"Vector",
"Vector argument to .div() wrong size\n");
2309 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::divides<double>());
2312 return x->temp_objvar();
2322 auto minmax = std::minmax_element(x->begin(), x->end());
2323 double min = *minmax.first;
2324 double max = *minmax.second;
2325 double r = max -
min;
2328 std::for_each(x->begin(), x->end(), [&](
double& d) {
2343 int i,
n = x->size();
2344 if (n != y->size()) {
2347 for (i=0; i <
n; ++
i) {
2389 #define SIMPLEX_MAXN 1e+300 2390 #define SIMPLEX_INORM 1.2 2398 #define SIMPLEX_ALPHA 2.0 2399 #define SIMPLEX_BETA 1.4 2400 #define SIMPLEX_GAMMA 0.7 2401 #define SIMPLEX_DELTA 0.3 2421 double dexp,
t,amp1,tau1,amp2,tau2;
2423 if (!strcmp(fcn,
"exp2")) {
2424 if (n < 4)
hoc_execerror(
"Vector",
".fit(\"exp2\") requires amp1,tau1,amp2,tau2");
2430 for (i=0;i<x->size();i++) {
2433 guess = dexp - y->elem(i);
2434 sq_err += guess * guess;
2436 }
else if (!strcmp(fcn,
"charging")) {
2437 if (n < 4)
hoc_execerror(
"Vector",
".fit(\"charging\") requires amp1,tau1,amp2,tau2");
2443 for (i=0;i<x->size();i++) {
2446 guess = dexp - y->elem(i);
2447 sq_err += guess * guess;
2449 }
else if (!strcmp(fcn,
"exp1")) {
2450 if (n < 2)
hoc_execerror(
"Vector",
".fit(\"exp1\") requires amp,tau");
2455 for (i=0;i<x->size();i++) {
2458 guess = dexp - y->elem(i);
2459 sq_err += guess * guess;
2461 }
else if (!strcmp(fcn,
"line")) {
2462 if (n < 2)
hoc_execerror(
"Vector",
".fit(\"line\") requires slope,intercept");
2464 for (i=0;i<x->size();i++) {
2465 guess = (p[0]*x->elem(i) + p[1]) - y->elem(i);
2466 sq_err += guess * guess;
2468 }
else if (!strcmp(fcn,
"quad")) {
2469 if (n < 3)
hoc_execerror(
"Vector",
".fit(\"quad\") requires ax^2+bx+c");
2471 for (i=0;i<x->size();i++) {
2472 guess = (p[0]*x->elem(i)*x->elem(i) + p[1]*x->elem(i) + p[2]) - y->elem(i);
2473 sq_err += guess * guess;
2476 for (i=0;i<x->size();i++) {
2484 sq_err += guess * guess;
2487 return sq_err/x->size();
2495 if (renew_ > 3*(n+1)) {
2496 retval =
eval(p,n,x,y,fcn);
2497 if (retval == splx_evl_)
return(splx_evl_);
else return(
SIMPLEX_MAXN );
2499 retval =
eval(p,n,x,y,fcn);
2500 if (splx_evl_ > retval) splx_evl_ =
retval;
2520 evortex = (
double *)calloc(n+1,(
unsigned)
sizeof(double));
2521 gvortex = (
double *)calloc(n, (
unsigned)
sizeof(double));
2522 vortex = (
double *)calloc(n*(n+1),(unsigned)
sizeof(
double));
2523 nvortex = (
double *)calloc(n*4,(
unsigned)
sizeof(double));
2525 if( 0==evortex || 0==gvortex || 0==vortex || 0==nvortex ){
2526 Printf(
"allocation error in simplex()\n");
2542 for(i=0;i<n+1;i++) evortex[i]=
eval_error( &vortex[i*n],n,x,y,fcn);
2545 emin = emax = evortex[0];
2559 for(i=0;i<
n;i++) gvortex[i]=0.0;
2561 for(j=0;j<
n;j++) gvortex[j] += vortex[i*n+j];
2563 gvortex[i] = ( gvortex[i] - vortex[emaxp*n+i] ) /
n;
2570 if( fv1 < evortex[emaxp] ){
2578 if( fv1 < evortex[emaxp] ){
2586 if( fv1 < evortex[emaxp] ){
2594 if( fv1 < evortex[emaxp] ){
2605 if( splx_evl_ == fv1 ) renew_++;
2606 for(i=0;i<
n;i++) vortex[emaxp*n+i]=nvortex[ptr*n+i];
2618 if( evortex[i]<emin ){
2624 for(i=0;i<
n;i++) p[i]=vortex[eminp*n+i];
2641 retval =
simplex(p,n,x,y,fcn);
2642 if (!renew_ || splx_evl_ <= retval)
break;
2645 for (
int i=0;
i<trial;
i++) {
2648 retval =
simplex(p,n,x,y,fcn);
2649 if (!renew_ || splx_evl_ <= retval)
break;
2669 if (fitted->size() != y->size()) fitted->resize(y->size());
2678 if (x->size() != y->size()) {
2679 hoc_execerror(
"Vector",
"Indep argument to .fit() wrong size\n");
2707 if (!strcmp(fcn,
"exp2")) {
2708 for(i=0;i<x->size();i++) {
2709 fitted->elem(i) = p[0]*
hoc_Exp(-(x->elem(i)/p[1])) +
2710 p[2]*
hoc_Exp(-(x->elem(i)/p[3]));
2712 }
else if (!strcmp(fcn,
"charging")) {
2713 for(i=0;i<x->size();i++) {
2714 fitted->elem(i) = p[0]*(1-
hoc_Exp(-(x->elem(i)/p[1]))) +
2715 p[2]*(1-
hoc_Exp(-(x->elem(i)/p[3])));
2717 }
else if (!strcmp(fcn,
"exp1")) {
2718 for(i=0;i<x->size();i++) {
2719 fitted->elem(i) = p[0]*
hoc_Exp(-(x->elem(i)/p[1]));
2721 }
else if (!strcmp(fcn,
"line")) {
2722 for(i=0;i<x->size();i++) {
2723 fitted->elem(i) = p[0]*x->elem(i)+p[1];
2725 }
else if (!strcmp(fcn,
"quad")) {
2726 for(i=0;i<x->size();i++) {
2727 fitted->elem(i) = p[0]*x->elem(i)*x->elem(i) + p[1]*x->elem(i) + p[2];
2730 for(i=0;i<x->size();i++) {
2761 int v1n = v1->size();
2762 int v2n = v2->size();
2763 int m = (v1n > v2n) ? v1n : v2n;
2767 double *d1 = (
double *)calloc(n,(
unsigned)
sizeof(double));
2769 for (i=0;i<v1n;++
i) d1[i] = v1->elem(i);
2770 double *d2 = (
double *)calloc(n,(
unsigned)
sizeof(double));
2771 for (i=0;i<v2n;++
i) d2[i] = v2->elem(i);
2772 double *ans = (
double *)calloc(n,(
unsigned)
sizeof(double));
2776 if (v3->size() !=
n) v3->resize(n);
2777 for (i=0;i<
n;++
i) v3->elem(i)=ans[
i];
2782 return v3->temp_objvar();
2802 int v1n = v1->size();
2803 int v2n = v2->size();
2804 int m = (v1n > v2n) ? v1n : v2n;
2808 double *
data = (
double *)calloc(n,(
unsigned)
sizeof(double));
2810 for (i=0;i<v1n;++
i) data[i] = v1->elem(i);
2816 double *respns = (
double *)calloc(n,(
unsigned)
sizeof(double));
2817 for (i=0;i<v2n;i++) respns[i] = v2->elem(i);
2819 double *ans = (
double *)calloc(2*n,(
unsigned)
sizeof(double));
2823 if (v3->size() !=
n) v3->resize(n);
2824 for (i=0;i<
n;++
i) v3->elem(i)=ans[
i];
2827 free((
char *)respns);
2830 return v3->temp_objvar();
2844 int dc = v1->size();
2852 int k =
int(
ceil((
double(dc)/m-1.)/2.));
2855 double *
data = (
double *)calloc(n,(
unsigned)
sizeof(double));
2856 for (
int i=0;
i<
dc;++
i) data[
i] = v1->elem(
i);
2858 if (ans->size() < m) ans->resize(m);
2863 return ans->temp_objvar();
2883 int v1n = v1->size();
2884 int v2n = v2->size();
2885 int m = (v1n > v2n) ? v1n : v2n;
2889 double *
data = (
double *)calloc(n,(
unsigned)
sizeof(double));
2891 for (i=0;i<v1n;++
i) data[i] = v1->elem(i);
2893 double *filter = (
double *)calloc(n,(
unsigned)
sizeof(double));
2894 for (i=0;i<v2n;i++) filter[i] = v2->elem(i);
2896 double *ans = (
double *)calloc(2*n,(
unsigned)
sizeof(double));
2902 if (v3->size() !=
n) v3->resize(n);
2903 for (i=0;i<
n;++
i) v3->elem(i)=ans[
i];
2906 free((
char *)filter);
2909 return v3->temp_objvar();
2931 int v1n = v1->size();
2933 while(n < v1n) n*=2;
2935 double *
data = (
double *)calloc(n,(
unsigned)
sizeof(double));
2937 for (i=0;i<v1n;++
i) data[i] = v1->elem(i);
2938 if (v3->size() !=
n) v3->resize(n);
2949 return v3->temp_objvar();
2958 double thresh = *
getarg(2);
2963 int n = v1->size()/bin;
2964 if (ans->size() !=
n) ans->resize(n);
2965 std::fill(ans->begin(), ans->end(), 0.);
2970 for (
int i=0;
i<
n;
i++) {
2971 for (
int j=0;
j<bin;
j++) {
2973 if (v1->elem(k) >= thresh && !firing) {
2976 }
else if (firing && v1->elem(k) < thresh) {
2982 return ans->temp_objvar();
2994 if (
ifarg(2)) wrap = 0;
2997 if (r<0) { r = n-(
Math::abs(r)%
n); rev = 1; }
3002 double *hold = (
double *)calloc(n,(
unsigned)
sizeof(double));
3006 for (i=0;i<rc;i++) hold[i+r] = a->elem(i);
3007 for (i=0;i<r;i++) hold[i] = a->elem(i+rc);
3010 for (i=0;i<rc;i++) hold[i+r] = a->elem(i);
3011 for (i=0;i<r;i++) hold[i] = 0.;
3013 for (i=0;i<r;i++) hold[i] = a->elem(i+rc);
3014 for (i=r;i<
n;i++) hold[i] = 0.;
3017 for (i=0;i<
n;i++) a->elem(i) = hold[
i];
3023 return a->temp_objvar();
3037 hoc_execerror(
"Can't take derivative of Vector with less than two points", 0);
3039 if (ans->size() !=
n) ans->resize(n);
3052 ans->elem(0) = (v1->elem(1) - v1->elem(0))/dx;
3053 ans->elem(n-1) = (v1->elem(n-1) - v1->elem(n-2))/dx;
3055 for (
int i=1;
i<n-1;
i++) {
3056 ans->elem(
i) = (v1->elem(
i+1) - v1->elem(
i-1))/dx;
3061 for (
int i=0;
i<n-1;
i++) {
3062 ans->elem(
i) = (v1->elem(
i+1) - v1->elem(
i))/dx;
3068 return ans->temp_objvar();
3085 if (ans->size() !=
n) ans->resize(n);
3090 ans->elem(0) = v1->elem(0);
3091 for (
int i=1;
i<
n;
i++) {
3092 ans->elem(
i) = ans->elem(
i-1) + v1->elem(
i) * dx;
3094 return ans->temp_objvar();
3107 int n = data->size();
3111 if (avg->size() != m) avg->resize(m);
3112 int l = trig->size();
3115 std::fill(avg->begin(), avg->end(), 0.);
3117 for (
int i=0;
i<l;
i++) {
3118 int tr =
int(trig->elem(
i));
3121 if (tr >= pre && tr < n-post) {
3124 avg->elem(
j+pre) += data->elem(tr+
j);
3128 std::for_each(avg->begin(), avg->end(),[&](
double& d) { d /= trcount; } );
3138 int w0, w1, wlen,
i, flag, iarg = 1;
3144 if (ans->size() !=
n) ans->resize(n);
3149 double *res = (
double *)calloc(n,(
unsigned)
sizeof(double));
3150 for (i=0; i<
n; i++) {
3151 w0 = (i >=
points) ? i-points : 0;
3152 w1 = (i < n-
points) ? i+points : n-1;
3155 std::vector<double> window (v1->begin() + w0, v1->begin() + wlen);
3156 std::sort(window.begin(), window.end());
3157 res[
i] = window[wlen/2];
3160 if (ans->size() !=
n) ans->resize(n);
3161 for (i=0;i <
n; i++) {
3162 ans->elem(i) = res[
i];
3168 return ans->temp_objvar();
3175 int n = ans->size();
3181 std::sort(sorted->begin(), sorted->end());
3187 median = (sorted->elem(n2-1) + sorted->elem(n2))/2.;
3189 median = sorted->elem(n2);
3199 std::sort(ans->begin(), ans->end());
3200 return ans->temp_objvar();
3206 std::reverse(ans->begin(), ans->end());
3207 return ans->temp_objvar();
3215 int n = ans->size();
3216 double freq = *
getarg(1);
3217 double phase = *
getarg(2);
3221 double period = 2*
PI/1000*freq*dx;
3223 for (
int i=0;
i<
n;
i++) {
3224 ans->elem(
i) =
sin(period*
i+phase);
3226 return ans->temp_objvar();
3241 if (ans->size() !=
n) ans->resize(n);
3243 for (
int i=0;
i<
n;
i++) {
3244 ans->elem(
i) =
log(v1->elem(
i));
3246 return ans->temp_objvar();
3261 if (ans->size() !=
n) ans->resize(n);
3263 for (
int i=0;
i<
n;
i++) {
3264 ans->elem(
i) =
log10(v1->elem(
i));
3266 return ans->temp_objvar();
3279 int n = v1->size()/f;
3280 if (ans->size() !=
n) ans->resize(n);
3282 for (
int i=0;
i<
n;
i++) {
3284 for (
int j=0;
j<f;
j++) {
3285 ans->elem(
i) += v1->elem(
i*f+
j);
3292 return ans->temp_objvar();
3302 double f =
chkarg(2,0,v1->size()/2);
3303 int n =
int(v1->size()*f);
3307 for (
int i=0;
i<
n;
i++) temp->elem(
i) = v1->elem(
int(
i/f));
3308 ans->vec().swap(temp->vec());
3312 return ans->temp_objvar();
3323 double trials =
chkarg(3,0,9e99);
3328 for (
int i=0;
i<
n;
i++) {
3331 double integral = v1->elem(
i);
3332 while (integral < size) {
3333 if (
i+fj < n-1) { fj++; integral += v1->elem(
i+fj); }
3334 if (
i-bj > 0 && integral < size) { bj++; integral += v1->elem(
i-bj); }
3336 temp->elem(
i) = integral/trials*1000./((fj+bj+1)*dt);
3339 ans->vec().swap(temp->vec());
3343 return ans->temp_objvar();
3352 int n = stim->size();
3363 if (V->size() !=
n) V->resize(n);
3369 for (
int t=0;
t<n-1;
t++) {
3370 i = -gl*(V->elem(
t)-el) + stim->elem(
t);
3371 v = V->elem(
t) + i/
cm;
3372 if (
v >= th && ref <= 0) {
3382 return V->temp_objvar();
3400 if (ans->size() !=
n) ans->resize(n);
3403 for (
int i=0;
i<
n;
i++) {
3404 if (ans->elem(
i) == 0) {
3407 ans->elem(
i) = 1/v1->elem(
i);
3410 }
else if (p == 0) {
3411 for (
int i=0;
i<
n;
i++) {
3414 }
else if (p == 0.5) {
3415 for (
int i=0;
i<
n;
i++) {
3418 }
else if (p == 1) {
3419 for (
int i=0;
i<
n;
i++) {
3420 ans->elem(
i) = v1->elem(
i);
3422 }
else if (p == 2) {
3423 for (
int i=0;
i<
n;
i++) {
3424 ans->elem(
i) = v1->elem(
i)*v1->elem(
i);
3427 for (
int i=0;
i<
n;
i++) {
3428 ans->elem(
i) =
pow(v1->elem(
i),
p);
3431 return ans->temp_objvar();
3446 if (ans->size() !=
n) ans->resize(n);
3448 for (
int i=0;
i<
n;
i++) {
3451 return ans->temp_objvar();
3466 if (ans->size() !=
n) ans->resize(n);
3468 for (
int i=0;
i<
n;
i++) {
3471 return ans->temp_objvar();
3486 if (ans->size() !=
n) ans->resize(n);
3488 for (
int i=0;
i<
n;
i++) {
3489 ans->elem(
i) =
floor(v1->elem(
i));
3491 return ans->temp_objvar();
3506 if (ans->size() !=
n) ans->resize(n);
3508 for (
int i=0;
i<
n;
i++) {
3509 ans->elem(
i) =
tanh(v1->elem(
i));
3511 return ans->temp_objvar();
3529 data =
new Vect(*data);
3533 int n = data->size();
3534 int m = index->size();
3535 if (ans->size() != m) ans->resize(m);
3537 for (
int i=0;
i<m;
i++) {
3538 int j =
int(index->elem(
i));
3539 if (j >= 0 && j < n) {
3540 ans->elem(
i) = data->elem(j);
3550 return ans->temp_objvar();
3557 Vect*
vec = (*nrnpy_vec_from_python_p_)(
v);
3558 return vec->temp_objvar();
3720 return vp->data() +
index;
3746 #if defined(WIN32) && !defined(USEMATRIX) 3760 int tmp = *
A; *A = *
B; *B = tmp;
3764 #define BYTES_PER_WORD 8 3765 #define BYTES_PER_LONG 4 3769 #define STACK_SIZE (BYTES_PER_WORD * BYTES_PER_LONG) 3770 #define PUSH(LOW,HIGH) do {top->lo = LOW;top++->hi = HIGH;} while (0) 3771 #define POP(LOW,HIGH) do {LOW = (--top)->lo;HIGH = top->hi;} while (0) 3772 #define STACK_NOT_EMPTY (stack < top) 3776 #define MAX_THRESH 4 3806 struct stack_node {
int *lo;
int *hi; };
3813 int *hi = lo + (total_elems - 1);
3817 stack_node *top = stack + 1;
3822 int *pivot = &pivot_buffer;
3829 int *mid = lo + ((hi - lo) >> 1);
3831 if ( cmp(vec[*mid], vec[*lo]) < 0)
3833 if ( cmp(vec[*hi], vec[*mid]) < 0)
3836 if ( cmp(vec[*mid], vec[*lo]) < 0)
3840 pivot = &pivot_buffer;
3850 while ( cmp(vec[*left_ptr], vec[*pivot]) < 0)
3853 while ( cmp(vec[*pivot], vec[*right_ptr]) < 0)
3856 if (left_ptr < right_ptr)
3858 SWAP (left_ptr, right_ptr);
3862 else if (left_ptr == right_ptr)
3869 while (left_ptr <= right_ptr);
3878 if ((right_ptr - lo) <= max_thresh)
3880 if ((hi - left_ptr) <= max_thresh)
3885 else if ((hi - left_ptr) <= max_thresh)
3887 else if ((right_ptr - lo) > (hi - left_ptr))
3889 PUSH (lo, right_ptr);
3894 PUSH (left_ptr, hi);
3908 int *end_ptr = base_ptr + 1 * (total_elems - 1);
3910 int *tmp_ptr = base_ptr;
3911 int *thresh = (end_ptr < (base_ptr + max_thresh))?
3912 end_ptr : (base_ptr + max_thresh);
3918 for (run_ptr = tmp_ptr + 1; run_ptr <= thresh; run_ptr += 1)
3919 if ( cmp(vec[*run_ptr], vec[*tmp_ptr]) < 0)
3922 if (tmp_ptr != base_ptr)
3923 SWAP (tmp_ptr, base_ptr);
3928 for (run_ptr = base_ptr + 1; (tmp_ptr = run_ptr += 1) <= end_ptr; )
3931 while ( cmp(vec[*run_ptr], vec[*(tmp_ptr -= 1)]) < 0)
3934 if ((tmp_ptr += 1) != run_ptr)
3938 for (trav = run_ptr + 1; --trav >= run_ptr;)
3943 for (hi = lo = trav; (lo -= 1) >= tmp_ptr; hi = lo)
static Object ** v_correl(void *v)
struct DLL * dll_load(char *filename)
static Object ** v_tanh(void *v)
static Object ** v_floor(void *v)
static Object ** v_at(void *v)
static Object ** v_interpolate(void *v)
static Object ** v_log(void *v)
static Object ** v_plot(void *v)
double max(double a, double b)
virtual Glyph * component(GlyphIndex) const
struct Arrayinfo Arrayinfo
int hoc_is_str_arg(int narg)
Vect * vector_new1(int n)
static void steer_x(void *v)
static Object ** v_hist(void *v)
static double v_mag(void *v1)
Object ** v_from_python(void *v)
static Object ** v_where(void *v)
static double v_var(void *v)
IvocVect(Object *obj=NULL)
void nrn_spctrm(double *data, double *psd, int setsize, int numsegpairs)
int hoc_argtype(int narg)
virtual void append(Glyph *)
static double v_indwhere(void *v)
int hoc_is_double_arg(int narg)
static double v_scantil(void *v)
static void SWAP(int *A, int *B)
static Object ** v_resize(void *v)
Symbol * hoc_lookup(const char *)
static bool equal(float x, float y, float e)
void nrn_gsl2nrc(double *x, double *y, unsigned long n)
static Object ** v_append(void *v)
static Object ** v_psth(void *v)
static double v_eq(void *v1)
static double simplex(double *p, int n, Vect *x, Vect *y, char *fcn)
double hoc_Log10(double x)
static Object ** v_sqrt(void *v)
static Object ** v_record(void *v)
static const char * nullstr
check_obj_type(o, "SectionList")
static double v_median(void *v)
static Object ** v_cl(void *v)
GLabel * label(float x, float y, const char *s, int fixtype, float scale, float x_align, float y_align, const Color *)
void nrngsl_realft(double *data, unsigned long n, int direction)
static double v_contains(void *v)
static double v_stdev(void *v)
static Object ** v_reverse(void *v)
static int possible_destvec(int arg, Vect *&dest)
static double v_dot(void *v1)
auto end() -> std::vector< double >::iterator
#define BinaryMode(ocfile)
static void v_destruct(void *v)
static philox4x32_key_t k
static double v_fit(void *v)
sprintf(buf," if (secondorder) {\ " int _i;\" " for(_i=0;_i< %d;++_i) {\" " _p[_slist%d[_i]]+=dt *_p[_dlist%d[_i]];\" " }}\", numeqn, listnum, listnum)
static Object ** v_rebin(void *v)
int nrn_mlh_gsort(double *vec, int *base_ptr, int total_elems, doubleComparator cmp)
static Object ** v_indvwhere(void *v)
static Object ** v_abs(void *v)
static Object ** v_resample(void *v)
static Object ** v_index(void *v)
virtual GlyphIndex glyph_index(const Glyph *)
Symbol * hoc_install(const char *, int, double, Symlist **)
#define TRY_GUI_REDIRECT_METHOD_ACTUAL_OBJ(name, sym, v)
Object ** vector_pobj(Vect *v)
static double eval(double *p, int n, Vect *x, Vect *y, char *fcn)
double * hoc_pgetarg(int narg)
static double eval_error(double *p, int n, Vect *x, Vect *y, char *fcn)
static double v_printf(void *v)
static Object ** v_fill(void *v)
double hoc_call_func(Symbol *s, int narg)
void brush(const Brush *)
int ivoc_vector_size(Object *o)
Vect * vector_new2(Vect *v)
static Object ** v_copy(void *v)
void vector_delete(Vect *v)
static Object ** v_sub(void *v1)
static Object ** v_div(void *v1)
Object ** hoc_temp_objvar(Symbol *symtemp, void *v)
static double v_sumsq(void *v)
static double v_trigavg(void *v)
Vect * vector_new(int n, Object *o)
Object ** v_to_python(void *v)
void install_vector_method(const char *name, Pfrd_vp)
std::vector< double > & vec()
Symlist * hoc_top_level_symlist
static double ref(void *v)
int const size_t const size_t n
static void same_err(const char *s, Vect *x, Vect *y)
int cmpfcn(double a, double b)
static Object ** v_medfltr(void *v)
static Object ** v_set(void *v)
void line(Coord x, Coord y)
void class2oc(const char *, void *(*cons)(Object *), void(*destruct)(void *), Member_func *, int(*checkpoint)(void **), Member_ret_obj_func *, Member_ret_str_func *)
static int possible_srcvec(Vect *&src, Vect *dest, int &flag)
double(* nrnpy_object_to_double_)(Object *)
static Object ** v_log10(void *v)
static Object ** v_ploterr(void *v)
#define FWrite(arg1, arg2, arg3, arg4)
double(* Pfrd_vp)(void *)
static void * v_cons(Object *o)
virtual void save(std::ostream &, Coord, Coord)
static double v_min(void *v)
static Object ** v_addrand(void *v)
static Object ** v_insert(void *v)
void vector_set_label(Vect *v, char *s)
void hoc_execerror(const char *, const char *)
static double v_play_remove(void *v)
static double v_vwrite(void *v)
static double v_mean(void *v)
#define BYTESWAP(_X__, _TYPE__)
static Object ** v_apply(void *v)
void nrn_vecsim_remove(void *)
const Brush * brush(int) const
static Member_ret_obj_func v_retobj_members[]
static double v_scale(void *v1)
fprintf(stderr, "Don't know the location of params at %p\, pp)
void nrn_convlv(double *data, unsigned long n, double *respns, unsigned long m, int isign, double *ans)
static Object ** v_mul(void *v1)
int(* doubleComparator)(double, double)
static Object ** v_pow(void *v)
std::vector< double > vec_
static int sort_index_cmp(const void *a, const void *b)
static Object ** v_spikebin(void *v)
void * dll_lookup(struct DLL *Pdll, char *name)
void color(const Color *)
static double v_max(void *v)
void nrn_nrc2gsl(double *x, double *y, unsigned long n)
static const char ** v_label(void *v)
static double v_get(void *v)
double hoc_Sqrt(double x)
static double v_size(void *v)
IvocVect *(* nrnpy_vec_from_python_p_)(void *)
static double v_sum(void *v)
void vector_resize(Vect *v, int n)
static double dmaxint_
As all parameters are passed from hoc as double, we need to calculate max integer that can fit into d...
static Object ** v_inf(void *x)
static Object ** v_filter(void *v)
static Object ** v_sortindex(void *v)
char * vector_get_label(Vect *v)
static Object ** v_integral(void *v)
static double v_vread(void *v)
static Object ** v_deriv(void *v)
#define MUTCONSTRUCT(mkmut)
static Object ** v_rotate(void *v)
int vector_instance_px(void *, double **)
int vector_capacity(Vect *v)
short cpublic
Note: public is a reserved keyword.
int vector_buffer_size(Vect *v)
Object **(* nrnpy_vec_to_python_p_)(void *)
static Object ** v_clear(void *v)
void mark(Coord x, Coord y, char style='+', float size=12, const Color *=NULL, const Brush *=NULL)
void vector_append(Vect *v, double x)
static double v_fread(void *v)
static Object ** v_add(void *v1)
HocStruct cTemplate * ctemplate
static Object ** v_sort(void *v)
static double v_min_ind(void *v)
virtual void remove(GlyphIndex)
static Object ** v_spctrm(void *v)
Symbol * hoc_table_lookup(const char *, Symlist *)
static double v_buffer_size(void *v)
void add(float, double *)
static Object ** v_sin(void *v)
static Object ** v_mark(void *v)
static Object ** v_smhist(void *v)
double * vector_vec(Vect *v)
static Member_func v_members[]
Object **(* nrnpy_vec_as_numpy_helper_)(int, double *)
static Object ** v_remove(void *v)
static Member_ret_str_func v_retstr_members[]
void hoc_pushpx(double *d)
int hoc_is_object_arg(int narg)
#define FRead(arg1, arg2, arg3, arg4)
static Object ** v_setrand(void *v)
void begin_line(const char *s=NULL)
static Object ** v_play(void *v)
Object ** vector_temp_objvar(Vect *v)
double hoc_call_objfunc(Symbol *s, int narg, Object *ob)
static Object ** v_histogram(void *v)
static double v_scanf(void *v)
double stdDev(InputIterator begin, InputIterator end)
static double v_reduce(void *v)
static double v_stderr(void *v)
Object ** hoc_temp_objptr(Object *)
Object ** v_as_numpy(void *v)
static void post(HCONV hc, const char *name)
Object ** hoc_objgetarg(int)
static Object ** v_from_double(void *v)
const Color * color(int) const
double var(InputIterator begin, InputIterator end)
static Object ** v_c(void *v)
static Object ** v_sumgauss(void *v)
int hoc_araypt(Symbol *, int)
double chkarg(int, double low, double high)
static Object ** v_fft(void *v)
void notify_freed_val_array(double *, size_t)
double call_simplex(double *p, int n, Vect *x, Vect *y, char *fcn, int trial)
void nrn_correl(double *x, double *y, unsigned long n, double *z)
double * ivoc_vector_ptr(Object *o, int index)
static Object ** v_ind(void *v)
void nrn_vecsim_add(void *, bool)
static double v_max_ind(void *v)
static Object ** v_indgen(void *v)
static Object ** v_convlv(void *v)
int vector_arg_px(int, double **)
static double v_fwrite(void *v)
static Object ** v_line(void *v)
static double v_meansqerr(void *v1)