-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathlnet.h
More file actions
289 lines (235 loc) · 8.02 KB
/
Copy pathlnet.h
File metadata and controls
289 lines (235 loc) · 8.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
#define DELTA_T 0.00001
/* define trzeba zmieniac zaleznie od net.cfg */
#define OUT 0x1 /* bit flagi output z neuronu */
#define NOISE 0x2 /* bit dodawania szumu */
#define HISTO 0x4 /* bit opcji histogramu */
#define IEXT 0x8 /* bit dodawania pradu zewnetrznego */
#define VOUT 0x10 /* bit opcji outputu V */
#define BYL_SPIKE 0x20 /* bit uzywany w calkuj */
#define NEURON_KIND 0x40
#define SPIKE_DET 0x80 /* for links */
#define POSPOL 0X1 /* neuron affected by positive polarity stim */
#define NEGPOL 0X2 /* neuron affected by negative polarity stim */
#define O_BINARY 0
/*#define ONE_KIND*/
#define ONSET
/*#define SAME_DELAY*/
/*#define NOISEOUT*/
/*#define FULL*/
/*#define FAST*/
#define CALCIUM
/*#define VOUT_DOS do zamiana typu int w UNIX na format DOS*/
#define EPS 1.E-10
/* definicje struktur i stalych w modelu sieci neuronow */
#include <limits.h>
typedef unsigned char byte;
#define True 1
#define False 0
#define AP_tr 10. /* prog do sprawdzania czy jest spike */
#define V_INT_OFFSET 1024 /* wartosc integer dodawana do V dla otrzymania indeksu 0 */
#define TAB_SIZE 2048 /* rozmiar tablic w parametrach neuronow */
#define NEXCCLASS 4
#define NINHCLASS 3
#define NUMCLASS 7
#define NOISECLASS 0
#define EMPTY_LIST UCHAR_MAX /* was UCHAR_MAX */
#define ONE_SPIKE (EMPTY_LIST-1)
#define MAX_INTERVAL USHRT_MAX
#define SPIKE_LIST_LENGTH 20
#if SPIKE_LIST_LENGTH >= ONE_SPIKE
#error SPIKE_LIST LENGTH must be < ONE_SPIKE
#endif
#define MAX_NEURON USHRT_MAX /* change if type of NEURON_INDEX changes */
#define MAX_KIND UCHAR_MAX /* change if type of PARAMETER_INDEX changes */
typedef signed char WEIGHT;
typedef ushort DELAY; //was byte, can try ushort
typedef byte PARAMETER_INDEX;
typedef ushort SYNAPSE_NUMBER;
typedef ushort NEURON_INDEX;
typedef byte SPIKE_INDEX;
typedef ushort SPIKE_INTERVAL;
typedef double VAR;
typedef byte HIS;
typedef int LINK_WEIGHT;
typedef int LINK_INTERVAL;
#define MAX_LINK_INTERVAL INT_MAX
#define LINK_LIST_LENGTH 200 /* was 20 */
#if LINK_LIST_LENGTH >= ONE_SPIKE
#error LINK_LIST LENGTH must be < ONE_SPIKE
#endif
struct LINK
{
NEURON_INDEX neuron_post; /* nr neuronu post-synaptycznego */
NEURON_INDEX preclass_num; /* presynaptic class */
LINK_WEIGHT weight; /* weight */
LINK_INTERVAL delay; /* link delay */
LINK_INTERVAL interval[ LINK_LIST_LENGTH ];
SPIKE_INDEX first,last; /* was SPIKE_INDEX */
};
struct SYNAPSE
{
WEIGHT weight;
DELAY delay;
NEURON_INDEX neuron; /* nr neuronu postsynaptycznego */
NEURON_INDEX preclass_num; /* presynaptic class */
};
struct NEURON
{
byte flags; /* miejsce na opcje bitowe np. output */
byte polarity;/* byte to store polarity stimulation information */
PARAMETER_INDEX param; /* indeks do tablicy parametrow klas neuronow */
SYNAPSE_NUMBER syn_num; /* liczba synaps na wyjsciu */
VAR Vi_o[NINHCLASS]; /* skladowa onset potenjalu poch. z inhibicji */
VAR Ve_o[NEXCCLASS]; /* skladowa onset potencjalu poch. z ekscytacji */
VAR Vi_d[NINHCLASS]; /* skladowa decay potenjalu poch. z inhibicji */
VAR Ve_d[NEXCCLASS]; /* skladowa decay potencjalu poch. z ekscytacji */
VAR W; /* zmienna pomocnicza */
VAR V; /* napiecie blony */
VAR C[7];
// VAR C; /* intercellular koncentracja jonow wapnia */
// VAR C0;
// VAR C1;
// VAR C2;
// VAR C3;
// VAR C4;
// VAR C5;
VAR X; /* calcium activation variable */
VAR B;
VAR U[7];
// VAR U;
// VAR U0;
// VAR U1;
// VAR U2;
// VAR U3;
// VAR U4;
// VAR U5;
SPIKE_INDEX first,last; /* wskazniki do cyklicznej listy spike'ow */
SPIKE_INTERVAL interval;/* czas od ostatniego spike'u */
SPIKE_INTERVAL sum_interval; /* suma intervalow z listy czyli czas od pierwszego */
SPIKE_INTERVAL spikes[ SPIKE_LIST_LENGTH ];
};
struct PARAMETERS
{
SPIKE_INTERVAL *del;
VAR Aip[NINHCLASS]; /* amplituda potencjalu IPSP w t=0 (bez wagi) */
VAR Aep[NEXCCLASS]; /* amplituda potencjalu EPSP w t=0 (bez wagi) */
VAR An; /* amplituda dodawanego szumu */
VAR di_o[NINHCLASS]; /* decrement onset potencjalu IPSP */
VAR de_o[NEXCCLASS]; /* decrement onset potencjalu EPSP */
VAR di_d[NINHCLASS]; /* decrement decay potencjalu IPSP */
VAR de_d[NEXCCLASS]; /* decrement decay potencjalu EPSP jonow */
/* reverse potentials */
VAR V_L;
VAR V_Na;
VAR V_K;
/* przewodnictwa blony */
VAR G_Na;
VAR G_L;
VAR G_K_s; /* = G_K / (s**wp) */
VAR Esyn_i; /* potencjal odwrotny hamujacy */
VAR Esyn_e; /* potencjal odwrotny pobudzajacy */
VAR i_ext; /* prad zewnetrzny */
VAR V_Ca;
VAR G_K_Ca; /* Potas aktywowany wapniem */
VAR G_Ca; /* przewodnictwo wapnia */
VAR G_a;
VAR Kd;
VAR Kp;
VAR Kc;
VAR R;
VAR tau_x;
VAR tau_b;
VAR forw;
VAR back;
VAR gpump;
VAR Kpump;
VAR Cao;
VAR Utot;
VAR PCa;
VAR D; /* diffusion coeficient */
VAR Rsh0; /* array of shell radii */
VAR Rsh1;
VAR Rsh2;
VAR Rsh3;
VAR Rsh4;
VAR Rsh5;
VAR Rsh;
VAR dr; /* shell thicknes */
VAR Utot0; /* Utot array */
VAR Utot1;
VAR Utot2;
VAR Utot3;
VAR Utot4;
VAR Utot5;
} ;
/* deklaracje funkcji */
void set_flags();
void read_params(char*);
void read_synapses(char*);
void read_neurons(char*,int);
void write_neurons(char*);
void read_links(char*,int);
void write_links(char*);
int calkuj( struct NEURON *neuron_nr);
void szum( struct NEURON *neuron_nr);
int save_stimulus(void);
void close_all(int sig);
void init();
int stimulus();
void link_update();
int sszalloc(int s);
int stszalloc(int s);
int stim_freq(struct NEURON *neuron_nr);
#define V_0 -60.02209
#define W_0 0.05994952
#define X_0 0.002450918
#define B_0 0.1196677
#define C_0 2.082966e-05
#define U_0 0.
//#define C0_0 0.000018
//#define C1_0 0.000018
//#define C2_0 0.000018
//#define C3_0 0.000018
//#define C4_0 0.000018
//#define C5_0 0.000018
//#define U0_0 0.
//#define U1_0 0.
//#define U2_0 0.
//#define U3_0 0.
//#define U4_0 0.
//#define U5_0 0.
#define W_inf(V) (1./(1.+exp(-2.*0.055*(V+35.))))
#define X_inf(V) (1./(1.+exp(-2.*0.2*(V+45.))))
#define A_inf(V) (1./(1.+exp(-2.*0.02*(V+20.))))
#define B_inf(V) (1./(1.+exp(-2.*-0.095*(V+70.))))
VAR G_Na_m(VAR V,struct PARAMETERS *par)
{
register VAR robol;
robol=(1.+exp(-2.*0.065*(V+31.)));
return( par->G_Na/(robol*robol*robol) );
}
#define tau(V) ((1./(0.08*2*cosh(0.055*(V+35.))))/(DELTA_T*1000))
//#define omc(C) (0.25+exp(80*(C-0.55))/(1+exp(80*(C-0.55)))-0.25*exp(80*(C-0.35))/(1+exp(80*(C-0.35))))
//#define om(C) omc(C)
//#define om(C) ((omc(C) < 0.5)?omc(C):0.5)
//#define om(C) (0.25+exp(80*(C-0.55))/(1+exp(80*(C-0.55)))-0.25*exp(80*(C-0.35))/(1+exp(80*(C-0.35)))-0.5*(exp(80*(i-0.55))/(1+exp(80*(i-0.55)))) )
//#define taul(C) ((1000+1/(0.0001+C*C*C/100))/(DELTA_T*1000))
//#define taul(C) ((1000+1/(0.0001+C*C*C/100))/0.01)
//#define B_NMDA(V) (1/(1+exp(-0.062*V)*0.28011))
//#define V_NMDA(C) (13.319652*log(2/C))
//#define V_NMDA(C) 130
//#define V_NMDA(C) 0
struct SYNAPSESD
{
VAR w;
VAR V_d;
VAR V_o;
VAR C;
};
struct LINKD
{
VAR w;
VAR V_d;
VAR V_o;
VAR C;
};