58template <
typename SynapseType>
60 size_t presynaptic_pop_size,
size_t postsynaptic_pop_size,
64 return [presynaptic_pop_size, postsynaptic_pop_size,
67 const size_t index0 = index % presynaptic_pop_size;
68 const size_t index1 = index / presynaptic_pop_size;
70 return std::make_tuple(syn_gen(index0, index1), index0, index1);
85template <
typename SynapseType>
91 {
return std::make_tuple(syn_gen(index), index, index); };
105template <
typename SynapseType,
template <
typename...>
class Container>
110 {
return container[index]; };
120template <
typename SynapseType,
template <
typename,
typename,
typename...>
class Map>
142 [[nodiscard]]
typename std::optional<typename knp::core::Projection<SynapseType>::Synapse>
operator()(
size_t index)
144 const auto [from_index, to_index] = iter_->first;
145 auto synapse = std::make_tuple(iter_->second, from_index, to_index);
151 typename MapType::const_iterator iter_;
161template <
typename SynapseType>
173 size_t presynaptic_pop_size,
size_t postsynaptic_pop_size,
double connection_probability,
176 : presynaptic_pop_size_(presynaptic_pop_size),
177 postsynaptic_pop_size_(postsynaptic_pop_size),
178 connection_probability_(connection_probability),
180 mt_(std::random_device()()),
183 if (connection_probability > 1 || connection_probability < 0)
184 throw std::logic_error(
"Incorrect probability, set probability between 0 and 1.");
192 [[nodiscard]]
typename std::optional<typename knp::core::Projection<SynapseType>::Synapse>
operator()(
size_t index)
194 const size_t index0 = index % presynaptic_pop_size_;
195 const size_t index1 = index / presynaptic_pop_size_;
197 if (dist_(mt_) < connection_probability_)
return std::make_tuple(syn_gen_(index0, index1), index0, index1);
202 size_t presynaptic_pop_size_;
203 size_t postsynaptic_pop_size_;
204 double connection_probability_;
207 std::uniform_real_distribution<double> dist_;
220template <
typename SynapseType>
222 size_t presynaptic_pop_size,
size_t postsynaptic_pop_size,
225 return [presynaptic_pop_size, postsynaptic_pop_size,
228 const size_t index0 = index % presynaptic_pop_size;
229 const size_t index1 = index / presynaptic_pop_size;
230 auto opt_result = syn_gen(index0, index1);
232 if (opt_result.has_value())
return std::make_tuple(opt_result.value(), index0, index1);
245template <
typename SynapseType>
256 size_t presynaptic_pop_size,
size_t postsynaptic_pop_size,
259 : presynaptic_pop_size_(presynaptic_pop_size),
260 postsynaptic_pop_size_(postsynaptic_pop_size),
262 mt_(std::random_device()()),
263 dist_(0, postsynaptic_pop_size - 1)
272 [[nodiscard]]
typename std::optional<typename knp::core::Projection<SynapseType>::Synapse>
operator()(
size_t index)
274 const size_t index0 = index % presynaptic_pop_size_;
275 const size_t index1 = dist_(mt_);
277 return std::make_tuple(syn_gen_(index0, index1), index0, index1);
281 size_t presynaptic_pop_size_;
282 size_t postsynaptic_pop_size_;
285 std::uniform_int_distribution<size_t> dist_;
296template <
typename SynapseType>
307 size_t presynaptic_pop_size,
size_t postsynaptic_pop_size,
310 : presynaptic_pop_size_(presynaptic_pop_size),
311 postsynaptic_pop_size_(postsynaptic_pop_size),
313 mt_(std::random_device()()),
314 dist_(0, presynaptic_pop_size - 1)
323 [[nodiscard]]
typename std::optional<typename knp::core::Projection<SynapseType>::Synapse>
operator()(
size_t index)
325 const size_t index0 = dist_(mt_);
326 const size_t index1 = index % postsynaptic_pop_size_;
328 return std::make_tuple(syn_gen_(index0, index1), index0, index1);
332 size_t presynaptic_pop_size_;
333 size_t postsynaptic_pop_size_;
336 std::uniform_int_distribution<size_t> dist_;
351template <
typename DestinationSynapseType,
typename SourceSynapseType>
353 const knp::core::Projection<SourceSynapseType> &source_proj,
357 return [&source_proj,
360 auto const &synapse = source_proj[index];
361 return std::make_tuple(
362 syn_gen(index), std::get<knp::core::source_neuron_id>(synapse),
363 std::get<knp::core::target_neuron_id>(synapse));
typename synapse_traits::synapse_parameters< SynapseType > SynapseParameters
Parameters of the specified synapse type.
std::function< std::optional< Synapse >(size_t)> SynapseGenerator
Synapse generation function type.
std::tuple< SynapseParameters, size_t, size_t > Synapse
Synapse description structure that contains synapse parameters and indexes of the associated neurons.
The FixedNumberPost class is a definition of a generator that makes connections between each presynap...
std::optional< typename knp::core::Projection< SynapseType >::Synapse > operator()(size_t index)
Call operator.
FixedNumberPost(size_t presynaptic_pop_size, size_t postsynaptic_pop_size, std::function< typename knp::core::Projection< SynapseType >::SynapseParameters(size_t index0, size_t index1)> syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Constructor.
The FixedNumberPre class is a definition of a generator that makes connections between each postsynap...
FixedNumberPre(size_t presynaptic_pop_size, size_t postsynaptic_pop_size, std::function< typename knp::core::Projection< SynapseType >::SynapseParameters(size_t index0, size_t index1)> syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Constructor.
std::optional< typename knp::core::Projection< SynapseType >::Synapse > operator()(size_t index)
Call operator.
The FixedProbability class is a definition of a generator that makes connections with some probabilit...
std::optional< typename knp::core::Projection< SynapseType >::Synapse > operator()(size_t index)
Call operator.
FixedProbability(size_t presynaptic_pop_size, size_t postsynaptic_pop_size, double connection_probability, parameters_generators::SynGen2ParamsType< SynapseType > syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Constructor.
The FromMap class is a defintion of a generator of synapses from std::map or std::unordered_map objec...
FromMap(const MapType &synapses_map)
Constructor.
Map< typename std::tuple< size_t, size_t >, typename knp::core::Projection< SynapseType >::SynapseParameters > MapType
Type of the map.
std::optional< typename knp::core::Projection< SynapseType >::Synapse > operator()(size_t index)
Call operator.
std::function< typename knp::core::Projection< SynapseType >::SynapseParameters(size_t, size_t)> SynGen2ParamsType
Two parameters (index, index) generator type.
std::function< typename knp::core::Projection< SynapseType >::SynapseParameters(size_t)> SynGen1ParamType
One parameter (index) generator type.
knp::core::Projection< SynapseType >::SynapseParameters default_synapse_gen(size_t, size_t)
Default generator of synapse parameters.
std::function< typename std::optional< typename knp::core::Projection< SynapseType >::SynapseParameters >( size_t, size_t)> SynGenOptional2ParamsType
Two parameters (index, index) generator type with optional result.
Namespace for framework projection generators.
knp::core::Projection< SynapseType >::SynapseGenerator all_to_all(size_t presynaptic_pop_size, size_t postsynaptic_pop_size, parameters_generators::SynGen2ParamsType< SynapseType > syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Make connections between each presynaptic population (source) neuron to each postsynaptic population ...
knp::core::Projection< SynapseType >::SynapseGenerator from_container(const Container< typename core::Projection< SynapseType >::Synapse > &container)
Generate synapses from container.
knp::core::Projection< SynapseType >::SynapseGenerator index_based(size_t presynaptic_pop_size, size_t postsynaptic_pop_size, parameters_generators::SynGenOptional2ParamsType< SynapseType > syn_gen)
Make connections between neurons of presynaptic and postsynaptic populations based on the synapse gen...
knp::core::Projection< DestinationSynapseType >::SynapseGenerator clone_projection(const knp::core::Projection< SourceSynapseType > &source_proj, parameters_generators::SynGen1ParamType< DestinationSynapseType > syn_gen=parameters_generators::default_synapse_gen< DestinationSynapseType >)
Make connections duplicated from another projection.
knp::core::Projection< SynapseType >::SynapseGenerator one_to_one(size_t population_size, parameters_generators::SynGen1ParamType< SynapseType > syn_gen=std::bind(parameters_generators::default_synapse_gen< SynapseType >, std::placeholders::_1, 0))
Make one-to-one connections between neurons of presynaptic and postsynaptic populations.
General population interface.
General projection interface.