CARLsim  4.1.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 *
45 * CARLsim available from http://socsci.uci.edu/~jkrichma/CARLsim/
46 * Ver 12/31/2016
47 */
48 
49 #ifndef _CARLSIM_DATASTRUCTURES_H_
50 #define _CARLSIM_DATASTRUCTURES_H_
51 
52 #include <ostream> // print struct info
53 #include <user_errors.h> // CARLsim user errors
54 
90 enum LoggerMode {
91  USER,
97 };
98 static const char* loggerMode_string[] = {
99  "USER","DEVELOPER","SHOWTIME","SILENT","CUSTOM","Unknown mode"
100 };
101 
113 enum SimMode {
116  HYBRID_MODE
117 };
118 static const char* simMode_string[] = {
119  "CPU mode","GPU mode","Hybrid mode"
120 };
121 
136 };
137 static const char* integrationMethod_string[] = {
138  "Forward-Euler", "4-th order Runge-Kutta", "Unknown integration method"
139 };
140 
141 
149  GPU_CORES
150 };
151 
152 // \TODO: extend documentation, add relevant references
160 enum STDPType {
164 };
165 
166 static const char* stdpType_string[] = {
167  "Standard STDP",
168  "Dopamine-modulated STDP",
169  "Unknown mode"
170 };
171 
177 enum STDPCurve {
182 };
183 static const char* stdpCurve_string[] = {
184  "exponential curve",
185  "pulse curve",
186  "timing-based curve",
187  "Unknow curve"
188 };
189 
202  AER,
203 };
204 static const char* spikeMonMode_string[] = {
205  "SpikeCount Mode","SpikeTime Mode"
206 };
207 
223  NM_UNKNOWN
224 };
225 static const char* neuromodulator_string[] = {
226  "Dopamine", "Serotonin", "Acetylcholine", "Noradrenaline", "Unknown neuromodulator"
227 };
228 
241 };
242 static const char* updateInterval_string[] = {
243  "10 ms interval", "100 ms interval", "1000 ms interval"
244 };
245 
262  RUN_STATE
263 };
264 static const char* carlsimState_string[] = {
265  "Configuration state", "Setup state", "Run state"
266 };
267 
278 struct RangeDelay {
279  RangeDelay(int _val) {
280  min = _val;
281  max = _val;
282  }
283  RangeDelay(int _min, int _max) {
284  UserErrors::assertTrue(_min<=_max, UserErrors::CANNOT_BE_LARGER, "RangeDelay", "minDelay", "maxDelay");
285  min = _min;
286  max = _max;
287  }
288 
289  friend std::ostream& operator<<(std::ostream &strm, const RangeDelay &d) {
290  return strm << "delay=[" << d.min << "," << d.max << "]";
291  }
292  int min,max;
293 };
294 
311 struct RangeWeight {
312  RangeWeight(double _val) {
313  init = _val;
314  max = _val;
315  min = 0;
316  }
317  RangeWeight(double _min, double _max) {
318  UserErrors::assertTrue(_min<=_max, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "minWt", "maxWt");
319  min = _min;
320  init = _min;
321  max = _max;
322  }
323  RangeWeight(double _min, double _init, double _max) {
324  UserErrors::assertTrue(_min<=_init, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "minWt", "initWt");
325  UserErrors::assertTrue(_init<=_max, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "initWt", "maxWt");
326  min = _min;
327  init = _init;
328  max = _max;
329  }
330 
331  friend std::ostream& operator<<(std::ostream &strm, const RangeWeight &w) {
332  return strm << "wt=[" << w.min << "," << w.init << "," << w.max << "]";
333  }
334  double min, init, max;
335 };
336 
363 struct RadiusRF {
364  RadiusRF() : radX(0.0), radY(0.0), radZ(0.0) {}
365  RadiusRF(double rad) : radX(rad), radY(rad), radZ(rad) {}
366  RadiusRF(double rad_x, double rad_y, double rad_z) : radX(rad_x), radY(rad_y), radZ(rad_z) {}
367 
368  friend std::ostream& operator<<(std::ostream &strm, const RadiusRF &r) {
369  return strm << "RadiusRF=[" << r.radX << "," << r.radY << "," << r.radZ << "]";
370  }
371 
372  double radX, radY, radZ;
373 };
374 
379 struct RangeRmem{
380  RangeRmem(double _rMem){
381  // same membrane resistance for all neurons in the group
382  UserErrors::assertTrue(_rMem >= 0.0f, UserErrors::CANNOT_BE_NEGATIVE, "RangeRmem", "rMem");
383  minRmem = _rMem;
384  maxRmem = _rMem;
385  }
386 
387  RangeRmem(double _minRmem, double _maxRmem){
388  // membrane resistances of the neuron group varies uniformly between a maximum and a minimum value
389  UserErrors::assertTrue(_minRmem >= 0.0f, UserErrors::CANNOT_BE_NEGATIVE, "RangeRmem", "minRmem");
390  UserErrors::assertTrue(_minRmem <= _maxRmem, UserErrors::CANNOT_BE_LARGER, "RangeRmem", "minRmem", "maxRmem");
391  minRmem = _minRmem;
392  maxRmem = _maxRmem;
393  }
394 
395  friend std::ostream& operator<<(std::ostream &strm, const RangeRmem &rMem) {
396  return strm << "RangeRmem=[" << rMem.minRmem << "," << rMem.maxRmem << "]";
397  }
398  double minRmem, maxRmem;
399 };
400 
401 
411 typedef struct GroupSTDPInfo_s {
412  bool WithSTDP;
413  bool WithESTDP;
414  bool WithISTDP;
427  float GAMMA;
428  float BETA_LTP;
429  float BETA_LTD;
430  float LAMBDA;
431  float DELTA;
433 
444  float baseDP;
445  float base5HT;
446  float baseACh;
447  float baseNE;
448  float decayDP;
449  float decay5HT;
450  float decayACh;
451  float decayNE;
453 
489 struct Grid3D {
490  Grid3D() : numX(-1), numY(-1), numZ(-1), N(-1),
491  distX(-1.0f), distY(-1.0f), distZ(-1.0f),
492  offsetX(-1.0f), offsetY(-1.0f), offsetZ(-1.0f) {
493  }
494 
495  Grid3D(int _x) : numX(_x), numY(1), numZ(1), N(_x),
496  distX(1.0f), distY(1.0f), distZ(1.0f),
497  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
498  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
499  }
500 
501  Grid3D(int _x, float _distX, float _offsetX) : numX(_x), numY(1), numZ(1), N(_x),
502  distX(_distX), distY(1.0f), distZ(1.0f),
503  offsetX(_offsetX), offsetY(1.0f), offsetZ(1.0f) {
504  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
505  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
506  }
507 
508  Grid3D(int _x, int _y) : numX(_x), numY(_y), numZ(1), N(_x * _y),
509  distX(1.0f), distY(1.0f), distZ(1.0f),
510  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
511  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
512  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
513  }
514 
515  Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY)
516  : numX(_x), numY(_y), numZ(1), N(_x * _y),
517  distX(_distX), distY(_distY), distZ(1.0f),
518  offsetX(_offsetX), offsetY(_offsetY), offsetZ(1.0f) {
519  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
520  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
521  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
522  UserErrors::assertTrue(_distY > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distY");
523  }
524  Grid3D(int _x, int _y, int _z) : numX(_x), numY(_y), numZ(_z), N(_x * _y * _z),
525  distX(1.0f), distY(1.0f), distZ(1.0f),
526  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
527  UserErrors::assertTrue(_x>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
528  UserErrors::assertTrue(_y>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
529  UserErrors::assertTrue(_z>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numZ");
530  }
531  Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY, int _z, float _distZ, float _offsetZ)
532  : numX(_x), numY(_y), numZ(_z), N(_x * _y * _z),
533  distX(_distX), distY(_distY), distZ(_distZ),
534  offsetX(_offsetX), offsetY(_offsetY), offsetZ(_offsetZ) {
535  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
536  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
537  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
538  UserErrors::assertTrue(_distY > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distY");
539  UserErrors::assertTrue(_z > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numZ");
540  UserErrors::assertTrue(_distZ > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distZ");
541  }
542 
543  friend std::ostream& operator<<(std::ostream &strm, const Grid3D &g) {
544  return strm << "Grid3D=[" << g.numX << "," << g.numY << "," << g.numZ << "]";
545  }
546 
547  int numX, numY, numZ;
548  float distX, distY, distZ;
550  int N;
551 };
552 
570 struct ExpCurve {
571  ExpCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus) : alphaPlus(_alphaPlus), tauPlus(_tauPlus), alphaMinus(_alphaMinus), tauMinus(_tauMinus) {
572  UserErrors::assertTrue(_tauPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "ExpCurve", "tauPlus");
573  UserErrors::assertTrue(_tauMinus > 0.0f, UserErrors::MUST_BE_POSITIVE, "ExpCurve", "tauMinus");
574 
576  }
577 
579  float alphaPlus;
580  float tauPlus;
581  float alphaMinus;
582  float tauMinus;
583 };
584 
614  TimingBasedCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus, float _gamma) : alphaPlus(_alphaPlus), tauPlus(_tauPlus), alphaMinus(_alphaMinus), tauMinus(_tauMinus) , gamma(_gamma) {
615  UserErrors::assertTrue(_alphaPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "alphaPlus");
616  UserErrors::assertTrue(_alphaMinus < 0.0f, UserErrors::MUST_BE_NEGATIVE, "TimingBasedCurve", "alphaMinus");
617  UserErrors::assertTrue(_tauPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "tauPlus");
618  UserErrors::assertTrue(_tauMinus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "tauMinus");
619  UserErrors::assertTrue(_gamma > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "gamma");
620  UserErrors::assertTrue(_tauPlus >= _gamma, UserErrors::CANNOT_BE_SMALLER, "TimingBasedCurve", "tauPlus >= gamma");
621 
623  }
624 
626  float alphaPlus;
627  float tauPlus;
628  float alphaMinus;
629  float tauMinus;
630  float gamma;
631 };
632 
649 struct PulseCurve {
650  PulseCurve(float _betaLTP, float _betaLTD, float _lambda, float _delta) : betaLTP(_betaLTP), betaLTD(_betaLTD), lambda(_lambda), delta(_delta) {
651  UserErrors::assertTrue(_betaLTP > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "betaLTP");
652  UserErrors::assertTrue(_betaLTD < 0.0f, UserErrors::MUST_BE_NEGATIVE, "PulseCurve", "betaLTD");
653  UserErrors::assertTrue(_lambda > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "lambda");
654  UserErrors::assertTrue(_delta > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "delta");
655  UserErrors::assertTrue(_lambda < _delta, UserErrors::MUST_BE_SMALLER, "PulseCurve", "lambda < delta");
656 
658  }
659 
661  float betaLTP;
662  float betaLTD;
663  float lambda;
664  float delta;
665 };
666 
667 #endif
GPU_MODE
@ GPU_MODE
model is run on GPU card(s)
Definition: carlsim_datastructures.h:115
RangeWeight::init
double init
Definition: carlsim_datastructures.h:334
INTERVAL_100MS
@ INTERVAL_100MS
the update interval will be 100 ms, which is 10Hz update frequency
Definition: carlsim_datastructures.h:239
spikeMonMode_string
static const char * spikeMonMode_string[]
Definition: carlsim_datastructures.h:204
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:420
Grid3D::offsetX
float offsetX
Definition: carlsim_datastructures.h:549
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:416
RangeRmem::RangeRmem
RangeRmem(double _rMem)
Definition: carlsim_datastructures.h:380
RangeDelay::max
int max
Definition: carlsim_datastructures.h:292
RUN_STATE
@ RUN_STATE
run state, where the model is stepped
Definition: carlsim_datastructures.h:262
ExpCurve::ExpCurve
ExpCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus)
Definition: carlsim_datastructures.h:571
SimMode
SimMode
simulation mode
Definition: carlsim_datastructures.h:113
integrationMethod_t
integrationMethod_t
Integration methods.
Definition: carlsim_datastructures.h:132
AER
@ AER
mode in which spike information is collected in AER format
Definition: carlsim_datastructures.h:202
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:419
RangeWeight::RangeWeight
RangeWeight(double _val)
Definition: carlsim_datastructures.h:312
GroupNeuromodulatorInfo_s::baseDP
float baseDP
baseline concentration of Dopamine
Definition: carlsim_datastructures.h:444
RangeWeight
a range struct for synaptic weight magnitudes
Definition: carlsim_datastructures.h:311
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:223
Grid3D::Grid3D
Grid3D(int _x, int _y)
Definition: carlsim_datastructures.h:508
RangeDelay::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RangeDelay &d)
Definition: carlsim_datastructures.h:289
Grid3D::offsetZ
float offsetZ
Definition: carlsim_datastructures.h:549
GroupSTDPInfo_s::BETA_LTD
float BETA_LTD
the amplitude of inhibitory LTD if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:429
user_errors.h
Grid3D::Grid3D
Grid3D()
Definition: carlsim_datastructures.h:490
RadiusRF::radX
double radX
Definition: carlsim_datastructures.h:372
Grid3D::distX
float distX
Definition: carlsim_datastructures.h:548
GroupSTDPInfo_s::WithSTDP
bool WithSTDP
enable STDP flag
Definition: carlsim_datastructures.h:412
Grid3D::operator<<
friend std::ostream & operator<<(std::ostream &strm, const Grid3D &g)
Definition: carlsim_datastructures.h:543
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:422
PulseCurve::stdpCurve
STDPCurve stdpCurve
the type of STDP curve
Definition: carlsim_datastructures.h:660
EXP_CURVE
@ EXP_CURVE
standard exponential curve
Definition: carlsim_datastructures.h:178
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:424
RangeRmem::RangeRmem
RangeRmem(double _minRmem, double _maxRmem)
Definition: carlsim_datastructures.h:387
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:421
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:259
Grid3D::Grid3D
Grid3D(int _x)
Definition: carlsim_datastructures.h:495
RangeRmem::minRmem
double minRmem
Definition: carlsim_datastructures.h:398
integrationMethod_string
static const char * integrationMethod_string[]
Definition: carlsim_datastructures.h:137
TimingBasedCurve::TimingBasedCurve
TimingBasedCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus, float _gamma)
Definition: carlsim_datastructures.h:614
SHOWTIME
@ SHOWTIME
Showtime mode, will only output warnings and errors.
Definition: carlsim_datastructures.h:93
GroupSTDPInfo_s
A struct for retrieving STDP related information of a group.
Definition: carlsim_datastructures.h:411
Grid3D::numX
int numX
Definition: carlsim_datastructures.h:547
RangeWeight::max
double max
Definition: carlsim_datastructures.h:334
RangeRmem::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RangeRmem &rMem)
Definition: carlsim_datastructures.h:395
PulseCurve
struct to assign a pulse I-STDP curve
Definition: carlsim_datastructures.h:649
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:531
GroupNeuromodulatorInfo_s::decayACh
float decayACh
decay rate for Acetylcholine
Definition: carlsim_datastructures.h:450
INTERVAL_1000MS
@ INTERVAL_1000MS
the update interval will be 1000 ms, which is 1Hz update frequency
Definition: carlsim_datastructures.h:240
RangeWeight::RangeWeight
RangeWeight(double _min, double _init, double _max)
Definition: carlsim_datastructures.h:323
RangeWeight::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RangeWeight &w)
Definition: carlsim_datastructures.h:331
Grid3D::Grid3D
Grid3D(int _x, float _distX, float _offsetX)
Definition: carlsim_datastructures.h:501
UNKNOWN_LOGGER
@ UNKNOWN_LOGGER
Definition: carlsim_datastructures.h:96
USER
@ USER
User mode, for experiment-oriented simulations.
Definition: carlsim_datastructures.h:91
RUNGE_KUTTA4
@ RUNGE_KUTTA4
Definition: carlsim_datastructures.h:134
Grid3D::Grid3D
Grid3D(int _x, int _y, int _z)
Definition: carlsim_datastructures.h:524
PULSE_CURVE
@ PULSE_CURVE
symmetric pulse curve
Definition: carlsim_datastructures.h:179
ExpCurve::tauPlus
float tauPlus
the time constant of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:580
PulseCurve::delta
float delta
the range of inhibitory LTD
Definition: carlsim_datastructures.h:664
TimingBasedCurve
A struct to assign a timing-based E-STDP curve.
Definition: carlsim_datastructures.h:613
TIMING_BASED_CURVE
@ TIMING_BASED_CURVE
timing-based curve
Definition: carlsim_datastructures.h:180
FORWARD_EULER
@ FORWARD_EULER
Definition: carlsim_datastructures.h:133
Grid3D::distY
float distY
Definition: carlsim_datastructures.h:548
RangeRmem::maxRmem
double maxRmem
Definition: carlsim_datastructures.h:398
GroupNeuromodulatorInfo_s::base5HT
float base5HT
baseline concentration of Serotonin
Definition: carlsim_datastructures.h:445
RangeDelay::RangeDelay
RangeDelay(int _val)
Definition: carlsim_datastructures.h:279
HYBRID_MODE
@ HYBRID_MODE
model is run on CPU Core(s), GPU card(s) or both
Definition: carlsim_datastructures.h:116
stdpType_string
static const char * stdpType_string[]
Definition: carlsim_datastructures.h:166
TimingBasedCurve::alphaMinus
float alphaMinus
the amplitude of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:628
NM_ACh
@ NM_ACh
acetylcholine
Definition: carlsim_datastructures.h:221
RangeDelay
a range struct for synaptic delays
Definition: carlsim_datastructures.h:278
GroupNeuromodulatorInfo_s::baseACh
float baseACh
baseline concentration of Acetylcholine
Definition: carlsim_datastructures.h:446
ExpCurve::stdpCurve
STDPCurve stdpCurve
the type of STDP curve
Definition: carlsim_datastructures.h:578
TimingBasedCurve::tauPlus
float tauPlus
the time constant of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:627
PulseCurve::betaLTD
float betaLTD
the amplitude of inhibitory LTD
Definition: carlsim_datastructures.h:662
GroupSTDPInfo_s::DELTA
float DELTA
the range of inhibitory LTD if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:431
INTERVAL_10MS
@ INTERVAL_10MS
the update interval will be 10 ms, which is 100Hz update frequency
Definition: carlsim_datastructures.h:238
ExpCurve::alphaMinus
float alphaMinus
the amplitude of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:581
GroupNeuromodulatorInfo_s::baseNE
float baseNE
baseline concentration of Noradrenaline
Definition: carlsim_datastructures.h:447
RangeDelay::min
int min
Definition: carlsim_datastructures.h:292
ExpCurve::tauMinus
float tauMinus
the time constant of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:582
ComputingBackend
ComputingBackend
computing backend
Definition: carlsim_datastructures.h:147
Grid3D::numY
int numY
Definition: carlsim_datastructures.h:547
RadiusRF::RadiusRF
RadiusRF(double rad_x, double rad_y, double rad_z)
Definition: carlsim_datastructures.h:366
CPU_MODE
@ CPU_MODE
model is run on CPU core(s)
Definition: carlsim_datastructures.h:114
TimingBasedCurve::gamma
float gamma
the turn-over point
Definition: carlsim_datastructures.h:630
UNKNOWN_STDP
@ UNKNOWN_STDP
Definition: carlsim_datastructures.h:163
GroupNeuromodulatorInfo_s::decayNE
float decayNE
decay rate for Noradrenaline
Definition: carlsim_datastructures.h:451
SpikeMonMode
SpikeMonMode
SpikeMonitor mode.
Definition: carlsim_datastructures.h:200
STDPCurve
STDPCurve
STDP curves.
Definition: carlsim_datastructures.h:177
ExpCurve
A struct to assign exponential STDP curves.
Definition: carlsim_datastructures.h:570
PulseCurve::lambda
float lambda
the range of inhibitory LTP
Definition: carlsim_datastructures.h:663
DA_MOD
@ DA_MOD
dopamine-modulated STDP, nearest-neighbor
Definition: carlsim_datastructures.h:162
Grid3D
A struct to arrange neurons on a 3D grid (a primitive cubic Bravais lattice with cubic side length 1)
Definition: carlsim_datastructures.h:489
CUSTOM
@ CUSTOM
Custom mode, the user can set the location of all the file pointers.
Definition: carlsim_datastructures.h:95
PulseCurve::betaLTP
float betaLTP
the amplitude of inhibitory LTP
Definition: carlsim_datastructures.h:661
ExpCurve::alphaPlus
float alphaPlus
the amplitude of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:579
loggerMode_string
static const char * loggerMode_string[]
Definition: carlsim_datastructures.h:98
simMode_string
static const char * simMode_string[]
Definition: carlsim_datastructures.h:118
NM_5HT
@ NM_5HT
serotonin
Definition: carlsim_datastructures.h:220
SILENT
@ SILENT
Silent mode, no output is generated.
Definition: carlsim_datastructures.h:94
SETUP_STATE
@ SETUP_STATE
setup state, where the neural network is prepared for execution and monitors are set
Definition: carlsim_datastructures.h:261
LoggerMode
LoggerMode
Logger modes.
Definition: carlsim_datastructures.h:90
Grid3D::distZ
float distZ
Definition: carlsim_datastructures.h:548
RadiusRF::radY
double radY
Definition: carlsim_datastructures.h:372
TimingBasedCurve::stdpCurve
STDPCurve stdpCurve
the type of STDP curve
Definition: carlsim_datastructures.h:625
RangeRmem
Struct defines the minimum and maximum membrane resisatnces of the LIF neuron group.
Definition: carlsim_datastructures.h:379
CONFIG_STATE
@ CONFIG_STATE
configuration state, where the neural network is configured
Definition: carlsim_datastructures.h:260
STANDARD
@ STANDARD
standard STDP of Bi & Poo (2001), nearest-neighbor
Definition: carlsim_datastructures.h:161
RangeDelay::RangeDelay
RangeDelay(int _min, int _max)
Definition: carlsim_datastructures.h:283
RangeWeight::RangeWeight
RangeWeight(double _min, double _max)
Definition: carlsim_datastructures.h:317
GroupSTDPInfo_s::WithESTDP
bool WithESTDP
enable E-STDP flag
Definition: carlsim_datastructures.h:413
neuromodulator_string
static const char * neuromodulator_string[]
Definition: carlsim_datastructures.h:225
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:423
RangeWeight::min
double min
Definition: carlsim_datastructures.h:334
GroupSTDPInfo_s::WithESTDPcurve
STDPCurve WithESTDPcurve
the E-STDP curve
Definition: carlsim_datastructures.h:417
Grid3D::N
int N
Definition: carlsim_datastructures.h:550
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:365
GroupNeuromodulatorInfo_s::decay5HT
float decay5HT
decay rate for Serotonin
Definition: carlsim_datastructures.h:449
GPU_CORES
@ GPU_CORES
Definition: carlsim_datastructures.h:149
NM_NE
@ NM_NE
noradrenaline
Definition: carlsim_datastructures.h:222
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:443
GroupSTDPInfo_s::WithESTDPtype
STDPType WithESTDPtype
the type of E-STDP (STANDARD or DA_MOD)
Definition: carlsim_datastructures.h:415
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:237
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:181
GroupSTDPInfo_s::BETA_LTP
float BETA_LTP
the amplitude of inhibitory LTP if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:428
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:426
GroupSTDPInfo_s::LAMBDA
float LAMBDA
the range of inhibitory LTP if the pulse I-STDP curve is used
Definition: carlsim_datastructures.h:430
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:218
UNKNOWN_INTEGRATION
@ UNKNOWN_INTEGRATION
Definition: carlsim_datastructures.h:135
TimingBasedCurve::alphaPlus
float alphaPlus
the amplitude of the exponential curve at pre-post side
Definition: carlsim_datastructures.h:626
Grid3D::numZ
int numZ
Definition: carlsim_datastructures.h:547
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:183
RadiusRF::RadiusRF
RadiusRF()
Definition: carlsim_datastructures.h:364
DEVELOPER
@ DEVELOPER
Developer mode, for developing and debugging code.
Definition: carlsim_datastructures.h:92
RadiusRF::operator<<
friend std::ostream & operator<<(std::ostream &strm, const RadiusRF &r)
Definition: carlsim_datastructures.h:368
GroupSTDPInfo_s::GAMMA
float GAMMA
the turn over point if the timing-based E-STDP curve is used
Definition: carlsim_datastructures.h:427
NM_DA
@ NM_DA
dopamine
Definition: carlsim_datastructures.h:219
RadiusRF
A struct to specify the receptive field (RF) radius in 3 dimensions.
Definition: carlsim_datastructures.h:363
GroupSTDPInfo_s::WithISTDP
bool WithISTDP
enable I-STDP flag
Definition: carlsim_datastructures.h:414
RadiusRF::radZ
double radZ
Definition: carlsim_datastructures.h:372
Grid3D::Grid3D
Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY)
Definition: carlsim_datastructures.h:515
GroupSTDPInfo_s::WithISTDPcurve
STDPCurve WithISTDPcurve
the I-STDP curve
Definition: carlsim_datastructures.h:418
carlsimState_string
static const char * carlsimState_string[]
Definition: carlsim_datastructures.h:264
STDPType
STDPType
STDP flavors.
Definition: carlsim_datastructures.h:160
PulseCurve::PulseCurve
PulseCurve(float _betaLTP, float _betaLTD, float _lambda, float _delta)
Definition: carlsim_datastructures.h:650
COUNT
@ COUNT
mode in which only spike count information is collected
Definition: carlsim_datastructures.h:201
TimingBasedCurve::tauMinus
float tauMinus
the time constant of the exponential curve at post-pre side
Definition: carlsim_datastructures.h:629
updateInterval_string
static const char * updateInterval_string[]
Definition: carlsim_datastructures.h:242
Grid3D::offsetY
float offsetY
Definition: carlsim_datastructures.h:549
CPU_CORES
@ CPU_CORES
Definition: carlsim_datastructures.h:148
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:425
GroupNeuromodulatorInfo_s::decayDP
float decayDP
decay rate for Dopaamine
Definition: carlsim_datastructures.h:448