: $Id: wrap.mod,v 1.1 2010/12/21 19:56:41 samn Exp $
NEURON {
THREADSAFE
SUFFIX wrap
GLOBAL INSTALLED
GLOBAL verbose
}
PARAMETER {
INSTALLED=0
verbose=0
}
VERBATIM
#include <math.h>
#include <stdlib.h>
double* wrap(double* x,int n,int flen){
double* y = (double*) calloc(n,sizeof(double));
int i,j=0;
for(i=flen/2+1;i<flen;i++) y[j++]=x[i];
j=n-flen/2-1;
for(i=0;i<=flen/2;i++) y[j++]=x[i];
return y;
}
double wraparound(void* vv) {
double* x,*y;
int vsz,fsz,i;
vsz = vector_instance_px(vv,&x);
fsz = (int) *getarg(1);
if(fsz > vsz) {
printf("wraparound ERRA: invalid filter len %d > vector len %d!\n",fsz,vsz);
return 0;
}
y = wrap(x,vsz,fsz);
for(i=0;i<vsz;i++) x[i]=y[i];
free(y);
return 0;
}
ENDVERBATIM
PROCEDURE install () {
if (INSTALLED==1) {
printf("already installed wrap.mod")
} else {
INSTALLED=1
VERBATIM
install_vector_method("wraparound",wraparound);
ENDVERBATIM
}
}