@@ -162,16 +162,29 @@ SpikesArrays SpikeReader::Population::getArrays(const nonstd::optional<Selection
162162 return std::make_pair (node_ids_, timestamps_);
163163 }
164164
165- auto spikes = get (node_ids, tstart, tstop);
166-
167- std::vector<NodeID> nodeids;
168- std::vector<double > timestamps;
169- for (const auto & pair : spikes) {
170- nodeids.push_back (pair.first );
171- timestamps.push_back (pair.second );
165+ SpikesArrays arrays;
166+ const auto & node_ids_selection = node_ids.value ().flatten ();
167+ // Create arrays directly for required data based on conditions
168+ for (size_t i = 0 ; i < node_ids_.size (); ++i) {
169+ const auto & node_id = node_ids_[i];
170+ const auto & timestamp = timestamps_[i];
171+
172+ // Check if node_id is found in node_ids_selection
173+ bool node_ids_found = std::find (node_ids_selection.begin (),
174+ node_ids_selection.end (),
175+ node_id) != node_ids_selection.end ();
176+
177+ // Check if timestamp is within valid range
178+ bool valid_timestamp = (!tstart || timestamp >= tstart.value ()) &&
179+ (!tstop || timestamp <= tstop.value ());
180+
181+ // Include data if both conditions are satisfied
182+ if (node_ids && node_ids_found && valid_timestamp) {
183+ arrays.first .push_back (node_id);
184+ arrays.second .push_back (timestamp);
185+ }
172186 }
173-
174- return std::make_pair (nodeids, timestamps);
187+ return arrays;
175188}
176189
177190SpikeReader::Population::Sorting SpikeReader::Population::getSorting () const {
0 commit comments