Skip to content
Snippets Groups Projects
global_tracking.ipynb 17.5 KiB
Newer Older
Filip Lux's avatar
Filip Lux committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "8666f97c-92c8-42ea-b025-2030dd3f3a9b",
   "metadata": {},
   "source": [
Filip Lux's avatar
Filip Lux committed
    "# Cell Tracking by Global optimization\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
Filip Lux's avatar
Filip Lux committed
    "Autor: Filip Lux\n"
Filip Lux's avatar
Filip Lux committed
   ]
  },
  {
Filip Lux's avatar
Filip Lux committed
   "cell_type": "code",
   "execution_count": 6,
   "id": "159f69e5-6a90-40da-b905-dfd27ac5e694",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": []
Filip Lux's avatar
Filip Lux committed
  },
  {
   "cell_type": "markdown",
Filip Lux's avatar
Filip Lux committed
   "id": "3a8304a7-71fe-47ec-b8cf-99162d0ae1f8",
Filip Lux's avatar
Filip Lux committed
   "metadata": {},
   "source": [
Filip Lux's avatar
Filip Lux committed
    "### 1. Import packages"
Filip Lux's avatar
Filip Lux committed
   ]
  },
  {
   "cell_type": "code",
Filip Lux's avatar
Filip Lux committed
   "execution_count": 7,
   "id": "c9c3ebe6-7e58-45b4-b847-20a5fffcd463",
Filip Lux's avatar
Filip Lux committed
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
Filip Lux's avatar
Filip Lux committed
    "from pathlib import Path\n",
    "import os\n",
    "\n",
    "from tracking.global_tracker import GlobalTracker\n",
    "from tracking.embedtrack import run_embedtrack"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21576aad-539a-4bfe-b41a-d9045d767208",
   "metadata": {},
   "source": [
    "### 2. Set configuration"
Filip Lux's avatar
Filip Lux committed
   ]
  },
  {
   "cell_type": "code",
Filip Lux's avatar
Filip Lux committed
   "execution_count": 8,
   "id": "f2abf94a-3b99-4a06-9109-90a60ed29e22",
Filip Lux's avatar
Filip Lux committed
   "metadata": {
    "tags": []
   },
Filip Lux's avatar
Filip Lux committed
   "outputs": [],
Filip Lux's avatar
Filip Lux committed
   "source": [
Filip Lux's avatar
Filip Lux committed
    "# according the data you have in DATA folder, set the hyperparameters\n",
    "dataset_name = 'BF-C2DL-HSC'\n",
    "subsets = ['train']\n",
    "seqs = ['01', '02']\n",
    "max_dist = 42\n",
    "vertex_thr = 0.95\n",
    "lm_dist = 80\n",
    "\n",
    "experiment = f'MU-CZ_CTC23'"
Filip Lux's avatar
Filip Lux committed
   "cell_type": "markdown",
   "id": "1cb3c9eb-213e-419e-a0f5-b8771d2d692b",
Filip Lux's avatar
Filip Lux committed
   "metadata": {
    "tags": []
   },
   "source": [
Filip Lux's avatar
Filip Lux committed
    "### 3. Run detection and tracking"
Filip Lux's avatar
Filip Lux committed
   ]
  },
  {
   "cell_type": "code",
Filip Lux's avatar
Filip Lux committed
   "execution_count": 9,
   "id": "90e2394e-5a77-4a97-9df1-c2049403cb5d",
Filip Lux's avatar
Filip Lux committed
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating graph\n",
      "GET GRAPH: adding vertices\n",
      "GET GRAPH: adding edges\n",
      "creating tracking file\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
Filip Lux's avatar
Filip Lux committed
      "100%|███████████████████████████████████| 201/201 [00:00<00:00, 77358.70it/s]\n",
      "divisions: 100%|███████████████████████| 179/179 [00:00<00:00, 567483.31it/s]\n"
Filip Lux's avatar
Filip Lux committed
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Filip Lux's avatar
Filip Lux committed
      "Added 99 division candidates.\n",
      "<itertools.chain object at 0x7f55c7edd040>\n",
      "CORRECT, 278 99\n",
      "computing solution\n",
      "[mem] ctor: size=49392123904B (46GiB) -> memory_=0x7f42e7f72010\n",
      "Set parameter Username\n",
      "Academic license - for non-commercial use only - expires 2024-06-21\n",
      "[mem] finalize: size=69104 (0.0659027 MiB)\n",
      "it=100 lb=-72.241677663677137 ub=-72.241677663676271 gap=1.1999473680315842e-12% t=0.0055045570000000002\n",
      "it=200 lb=-72.241677663677109 ub=-72.241677663676271 gap=1.1606048153783854e-12% t=0.010968277\n",
      "final solution: -72.2416776636763\n",
      "source file RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES/tracking.txt\n",
      "source solution RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES/tracking.sol\n",
      "saving RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES/res_track.txt\n",
      "storing res images\n"
Filip Lux's avatar
Filip Lux committed
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
Filip Lux's avatar
Filip Lux committed
      "100%|███████████████████████████████████████| 20/20 [00:00<00:00, 166.44it/s]\n",
      "rm: cannot remove '/home/xlux/PROJECTS/TRACKING/twin/global-linking/DATA/train/BF-C2DL-HSC/56_RES': No such file or directory\n"
Filip Lux's avatar
Filip Lux committed
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Filip Lux's avatar
Filip Lux committed
      "/home/xlux/PROJECTS/TRACKING/twin/global-linking/RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES\n",
      "ERROR: procedure $rm /home/xlux/PROJECTS/TRACKING/twin/global-linking/DATA/train/BF-C2DL-HSC/56_RES failed with an output 1\n",
      "running ./ctc_metrics/TRAMeasure DATA/train/BF-C2DL-HSC 56 4\n",
      "TRA measure: 0.956236\n",
      "running ./ctc_metrics/DETMeasure DATA/train/BF-C2DL-HSC 56 4\n",
      "DET measure: 0.950000\n",
      "running ./ctc_metrics/SEGMeasure DATA/train/BF-C2DL-HSC 56 4\n",
      "The directory 'DATA/train/BF-C2DL-HSC/56_GT/SEG/' does not exist!\n",
      "ERROR: procedure $./ctc_metrics/SEGMeasure DATA/train/BF-C2DL-HSC 56 4 failed with an output 255\n"
Filip Lux's avatar
Filip Lux committed
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
Filip Lux's avatar
Filip Lux committed
      "100%|█████████████████████████████████| 980/980 [00:00<00:00, 1335852.43it/s]\n",
      "100%|█████████████████████████████████| 123/123 [00:00<00:00, 1059341.67it/s]\n"
Filip Lux's avatar
Filip Lux committed
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Filip Lux's avatar
Filip Lux committed
      "running embedtrack with the following arguments: {'batch_size': '1', 'sequence': '01', 'data_path': 'DATA/train/BF-C2DL-HSC', 'model_path': 'EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23'}\n",
      "running inference(DATA/train/BF-C2DL-HSC/01, EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23/best_iou_model.pth, EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23/config.json, batch_size=1)\n"
Filip Lux's avatar
Filip Lux committed
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
Filip Lux's avatar
Filip Lux committed
      "Traceback (most recent call last):\n",
      "  File \"EmbedTrack/embedtrack.py\", line 69, in <module>\n",
      "    main(args['data_path'], args['sequence'], args['model_path'], args['batch_size'])\n",
      "  File \"EmbedTrack/embedtrack.py\", line 62, in main\n",
      "    inference(img_path, model_path, config_file, batch_size=batch_size, overlap=0.25)\n",
      "  File \"/home/xlux/PROJECTS/TRACKING/twin/global-linking/EmbedTrack/embedtrack/infer/infer_ctc_data.py\", line 72, in inference\n",
      "    os.path.join(raw_data_path, os.listdir(raw_data_path)[0])\n",
      "FileNotFoundError: [Errno 2] No such file or directory: 'DATA/train/BF-C2DL-HSC/01'\n"
Filip Lux's avatar
Filip Lux committed
     ]
    },
    {
Filip Lux's avatar
Filip Lux committed
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ERROR: procedure $python3 EmbedTrack/embedtrack.py --sequence 01 --data_path DATA/train/BF-C2DL-HSC --model_path EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23 --batch_size 1 failed with an output 1\n",
      "creating graph\n"
     ]
Filip Lux's avatar
Filip Lux committed
    },
    {
Filip Lux's avatar
Filip Lux committed
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: 'DATA/train/BF-C2DL-HSC/01_DATA'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[9], line 34\u001b[0m\n\u001b[1;32m     31\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m res_path\u001b[38;5;241m.\u001b[39mexists():\n\u001b[1;32m     32\u001b[0m     os\u001b[38;5;241m.\u001b[39mmakedirs(res_path)\n\u001b[0;32m---> 34\u001b[0m tr \u001b[38;5;241m=\u001b[39m \u001b[43mGlobalTracker\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m     35\u001b[0m \u001b[43m                   \u001b[49m\u001b[43mres_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m     36\u001b[0m \u001b[43m                   \u001b[49m\u001b[43mmax_dist\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_dist\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m     37\u001b[0m \u001b[43m                   \u001b[49m\u001b[43mvertex_thr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvertex_thr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     40\u001b[0m \u001b[38;5;66;03m# create tracking.sol and tracking.txt\u001b[39;00m\n\u001b[1;32m     41\u001b[0m tr\u001b[38;5;241m.\u001b[39mrun_tracking(limit_dist\u001b[38;5;241m=\u001b[39mlm_dist)\n",
      "File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/global_tracker.py:101\u001b[0m, in \u001b[0;36mGlobalTracker.__init__\u001b[0;34m(self, data_path, res_path, mean_dist, max_dist, vertex_thr, app_cost, edge_min_cost, normalize, n_edges, min_frame, max_frame)\u001b[0m\n\u001b[1;32m     98\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmin_frame \u001b[38;5;241m=\u001b[39m min_frame\n\u001b[1;32m     99\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_frame \u001b[38;5;241m=\u001b[39m max_frame\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgraph \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_graph\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/global_tracker.py:110\u001b[0m, in \u001b[0;36mGlobalTracker.create_graph\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    106\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcreate_graph\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m    107\u001b[0m     \u001b[38;5;66;03m# create graph\u001b[39;00m\n\u001b[1;32m    108\u001b[0m     \u001b[38;5;66;03m# TODO: limit to min_frame/max_frame\u001b[39;00m\n\u001b[1;32m    109\u001b[0m     \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcreating graph\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m--> 110\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mget_graph_bk\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    111\u001b[0m \u001b[43m                    \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    112\u001b[0m \u001b[43m                    \u001b[49m\u001b[43mmin_frame\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmin_frame\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    113\u001b[0m \u001b[43m                    \u001b[49m\u001b[43mmax_frame\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_frame\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    114\u001b[0m \u001b[43m                    \u001b[49m\u001b[43mn_edges\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mn_edges\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/global_tracker.py:281\u001b[0m, in \u001b[0;36mget_graph_bk\u001b[0;34m(data_path, n_edges, min_frame, max_frame)\u001b[0m\n\u001b[1;32m    258\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m    259\u001b[0m \u001b[38;5;124;03mcreates instance of candidate graph\u001b[39;00m\n\u001b[1;32m    260\u001b[0m \u001b[38;5;124;03m\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    277\u001b[0m \u001b[38;5;124;03m\u001b[39;00m\n\u001b[1;32m    278\u001b[0m \u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m    280\u001b[0m \u001b[38;5;66;03m# create an empty graph structure\u001b[39;00m\n\u001b[0;32m--> 281\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[43mFlowGraph\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata_path\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    283\u001b[0m \u001b[38;5;66;03m# compute distances\u001b[39;00m\n\u001b[1;32m    284\u001b[0m pd_edge_path \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(data_path, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124medge_prob_distance.csv\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
      "File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/graph.py:33\u001b[0m, in \u001b[0;36mFlowGraph.__init__\u001b[0;34m(self, res_path)\u001b[0m\n\u001b[1;32m     30\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m res_path\u001b[38;5;241m.\u001b[39mexists(), res_path\n\u001b[1;32m     32\u001b[0m \u001b[38;5;66;03m# get datset of frames \u001b[39;00m\n\u001b[0;32m---> 33\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset \u001b[38;5;241m=\u001b[39m \u001b[43mDataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mres_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname_pattern\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmask\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m     36\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m     37\u001b[0m \u001b[38;5;124;03m#########\u001b[39;00m\n\u001b[1;32m     38\u001b[0m \u001b[38;5;124;03mOUTPUTS\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     43\u001b[0m \u001b[38;5;124;03musing this index you can get vertices that it represents\u001b[39;00m\n\u001b[1;32m     44\u001b[0m \u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m     45\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39medges \u001b[38;5;241m=\u001b[39m {} \u001b[38;5;66;03m# edges[e_idx] = (v_idx, v_idx)\u001b[39;00m\n",
      "File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/my_utils/image.py:91\u001b[0m, in \u001b[0;36mDataset.__init__\u001b[0;34m(self, data_path, name_pattern, max_size)\u001b[0m\n\u001b[1;32m     89\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39misdir(data_path), data_path\n\u001b[1;32m     90\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_path \u001b[38;5;241m=\u001b[39m data_path\n\u001b[0;32m---> 91\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_files \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msorted\u001b[39m([os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_path, name) \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlistdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_path\u001b[49m\u001b[43m)\u001b[49m \\\n\u001b[1;32m     92\u001b[0m                       \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.tif\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m name \u001b[38;5;129;01mand\u001b[39;00m name_pattern \u001b[38;5;129;01min\u001b[39;00m name])\n\u001b[1;32m     93\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_max_size \u001b[38;5;241m=\u001b[39m max_size\n\u001b[1;32m     94\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_len \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_files)\n",
      "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'DATA/train/BF-C2DL-HSC/01_DATA'"
     ]
Filip Lux's avatar
Filip Lux committed
    }
   ],
   "source": [
    "for subset in subsets:\n",
    "    for seq in seqs:\n",
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        # learn data path\n",
    "        data_path = Path('DATA',\n",
    "                         subset,\n",
    "                         dataset_name,\n",
    "                         f'{seq}_DATA')\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        assert data_path.exists(), data_path\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        # run EmbedTrack procedure\n",
    "        if not os.path.isdir(data_path):\n",
    "            model_path = Path('EmbedTrack',\n",
    "                              'models',\n",
    "                              dataset_name,\n",
    "                              experiment)\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
Filip Lux's avatar
Filip Lux committed
    "            assert os.path.isdir(model_path)\n",
    "            run_embedtrack(os.path.dirname(data_path), seq, model_path)\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        # create result directory\n",
    "        res_path = Path('RESULTS',\n",
    "                         experiment,\n",
    "                         subset,\n",
    "                         dataset_name,\n",
    "                         f'{seq}_RES')\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        if not res_path.exists():\n",
    "            os.makedirs(res_path)\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        tr = GlobalTracker(data_path,\n",
    "                           res_path,\n",
    "                           max_dist=max_dist,\n",
    "                           vertex_thr=vertex_thr)\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        # create tracking.sol and tracking.txt\n",
    "        tr.run_tracking(limit_dist=lm_dist)\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
Filip Lux's avatar
Filip Lux committed
    "        # evaluate\n",
    "        tr.save_results_ctc()\n",
    "        tr.evaluate_ctc()\n",
    "        tr.solution_stats()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88691d44-c2cb-4780-9789-1d47f5dda8ba",
   "metadata": {},
   "source": [
    "### 4. See results\n",
Filip Lux's avatar
Filip Lux committed
    "\n",
Filip Lux's avatar
Filip Lux committed
    "Results are stored in a `RESULTS` folder."
Filip Lux's avatar
Filip Lux committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0e69c4f8-8940-43a9-a6bb-419a1d2f7bca",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}