Update, seems to work!
[mtp.git] / tracker.cc
index 4b7375f..c90ed44 100644 (file)
@@ -35,13 +35,11 @@ Tracker::Tracker(int nb_time_steps, int nb_locations) {
 
   _edge_lengths = 0;
   _graph = 0;
-  _edge_occupation = 0;
 }
 
 Tracker::~Tracker() {
   delete[] _edge_lengths;
   delete _graph;
-  delete[] _edge_occupation;
   deallocate_array<scalar_t>(_detection_score);
   deallocate_array<int>(_allowed_motion);
 }
@@ -58,8 +56,7 @@ void Tracker::build_graph() {
 
   // Delete existing graph
   delete[] _edge_lengths;
-  delete[] _graph;
-  delete[] _edge_occupation;
+  delete _graph;
 
   int nb_motions = 0;
   for(int l = 0; l < _nb_locations; l++) {
@@ -79,7 +76,6 @@ void Tracker::build_graph() {
   int e = 0;
 
   _edge_lengths = new scalar_t[nb_edges];
-  _edge_occupation = new int[nb_edges];
 
   // We put the in-node edges first, since these are the ones whose
   // lengths we will have to change according to the detection score
@@ -138,8 +134,8 @@ void Tracker::track() {
     }
   }
 
-  _graph->find_best_paths(_edge_lengths, _edge_occupation);
-  _graph->retrieve_paths();
+  _graph->find_best_paths(_edge_lengths);
+  _graph->retrieve_disjoint_paths();
 
   for(int p = 0; p < _graph->nb_paths; p++) {
     Path *path = _graph->paths[p];
@@ -152,17 +148,14 @@ void Tracker::track() {
   // _graph->print_dot();
 }
 
-// void Tracker::track() {
-// }
-
-// int Tracker::nb_trajectories() {
-// }
-
-// int Tracker::trajectory_start_time(int k) {
-// }
+int Tracker::nb_trajectories() {
+  return _graph->nb_paths;
+}
 
-// int Tracker::trajectory_end_time(int k) {
-// }
+int Tracker::trajectory_duration(int k) {
+  return (_graph->paths[k]->length - 2) / 2;
+}
 
-// int Tracker::trajectory_location(int k, int time) {
-// }
+int Tracker::trajectory_location(int k, int time) {
+  return (_graph->paths[k]->nodes[2 * time + 1] - 1) % _nb_locations;
+}