motile-tracker 3.1.5.dev0__tar.gz → 3.2.1.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. motile_tracker-3.2.1.dev0/.github/dependabot.yml +10 -0
  2. motile_tracker-3.2.1.dev0/.github/workflows/deploy.yml +16 -0
  3. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/.gitignore +3 -0
  4. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/.pre-commit-config.yaml +4 -2
  5. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/PKG-INFO +51 -9
  6. motile_tracker-3.2.1.dev0/README.md +74 -0
  7. motile_tracker-3.2.1.dev0/conda_config.yml +12 -0
  8. motile_tracker-3.2.1.dev0/construct.yaml +12 -0
  9. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/conf.py +1 -1
  10. motile_tracker-3.2.1.dev0/install-scripts/finalize-install.sh +8 -0
  11. motile_tracker-3.2.1.dev0/install-scripts/wininstaller.iss +26 -0
  12. motile_tracker-3.2.1.dev0/motile-tracker.spec +121 -0
  13. motile_tracker-3.2.1.dev0/motile_logo.icns +0 -0
  14. motile_tracker-3.2.1.dev0/motile_logo.ico +0 -0
  15. motile_tracker-3.2.1.dev0/pixi.lock +8022 -0
  16. motile_tracker-3.2.1.dev0/pixi.toml +65 -0
  17. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/pyproject.toml +15 -9
  18. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/scripts/run_hela.py +2 -1
  19. motile_tracker-3.2.1.dev0/scripts/set-vs-buildTools-env.ps1 +19 -0
  20. motile_tracker-3.2.1.dev0/src/installer_hooks/hook-OpenGL.py +73 -0
  21. motile_tracker-3.2.1.dev0/src/installer_hooks/hook-finn.py +12 -0
  22. motile_tracker-3.2.1.dev0/src/installer_hooks/hook-fonticon_fa6.py +8 -0
  23. motile_tracker-3.2.1.dev0/src/installer_hooks/hook-ilpy.py +12 -0
  24. motile_tracker-3.2.1.dev0/src/installer_hooks/hook-motile_tracker.py +5 -0
  25. motile_tracker-3.2.1.dev0/src/installer_hooks/hook-superqt.py +7 -0
  26. motile_tracker-3.2.1.dev0/src/installer_hooks/hook-vispy.py +11 -0
  27. motile_tracker-3.2.1.dev0/src/motile_tracker/__init__.py +5 -0
  28. motile_tracker-3.2.1.dev0/src/motile_tracker/__main__.py +22 -0
  29. motile_tracker-3.2.1.dev0/src/motile_tracker/_version.py +21 -0
  30. motile_tracker-3.2.1.dev0/src/motile_tracker/launcher.py +51 -0
  31. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/backend/motile_run.py +1 -2
  32. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/menus/motile_widget.py +6 -8
  33. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/menus/run_editor.py +12 -12
  34. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/menus/run_viewer.py +2 -4
  35. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker.egg-info/PKG-INFO +51 -9
  36. motile_tracker-3.2.1.dev0/src/motile_tracker.egg-info/SOURCES.txt +68 -0
  37. motile_tracker-3.2.1.dev0/src/motile_tracker.egg-info/entry_points.txt +5 -0
  38. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker.egg-info/requires.txt +5 -4
  39. motile_tracker-3.2.1.dev0/src/motile_tracker.egg-info/top_level.txt +2 -0
  40. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/tests/conftest.py +0 -10
  41. motile_tracker-3.1.5.dev0/.github/workflows/deploy.yml +0 -29
  42. motile_tracker-3.1.5.dev0/README.md +0 -32
  43. motile_tracker-3.1.5.dev0/conda_config.yml +0 -8
  44. motile_tracker-3.1.5.dev0/scripts/test_edge_selection.py +0 -152
  45. motile_tracker-3.1.5.dev0/src/motile_tracker/__init__.py +0 -7
  46. motile_tracker-3.1.5.dev0/src/motile_tracker/application_menus/__init__.py +0 -3
  47. motile_tracker-3.1.5.dev0/src/motile_tracker/application_menus/editing_menu.py +0 -146
  48. motile_tracker-3.1.5.dev0/src/motile_tracker/application_menus/main_app.py +0 -26
  49. motile_tracker-3.1.5.dev0/src/motile_tracker/application_menus/menu_widget.py +0 -44
  50. motile_tracker-3.1.5.dev0/src/motile_tracker/data_model/__init__.py +0 -4
  51. motile_tracker-3.1.5.dev0/src/motile_tracker/data_model/action_history.py +0 -66
  52. motile_tracker-3.1.5.dev0/src/motile_tracker/data_model/actions.py +0 -327
  53. motile_tracker-3.1.5.dev0/src/motile_tracker/data_model/node_type.py +0 -11
  54. motile_tracker-3.1.5.dev0/src/motile_tracker/data_model/solution_tracks.py +0 -230
  55. motile_tracker-3.1.5.dev0/src/motile_tracker/data_model/tracks.py +0 -706
  56. motile_tracker-3.1.5.dev0/src/motile_tracker/data_model/tracks_controller.py +0 -602
  57. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/__init__.py +0 -7
  58. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/__init__.py +0 -0
  59. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/layers/__init__.py +0 -0
  60. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/layers/contour_labels.py +0 -120
  61. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/layers/track_graph.py +0 -197
  62. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/layers/track_labels.py +0 -504
  63. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/layers/track_points.py +0 -312
  64. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/layers/tracks_layer_group.py +0 -171
  65. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/tree_view/__init__.py +0 -0
  66. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/tree_view/flip_axes_widget.py +0 -29
  67. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/tree_view/navigation_widget.py +0 -186
  68. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/tree_view/tree_view_feature_widget.py +0 -60
  69. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/tree_view/tree_view_mode_widget.py +0 -57
  70. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/tree_view/tree_widget.py +0 -750
  71. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/tree_view/tree_widget_utils.py +0 -247
  72. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/view_3d/__init__.py +0 -1
  73. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/view_3d/clipping_plane_sliders.py +0 -455
  74. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/view_3d/cross_widget.py +0 -121
  75. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/view_3d/layer_dropdown.py +0 -55
  76. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/view_3d/multiple_view_widget.py +0 -468
  77. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/view_3d/orthogonal_views.py +0 -28
  78. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views/view_3d/view3D.py +0 -85
  79. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views_coordinator/__init__.py +0 -0
  80. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views_coordinator/collection_widget.py +0 -446
  81. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views_coordinator/node_selection_list.py +0 -76
  82. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views_coordinator/tracks_list.py +0 -244
  83. motile_tracker-3.1.5.dev0/src/motile_tracker/data_views/views_coordinator/tracks_viewer.py +0 -265
  84. motile_tracker-3.1.5.dev0/src/motile_tracker/example_data.py +0 -284
  85. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/__init__.py +0 -2
  86. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/load_tracks.py +0 -271
  87. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/menus/__init__.py +0 -0
  88. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/menus/csv_widget.py +0 -216
  89. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/menus/import_external_tracks_dialog.py +0 -217
  90. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/menus/measurement_widget.py +0 -100
  91. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/menus/metadata_menu.py +0 -58
  92. motile_tracker-3.1.5.dev0/src/motile_tracker/import_export/menus/segmentation_widget.py +0 -193
  93. motile_tracker-3.1.5.dev0/src/motile_tracker/napari.yaml +0 -46
  94. motile_tracker-3.1.5.dev0/src/motile_tracker.egg-info/SOURCES.txt +0 -104
  95. motile_tracker-3.1.5.dev0/src/motile_tracker.egg-info/entry_points.txt +0 -2
  96. motile_tracker-3.1.5.dev0/src/motile_tracker.egg-info/top_level.txt +0 -1
  97. motile_tracker-3.1.5.dev0/tests/data_model/test_action_history.py +0 -60
  98. motile_tracker-3.1.5.dev0/tests/data_model/test_actions.py +0 -129
  99. motile_tracker-3.1.5.dev0/tests/data_model/test_tracks.py +0 -192
  100. motile_tracker-3.1.5.dev0/tests/data_model/test_tracks_controller.py +0 -306
  101. motile_tracker-3.1.5.dev0/tests/import_export/test_export_solution_to_csv.py +0 -47
  102. motile_tracker-3.1.5.dev0/tests/import_export/test_import_external_tracks.py +0 -270
  103. motile_tracker-3.1.5.dev0/tests/motile_plugin/utils/test_tree_widget_utils.py +0 -29
  104. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/.github/workflows/docs.yml +0 -0
  105. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/.github/workflows/test.yml +0 -0
  106. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/LICENSE +0 -0
  107. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/Makefile +0 -0
  108. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/editing.rst +0 -0
  109. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/getting_started.rst +0 -0
  110. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/images/add_edge.png +0 -0
  111. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/images/add_node.png +0 -0
  112. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/images/break_edge.png +0 -0
  113. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/images/delete_node.png +0 -0
  114. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/images/results_demo_720p.mp4 +0 -0
  115. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/index.rst +0 -0
  116. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/key_bindings.rst +0 -0
  117. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/motile.rst +0 -0
  118. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/docs/source/tree_view.rst +0 -0
  119. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/scripts/hela_example_tracks.csv +0 -0
  120. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/scripts/load_external_points.py +0 -0
  121. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/scripts/view_external_tracks.py +0 -0
  122. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/setup.cfg +0 -0
  123. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/backend/__init__.py +0 -0
  124. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/backend/solve.py +0 -0
  125. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/backend/solver_params.py +0 -0
  126. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/menus/__init__.py +0 -0
  127. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/menus/param_values.py +0 -0
  128. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/menus/params_editor.py +0 -0
  129. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker/motile/menus/params_viewer.py +0 -0
  130. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/src/motile_tracker.egg-info/dependency_links.txt +0 -0
  131. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/tests/motile/backend/test_motile_run.py +0 -0
  132. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/tests/motile/backend/test_solver.py +0 -0
  133. {motile_tracker-3.1.5.dev0 → motile_tracker-3.2.1.dev0}/tests/motile/menus/test_run_editor.py +0 -0
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: monthly
7
+ groups:
8
+ dependencies:
9
+ patterns:
10
+ - "*"
@@ -0,0 +1,16 @@
1
+ name: Deploy
2
+
3
+ on:
4
+ push:
5
+ branches: [deploy] # Change this to run only for push events to main branch
6
+ tags: ["v*"] # Push events to matching v*, i.e. v1.0, v20.15.10
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ packaging:
11
+ permissions:
12
+ contents: write
13
+ uses: funkelab/motile_tracker_bundled_app/.github/workflows/bundle_app.yml@main
14
+ secrets: inherit
15
+ with:
16
+ event_name: ${{ github.event_name }}
@@ -8,6 +8,9 @@ __pycache__/
8
8
  # C extensions
9
9
  *.so
10
10
 
11
+ # Backup files
12
+ *~
13
+
11
14
  # Distribution / packaging
12
15
  .Python
13
16
  env/
@@ -1,6 +1,8 @@
1
+ ci:
2
+ autofix_prs: false
1
3
  repos:
2
4
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
- rev: v4.2.0
5
+ rev: v5.0.0
4
6
  hooks:
5
7
  - id: check-docstring-first
6
8
  - id: end-of-file-fixer
@@ -8,7 +10,7 @@ repos:
8
10
  exclude: ^\.napari-hub/.*
9
11
  - id: check-yaml # checks for correct yaml syntax for github actions ex.
10
12
  - repo: https://github.com/astral-sh/ruff-pre-commit
11
- rev: v0.4.7
13
+ rev: v0.11.9
12
14
  hooks:
13
15
  - id: ruff
14
16
  args: [--fix]
@@ -1,13 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: motile-tracker
3
- Version: 3.1.5.dev0
3
+ Version: 3.2.1.dev0
4
4
  Summary: Application for interactive tracking with global optimization
5
5
  Author-email: Caroline Malin-Mayor <malinmayorc@janelia.hhmi.org>
6
6
  License: BSD 3-Clause License
7
7
  Project-URL: Bug Tracker, https://github.com/funkelab/motile_tracker/issues
8
8
  Project-URL: Documentation, https://funkelab.github.io/motile_tracker/
9
9
  Classifier: Development Status :: 5 - Production/Stable
10
- Classifier: Framework :: napari
11
10
  Classifier: Intended Audience :: Developers
12
11
  Classifier: Intended Audience :: End Users/Desktop
13
12
  Classifier: Intended Audience :: Science/Research
@@ -22,8 +21,10 @@ Classifier: Topic :: Scientific/Engineering :: Image Processing
22
21
  Requires-Python: >=3.10
23
22
  Description-Content-Type: text/markdown
24
23
  License-File: LICENSE
25
- Requires-Dist: napari[all]
26
- Requires-Dist: numpy
24
+ Requires-Dist: finn-viewer>=0.2
25
+ Requires-Dist: funtracks
26
+ Requires-Dist: appdirs
27
+ Requires-Dist: numpy<2.1,>=1.26
27
28
  Requires-Dist: magicgui
28
29
  Requires-Dist: qtpy
29
30
  Requires-Dist: scikit-image
@@ -34,10 +35,9 @@ Requires-Dist: tifffile[all]
34
35
  Requires-Dist: tqdm
35
36
  Requires-Dist: dask[array]>=2021.10.0
36
37
  Requires-Dist: fonticon-fontawesome6
38
+ Requires-Dist: PyQt5
37
39
  Requires-Dist: pyqtgraph
38
- Requires-Dist: lxml_html_clean
39
40
  Provides-Extra: testing
40
- Requires-Dist: napari; extra == "testing"
41
41
  Requires-Dist: pyqt5; extra == "testing"
42
42
  Requires-Dist: pytest; extra == "testing"
43
43
  Requires-Dist: pytest-cov; extra == "testing"
@@ -59,11 +59,10 @@ Dynamic: license-file
59
59
 
60
60
  [![tests](https://github.com/funkelab/motile_tracker/workflows/tests/badge.svg)](https://github.com/funkelab/motile_tracker/actions)
61
61
  [![codecov](https://codecov.io/gh/funkelab/motile_tracker/branch/main/graph/badge.svg)](https://codecov.io/gh/funkelab/motile_tracker)
62
- [![napari hub](https://img.shields.io/endpoint?url=https://api.napari-hub.org/shields/motile_tracker)](https://napari-hub.org/plugins/motile_tracker)
63
62
 
64
63
  The full documentation of the plugin can be found [here](https://funkelab.github.io/motile_tracker/).
65
64
 
66
- A plugin for tracking with [motile](https://github.com/funkelab/motile) in napari.
65
+ An application for interactive tracking with [motile](https://github.com/funkelab/motile)
67
66
  Motile is a library that makes it easy to solve tracking problems using optimization
68
67
  by framing the task as an Integer Linear Program (ILP).
69
68
  See the motile [documentation](https://funkelab.github.io/motile)
@@ -73,7 +72,7 @@ for more details on the concepts and method.
73
72
 
74
73
  ## Installation
75
74
 
76
- This plugin depends on [motile](https://github.com/funkelab/motile), which in
75
+ This application depends on [motile](https://github.com/funkelab/motile), which in
77
76
  turn depends on gurobi and ilpy. These dependencies must be installed with
78
77
  conda before installing the plugin with pip.
79
78
 
@@ -82,6 +81,49 @@ conda before installing the plugin with pip.
82
81
  conda install -c conda-forge -c funkelab -c gurobi ilpy
83
82
  pip install motile-tracker
84
83
 
84
+ The conda environment can also be created from the provided conda_config.yml:
85
+
86
+ conda env create -f conda_config.yml
87
+ conda activate motile-tracker
88
+
89
+ Alternatively one can use [pixi](https://pixi.sh/).
90
+
91
+ ## Running Motile Tracker
92
+
93
+ To run the application:
94
+ * activate the conda environment created in the [Installation Step](#installation)
95
+
96
+ conda activate motile-tracker
97
+
98
+ * Run:
99
+
100
+ python -m motile_tracker
101
+
102
+ or
103
+
104
+ motile_tracker
105
+
106
+ If [pixi](https://pixi.sh/) is available, you can run motile-tracker using:
107
+
108
+ pixi run start
109
+
110
+ ## Package the application into an executable and create the installer
111
+
112
+ To create the executab run
113
+
114
+ pixi run create-app
115
+
116
+ This command will create an application (.app) on OSX, an EXE on Windows and an
117
+ ELF executable on Linux.
118
+
119
+ On Windows in order to be able to package the application the ilpy library must be
120
+ properly installed and compiled. This will require [download](https://aka.ms/vs/17/release/vs_BuildTools.exe) and install [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/). This comes with a script to set all required environment variables located typically at `"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"` so before you setup the app you need to run this bat file. For powershell run `scripts\scripts/set-vs-buildTools-env.ps1 <fullpathto vcvars64>`.
121
+
122
+ Further to create an installer for the app you will need:
123
+ * InnoSetup on Windows (`scoop install inno-setup` or `winget install "Inno Setup"`)
124
+ * create-dmg on OSX (`brew install create-dmg`)
125
+ * makeself on Linux (`apt install makeself`)
126
+
85
127
  ## Issues
86
128
 
87
129
  If you encounter any problems, please
@@ -0,0 +1,74 @@
1
+ # Motile Tracker
2
+
3
+ [![tests](https://github.com/funkelab/motile_tracker/workflows/tests/badge.svg)](https://github.com/funkelab/motile_tracker/actions)
4
+ [![codecov](https://codecov.io/gh/funkelab/motile_tracker/branch/main/graph/badge.svg)](https://codecov.io/gh/funkelab/motile_tracker)
5
+
6
+ The full documentation of the plugin can be found [here](https://funkelab.github.io/motile_tracker/).
7
+
8
+ An application for interactive tracking with [motile](https://github.com/funkelab/motile)
9
+ Motile is a library that makes it easy to solve tracking problems using optimization
10
+ by framing the task as an Integer Linear Program (ILP).
11
+ See the motile [documentation](https://funkelab.github.io/motile)
12
+ for more details on the concepts and method.
13
+
14
+ ----------------------------------
15
+
16
+ ## Installation
17
+
18
+ This application depends on [motile](https://github.com/funkelab/motile), which in
19
+ turn depends on gurobi and ilpy. These dependencies must be installed with
20
+ conda before installing the plugin with pip.
21
+
22
+ conda create -n motile-tracker python=3.10
23
+ conda activate motile-tracker
24
+ conda install -c conda-forge -c funkelab -c gurobi ilpy
25
+ pip install motile-tracker
26
+
27
+ The conda environment can also be created from the provided conda_config.yml:
28
+
29
+ conda env create -f conda_config.yml
30
+ conda activate motile-tracker
31
+
32
+ Alternatively one can use [pixi](https://pixi.sh/).
33
+
34
+ ## Running Motile Tracker
35
+
36
+ To run the application:
37
+ * activate the conda environment created in the [Installation Step](#installation)
38
+
39
+ conda activate motile-tracker
40
+
41
+ * Run:
42
+
43
+ python -m motile_tracker
44
+
45
+ or
46
+
47
+ motile_tracker
48
+
49
+ If [pixi](https://pixi.sh/) is available, you can run motile-tracker using:
50
+
51
+ pixi run start
52
+
53
+ ## Package the application into an executable and create the installer
54
+
55
+ To create the executab run
56
+
57
+ pixi run create-app
58
+
59
+ This command will create an application (.app) on OSX, an EXE on Windows and an
60
+ ELF executable on Linux.
61
+
62
+ On Windows in order to be able to package the application the ilpy library must be
63
+ properly installed and compiled. This will require [download](https://aka.ms/vs/17/release/vs_BuildTools.exe) and install [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/). This comes with a script to set all required environment variables located typically at `"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"` so before you setup the app you need to run this bat file. For powershell run `scripts\scripts/set-vs-buildTools-env.ps1 <fullpathto vcvars64>`.
64
+
65
+ Further to create an installer for the app you will need:
66
+ * InnoSetup on Windows (`scoop install inno-setup` or `winget install "Inno Setup"`)
67
+ * create-dmg on OSX (`brew install create-dmg`)
68
+ * makeself on Linux (`apt install makeself`)
69
+
70
+ ## Issues
71
+
72
+ If you encounter any problems, please
73
+ [file an issue](https://github.com/funkelab/motile_tracker/issues)
74
+ along with a detailed description.
@@ -0,0 +1,12 @@
1
+ name: motile-tracker
2
+ channels:
3
+ - conda-forge
4
+ - funkelab
5
+ - gurobi
6
+ dependencies:
7
+ - python=3.11.*
8
+ - ilpy=0.4.1
9
+ - scip=9.1.*
10
+ - pip
11
+ - pip:
12
+ - motile-tracker
@@ -0,0 +1,12 @@
1
+ name: motile-tracker
2
+ version: 3.1.3
3
+ extra_files:
4
+ - install-scripts/README.md: README.md
5
+ environment_file: conda_config.yml
6
+ keep_pkgs: false
7
+ installer_type: all
8
+ check_path_spaces: false
9
+ register_envs: false
10
+ post_install: ./install-scripts/postinstall.sh # [unix]
11
+ post_install: ./install-scripts/postinstall.bat # [win]
12
+ license_file: LICENSE
@@ -1,5 +1,5 @@
1
1
  project = "Motile Tracker"
2
- copyright = "2024, Howard Hughes Medical Institute"
2
+ copyright = "2024, Howard Hughes Medical Institute" # noqa: A001
3
3
  author = "Caroline Malin-Mayor"
4
4
 
5
5
  extensions = [
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ INSTALL_DIR=$PWD
4
+
5
+ chmod go+rx ${INSTALL_DIR}
6
+
7
+ echo "MotileTracker installed to ${INSTALL_DIR}"
8
+ echo "Run it using: ${INSTALL_DIR}/MotileTracker"
@@ -0,0 +1,26 @@
1
+ #define AppName "MotileTracker"
2
+ #define AppVersion GetFileVersion('dist\MotileTracker\MotileTracker.exe')
3
+ #define AppURL "https://funkelab.github.io/motile_tracker"
4
+
5
+ [Setup]
6
+ AppName={#AppName}
7
+ AppVersion="1.0"
8
+ AppPublisherURL={#AppURL}
9
+ DefaultDirName={commonpf}\{#AppName}
10
+ LicenseFile="..\LICENSE"
11
+ OutputDir="..\dist\"
12
+ OutputBaseFilename={#AppName}Installer
13
+ Compression=lzma
14
+ SolidCompression=yes
15
+
16
+ [Tasks]
17
+ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
18
+
19
+ [Files]
20
+ Source: "..\dist\{#AppName}\{#AppName}.exe"; DestDir: "{app}"; Flags: ignoreversion
21
+ Source: "..\dist\{#AppName}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
22
+
23
+ [Icons]
24
+ Name: "{group}\{#AppName}"; Filename: "{app}\{#AppName}.exe"
25
+ Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"
26
+ Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppName}.exe"; Tasks: desktopicon
@@ -0,0 +1,121 @@
1
+ # -*- mode: python ; coding: utf-8 -*-
2
+ import sys
3
+ import motile_tracker
4
+
5
+ from PyInstaller.building.build_main import Analysis, PYZ, EXE, COLLECT, BUNDLE
6
+
7
+
8
+ sys.setrecursionlimit(sys.getrecursionlimit() * 5)
9
+
10
+ sys.modules["FixTk"] = None
11
+
12
+ NAME = "MotileTracker"
13
+ WINDOWED = True if sys.platform == "darwin" else False
14
+ DEBUG = False
15
+ UPX = False
16
+ BLOCK_CIPHER = None
17
+
18
+
19
+ def get_icon():
20
+ logo_file = "motile_logo.ico" if sys.platform.startswith("win") else "motile_logo.icns"
21
+ return logo_file
22
+
23
+
24
+ def get_version():
25
+ if sys.platform != "win32":
26
+ return None
27
+
28
+ from PyInstaller.utils.win32 import versioninfo as vi
29
+
30
+ ver_str = motile_tracker.__version__
31
+ version = ver_str.replace("+", ".").split(".")
32
+ version = [int(x) for x in version if x.isnumeric()]
33
+ version += [0] * (4 - len(version))
34
+ version = tuple(version)[:4]
35
+ return vi.VSVersionInfo(
36
+ ffi=vi.FixedFileInfo(filevers=version, prodvers=version),
37
+ kids=[
38
+ vi.StringFileInfo(
39
+ [
40
+ vi.StringTable(
41
+ "000004b0",
42
+ [
43
+ vi.StringStruct("CompanyName", NAME),
44
+ vi.StringStruct("FileDescription", NAME),
45
+ vi.StringStruct("FileVersion", ver_str),
46
+ vi.StringStruct("LegalCopyright", ""),
47
+ vi.StringStruct("OriginalFileName", NAME + ".exe"),
48
+ vi.StringStruct("ProductName", NAME),
49
+ vi.StringStruct("ProductVersion", ver_str),
50
+ ],
51
+ )
52
+ ]
53
+ ),
54
+ vi.VarFileInfo([vi.VarStruct("Translation", [0, 1200])]),
55
+ ],
56
+ )
57
+
58
+
59
+ a = Analysis(
60
+ ["src/motile_tracker/launcher.py"],
61
+ hookspath=["src/installer_hooks"],
62
+ hiddenimports=[
63
+ "motile_tracker",
64
+ ],
65
+ runtime_hooks=[],
66
+ excludes=[
67
+ "FixTk",
68
+ "tcl",
69
+ "tk",
70
+ "_tkinter",
71
+ "tkinter",
72
+ "Tkinter",
73
+ "matplotlib",
74
+ ],
75
+ noarchive=False,
76
+ optimize=0,
77
+ cipher=BLOCK_CIPHER,
78
+ )
79
+
80
+ pyz = PYZ(a.pure, a.zipped_data, cipher=BLOCK_CIPHER)
81
+
82
+ exe = EXE(
83
+ pyz,
84
+ a.scripts,
85
+ [],
86
+ exclude_binaries=True,
87
+ name=NAME,
88
+ debug=DEBUG,
89
+ bootloader_ignore_signals=False,
90
+ strip=False,
91
+ upx=UPX,
92
+ console=(not WINDOWED),
93
+ disable_windowed_traceback=False,
94
+ icon=get_icon(),
95
+ version=get_version(),
96
+ codesign_identity=None,
97
+ entitlements_file=None,
98
+ )
99
+
100
+ coll = COLLECT(
101
+ exe,
102
+ a.binaries,
103
+ a.zipfiles,
104
+ a.datas,
105
+ upx=UPX,
106
+ upx_exclude=[],
107
+ name=NAME,
108
+ )
109
+
110
+ if sys.platform == "darwin":
111
+ app = BUNDLE(
112
+ coll,
113
+ name=NAME + ".app",
114
+ icon=get_icon(),
115
+ bundle_identifier=f"com.{NAME}.{NAME}",
116
+ info_plist={
117
+ "CFBundleIdentifier": f"com.{NAME}.{NAME}",
118
+ "CFBundleShortVersionString": motile_tracker.__version__,
119
+ "NSHighResolutionCapable": "True",
120
+ },
121
+ )