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

Change position to array

parent add603d1
No related branches found
No related tags found
1 merge request!10Feature/add database
Pipeline #163420 canceled
......@@ -24,10 +24,13 @@ RecordingBackendInsite::RecordingBackendInsite()
pqxx::work txn(database_connection_);
simulation_node_id_ = txn.exec1(
"INSERT INTO nest_simulation_node (address) "
"VALUES ('http://insite-nest-module:" + get_port_string() + "') "
"RETURNING id;"
)[0].as<int>();
std::cout << "Simulation node registered to database. Node ID: " << simulation_node_id_ << std::endl;
"VALUES ('http://insite-nest-module:" +
get_port_string() +
"') "
"RETURNING id;")[0]
.as<int>();
std::cout << "Simulation node registered to database. Node ID: "
<< simulation_node_id_ << std::endl;
txn.commit();
}
......@@ -66,8 +69,7 @@ void RecordingBackendInsite::set_value_names(
auto& multimeter = multimeter_infos_.at(device.get_node_id());
std::stringstream multimeter_query;
multimeter_query
<< "INSERT INTO nest_multimeter (id, attributes) "
multimeter_query << "INSERT INTO nest_multimeter (id, attributes) "
<< "VALUES (" << device.get_node_id() << ",\'{";
bool first = true;
......@@ -115,16 +117,18 @@ void RecordingBackendInsite::post_step_hook() {
pqxx::work txn(database_connection_);
txn.exec0(
"UPDATE nest_simulation_node "
"SET current_simulation_time = " + std::to_string(latest_simulation_time_) + ""
"WHERE id = " + std::to_string(simulation_node_id_)
);
"SET current_simulation_time = " +
std::to_string(latest_simulation_time_) +
""
"WHERE id = " +
std::to_string(simulation_node_id_));
txn.commit();
}
if (new_neuron_infos_.size() > 0) {
std::stringstream neuron_query;
neuron_query
<< "INSERT INTO nest_neuron (id, simulation_node_id, population_id, position_x, position_y, position_z) "
neuron_query << "INSERT INTO nest_neuron (id, simulation_node_id, "
"population_id, position) "
<< "VALUES ";
for (auto& neuron_info : new_neuron_infos_) {
const bool first = neuron_info.gid == new_neuron_infos_[0].gid;
......@@ -133,16 +137,26 @@ void RecordingBackendInsite::post_step_hook() {
}
uint64_t population_id = 0;
for (const nest::NodeIDTriple& node_id_triple : *neuron_info.gid_collection.get()) {
for (const nest::NodeIDTriple& node_id_triple :
*neuron_info.gid_collection.get()) {
population_id ^= node_id_triple.node_id * 938831;
}
neuron_query << "(" << neuron_info.gid << "," << simulation_node_id_ << "," << population_id % 0x800000;
for (const auto position_entry : neuron_info.position) {
neuron_query << "," << position_entry;
neuron_query << "(" << neuron_info.gid << "," << simulation_node_id_
<< "," << population_id % 0x800000;
const auto position_size = neuron_info.position.size();
if (position_size > 0) {
assert(position_size <= 3);
neuron_query << ",\'{";
for (size_t i = 0; i < position_size; ++i) {
if (i > 0) {
neuron_query << ",";
}
neuron_query << neuron_info.position[i];
}
assert(neuron_info.position.size() <= 3);
for (auto i = 3 - neuron_info.position.size(); i != 0; --i) {
neuron_query << "}\'";
} else {
neuron_query << ",NULL";
}
neuron_query << ")";
......@@ -162,8 +176,7 @@ void RecordingBackendInsite::post_step_hook() {
// Send multimeter info
for (auto& kvp : multimeter_infos_) {
auto& multimeter = kvp.second;
if (!multimeter.needs_update)
continue;
if (!multimeter.needs_update) continue;
multimeter.needs_update = false;
if (multimeter.gids.size() > 0) {
......@@ -174,7 +187,8 @@ void RecordingBackendInsite::post_step_hook() {
for (const auto& neuron_id : multimeter.gids) {
const bool first = neuron_id == multimeter.gids[0];
neuron_multimeter_query << (first ? "" : ",") << "(" << neuron_id << "," << multimeter.device_id << ")";
neuron_multimeter_query << (first ? "" : ",") << "(" << neuron_id << ","
<< multimeter.device_id << ")";
}
neuron_multimeter_query << " ON CONFLICT DO NOTHING;";
......@@ -208,12 +222,12 @@ void RecordingBackendInsite::write(const nest::RecordingDevice& device,
}
for (std::size_t i = 0; i < double_values.size(); ++i)
data_storage_.AddMultimeterMeasurement(device_id,
multimeter.double_attributes[i], time_stamp, sender_gid,
data_storage_.AddMultimeterMeasurement(
device_id, multimeter.double_attributes[i], time_stamp, sender_gid,
double_values[i]);
for (std::size_t i = 0; i < long_values.size(); ++i)
data_storage_.AddMultimeterMeasurement(device_id,
multimeter.long_attributes[i], time_stamp, sender_gid,
data_storage_.AddMultimeterMeasurement(
device_id, multimeter.long_attributes[i], time_stamp, sender_gid,
double(long_values[i]));
}
latest_simulation_time_ = std::max(latest_simulation_time_, time_stamp);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment