CARLsim  6.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 * CARLsim5: HK, JX, KC
45 * CARLsim6: LN, JX, KC, KW
46 *
47 * CARLsim available from http://socsci.uci.edu/~jkrichma/CARLsim/
48 * Ver 12/31/2016
49 */
50 
51 #ifndef _CARLSIM_DATASTRUCTURES_H_
52 #define _CARLSIM_DATASTRUCTURES_H_
53 
54 #include <ostream> // print struct info
55 #include <user_errors.h> // CARLsim user errors
56 
92 enum LoggerMode {
93  USER,
99 };
100 static const char* loggerMode_string[] = {
101  "USER","DEVELOPER","SHOWTIME","SILENT","CUSTOM","Unknown mode"
102 };
103 
115 enum SimMode {
119 };
120 static const char* simMode_string[] = {
121  "CPU mode","GPU mode","Hybrid mode"
122 };
123 
138 };
139 static const char* integrationMethod_string[] = {
140  "Forward-Euler", "4-th order Runge-Kutta", "Unknown integration method"
141 };
142 
143 
152 };
154 static const char* ComputingBackend_string[] = {
155  "CPU (x86/x64 Multi Core Processor)",
156  "GPU (NVIDIA Many CUDA Core Processor)",
157 };
158 
159 
160 // \TODO: extend documentation, add relevant references
168 enum STDPType {
174 #ifdef LN_I_CALC_TYPES
180  //MOD_DA_D1, //!< dopamine-modulated STDP, receptor D1 (experimental)
181  //MOD_DA_D2, //!< serotonin-modulated STDP, receptor D2 (experimental)
182  //MOD_5HT_R1, //!< serotonin-modulated STDP, (experimental)
183  //MOD_ACH_N, //!< acetylcholine-modulated STDP, nicotinic receptor (experimental)
184  //MOD_ACH_M, //!< acetylcholine-modulated STDP, muscarinic receptor (experimental)
185  // // LN2021 \todo metabotropic -> change cell param instead of synap properties
186  //MOD_NE_A1, //!< norepinephrine-modulated STDP, receptor \alpha 1 (experimental)
187  //MOD_NE_A2, //!< norepinephrine-modulated STDP, receptor \alpha 2 (experimental)
188  //MOD_NE_B1, //!< norepinephrine-modulated STDP, receptor \beta 1 (experimental)
189  //MOD_NE_B2, //!< norepinephrine-modulated STDP, receptor \beta 2 (experimental)
190 #endif
192 };
193 
194 static const char* stdpType_string[] = {
195  "STANDARD",
196  "DA_MOD",
197  "SE_MOD",
198  "AC_MOD",
199  "NE_MOD",
200 #ifdef LN_I_CALC_TYPES
201  "AC_DA_MOD",
202  "AC_NE_MOD",
203  "SE_DA_MOD",
204  "NM4_MOD",
205  "PKA_PLC_MOD",
206  //"MOD_DA_D1",
207  //"MOD_DA_D2",
208  //"MOD_5HT_R1",
209  //"MOD_ACH_N",
210  //"MOD_ACH_M",
211  //"MOD_NE_A1",
212  //"MOD_NE_A2",
213  //"MOD_NE_B1",
214  //"MOD_NE_B2",
215 #endif
216  "UNKNOWN_STDP"
217 };
218 
219 static const char* stdpType_desc[] = {
220  "Standard STDP",
221  "Dopamine-modulated STDP",
222  "Serotonin-modulated STDP",
223  "Acetylcholine-modulated STDP",
224  "Norepinphrine-modulated STDP",
225 #ifdef LN_I_CALC_TYPES
226  "Acetylcholine-influenced-Dopamine-modulated STDP",
227  "Acetylcholine-Norephinephrine encoded uncertainty STDP",
228  "Serotonin-Dopamin encoded cost/reward STDP",
229  "Multivariate-modulated STDP",
230  "PKA/PLC-modulated STDP",
231  //"MOD_DA_D1",
232  //"MOD_DA_D2",
233  //"MOD_5HT_R1",
234  //"MOD_ACH_N",
235  //"MOD_ACH_M",
236  //"MOD_NE_A1",
237  //"MOD_NE_A2",
238  //"MOD_NE_B1",
239  //"MOD_NE_B2",
240 #endif
241  "Unknown mode"
242 };
243 
244 #ifdef LN_I_CALC_TYPES
245 
256 enum IcalcType {
272 };
273 
274 static const char* IcalcType_string[] = {
275  "CUBA",
276  "COBA",
277  "NM4-mod.(LN21)",
278  "GPCRs(NB14)"
279  "DA/5HT/ACh-mod.(CK09)",
280  "ACh/NE-mod.(ANCK12)",
281  "ACh/NE-mod.(K12)",
282  "ACh/NE-mod.(K13)",
283  "D1,D2-rec.(AK12)",
284  "ACh->DA(BK19)",
285  "alpha1(ADK13)",
286  "alpha2A(ADK13)",
287  "D1(ADK13)",
288  "D2(AK15)",
289  "Unknown mode"
290 };
291 #endif
292 
298 enum STDPCurve {
303 };
304 static const char* stdpCurve_string[] = {
305  "exponential curve",
306  "pulse curve",
307  "timing-based curve",
308  "Unknow curve"
309 };
310 
323  AER,
324 };
325 static const char* spikeMonMode_string[] = {
326  "SpikeCount Mode","SpikeTime Mode"
327 };
328 
345 };
346 static const char* neuromodulator_string[] = {
347  "Dopamine",
348  "Serotonin",
349  "Acetylcholine",
350  "Noradrenaline", // \FIXME synonym norepinephrine
351  "Unknown neuromodulator"
352 };
353 
366 };
367 static const char* updateInterval_string[] = {
368  "10 ms interval", "100 ms interval", "1000 ms interval"
369 };
370 
388 };
389 static const char* carlsimState_string[] = {
390  "Configuration state", "Setup state", "Run state"
391 };
392 
403 struct RangeDelay {
404  RangeDelay(int _val) {
405  min = _val;
406  max = _val;
407  }
408  RangeDelay(int _min, int _max) {
409  UserErrors::assertTrue(_min<=_max, UserErrors::CANNOT_BE_LARGER, "RangeDelay", "minDelay", "maxDelay");
410  min = _min;
411  max = _max;
412  }
413 
414  friend std::ostream& operator<<(std::ostream &strm, const RangeDelay &d) {
415  return strm << "delay=[" << d.min << "," << d.max << "]";
416  }
417  int min,max;
418 };
419 
436 struct RangeWeight {
437  RangeWeight(double _val) {
438  init = _val;
439  max = _val;
440  min = 0;
441  }
442  RangeWeight(double _min, double _max) {
443  UserErrors::assertTrue(_min<=_max, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "minWt", "maxWt");
444  min = _min;
445  init = _min;
446  max = _max;
447  }
448  RangeWeight(double _min, double _init, double _max) {
449  UserErrors::assertTrue(_min<=_init, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "minWt", "initWt");
450  UserErrors::assertTrue(_init<=_max, UserErrors::CANNOT_BE_LARGER, "RangeWeight", "initWt", "maxWt");
451  min = _min;
452  init = _init;
453  max = _max;
454  }
455 
456  friend std::ostream& operator<<(std::ostream &strm, const RangeWeight &w) {
457  return strm << "wt=[" << w.min << "," << w.init << "," << w.max << "]";
458  }
459  double min, init, max;
460 };
461 
488 struct RadiusRF {
489  RadiusRF() : radX(0.0), radY(0.0), radZ(0.0) {}
490  RadiusRF(double rad) : radX(rad), radY(rad), radZ(rad) {}
491  RadiusRF(double rad_x, double rad_y, double rad_z) : radX(rad_x), radY(rad_y), radZ(rad_z) {}
492 
493  friend std::ostream& operator<<(std::ostream &strm, const RadiusRF &r) {
494  return strm << "RadiusRF=[" << r.radX << "," << r.radY << "," << r.radZ << "]";
495  }
496 
497  double radX, radY, radZ;
498 };
499 
504 struct RangeRmem{
505  RangeRmem(double _rMem){
506  // same membrane resistance for all neurons in the group
507  UserErrors::assertTrue(_rMem >= 0.0f, UserErrors::CANNOT_BE_NEGATIVE, "RangeRmem", "rMem");
508  minRmem = _rMem;
509  maxRmem = _rMem;
510  }
511 
512  RangeRmem(double _minRmem, double _maxRmem){
513  // membrane resistances of the neuron group varies uniformly between a maximum and a minimum value
514  UserErrors::assertTrue(_minRmem >= 0.0f, UserErrors::CANNOT_BE_NEGATIVE, "RangeRmem", "minRmem");
515  UserErrors::assertTrue(_minRmem <= _maxRmem, UserErrors::CANNOT_BE_LARGER, "RangeRmem", "minRmem", "maxRmem");
516  minRmem = _minRmem;
517  maxRmem = _maxRmem;
518  }
519 
520  friend std::ostream& operator<<(std::ostream &strm, const RangeRmem &rMem) {
521  return strm << "RangeRmem=[" << rMem.minRmem << "," << rMem.maxRmem << "]";
522  }
523  double minRmem, maxRmem;
524 };
525 
526 
536 typedef struct ConnSTDPInfo_s {
537  bool WithSTDP;
538  bool WithESTDP;
539  bool WithISTDP;
552  float GAMMA;
553  float BETA_LTP;
554  float BETA_LTD;
555  float LAMBDA;
556  float DELTA;
557 } ConnSTDPInfo;
558 
569  float baseDP;
570  float base5HT;
571  float baseACh;
572  float baseNE;
573 
574  float decayDP;
575  float decay5HT;
576  float decayACh;
577  float decayNE;
578 
579  float releaseDP;
580  float release5HT;
581  float releaseACh;
582  float releaseNE;
583 
584  bool activeDP;
585  bool active5HT;
586  bool activeACh;
587  bool activeNE;
588 
589 // \todo LN2021 doc: mol concentration in ppm / mol / acting molecules in the group
590 
591 // \todo LN2021
592  //float maxDP; //!< max concentration of Dopamine
593  //float max5HT; //!< baseline concentration of Serotonin
594  //float maxACh; //!< baseline concentration of Acetylcholine
595  //float maxNE; //!< baseline concentration of Noradrenaline
596 
598 
634 struct Grid3D {
635  Grid3D() : numX(-1), numY(-1), numZ(-1), N(-1),
636  distX(-1.0f), distY(-1.0f), distZ(-1.0f),
637  offsetX(-1.0f), offsetY(-1.0f), offsetZ(-1.0f) {
638  }
639 
640  Grid3D(int _x) : numX(_x), numY(1), numZ(1), N(_x),
641  distX(1.0f), distY(1.0f), distZ(1.0f),
642  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
643  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
644  }
645 
646  Grid3D(int _x, float _distX, float _offsetX) : numX(_x), numY(1), numZ(1), N(_x),
647  distX(_distX), distY(1.0f), distZ(1.0f),
648  offsetX(_offsetX), offsetY(1.0f), offsetZ(1.0f) {
649  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
650  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
651  }
652 
653  Grid3D(int _x, int _y) : numX(_x), numY(_y), numZ(1), N(_x * _y),
654  distX(1.0f), distY(1.0f), distZ(1.0f),
655  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
656  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
657  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
658  }
659 
660  Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY)
661  : numX(_x), numY(_y), numZ(1), N(_x * _y),
662  distX(_distX), distY(_distY), distZ(1.0f),
663  offsetX(_offsetX), offsetY(_offsetY), offsetZ(1.0f) {
664  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
665  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
666  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
667  UserErrors::assertTrue(_distY > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distY");
668  }
669  Grid3D(int _x, int _y, int _z) : numX(_x), numY(_y), numZ(_z), N(_x * _y * _z),
670  distX(1.0f), distY(1.0f), distZ(1.0f),
671  offsetX(1.0f), offsetY(1.0f), offsetZ(1.0f) {
672  UserErrors::assertTrue(_x>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
673  UserErrors::assertTrue(_y>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
674  UserErrors::assertTrue(_z>0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numZ");
675  }
676  Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY, int _z, float _distZ, float _offsetZ)
677  : numX(_x), numY(_y), numZ(_z), N(_x * _y * _z),
678  distX(_distX), distY(_distY), distZ(_distZ),
679  offsetX(_offsetX), offsetY(_offsetY), offsetZ(_offsetZ) {
680  UserErrors::assertTrue(_x > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numX");
681  UserErrors::assertTrue(_distX > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distX");
682  UserErrors::assertTrue(_y > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numY");
683  UserErrors::assertTrue(_distY > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distY");
684  UserErrors::assertTrue(_z > 0, UserErrors::MUST_BE_POSITIVE, "Grid3D", "numZ");
685  UserErrors::assertTrue(_distZ > 0.0f, UserErrors::MUST_BE_POSITIVE, "Grid3D", "distZ");
686  }
687 
688  friend std::ostream& operator<<(std::ostream &strm, const Grid3D &g) {
689  return strm << "Grid3D=[" << g.numX << "," << g.numY << "," << g.numZ << "]";
690  }
691 
692  int numX, numY, numZ;
693  float distX, distY, distZ;
694  float offsetX, offsetY, offsetZ;
695  int N;
696 };
697 
715 struct ExpCurve {
716  ExpCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus) : alphaPlus(_alphaPlus), tauPlus(_tauPlus), alphaMinus(_alphaMinus), tauMinus(_tauMinus) {
717  UserErrors::assertTrue(_tauPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "ExpCurve", "tauPlus");
718  UserErrors::assertTrue(_tauMinus > 0.0f, UserErrors::MUST_BE_POSITIVE, "ExpCurve", "tauMinus");
719 
720  stdpCurve = EXP_CURVE;
721  }
722 
724  float alphaPlus;
725  float tauPlus;
726  float alphaMinus;
727  float tauMinus;
728 };
729 
759  TimingBasedCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus, float _gamma) : alphaPlus(_alphaPlus), tauPlus(_tauPlus), alphaMinus(_alphaMinus), tauMinus(_tauMinus) , gamma(_gamma) {
760  UserErrors::assertTrue(_alphaPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "alphaPlus");
761  UserErrors::assertTrue(_alphaMinus < 0.0f, UserErrors::MUST_BE_NEGATIVE, "TimingBasedCurve", "alphaMinus");
762  UserErrors::assertTrue(_tauPlus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "tauPlus");
763  UserErrors::assertTrue(_tauMinus > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "tauMinus");
764  UserErrors::assertTrue(_gamma > 0.0f, UserErrors::MUST_BE_POSITIVE, "TimingBasedCurve", "gamma");
765  UserErrors::assertTrue(_tauPlus >= _gamma, UserErrors::CANNOT_BE_SMALLER, "TimingBasedCurve", "tauPlus >= gamma");
766 
767  stdpCurve = TIMING_BASED_CURVE;
768  }
769 
771  float alphaPlus;
772  float tauPlus;
773  float alphaMinus;
774  float tauMinus;
775  float gamma;
776 };
777 
794 struct PulseCurve {
795  PulseCurve(float _betaLTP, float _betaLTD, float _lambda, float _delta) : betaLTP(_betaLTP), betaLTD(_betaLTD), lambda(_lambda), delta(_delta) {
796  UserErrors::assertTrue(_betaLTP > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "betaLTP");
797  UserErrors::assertTrue(_betaLTD < 0.0f, UserErrors::MUST_BE_NEGATIVE, "PulseCurve", "betaLTD");
798  UserErrors::assertTrue(_lambda > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "lambda");
799  UserErrors::assertTrue(_delta > 0.0f, UserErrors::MUST_BE_POSITIVE, "PulseCurve", "delta");
800  UserErrors::assertTrue(_lambda < _delta, UserErrors::MUST_BE_SMALLER, "PulseCurve", "lambda < delta");
801 
802  stdpCurve = PULSE_CURVE;
803  }
804 
806  float betaLTP;
807  float betaLTD;
808  float lambda;
809  float delta;
810 };
811 
812 
813 #ifdef LN_I_CALC_TYPES
814 /*
815  * mapping structure config for Nadim/Bucher
816  * neuromodulator nm
817  * \param[in] nm_pka index of nm induces PKA
818  * \param[in] w_pka weigth of PKA targeting nm
819  * \param[in] nm_plc index of nm inducing PLC
820  * \param[in] w_plc weigth of PLCA targeting nm
821 */
823 
824  PkaPlcModulation(int nm_pka, float w_pka, int nm_plc, float w_plc) {
825 
826  UserErrors::assertTrue(nm_pka != nm_plc, UserErrors::CANNOT_BE_IDENTICAL, "PkaPlcModulation", "nm_pka,plc");
827  UserErrors::assertTrue(w_pka != .0f, UserErrors::CANNOT_BE_ZERO, "PkaPlcModulation", "w_pka");
828  UserErrors::assertTrue(w_plc != .0f, UserErrors::CANNOT_BE_ZERO, "PkaPlcModulation", "w_plc");
829 
830  i_nm[i_pka] = nm_pka; w_nm[i_pka] = w_pka; desc[i_pka] = neuromodulator_string[nm_pka];
831  i_nm[i_plc] = nm_plc; w_nm[i_plc] = w_plc; desc[i_plc] = neuromodulator_string[nm_plc];
832  }
833 
834  // members
835  const STDPType type = PKA_PLC_MOD;
836  const int i_pka = 0;
837  const int i_plc = 1;
838  float w_nm[2];
839  int i_nm[2];
840  const char* desc[2];
841 
842  // symbolic accessor
843  int nm_pka() { return i_nm[i_pka]; }
844  int nm_plc() { return i_nm[i_plc]; }
845  float w_pka() { return w_nm[i_pka]; }
846  float w_plc() { return w_nm[i_plc]; }
847  const char* lingat_pka() { return desc[nm_pka()]; }
848  const char* lingat_plc() { return desc[nm_plc()]; }
849 
850 };
851 
852 
853 /*
854 
855 generalization:
856 struct Nm4w {
857 
858 };
859 
860 */
861 
862 #endif
863 
864 #endif
STDPCurve stdpCurve
the type of STDP curve
PulseCurve(float _betaLTP, float _betaLTD, float _lambda, float _delta)
STDPCurve stdpCurve
the type of STDP curve
x86/x64 Multi Core Processor (LN20201016)
parameter cannot have smaller vaule than some vaule
Definition: user_errors.h:38
float alphaPlus
the amplitude of the exponential curve at pre-post side
float TAU_MINUS_INV_EXC
the inverse of time constant minus, if the exponential or timing-based E-STDP curve is used ...
Developer mode, for developing and debugging code.
timing-based curve
STDPType WithISTDPtype
the type of I-STDP (STANDARD or DA_MOD)
4 NM weighted (and normalized,boosted,damped), Niedermeier (2021)
SpikeMonMode
SpikeMonitor mode.
parameter cannot be zero
Definition: user_errors.h:44
float base5HT
baseline concentration of Serotonin
A struct for retrieving STDP related information of a connection.
G protein-coupled receptors for 2 modulators and conductance, Nadim, Bucher (2014) ...
float releaseDP
release per spike for Dopaamine
float GAMMA
the turn over point if the timing-based E-STDP curve is used
Grid3D(int _x, float _distX, float _offsetX)
static const char * integrationMethod_string[]
serotonin-modulated STDP, nearest-neighbor
static const char * neuromodulator_string[]
static const char * stdpType_desc[]
parameters cannot be identical
Definition: user_errors.h:34
float alphaMinus
the amplitude of the exponential curve at post-pre side
struct GroupNeuromodulatorInfo_s GroupNeuromodulatorInfo
A struct for retrieving neuromodulator information of a group.
static const char * updateInterval_string[]
struct ConnSTDPInfo_s ConnSTDPInfo
A struct for retrieving STDP related information of a connection.
model is run on GPU card(s)
Grid3D(int _x, int _y, int _z)
A struct to assign a timing-based E-STDP curve.
PkaPlcModulation(int nm_pka, float w_pka, int nm_plc, float w_plc)
friend std::ostream & operator<<(std::ostream &strm, const RangeDelay &d)
TimingBasedCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus, float _gamma)
static const char * ComputingBackend_string[]
LN20201016.
mode in which only spike count information is collected
UpdateInterval
Update frequency for weights.
float ALPHA_MINUS_INB
the amplitude of alpha minus, if the exponential I-STDP curve is used
NE alpha2 receptor (connection), Avery, Dutt, Krichmar (2013)
run state, where the model is stepped
bool WithISTDP
enable I-STDP flag
float DELTA
the range of inhibitory LTD if the pulse I-STDP curve is used
acetylcholin, norepinephrine modulated Krichmar (2013)
Grid3D(int _x, int _y)
RangeRmem(double _minRmem, double _maxRmem)
static const char * simMode_string[]
friend std::ostream & operator<<(std::ostream &strm, const RangeRmem &rMem)
static const char * IcalcType_string[]
parameter cannot have larger vaule than some vaule
Definition: user_errors.h:37
unknown curve type
setup state, where the neural network is prepared for execution and monitors are set ...
acetylcholine-norephinephrine encoded uncertainty, Avery & Krichmar (2017)
RadiusRF(double rad_x, double rad_y, double rad_z)
float decayNE
decay rate for Noradrenaline
STDPType
STDP flavors.
acetylcholine-modulated STDP, nearest-neighbor
Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY)
LoggerMode
Logger modes.
float BETA_LTP
the amplitude of inhibitory LTP if the pulse I-STDP curve is used
float decayDP
decay rate for Dopaamine
bool active5HT
flag for Serotonin
symmetric pulse curve
standard STDP of Bi & Poo (2001), nearest-neighbor
bool WithESTDP
enable E-STDP flag
RangeRmem(double _rMem)
acetylcholin, norepinephrine modulated Avery, Nitz, Chiba, Krichmar (2012)
float alphaMinus
the amplitude of the exponential curve at post-pre side
RangeWeight(double _min, double _init, double _max)
SimMode
simulation mode
float tauPlus
the time constant of the exponential curve at pre-post side
STDPCurve
STDP curves.
A struct to arrange neurons on a 3D grid (a primitive cubic Bravais lattice with cubic side length 1)...
float betaLTD
the amplitude of inhibitory LTD
float release5HT
release per spike for Serotonin
struct to assign a pulse I-STDP curve
protein kinase/phospholiphase controlled LTP/LPD adopted from Nadim & Bucher (2014) ...
float lambda
the range of inhibitory LTP
mode in which spike information is collected in AER format
float decay5HT
decay rate for Serotonin
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
bool activeDP
flag for Dopaamine
dopamine-modulated STDP, nearest-neighbor
Neuromodulator
GroupMonitor flag.
Struct defines the minimum and maximum membrane resisatnces of the LIF neuron group.
configuration state, where the neural network is configured
float betaLTP
the amplitude of inhibitory LTP
float decayACh
decay rate for Acetylcholine
User mode, for experiment-oriented simulations.
RangeDelay(int _min, int _max)
float delta
the range of inhibitory LTD
static const char * carlsimState_string[]
DA D2 receptor (connection), Avery, Krichmar (2015)
acetylcholin influence to dopamine, Belkaid, Krichmar (2019)
static const char * stdpType_string[]
conductance
IcalcType
input current calculation
RangeWeight(double _min, double _max)
parameter must be smaller than
Definition: user_errors.h:58
friend std::ostream & operator<<(std::ostream &strm, const RangeWeight &w)
STDPCurve WithISTDPcurve
the I-STDP curve
float tauPlus
the time constant of the exponential curve at pre-post side
integrationMethod_t
Integration methods.
Showtime mode, will only output warnings and errors.
a range struct for synaptic delays
float BETA_LTD
the amplitude of inhibitory LTD if the pulse I-STDP curve is used
friend std::ostream & operator<<(std::ostream &strm, const Grid3D &g)
float baseACh
baseline concentration of Acetylcholine
STDPType WithESTDPtype
the type of E-STDP (STANDARD or DA_MOD)
float gamma
the turn-over point
float releaseNE
release per spike for Noradrenaline
float ALPHA_PLUS_INB
the amplitude of alpha plus, if the exponential I-STDP curve is used
A struct for retrieving neuromodulator information of a group.
A struct to assign exponential STDP curves.
RadiusRF(double rad)
RangeWeight(double _val)
multivariate modulatated STDP, (experimental)
acetylcholine-influenced dopamine-modulated STDP, Belkaid & Krichmar (2019)
NE alpha1 receptor with DA antagonist, Avery, Dutt, Krichmar (2013)
a range struct for synaptic weight magnitudes
ComputingBackend
computing backend
float tauMinus
the time constant of the exponential curve at post-pre side
float LAMBDA
the range of inhibitory LTP if the pulse I-STDP curve is used
Grid3D(int _x, float _distX, float _offsetX, int _y, float _distY, float _offsetY, int _z, float _distZ, float _offsetZ)
STDPCurve stdpCurve
the type of STDP curve
Custom mode, the user can set the location of all the file pointers.
used to initialize by default constructor
norepinephrine-modulated STDP, nearest-neighbor
friend std::ostream & operator<<(std::ostream &strm, const RadiusRF &r)
dopamine,serotonin,acetylcholine modulated Cox, Krichmar (2009)
the update interval will be 10 ms, which is 100Hz update frequency
float TAU_PLUS_INV_INB
the inverse of tau plus, if the exponential I-STDP curve is used
serotonin-dopamin cost/reward assessment, Asher, Craig, Zaldivar, Brewer, Krichmar (2013) ...
static const char * spikeMonMode_string[]
parameter must have negative value
Definition: user_errors.h:52
acetylcholin, norepinephrine modulated Krichmar (2012)
D1,D2 dopamine receptors Avery, Krichmar (2012)
standard exponential curve
NVIDIA Many CUDA Core Processor (LN20201016)
CARLsimState
CARLsim states.
static const char * loggerMode_string[]
ExpCurve(float _alphaPlus, float _tauPlus, float _alphaMinus, float _tauMinus)
model is run on CPU Core(s), GPU card(s) or both
bool WithSTDP
enable STDP flag
float baseDP
baseline concentration of Dopamine
parameter must have positive value
Definition: user_errors.h:55
float baseNE
baseline concentration of Noradrenaline
acetylcholine
bool activeNE
flag for Noradrenaline
the update interval will be 1000 ms, which is 1Hz update frequency
DA D1 receptor (connection), Avery, Dutt, Krichmar (2013)
float releaseACh
release per spike for Acetylcholine
float TAU_PLUS_INV_EXC
the inverse of time constant plus, if the exponential or timing-based E-STDP curve is used ...
parameter cannot have negative value (opposite to "must be", but includes zero)
Definition: user_errors.h:35
Silent mode, no output is generated.
STDPCurve WithESTDPcurve
the E-STDP curve
float tauMinus
the time constant of the exponential curve at post-pre side
bool activeACh
flag for Acetylcholine
float alphaPlus
the amplitude of the exponential curve at pre-post side
float ALPHA_MINUS_EXC
the amplitude of alpha minus, if the exponential or timing-based E-STDP curve is used ...
model is run on CPU core(s)
float TAU_MINUS_INV_INB
the inverse of tau minus, if the exponential I-STDP curve is used
the update interval will be 100 ms, which is 10Hz update frequency
static const char * stdpCurve_string[]
A struct to specify the receptive field (RF) radius in 3 dimensions.
float ALPHA_PLUS_EXC
the amplitude of alpha plus, if the exponential or timing-based E-STDP curve is used ...