CARLsim  5.0.0
CARLsim: a GPU-accelerated SNN simulator
carlsim_datastructures.h
Go to the documentation of this file.
1 /* * Copyright (c) 2016 Regents of the University of California. All rights reserved.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions
5 * are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * 3. The names of its contributors may not be used to endorse or promote
15 * products derived from this software without specific prior written
16 * permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * *********************************************************************************************** *
31 * CARLsim
32 * created by: (MDR) Micah Richert, (JN) Jayram M. Nageswaran
33 * maintained by:
34 * (MA) Mike Avery <averym@uci.edu>
35 * (MB) Michael Beyeler <mbeyeler@uci.edu>,
36 * (KDC) Kristofor Carlson <kdcarlso@uci.edu>
37 * (TSC) Ting-Shuo Chou <tingshuc@uci.edu>
38 * (HK) Hirak J Kashyap <kashyaph@uci.edu>
39 *
40 * CARLsim v1.0: JM, MDR
41 * CARLsim v2.0/v2.1/v2.2: JM, MDR, MA, MB, KDC
42 * CARLsim3: MB, KDC, TSC
43 * CARLsim4: TSC, HK
44 * CARLsim5: HK, JX, KC
45 *
46 * CARLsim available from http://socsci.uci.edu/~jkrichma/CARLsim/
47 * Ver 12/31/2016
48 */
49 
50 #ifndef _CARLSIM_DATASTRUCTURES_H_
51 #define _CARLSIM_DATASTRUCTURES_H_
52 
53 #include <ostream> // print struct info
54 #include <user_errors.h> // CARLsim user errors
55 
91 enum LoggerMode {
92  USER,
98 };
99 static const char* loggerMode_string[] = {
100  "USER","DEVELOPER","SHOWTIME","SILENT","CUSTOM","Unknown mode"
101 };
102 
114 enum SimMode {
117  HYBRID_MODE
118 };
119 static const char* simMode_string[] = {
120  "CPU mode","GPU mode","Hybrid mode"
121 };
122 
137 };
138 static const char* integrationMethod_string[] = {
139  "Forward-Euler", "4-th order Runge-Kutta", "Unknown integration method"
140 };
141 
142 
150  GPU_CORES
151 };
152 
153 // \TODO: extend documentation, add relevant references
161 enum STDPType {
165 };
166 
167 static const char* stdpType_string[] = {
168  "Standard STDP",
169  "Dopamine-modulated STDP",
170  "Unknown mode"
171 };
172 
178 enum STDPCurve {
183 };
184 static const char* stdpCurve_string[] = {
185  "exponential curve",
186  "pulse curve",
187  "timing-based curve",
188  "Unknow curve"
189 };
190 
203  AER,
204 };
205 static const char* spikeMonMode_string[] = {
206  "SpikeCount Mode","SpikeTime Mode"
207 };
208 
224  NM_UNKNOWN
225 };
226 static const char* neuromodulator_string[] = {
227  "Dopamine", "Serotonin", "Acetylcholine", "Noradrenaline", "Unknown neuromodulator"
228 };
229 
242 };
243 static const char* updateInterval_string[] = {
244  "10 ms interval", "100 ms interval", "1000 ms interval"
245 };
246 
263  RUN_STATE
264 };
265 static const char* carlsimState_string[] = {
266  "Configuration state", "Setup state", "Run state"
267 };
268 
279 struct RangeDelay {
280  RangeDelay(int _val) {
281  min = _val;
282  max = _val;
283  }
284  RangeDelay(int _min, int _max) {
285  UserErrors::assertTrue(_min<=_max, UserErrors::CANNOT_BE_LARGER, "RangeDelay", "minDelay", "maxDelay");
286  min = _min;
287  max = _max;
288  }
289 
290  friend std::ostream& operator<<(std::ostream &strm, const RangeDelay &d) {
291  return strm << "delay=[" << d.min << "," << d.max << "]";
292  }
293  int min,max;
294 };
295 
312 struct RangeWeight {
313  RangeWeight(double _val) {
314  init = _val;
315  max = _val;
316  min = 0;
317  }
318  RangeWeight(double _min, double _max) {
319  UserErrors::assertTrue(_min<=_max, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "minWt", "maxWt");
320  min = _min;
321  init = _min;
322  max = _max;
323  }
324  RangeWeight(double _min, double _init, double _max) {
325  UserErrors::assertTrue(_min<=_init, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "minWt", "initWt");
326  UserErrors::assertTrue(_init<=_max, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "initWt", "maxWt");
327  min = _min;
328  init = _init;
329  max = _max;
330  }
331 
332  friend std::ostream& operator<<(std::ostream &strm, const RangeWeight &w) {
333  return strm << "wt=[" << w.min << "," << w.init << "," << w.max << "]";
334  }
335  double min, init, max;
336 };
337 
364 struct RadiusRF {
365  RadiusRF() : radX(0.0), radY(0.0), radZ(0.0) {}
366  RadiusRF(double rad) : radX(rad), radY(rad), radZ(rad) {}
367  RadiusRF(double rad_x, double rad_y, double rad_z) : radX(rad_x), radY(rad_y), radZ(rad_z) {}
368 
369  friend std::ostream& operator<<(std::ostream &strm, const RadiusRF &r) {
370  return strm << "RadiusRF=[" << r.radX << "," << r.radY << "," << r.radZ << "]";
371  }
372 
373  double radX, radY, radZ;
374 };
375 
380 struct RangeRmem{
381  RangeRmem(double _rMem){
382  // same membrane resistance for all neurons in the group
383  UserErrors::assertTrue(_rMem >= 0.0f, UserErrors::CANNOT_BE_NEGATIVE, "RangeRmem", "rMem");
384  minRmem = _rMem;
385  maxRmem = _rMem;
386  }
387 
388  RangeRmem(double _minRmem, double _maxRmem){
389  // membrane resistances of the neuron group varies uniformly between a maximum and a minimum value
390  UserErrors::assertTrue(_minRmem >= 0.0f, UserErrors::CANNOT_BE_NEGATIVE, "RangeRmem", "minRmem");
391  UserErrors::assertTrue(_minRmem <= _maxRmem, UserErrors::CANNOT_BE_LARGER, "RangeRmem", "minRmem", "maxRmem");
392  minRmem = _minRmem;
393  maxRmem = _maxRmem;
394  }
395 
396  friend std::ostream& operator<<(std::ostream &strm, const RangeRmem &rMem) {
397  return strm << "RangeRmem=[" << rMem.minRmem << "," << rMem.maxRmem << "]";
398  }
399  double minRmem, maxRmem;
400 };
401 
402 
412 typedef struct GroupSTDPInfo_s {
413  bool WithSTDP;
414  bool WithESTDP;
415  bool WithISTDP;
428  float GAMMA;
429  float BETA_LTP;
430  float BETA_LTD;
431  float LAMBDA;
432  float DELTA;
434 
445  float baseDP;
446  float base5HT;
447  float baseACh;
448  float baseNE;
449  float decayDP;
450  float decay5HT;
451  float decayACh;
452  float decayNE;
454 
490 struct Grid3D {
491  Grid3D() : numX(-1), numY(-1), numZ(-1), N(-1),
492  distX(-1.0f), distY(-1.0f), distZ(-1.0f),
493  offsetX(-1.0f), offsetY(-1.0f), offsetZ(-1.0f) {
494  }
495 
496  Grid3D(int _x) : numX(_x), numY(1), numZ(1), N(_x),
497  distX(1.0f), distY(1.0f), distZ(1.0f),
498  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
499  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
500  }
501 
502  Grid3D(int _x, float _distX, float _offsetX) : numX(_x), numY(1), numZ(1), N(_x),
503  distX(_distX), distY(1.0f), distZ(1.0f),
504  offsetX(_offsetX), offsetY(1.0f), offsetZ(1.0f) {
505  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
506  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
507  }
508 
509  Grid3D(int _x, int _y) : numX(_x), numY(_y), numZ(1), N(_x * _y),
510  distX(1.0f), distY(1.0f), distZ(1.0f),
511  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
512  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
513  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
514  }
515 
516  Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY)
517  : numX(_x), numY(_y), numZ(1), N(_x * _y),
518  distX(_distX), distY(_distY), distZ(1.0f),
519  offsetX(_offsetX), offsetY(_offsetY), offsetZ(1.0f) {
520  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
521  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
522  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
523  UserErrors::assertTrue(_distY > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distY");
524  }
525  Grid3D(int _x, int _y, int _z) : numX(_x), numY(_y), numZ(_z), N(_x * _y * _z),
526  distX(1.0f), distY(1.0f), distZ(1.0f),
527  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
528  UserErrors::assertTrue(_x>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
529  UserErrors::assertTrue(_y>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
530  UserErrors::assertTrue(_z>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numZ");
531  }
532  Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY, int _z, float _distZ, float _offsetZ)
533  : numX(_x), numY(_y), numZ(_z), N(_x * _y * _z),
534  distX(_distX), distY(_distY), distZ(_distZ),
535  offsetX(_offsetX), offsetY(_offsetY), offsetZ(_offsetZ) {
536  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
537  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
538  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
539  UserErrors::assertTrue(_distY > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distY");
540  UserErrors::assertTrue(_z > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numZ");
541  UserErrors::assertTrue(_distZ > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distZ");
542  }
543 
544  friend std::ostream& operator<<(std::ostream &strm, const Grid3D &g) {
545  return strm << "Grid3D=[" << g.numX << "," << g.numY << "," << g.numZ << "]";
546  }
547 
548  int numX, numY, numZ;
549  float distX, distY, distZ;
551  int N;
552 };
553 
571 struct ExpCurve {
572  ExpCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus) : alphaPlus(_alphaPlus), tauPlus(_tauPlus), alphaMinus(_alphaMinus), tauMinus(_tauMinus) {
573  UserErrors::assertTrue(_tauPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "ExpCurve", "tauPlus");
574  UserErrors::assertTrue(_tauMinus > 0.0f, UserErrors::MUST_BE_POSITIVE, "ExpCurve", "tauMinus");
575 
577  }
578 
580  float alphaPlus;
581  float tauPlus;
582  float alphaMinus;
583  float tauMinus;
584 };
585 
615  TimingBasedCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus, float _gamma) : alphaPlus(_alphaPlus), tauPlus(_tauPlus), alphaMinus(_alphaMinus), tauMinus(_tauMinus) , gamma(_gamma) {
616  UserErrors::assertTrue(_alphaPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "alphaPlus");
617  UserErrors::assertTrue(_alphaMinus < 0.0f, UserErrors::MUST_BE_NEGATIVE, "TimingBasedCurve", "alphaMinus");
618  UserErrors::assertTrue(_tauPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "tauPlus");
619  UserErrors::assertTrue(_tauMinus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "tauMinus");
620  UserErrors::assertTrue(_gamma > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "gamma");
621  UserErrors::assertTrue(_tauPlus >= _gamma, UserErrors::CANNOT_BE_SMALLER, "TimingBasedCurve", "tauPlus >= gamma");
622 
624  }
625 
627  float alphaPlus;
628  float tauPlus;
629  float alphaMinus;
630  float tauMinus;
631  float gamma;
632 };
633 
650 struct PulseCurve {
651  PulseCurve(float _betaLTP, float _betaLTD, float _lambda, float _delta) : betaLTP(_betaLTP), betaLTD(_betaLTD), lambda(_lambda), delta(_delta) {
652  UserErrors::assertTrue(_betaLTP > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "betaLTP");
653  UserErrors::assertTrue(_betaLTD < 0.0f, UserErrors::MUST_BE_NEGATIVE, "PulseCurve", "betaLTD");
654  UserErrors::assertTrue(_lambda > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "lambda");
655  UserErrors::assertTrue(_delta > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "delta");
656  UserErrors::assertTrue(_lambda < _delta, UserErrors::MUST_BE_SMALLER, "PulseCurve", "lambda < delta");
657 
659  }
660 
662  float betaLTP;
663  float betaLTD;
664  float lambda;
665  float delta;
666 };
667 
668 #endif
GPU_MODE
@ GPU_MODE
model is run on GPU card(s)
Definition: carlsim_datastructures.h:116
RangeWeight::init
double init
Definition: carlsim_datastructures.h:335
INTERVAL_100MS
@ INTERVAL_100MS
the update interval will be 100 ms, which is 10Hz update frequency
Definition: carlsim_datastructures.h:240
spikeMonMode_string
static const char * spikeMonMode_string[]
Definition: carlsim_datastructures.h:205
GroupSTDPInfo_s::TAU_MINUS_INV_EXC
float TAU_MINUS_INV_EXC
the inverse of time constant minus, if the exponential or timing-based E-STDP curve is used
Definition: carlsim_datastructures.h:421
Grid3D::offsetX
float offsetX
Definition: carlsim_datastructures.h:550
UserErrors::CANNOT_BE_LARGER
@ CANNOT_BE_LARGER
parameter cannot have larger vaule than some vaule
Definition: user_errors.h:35
GroupSTDPInfo_s::WithISTDPtype
STDPType WithISTDPtype
the type of I-STDP (STANDARD or DA_MOD)
Definition: carlsim_datastructures.h:417
RangeRmem::RangeRmem
RangeRmem(double _rMem)
Definition: carlsim_datastructures.h:381
RangeDelay::max
int max
Definition: carlsim_datastructures.h:293
RUN_STATE
@ RUN_STATE
run state, where the model is stepped
Definition: carlsim_datastructures.h:263
ExpCurve::ExpCurve
ExpCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus)
Definition: carlsim_datastructures.h:572
SimMode
SimMode
simulation mode
Definition: carlsim_datastructures.h:114
integrationMethod_t
integrationMethod_t
Integration methods.
Definition: carlsim_datastructures.h:133
AER
@ AER
mode in which spike information is collected in AER format
Definition: carlsim_datastructures.h:203
GroupSTDPInfo_s::TAU_PLUS_INV_EXC
float TAU_PLUS_INV_EXC
the inverse of time constant plus, if the exponential or timing-based E-STDP curve is used
Definition: carlsim_datastructures.h:420
RangeWeight::RangeWeight
RangeWeight(double _val)
Definition: carlsim_datastructures.h:313
GroupNeuromodulatorInfo_s::baseDP
float baseDP
baseline concentration of Dopamine
Definition: carlsim_datastructures.h:445
RangeWeight
a range struct for synaptic weight magnitudes
Definition: carlsim_datastructures.h:312
UserErrors::MUST_BE_SMALLER
@ MUST_BE_SMALLER
parameter must be smaller than
Definition: user_errors.h:56
NM_UNKNOWN
@ NM_UNKNOWN
unknown type
Definition: carlsim_datastructures.h:224
Grid3D::Grid3D
Grid3D(int _x, int _y)
Definition: carlsim_datastructures.h:509
RangeDelay::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RangeDelay &d)
Definition: carlsim_datastructures.h:290
Grid3D::offsetZ
float offsetZ
Definition: carlsim_datastructures.h:550
GroupSTDPInfo_s::BETA_LTD
float BETA_LTD
the amplitude of inhibitory LTD if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:430
user_errors.h
Grid3D::Grid3D
Grid3D()
Definition: carlsim_datastructures.h:491
RadiusRF::radX
double radX
Definition: carlsim_datastructures.h:373
Grid3D::distX
float distX
Definition: carlsim_datastructures.h:549
GroupSTDPInfo_s::WithSTDP
bool WithSTDP
enable STDP flag
Definition: carlsim_datastructures.h:413
Grid3D::operator<<
friend std::ostream & operator<<(std::ostream &strm, const Grid3D &g)
Definition: carlsim_datastructures.h:544
GroupSTDPInfo_s::ALPHA_MINUS_EXC
float ALPHA_MINUS_EXC
the amplitude of alpha minus, if the exponential or timing-based E-STDP curve is used
Definition: carlsim_datastructures.h:423
PulseCurve::stdpCurve
STDPCurve stdpCurve
the type of STDP curve
Definition: carlsim_datastructures.h:661
EXP_CURVE
@ EXP_CURVE
standard exponential curve
Definition: carlsim_datastructures.h:179
GroupSTDPInfo_s::TAU_MINUS_INV_INB
float TAU_MINUS_INV_INB
the inverse of tau minus, if the exponential I-STDP curve is used
Definition: carlsim_datastructures.h:425
RangeRmem::RangeRmem
RangeRmem(double _minRmem, double _maxRmem)
Definition: carlsim_datastructures.h:388
GroupSTDPInfo_s::ALPHA_PLUS_EXC
float ALPHA_PLUS_EXC
the amplitude of alpha plus, if the exponential or timing-based E-STDP curve is used
Definition: carlsim_datastructures.h:422
UserErrors::MUST_BE_POSITIVE
@ MUST_BE_POSITIVE
parameter must have positive value
Definition: user_errors.h:53
CARLsimState
CARLsimState
CARLsim states.
Definition: carlsim_datastructures.h:260
Grid3D::Grid3D
Grid3D(int _x)
Definition: carlsim_datastructures.h:496
RangeRmem::minRmem
double minRmem
Definition: carlsim_datastructures.h:399
integrationMethod_string
static const char * integrationMethod_string[]
Definition: carlsim_datastructures.h:138
TimingBasedCurve::TimingBasedCurve
TimingBasedCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus, float _gamma)
Definition: carlsim_datastructures.h:615
SHOWTIME
@ SHOWTIME
Showtime mode, will only output warnings and errors.
Definition: carlsim_datastructures.h:94
GroupSTDPInfo_s
A struct for retrieving STDP related information of a group.
Definition: carlsim_datastructures.h:412
Grid3D::numX
int numX
Definition: carlsim_datastructures.h:548
RangeWeight::max
double max
Definition: carlsim_datastructures.h:335
RangeRmem::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RangeRmem &rMem)
Definition: carlsim_datastructures.h:396
PulseCurve
struct to assign a pulse I-STDP curve
Definition: carlsim_datastructures.h:650
Grid3D::Grid3D
Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY, int _z, float _distZ, float _offsetZ)
Definition: carlsim_datastructures.h:532
GroupNeuromodulatorInfo_s::decayACh
float decayACh
decay rate for Acetylcholine
Definition: carlsim_datastructures.h:451
INTERVAL_1000MS
@ INTERVAL_1000MS
the update interval will be 1000 ms, which is 1Hz update frequency
Definition: carlsim_datastructures.h:241
RangeWeight::RangeWeight
RangeWeight(double _min, double _init, double _max)
Definition: carlsim_datastructures.h:324
RangeWeight::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RangeWeight &w)
Definition: carlsim_datastructures.h:332
Grid3D::Grid3D
Grid3D(int _x, float _distX, float _offsetX)
Definition: carlsim_datastructures.h:502
UNKNOWN_LOGGER
@ UNKNOWN_LOGGER
Definition: carlsim_datastructures.h:97
USER
@ USER
User mode, for experiment-oriented simulations.
Definition: carlsim_datastructures.h:92
RUNGE_KUTTA4
@ RUNGE_KUTTA4
Definition: carlsim_datastructures.h:135
Grid3D::Grid3D
Grid3D(int _x, int _y, int _z)
Definition: carlsim_datastructures.h:525
PULSE_CURVE
@ PULSE_CURVE
symmetric pulse curve
Definition: carlsim_datastructures.h:180
ExpCurve::tauPlus
float tauPlus
the time constant of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:581
PulseCurve::delta
float delta
the range of inhibitory LTD
Definition: carlsim_datastructures.h:665
TimingBasedCurve
A struct to assign a timing-based E-STDP curve.
Definition: carlsim_datastructures.h:614
TIMING_BASED_CURVE
@ TIMING_BASED_CURVE
timing-based curve
Definition: carlsim_datastructures.h:181
FORWARD_EULER
@ FORWARD_EULER
Definition: carlsim_datastructures.h:134
Grid3D::distY
float distY
Definition: carlsim_datastructures.h:549
RangeRmem::maxRmem
double maxRmem
Definition: carlsim_datastructures.h:399
GroupNeuromodulatorInfo_s::base5HT
float base5HT
baseline concentration of Serotonin
Definition: carlsim_datastructures.h:446
RangeDelay::RangeDelay
RangeDelay(int _val)
Definition: carlsim_datastructures.h:280
HYBRID_MODE
@ HYBRID_MODE
model is run on CPU Core(s), GPU card(s) or both
Definition: carlsim_datastructures.h:117
stdpType_string
static const char * stdpType_string[]
Definition: carlsim_datastructures.h:167
TimingBasedCurve::alphaMinus
float alphaMinus
the amplitude of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:629
NM_ACh
@ NM_ACh
acetylcholine
Definition: carlsim_datastructures.h:222
RangeDelay
a range struct for synaptic delays
Definition: carlsim_datastructures.h:279
GroupNeuromodulatorInfo_s::baseACh
float baseACh
baseline concentration of Acetylcholine
Definition: carlsim_datastructures.h:447
ExpCurve::stdpCurve
STDPCurve stdpCurve
the type of STDP curve
Definition: carlsim_datastructures.h:579
TimingBasedCurve::tauPlus
float tauPlus
the time constant of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:628
PulseCurve::betaLTD
float betaLTD
the amplitude of inhibitory LTD
Definition: carlsim_datastructures.h:663
GroupSTDPInfo_s::DELTA
float DELTA
the range of inhibitory LTD if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:432
INTERVAL_10MS
@ INTERVAL_10MS
the update interval will be 10 ms, which is 100Hz update frequency
Definition: carlsim_datastructures.h:239
ExpCurve::alphaMinus
float alphaMinus
the amplitude of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:582
GroupNeuromodulatorInfo_s::baseNE
float baseNE
baseline concentration of Noradrenaline
Definition: carlsim_datastructures.h:448
RangeDelay::min
int min
Definition: carlsim_datastructures.h:293
ExpCurve::tauMinus
float tauMinus
the time constant of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:583
ComputingBackend
ComputingBackend
computing backend
Definition: carlsim_datastructures.h:148
Grid3D::numY
int numY
Definition: carlsim_datastructures.h:548
RadiusRF::RadiusRF
RadiusRF(double rad_x, double rad_y, double rad_z)
Definition: carlsim_datastructures.h:367
CPU_MODE
@ CPU_MODE
model is run on CPU core(s)
Definition: carlsim_datastructures.h:115
TimingBasedCurve::gamma
float gamma
the turn-over point
Definition: carlsim_datastructures.h:631
UNKNOWN_STDP
@ UNKNOWN_STDP
Definition: carlsim_datastructures.h:164
GroupNeuromodulatorInfo_s::decayNE
float decayNE
decay rate for Noradrenaline
Definition: carlsim_datastructures.h:452
SpikeMonMode
SpikeMonMode
SpikeMonitor mode.
Definition: carlsim_datastructures.h:201
STDPCurve
STDPCurve
STDP curves.
Definition: carlsim_datastructures.h:178
ExpCurve
A struct to assign exponential STDP curves.
Definition: carlsim_datastructures.h:571
PulseCurve::lambda
float lambda
the range of inhibitory LTP
Definition: carlsim_datastructures.h:664
DA_MOD
@ DA_MOD
dopamine-modulated STDP, nearest-neighbor
Definition: carlsim_datastructures.h:163
Grid3D
A struct to arrange neurons on a 3D grid (a primitive cubic Bravais lattice with cubic side length 1)
Definition: carlsim_datastructures.h:490
CUSTOM
@ CUSTOM
Custom mode, the user can set the location of all the file pointers.
Definition: carlsim_datastructures.h:96
PulseCurve::betaLTP
float betaLTP
the amplitude of inhibitory LTP
Definition: carlsim_datastructures.h:662
ExpCurve::alphaPlus
float alphaPlus
the amplitude of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:580
loggerMode_string
static const char * loggerMode_string[]
Definition: carlsim_datastructures.h:99
simMode_string
static const char * simMode_string[]
Definition: carlsim_datastructures.h:119
NM_5HT
@ NM_5HT
serotonin
Definition: carlsim_datastructures.h:221
SILENT
@ SILENT
Silent mode, no output is generated.
Definition: carlsim_datastructures.h:95
SETUP_STATE
@ SETUP_STATE
setup state, where the neural network is prepared for execution and monitors are set
Definition: carlsim_datastructures.h:262
LoggerMode
LoggerMode
Logger modes.
Definition: carlsim_datastructures.h:91
Grid3D::distZ
float distZ
Definition: carlsim_datastructures.h:549
RadiusRF::radY
double radY
Definition: carlsim_datastructures.h:373
TimingBasedCurve::stdpCurve
STDPCurve stdpCurve
the type of STDP curve
Definition: carlsim_datastructures.h:626
RangeRmem
Struct defines the minimum and maximum membrane resisatnces of the LIF neuron group.
Definition: carlsim_datastructures.h:380
CONFIG_STATE
@ CONFIG_STATE
configuration state, where the neural network is configured
Definition: carlsim_datastructures.h:261
STANDARD
@ STANDARD
standard STDP of Bi & Poo (2001), nearest-neighbor
Definition: carlsim_datastructures.h:162
RangeDelay::RangeDelay
RangeDelay(int _min, int _max)
Definition: carlsim_datastructures.h:284
RangeWeight::RangeWeight
RangeWeight(double _min, double _max)
Definition: carlsim_datastructures.h:318
GroupSTDPInfo_s::WithESTDP
bool WithESTDP
enable E-STDP flag
Definition: carlsim_datastructures.h:414
neuromodulator_string
static const char * neuromodulator_string[]
Definition: carlsim_datastructures.h:226
GroupSTDPInfo_s::TAU_PLUS_INV_INB
float TAU_PLUS_INV_INB
the inverse of tau plus, if the exponential I-STDP curve is used
Definition: carlsim_datastructures.h:424
RangeWeight::min
double min
Definition: carlsim_datastructures.h:335
GroupSTDPInfo_s::WithESTDPcurve
STDPCurve WithESTDPcurve
the E-STDP curve
Definition: carlsim_datastructures.h:418
Grid3D::N
int N
Definition: carlsim_datastructures.h:551
UserErrors::MUST_BE_NEGATIVE
@ MUST_BE_NEGATIVE
parameter must have negative value
Definition: user_errors.h:50
RadiusRF::RadiusRF
RadiusRF(double rad)
Definition: carlsim_datastructures.h:366
GroupNeuromodulatorInfo_s::decay5HT
float decay5HT
decay rate for Serotonin
Definition: carlsim_datastructures.h:450
GPU_CORES
@ GPU_CORES
Definition: carlsim_datastructures.h:150
NM_NE
@ NM_NE
noradrenaline
Definition: carlsim_datastructures.h:223
GroupNeuromodulatorInfo
struct GroupNeuromodulatorInfo_s GroupNeuromodulatorInfo
A struct for retrieving neuromodulator information of a group.
GroupNeuromodulatorInfo_s
A struct for retrieving neuromodulator information of a group.
Definition: carlsim_datastructures.h:444
GroupSTDPInfo_s::WithESTDPtype
STDPType WithESTDPtype
the type of E-STDP (STANDARD or DA_MOD)
Definition: carlsim_datastructures.h:416
UserErrors::assertTrue
static void assertTrue(bool statement, errorType errorIfAssertionFails, std::string errorFunc, std::string errorMsgPrefix="", std::string errorMsgSuffix="")
simple wrapper for assert statement
Definition: user_errors.cpp:15
UpdateInterval
UpdateInterval
Update frequency for weights.
Definition: carlsim_datastructures.h:238
UserErrors::CANNOT_BE_NEGATIVE
@ CANNOT_BE_NEGATIVE
parameter cannot have negative value (opposite to "must be", but includes zero)
Definition: user_errors.h:33
UNKNOWN_CURVE
@ UNKNOWN_CURVE
unknown curve type
Definition: carlsim_datastructures.h:182
GroupSTDPInfo_s::BETA_LTP
float BETA_LTP
the amplitude of inhibitory LTP if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:429
GroupSTDPInfo_s::ALPHA_MINUS_INB
float ALPHA_MINUS_INB
the amplitude of alpha minus, if the exponential I-STDP curve is used
Definition: carlsim_datastructures.h:427
GroupSTDPInfo_s::LAMBDA
float LAMBDA
the range of inhibitory LTP if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:431
UserErrors::CANNOT_BE_SMALLER
@ CANNOT_BE_SMALLER
parameter cannot have smaller vaule than some vaule
Definition: user_errors.h:36
Neuromodulator
Neuromodulator
GroupMonitor flag.
Definition: carlsim_datastructures.h:219
UNKNOWN_INTEGRATION
@ UNKNOWN_INTEGRATION
Definition: carlsim_datastructures.h:136
TimingBasedCurve::alphaPlus
float alphaPlus
the amplitude of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:627
Grid3D::numZ
int numZ
Definition: carlsim_datastructures.h:548
GroupSTDPInfo
struct GroupSTDPInfo_s GroupSTDPInfo
A struct for retrieving STDP related information of a group.
stdpCurve_string
static const char * stdpCurve_string[]
Definition: carlsim_datastructures.h:184
RadiusRF::RadiusRF
RadiusRF()
Definition: carlsim_datastructures.h:365
DEVELOPER
@ DEVELOPER
Developer mode, for developing and debugging code.
Definition: carlsim_datastructures.h:93
RadiusRF::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RadiusRF &r)
Definition: carlsim_datastructures.h:369
GroupSTDPInfo_s::GAMMA
float GAMMA
the turn over point if the timing-based E-STDP curve is used
Definition: carlsim_datastructures.h:428
NM_DA
@ NM_DA
dopamine
Definition: carlsim_datastructures.h:220
RadiusRF
A struct to specify the receptive field (RF) radius in 3 dimensions.
Definition: carlsim_datastructures.h:364
GroupSTDPInfo_s::WithISTDP
bool WithISTDP
enable I-STDP flag
Definition: carlsim_datastructures.h:415
RadiusRF::radZ
double radZ
Definition: carlsim_datastructures.h:373
Grid3D::Grid3D
Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY)
Definition: carlsim_datastructures.h:516
GroupSTDPInfo_s::WithISTDPcurve
STDPCurve WithISTDPcurve
the I-STDP curve
Definition: carlsim_datastructures.h:419
carlsimState_string
static const char * carlsimState_string[]
Definition: carlsim_datastructures.h:265
STDPType
STDPType
STDP flavors.
Definition: carlsim_datastructures.h:161
PulseCurve::PulseCurve
PulseCurve(float _betaLTP, float _betaLTD, float _lambda, float _delta)
Definition: carlsim_datastructures.h:651
COUNT
@ COUNT
mode in which only spike count information is collected
Definition: carlsim_datastructures.h:202
TimingBasedCurve::tauMinus
float tauMinus
the time constant of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:630
updateInterval_string
static const char * updateInterval_string[]
Definition: carlsim_datastructures.h:243
Grid3D::offsetY
float offsetY
Definition: carlsim_datastructures.h:550
CPU_CORES
@ CPU_CORES
Definition: carlsim_datastructures.h:149
GroupSTDPInfo_s::ALPHA_PLUS_INB
float ALPHA_PLUS_INB
the amplitude of alpha plus, if the exponential I-STDP curve is used
Definition: carlsim_datastructures.h:426
GroupNeuromodulatorInfo_s::decayDP
float decayDP
decay rate for Dopaamine
Definition: carlsim_datastructures.h:449