diff options
Diffstat (limited to 'core/spike_in.cpp')
-rw-r--r-- | core/spike_in.cpp | 64 |
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; +} |