-int main(int argc, char **argv) {
- // int nb_locations = 6;
- // int nb_time_steps = 5;
-
- // {
- // Tracker tracker(nb_time_steps, nb_locations);
-
- // for(int l = 0; l < nb_locations; l++) {
- // for(int k = 0; k < nb_locations; k++) {
- // tracker.set_allowed_motion(l, k, abs(l - k) <= 1);
- // }
- // }
-
- // for(int t = 0; t < nb_time_steps; t++) {
- // for(int l = 0; l < nb_locations; l++) {
- // tracker.set_detection_score(t, l,
- // (drand48() < 0.9 ? -1.0 : 1.0) + drand48() * 0.1 - 0.05);
- // }
- // tracker.set_detection_score(t, 0,
- // (drand48() < 0.9 ? 1.0 : -1.0) + drand48() * 0.1 - 0.05);
- // }
-
- // tracker.build_graph();
- // tracker.track();
- // }
-
- // exit(0);
-
- if(argc < 2) {
- cerr << argv[0] << " <graph file>" << endl;
- exit(EXIT_FAILURE);
+void do_tracking(istream *in_tracker) {
+ timeval start_time, end_time;
+ MTPTracker *tracker = new MTPTracker();
+
+ if(verbose) { cout << "Reading the tracking parameters." << endl; }
+ tracker->read(in_tracker);
+
+ if(verbose) {
+ cout << "Building the graph ... "; cout.flush();
+ gettimeofday(&start_time, 0);
+ }
+ tracker->build_graph();
+ if(verbose) {
+ gettimeofday(&end_time, 0);
+ cout << "done (" << diff_in_second(&start_time, &end_time) << "s)." << endl;
+ }
+
+ if(verbose) {
+ cout << "Tracking ... "; cout.flush();
+ gettimeofday(&start_time, 0);
+ }
+ tracker->track();
+ if(verbose) {
+ gettimeofday(&end_time, 0);
+ cout << "done (" << diff_in_second(&start_time, &end_time) << "s)." << endl;
+ }
+
+ if(strcmp(trajectory_filename, "")) {
+ ofstream out_traj(trajectory_filename);
+ tracker->write_trajectories(&out_traj);
+ if(verbose) { cout << "Wrote " << trajectory_filename << "." << endl; }
+ } else {
+ tracker->write_trajectories(&cout);