21 #ifndef CYPRESS_SYNAPSES_HPP 22 #define CYPRESS_SYNAPSES_HPP 39 #define NAMED_PARAMETER(NAME, IDX) \ 40 static constexpr size_t idx_##NAME = IDX; \ 46 Real NAME() const { return m_params[IDX]; } 51 struct SynapseParametersBase {
52 const std::string name;
53 const std::vector<std::string> parameter_names;
54 const std::vector<std::string> parameter_units;
55 std::vector<Real> parameter_defaults;
57 SynapseParametersBase(
const std::string &name,
58 std::vector<std::string> parameter_names,
59 std::vector<std::string> parameter_units,
60 std::vector<Real> parameter_defaults,
bool learning)
62 parameter_names(std::move(parameter_names)),
63 parameter_units(std::move(parameter_units)),
64 parameter_defaults(std::move(parameter_defaults)),
69 static const SynapseParametersBase NullSynapse(
"NULL", {}, {}, {},
false);
74 bool m_learning =
false;
78 if (m_params.size() != parameter_names().size()) {
80 "Number of parameters in the parameter vector does not match " 81 "the number of parameters of this synapse type");
86 SynapseBase(std::initializer_list<Real> parameters) : m_params(parameters)
90 : m_params(
std::move(parameters))
99 virtual const std::string
name()
const {
return NullSynapse.name; }
106 return NullSynapse.parameter_names;
114 return NullSynapse.parameter_units;
122 return NullSynapse.parameter_defaults;
124 virtual bool learning()
const {
return NullSynapse.learning; }
126 const std::vector<Real> &
parameters()
const {
return m_params; }
130 check_parameter_size();
138 std::vector<std::string> param_names = parameter_names();
139 auto it = std::find(param_names.begin(), param_names.end(), name);
140 if (it != param_names.end()) {
152 void set(
size_t idx,
Real value) { m_params[idx] = value; }
168 const Real *
end()
const {
return &m_params.back() + 1; }
174 size_t size()
const {
return m_params.size(); }
185 static std::shared_ptr<SynapseBase> make_shared(
SynapseBase &synapse);
191 static const SynapseParametersBase StaticSynapseParameters(
192 "StaticSynapse", {
"weight",
"delay"}, {
"microSiemens/nA",
"ms"},
193 {0.015, 1.0},
false);
194 static const SynapseParametersBase SpikePairRuleAdditiveParameters(
195 "SpikePairRuleAdditive",
196 {
"weight",
"delay",
"tau_plus",
"tau_minus",
"A_plus",
"A_minus",
"w_min",
198 {
"microSiemens/nA",
"ms",
"ms",
"ms",
"microSiemens/nA",
"microSiemens/nA",
199 "microSiemens/nA",
"microSiemens/nA"},
200 {0.015, 1.0, 20.0, 20.0, 0.01, 0.01, 0, 0.1},
true);
202 static const SynapseParametersBase TsodyksMarkramMechanismParameters(
203 "TsodyksMarkramMechanism", {
"weight",
"delay",
"U",
"tau_rec",
"tau_facil"},
204 {
"microSiemens/nA",
"ms",
"",
"ms",
"ms"}, {0.015, 1.0, 0.0, 100.0, 0.0},
207 static const SynapseParametersBase SpikePairRuleMultiplicativeParameters(
208 "SpikePairRuleMultiplicative",
209 {
"weight",
"delay",
"tau_plus",
"tau_minus",
"A_plus",
"A_minus",
"w_min",
211 {
"microSiemens/nA",
"ms",
"ms",
"ms",
"microSiemens/nA",
"microSiemens/nA",
212 "microSiemens/nA",
"microSiemens/nA"},
213 {0.015, 1.0, 20.0, 20.0, 0.01, 0.01, 0, 0.1},
true);
222 check_parameter_size();
227 check_parameter_size();
230 const std::string
name()
const override 232 return StaticSynapseParameters.name;
236 return StaticSynapseParameters.parameter_names;
240 return StaticSynapseParameters.parameter_units;
244 return StaticSynapseParameters.parameter_defaults;
246 bool learning()
const override {
return StaticSynapseParameters.learning; };
256 :
SynapseBase(SpikePairRuleAdditiveParameters.parameter_defaults)
258 check_parameter_size();
263 check_parameter_size();
265 const std::string
name()
const override 267 return SpikePairRuleAdditiveParameters.name;
271 return SpikePairRuleAdditiveParameters.parameter_names;
275 return SpikePairRuleAdditiveParameters.parameter_units;
279 return SpikePairRuleAdditiveParameters.parameter_defaults;
283 return SpikePairRuleAdditiveParameters.learning;
299 :
SynapseBase(SpikePairRuleMultiplicativeParameters.parameter_defaults)
301 check_parameter_size();
306 check_parameter_size();
308 const std::string
name()
const override 310 return SpikePairRuleMultiplicativeParameters.name;
314 return SpikePairRuleMultiplicativeParameters.parameter_names;
318 return SpikePairRuleMultiplicativeParameters.parameter_units;
322 return SpikePairRuleMultiplicativeParameters.parameter_defaults;
326 return SpikePairRuleMultiplicativeParameters.learning;
342 :
SynapseBase(TsodyksMarkramMechanismParameters.parameter_defaults)
344 check_parameter_size();
349 check_parameter_size();
351 const std::string
name()
const override 353 return TsodyksMarkramMechanismParameters.name;
357 return TsodyksMarkramMechanismParameters.parameter_names;
361 return TsodyksMarkramMechanismParameters.parameter_units;
365 return TsodyksMarkramMechanismParameters.parameter_defaults;
369 return TsodyksMarkramMechanismParameters.learning;
380 #undef NAMED_PARAMETER 381 #endif // CYPRESS_SYNAPSES_HPP const Real * begin() const
Definition: synapses.hpp:163
bool learning() const override
Definition: synapses.hpp:367
virtual const std::vector< std::string > & parameter_names() const
Definition: synapses.hpp:104
const std::vector< Real > & parameters() const
Definition: synapses.hpp:126
size_t size() const
Definition: synapses.hpp:174
SpikePairRuleAdditive()
Definition: synapses.hpp:255
const std::vector< std::string > & parameter_names() const override
Definition: synapses.hpp:312
StaticSynapse()
Definition: synapses.hpp:220
bool learning() const override
Definition: synapses.hpp:281
virtual const std::vector< std::string > & parameter_units() const
Definition: synapses.hpp:112
virtual const std::string name() const
Definition: synapses.hpp:99
const std::vector< std::string > & parameter_units() const override
Definition: synapses.hpp:273
void parameters(const std::vector< Real > ¶ms)
Definition: synapses.hpp:127
double Real
Definition: types.hpp:56
Definition: synapses.hpp:71
SynapseBase(std::initializer_list< Real > parameters)
Definition: synapses.hpp:86
void check_parameter_size()
Definition: synapses.hpp:76
virtual bool learning() const
Definition: synapses.hpp:124
std::vector< Real > m_params
Definition: synapses.hpp:73
const std::string name() const override
Definition: synapses.hpp:351
const std::vector< Real > & parameter_defaults() const override
Definition: synapses.hpp:277
Definition: synapses.hpp:252
const std::vector< std::string > & parameter_units() const override
Definition: synapses.hpp:316
Definition: synapses.hpp:295
const std::string name() const override
Definition: synapses.hpp:308
Real operator[](size_t i) const
Definition: synapses.hpp:158
const std::vector< Real > & parameter_defaults() const override
Definition: synapses.hpp:363
const std::vector< std::string > & parameter_units() const override
Definition: synapses.hpp:238
const std::vector< Real > & parameter_defaults() const override
Definition: synapses.hpp:320
Definition: optional.hpp:33
const std::vector< std::string > & parameter_names() const override
Definition: synapses.hpp:355
SpikePairRuleAdditive(const StaticSynapse &synapse)
Definition: synapses.hpp:260
TsodyksMarkramMechanism(const StaticSynapse &synapse)
Definition: synapses.hpp:346
Definition: brainscales_lib.hpp:39
bool learning() const override
Definition: synapses.hpp:324
TsodyksMarkramMechanism()
Definition: synapses.hpp:341
SpikePairRuleMultiplicative()
Definition: synapses.hpp:298
const std::vector< Real > & parameter_defaults() const override
Definition: synapses.hpp:242
Definition: synapses.hpp:217
#define NAMED_PARAMETER(NAME, IDX)
Definition: synapses.hpp:39
SpikePairRuleMultiplicative(const StaticSynapse &synapse)
Definition: synapses.hpp:303
Definition: exceptions.hpp:84
virtual const std::vector< Real > & parameter_defaults() const
Definition: synapses.hpp:120
SynapseBase(std::vector< Real > parameters)
Definition: synapses.hpp:89
const std::vector< std::string > & parameter_units() const override
Definition: synapses.hpp:359
const std::vector< std::string > & parameter_names() const override
Definition: synapses.hpp:269
bool learning() const override
Definition: synapses.hpp:246
const std::vector< std::string > & parameter_names() const override
Definition: synapses.hpp:234
const std::string name() const override
Definition: synapses.hpp:265
StaticSynapse(const StaticSynapse &synapse)
Definition: synapses.hpp:224
Definition: synapses.hpp:338
Optional< size_t > parameter_index(const std::string &name) const
Definition: synapses.hpp:136
const Real * end() const
Definition: synapses.hpp:168
const std::string name() const override
Definition: synapses.hpp:230