Skip to content
Snippets Groups Projects
Commit e9d41edc authored by Simon Oehrl's avatar Simon Oehrl
Browse files

Add support for spike detectors

#14
parent 15488d9a
No related branches found
No related tags found
1 merge request!7Add support for spike detectors
......@@ -23,6 +23,8 @@
#include "streaming_recording_backend.h"
#include "recording_device.h"
#include "nesci/producer/nest_multimeter.hpp"
#include "nesci/producer/spike_detector.hpp"
#include <iostream>
#include <memory>
......@@ -70,23 +72,37 @@ void StreamingRecordingBackend::enroll(
long_parameter_names.push_back(value_name.toString());
}
if (device.get_type() == nest::RecordingDevice::Type::MULTIMETER) {
switch (device.get_type()) {
case nest::RecordingDevice::Type::MULTIMETER:
devices_[std::this_thread::get_id()][device.get_name()] =
std::make_unique<nesci::producer::NestMultimeter>(
device.get_name(), double_parameter_names, long_parameter_names);
std::cout << "Thread " << std::this_thread::get_id()
<< ": enrolled multimeter `" << device.get_name()
<< "` recording ";
for (const auto &double_value : double_value_names) {
std::cout << '`' << double_value << "` ";
}
std::cout << std::this_thread::get_id() << ' ';
std::cout << device.get_name() << ' ';
std::cout << "double_value_names: ";
for (const auto &name : double_value_names) {
std::cout << name << ' ';
}
std::cout << ", long_value_names: ";
for (const auto &name : long_value_names) {
std::cout << name << ' ';
for (const auto &long_value : long_value_names) {
std::cout << '`' << long_value << "` ";
}
std::cout << std::endl;
break;
case nest::RecordingDevice::Type::SPIKE_DETECTOR:
devices_[std::this_thread::get_id()][device.get_name()] =
std::make_unique<nesci::producer::SpikeDetector>(device.get_name());
std::cout << "Thread " << std::this_thread::get_id()
<< ": enrolled spike detector `" << device.get_name() << "`"
<< std::endl;
std::cout << std::endl;
break;
default:
std::cerr << "Invalid recording device type for " << device.get_name()
<< std::endl;
break;
}
}
void StreamingRecordingBackend::write(const nest::RecordingDevice &device,
......@@ -113,6 +129,15 @@ void StreamingRecordingBackend::write(const nest::RecordingDevice &device,
static_cast<nesci::producer::NestMultimeter *>(nesci_device.get());
multimeter->Record(event.get_stamp().get_ms(), event.get_sender_gid(),
double_values.data(), long_values.data());
} else if (device.get_type() == nest::RecordingDevice::Type::SPIKE_DETECTOR) {
auto spike_detector =
static_cast<nesci::producer::SpikeDetector *>(nesci_device.get());
nesci::producer::SpikeDetector::Datum datum{event.get_stamp().get_ms(),
event.get_sender_gid()};
spike_detector->Record(datum);
} else {
std::cerr << "Error: no device registered for `" << device.get_name() << '`'
<< std::endl;
}
}
......@@ -125,12 +150,13 @@ void StreamingRecordingBackend::synchronize() {
}
for (const auto &device : thread_devices->second) {
const auto node = device.second->node();
// TODO: check if node is empty
{
std::lock_guard<std::mutex> lock_guard(relay_mutex_);
relay_.Send(device.second->node(), false);
relay_.Send(node, false);
}
static_cast<nesci::producer::NestMultimeter *>(device.second.get())
->Clear();
device.second->Clear();
}
}
......
......@@ -36,7 +36,6 @@
#include "contra/relay.hpp"
#include "contra/shared_memory/shared_memory_transport.hpp"
#include "nesci/producer/device.hpp"
#include "nesci/producer/nest_multimeter.hpp"
namespace streamingnest {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment