/*
** $Id: dev_struct.h,v 1.1.1.1 2005/06/14 04:38:28 svitak Exp $
** $Log: dev_struct.h,v $
** Revision 1.1.1.1  2005/06/14 04:38:28  svitak
** Import from snapshot of CalTech CVS tree of June 8, 2005
**
** Revision 1.3  1998/06/30 22:14:21  dhb
** EDS 22d merge
**
** Revision 1.2  1998/04/01 00:01:59  dhb
** Incorporated spike analysis library by Dieter Jaeger.  Added
** include of spike_struct.h.
**
** Revision 1.1.1.1  1998/06/30 22:12:05  dhb
** EDS 22d
**
 * EDS22d revison: EDS BBF-UIA 98/06/16-98/06/16
 * Added calculator
 *
** Revision 1.1  1992/12/11 19:02:54  dhb
** Initial revision
**
*/

#include "spike_struct.h"

struct efield_type {
    ELEMENT_TYPE
    double	field;
    float	scale;
};

struct expthresh_type {
    ELEMENT_TYPE
    float	theta_s;
    float	theta_0;
    float	tau_theta;
    float	state;
};

struct diffamp_type {
    ELEMENT_TYPE
    float	plus;
    float	minus;
    float	gain;
    float	saturation;
    double	output;
};

struct funcgen_type {
    ELEMENT_TYPE
    short	mode;
    float	amplitude;
    float	frequency;
    float	phase;
    float	dc_offset;
    double	output;
};

struct freq_mon_type {
    BUFFER_TYPE
    float	exponent;
    float	frequency;
};

struct injection_type {
    ELEMENT_TYPE
    double	i;
    float	Imax;
    float	Tmin;
    float	Tmax;
    float   	Period;
    float   	Width;
    short   	inj_method;
};

struct nernst_type {
    ELEMENT_TYPE
    float	constant;
    float	E;
    float	T;
    short	valency;
    float	Cin;
    float	Cout;
    float	scale;
};

#define NO_CLEAR_BINS 0
#define CLEAR_BINS 1
#define NEW_TABLE 2
#define FREE_RUN 0
#define TRIGGERED 1
#define SPIKES 2

struct peristim_type {
    ELEMENT_TYPE
	int 	output;
	float   threshold;
	float	binwidth;
	int		num_bins;
	short   trigger_mode; /* FREE_RUN or TRIGGERED or SPIKES*/
	short   reset_mode;  /* NO_CLEAR_BINS or CLEAR_BINS */
	int     *table;
	int		bin_index;
	int     bin_steps;
	short   spiking;
	short   allocated;
};

struct interspike_type {
    ELEMENT_TYPE
	double	output;
	float   threshold;
	float	binwidth;
	int		num_bins;
	short   trigger_mode; /* FREE_RUN or TRIGGERED or SPIKES*/
	short   reset_mode;  /* NO_CLEAR_BINS or CLEAR_BINS */
	int     *table;
	float  prev_time;
	short   triggered;
	short	spiking;
	short   allocated;
};

struct new_frequency_type {
	ELEMENT_TYPE
	float 	frequency;
	float   threshold;
	float	num_spikes;
	double	prev_time;
	short   spiking;
};

struct calc_type {
    ELEMENT_TYPE
    double	output;
    int		resetclock;
	float	output_init;
	double	next_init;
};