95 return ( other.layer_.get_metadata() ==
layer_.get_metadata() ) and ( other.node_ ==
node_ );
100 return ( other.layer_.get_metadata() !=
layer_.get_metadata() ) or ( other.node_ !=
node_ );
117 :
Layer< D >( layer )
146 bool allow_oversized,
160 template <
class Ins >
178 std::vector< long > new_dims( D );
183 for (
int i = 0; i < D; ++i )
185 new_size *= new_dims[ i ];
187 this->dims_[ i ] =
static_cast< size_t >( new_dims[ i ] );
190 if ( new_size != this->node_collection_->size() )
192 throw BadProperty(
"Total size of layer must be unchanged." );
198 this->extent_ = d.get< std::vector< double > >(
names::extent );
199 this->lower_left_ = center - this->extent_ / 2;
203 this->lower_left_ = d.get< std::vector< double > >(
names::center );
204 this->lower_left_ -= this->extent_ / 2;
216 const auto dv = dims_.get_vector();
217 d[
names::shape ] = std::vector< long >( dv.begin(), dv.end() );
225 for (
int i = D - 1; i > 0; --i )
227 gridpos[ i ] = lid % dims_[ i ];
228 lid = lid / dims_[ i ];
230 assert( lid < dims_[ 0 ] );
232 return gridpos_to_position( gridpos );
244 upper_left[ 1 ] += ext[ 1 ];
245 ext[ 1 ] = -ext[ 1 ];
247 return upper_left + ext / dims_ * gridpos + ext / dims_ * 0.5;
254 return lid_to_position( lid );
264 for (
int i = 0; i < D; ++i )
266 if ( this->periodic_[ i ] )
268 pos[ i ] %= int( dims_[ i ] );
271 pos[ i ] += dims_[ i ];
276 for (
int i = 0; i < D; ++i )
286template <
class Ins >
290 for (
auto gi = node_collection->begin(); gi < node_collection->end(); ++gi )
292 const auto triple = *gi;
293 *iter++ = std::pair< Position< D >,
size_t >( lid_to_position( triple.nc_index ), triple.node_id );
301 auto ins2 = std::back_inserter( tree );
302 insert_global_positions_( ins2, node_collection );
311 insert_global_positions_( std::back_inserter( vec ), node_collection );
343 for (
int i = 0; i < D; ++i )
354 lower_left[ i ] = std::min(
359 upper_right[ i ] = std::min(
368 int tmp = lower_left[ 1 ];
369 lower_left[ 1 ] = layer.
dims_[ 1 ] - upper_right[ 1 ];
370 upper_right[ 1 ] = layer.
dims_[ 1 ] - tmp;
382inline std::pair< Position< D >,
size_t >
385 return std::pair< Position< D >,
size_t >(
386 layer_.gridpos_to_position( node_ ), layer_.node_collection_->operator[]( layer_.gridpos_to_lid( node_ ) ) );
397 if ( node_ == node_.get_upper_right() )
404 }
while ( not mask_->inside( layer_.gridpos_to_position( node_ ) - anchor_ ) );
410std::vector< std::pair< Position< D >,
size_t > >
416 std::vector< std::pair< Position< D >,
size_t > > positions;
421 positions.push_back( *mi );
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
Abstract base class for masks with unspecified dimension.
Definition mask.h:51
Exception to be thrown if a status parameter is incomplete or inconsistent.
Definition exceptions.h:680
Iterator iterating over the nodes inside a Mask.
Definition grid_layer.h:52
bool operator!=(const masked_iterator &other) const
Definition grid_layer.h:98
const Mask< D > * mask_
Definition grid_layer.h:106
int layer_size_
Definition grid_layer.h:105
value_type operator*()
Definition grid_layer.h:383
const GridLayer< D > & layer_
Definition grid_layer.h:104
masked_iterator operator++(int)
Postfix increment operator.
Definition grid_layer.h:82
MultiIndex< D > node_
Definition grid_layer.h:108
masked_iterator & operator++()
Move the iterator to the next node within the mask.
Definition grid_layer.h:391
masked_iterator(const GridLayer< D > &layer)
Constructor for an invalid iterator.
Definition grid_layer.h:57
bool operator==(const masked_iterator &other) const
Iterators are equal if they point to the same node in the same layer.
Definition grid_layer.h:93
Position< D > anchor_
Definition grid_layer.h:107
Layer with neurons placed in a grid.
Definition grid_layer.h:40
masked_iterator masked_begin(const Mask< D > &mask, const Position< D > &anchor)
Definition grid_layer.h:316
GridLayer(const GridLayer &layer)
Definition grid_layer.h:116
GridLayer()
Definition grid_layer.h:111
void insert_global_positions_(Ins iter, NodeCollectionPTR node_collection)
Definition grid_layer.h:288
void get_status(Dictionary &d, NodeCollection const *const) const override
Export properties of the layer by setting entries in the status dictionary, respects slicing of given...
Definition grid_layer.h:212
masked_iterator masked_end()
Definition grid_layer.h:323
size_t mapped_type
Definition grid_layer.h:43
std::vector< std::pair< Position< D >, size_t > > get_global_positions_vector(const AbstractMask &mask, const Position< D > &anchor, bool allow_oversized, NodeCollectionPTR node_collection)
Definition grid_layer.h:411
Position< D > lid_to_position(size_t lid) const
Get position of node.
Definition grid_layer.h:222
std::pair< Position< D >, size_t > value_type
Definition grid_layer.h:44
Position< D, size_t > get_dims() const
Definition grid_layer.h:169
Position< D > key_type
Definition grid_layer.h:42
void set_status(const Dictionary &d) override
Change properties of the layer according to the entries in the dictionary.
Definition grid_layer.h:176
void insert_global_positions_ntree_(Ntree< D, size_t > &tree, NodeCollectionPTR node_collection) override
Insert global position info into ntree.
Definition grid_layer.h:299
Position< D > gridpos_to_position(Position< D, int > gridpos) const
Definition grid_layer.h:237
Position< D > get_position(size_t sind) const override
Get position of node.
Definition grid_layer.h:252
value_type & reference
Definition grid_layer.h:45
void insert_global_positions_vector_(std::vector< std::pair< Position< D >, size_t > > &vec, NodeCollectionPTR node_collection) override
Insert global position info into vector.
Definition grid_layer.h:308
size_t gridpos_to_lid(Position< D, int > pos) const
Definition grid_layer.h:259
Position< D, size_t > dims_
number of nodes in each direction.
Definition grid_layer.h:158
const value_type & const_reference
Definition grid_layer.h:46
Abstract base class for Layer of given dimension (D=2 or 3).
Definition layer.h:218
Position< D > extent_
size of layer
Definition layer.h:440
void set_status(const Dictionary &) override
Change properties of the layer according to the entries in the dictionary.
Definition layer_impl.h:80
void get_status(Dictionary &, NodeCollection const *const) const override
Retrieve status, slice according to node collection if given.
Definition layer_impl.h:93
std::bitset< D > periodic_
periodic b.c.
Definition layer.h:441
Position< D > lower_left_
lower left corner (minimum coordinates) of layer
Definition layer.h:439
Abstract base class for masks with given dimension.
Definition mask.h:101
An index into a multidimensional array.
Definition position.h:340
Superclass for NodeCollections.
Definition node_collection.h:565
A Ntree object represents a subtree or leaf in a Ntree structure.
Definition ntree.h:55
const std::string shape("shape")
const std::string center("center")
const std::string extent("extent")
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
std::shared_ptr< NodeCollection > NodeCollectionPTR
Definition node_collection.h:50
A box is defined by the lower left corner (minimum coordinates) and the upper right corner (maximum c...
Definition position.h:321
Position< D > lower_left
Definition position.h:331
Position< D > upper_right
Definition position.h:332