summaryrefslogtreecommitdiff
path: root/core/spike_in.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/spike_in.cpp')
-rw-r--r--core/spike_in.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/core/spike_in.cpp b/core/spike_in.cpp
new file mode 100644
index 0000000..73a5649
--- /dev/null
+++ b/core/spike_in.cpp
@@ -0,0 +1,64 @@
+#include <assert.h>
+#include <errno.h>
+#include <iostream>
+#include <stdlib.h>
+
+#include "everything_else.hpp"
+#include "filter.hpp"
+#include "index.hpp"
+#include "index_spike.hpp"
+#include "multi_queue.hpp"
+
+using std::cout;
+using std::endl;
+using boost::make_tuple;
+
+int main(int argc, char **argv) {
+ // read cmd line params
+ if (argc != 4) {
+ cout << "Usage: " << argv[0] << " instance start until" << endl;
+ return -1;
+ }
+ errno = 0;
+ char *tail;
+ IdList<Ptr<Neuron>::ptr_t> ids(argv[1]);
+ const Time start(strtod(argv[2], &tail)); assert(*tail == 0);
+ const Time until(strtod(argv[3], &tail)); assert(*tail == 0);
+ assert(errno == 0);
+ for (auto id : ids)
+ assert(id < Ptr<Neuron>::numInstances());
+
+ assertSimDir();
+
+ {
+ MultiQueue<
+ Time, FilterPayload,
+ boost::mpl::list<SpikeArrival, RandomSpike>,
+ FilterContainer> queues(Filter<SpikeArrival>(ids, start),
+ Filter<RandomSpike> (ids, start));
+
+ // output
+ Time ct(start);
+ cout << "# time\tsrc\tdst" << endl;
+ while ((ct = queues.min()) <= until) {
+ cout << ct() << '\t';
+ switch (queues.minType()) {
+ case RuntimeID<SpikeArrival>::value:
+ cout << queues.get<SpikeArrival>().index.src
+ (queues.get<SpikeArrival>().minPayload().src.get<0>().extractSpike()())
+ << '\t' << queues.get<SpikeArrival>().minPayload().dst();
+ queues.removeMin<SpikeArrival>(ct);
+ break;
+ case RuntimeID<RandomSpike>::value:
+ cout << "R\t" << queues.get<RandomSpike>().minPayload().dst();
+ queues.removeMin<RandomSpike>(ct);
+ break;
+ default:
+ assert(false);
+ }
+ cout << endl;
+ }
+}
+
+ return 0;
+}
contact: Jan Huwald // Impressum