summaryrefslogtreecommitdiff
path: root/core/track_causality.cpp
blob: 652fa26c8b101cba12373fb565c29957a7645f59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "perftools.hpp"
#include "sim_causality.hpp"
#include "system_helpers.hpp"

void realMain(Time start, Time until) {
  SimCausality<Lists::all_ro> s(start);
  uint64_t totalEventsProcessed(0), eventsProcessed(-1);
  const uint64_t eventsPerChunk{10000};
  Timer timerAll;
  uint64_t trueMarks[2] = {}, totalMarks[2] = {};
  std::cout << "miau" << std::endl;
  while (s.ct < until && until > s.queues.min()) {
    eventsProcessed = eventsPerChunk - s.run(until, eventsPerChunk);
    totalEventsProcessed += eventsProcessed;
    std::cout << "\r\033[K"
	      << s.ct << "\t"
	      << totalEventsProcessed / timerAll.diff() << " Hz(p)\t"
	      << "ETA " << ceil(  (until() - s.ct()) 
				/ (s.ct() - start()) 
				*  timerAll.diff());
    std::cout << std::flush;


    std::cerr << "MARKSTAT\t" << s.ct << "\t"
	      << s.trueMarks[1] - trueMarks[1] << "\t" << s.totalMarks[1] - totalMarks[1] << "\t"
	      << s.trueMarks[0] - trueMarks[0] << "\t" << s.totalMarks[0] - totalMarks[0] << "\t"
	      << "\n";
    trueMarks[1] = s.trueMarks[1];
    trueMarks[0] = s.trueMarks[0];
    totalMarks[0] = s.totalMarks[0];
    totalMarks[1] = s.totalMarks[1];
  }
  s.run(until, -1);

  if (s.inactiveNeurons) {
    std::cout << s.inactiveNeurons 
	      << " neurons remained inactive during replay time:\n";
    bool first(0);
    for (int i=0; i<1000; i++) {
      if (!s.hasFired[i]) {
	if (first) {
	  first = false;
	}else{
	  std::cout << ", ";
	}
	std::cout << i;
      }
    }
    std::cout << std::endl;
  }else{
    std::cout << "Last neuron went active at " << s.lastNeuronActivation() << "\n";
  }
  std::cout << s.trueMarks [1] << " of " 
	    << s.totalMarks[1] << " spike arrivals are 0-egal ("
	    << 100 * double(s.trueMarks[1]) / s.totalMarks[1] << " %)\n"
	    << s.trueMarks [0] << " of " 
	    << s.totalMarks[0] << " random spikes are 0-egal"
	    << 100 * double(s.trueMarks[0]) / s.totalMarks[0] << " %)\n";
}

int main(int argc, char **argv) {
  assert(argc == 3);
  char *tail;
  Time start(strtod( argv[1], &tail)); assert(*tail == 0);
  Time stop( strtod( argv[2], &tail)); assert(*tail == 0);

  assertSimDir();
  garantueeStackSize(64 * 1024 * 1024);
  realMain(start, stop);

  return 0;
}
contact: Jan Huwald // Impressum