Metadata-Version: 2.2
Name: tomwer
Version: 1.4.8
Summary: "tomography workflow tools"
Home-page: https://gitlab.esrf.fr/tomotools/tomwer
Author: Henri Payno, Pierre Paleo, Pierre-Olivier Autran, Jérôme Lesaint, Alessandro Mirone
Author-email: henri.payno@esrf.fr, pierre.paleo@esrf.fr, pierre-olivier.autran@esrf.fr, jerome.lesaint@esrf.fr, mirone@esrf.fr
License: MIT
Project-URL: Bug Tracker, https://gitlab.esrf.fr/tomotools/tomwer/-/issues
Keywords: orange3 add-on,ewoks
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Environment :: Console
Classifier: Environment :: X11 Applications :: Qt
Classifier: Operating System :: POSIX
Classifier: Natural Language :: English
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.6
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: setuptools
Requires-Dist: psutil
Requires-Dist: silx[full]<2.1.1,>=2.0
Requires-Dist: tomoscan>=2.1.0a18
Requires-Dist: nxtomo>=1.3.0dev4
Requires-Dist: nxtomomill>=1.1.0a0
Requires-Dist: processview>=1.5.0
Requires-Dist: ewoks>=0.1.1
Requires-Dist: ewokscore<1.1.0
Requires-Dist: sluurp>=0.4.1
Requires-Dist: packaging
Requires-Dist: pyunitsystem>=2.0.0a
Requires-Dist: tqdm
Provides-Extra: full-base
Requires-Dist: orange-canvas-core; extra == "full-base"
Requires-Dist: orange-widget-base; extra == "full-base"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "full-base"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full-base"
Requires-Dist: rsyncmanager; extra == "full-base"
Requires-Dist: fabio; extra == "full-base"
Requires-Dist: h5py>=3; extra == "full-base"
Requires-Dist: lxml; extra == "full-base"
Requires-Dist: werkzeug; extra == "full-base"
Requires-Dist: json-rpc; extra == "full-base"
Requires-Dist: scipy; extra == "full-base"
Requires-Dist: Pillow; extra == "full-base"
Requires-Dist: glymur; extra == "full-base"
Requires-Dist: resource; extra == "full-base"
Requires-Dist: tifffile; extra == "full-base"
Requires-Dist: hdf5plugin; extra == "full-base"
Requires-Dist: pyicat_plus; extra == "full-base"
Requires-Dist: ewoksnotify[full]; extra == "full-base"
Requires-Dist: pyicat_plus; extra == "full-base"
Provides-Extra: full-no-nabu
Requires-Dist: orange-canvas-core; extra == "full-no-nabu"
Requires-Dist: orange-widget-base; extra == "full-no-nabu"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "full-no-nabu"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full-no-nabu"
Requires-Dist: rsyncmanager; extra == "full-no-nabu"
Requires-Dist: fabio; extra == "full-no-nabu"
Requires-Dist: h5py>=3; extra == "full-no-nabu"
Requires-Dist: lxml; extra == "full-no-nabu"
Requires-Dist: werkzeug; extra == "full-no-nabu"
Requires-Dist: json-rpc; extra == "full-no-nabu"
Requires-Dist: scipy; extra == "full-no-nabu"
Requires-Dist: Pillow; extra == "full-no-nabu"
Requires-Dist: glymur; extra == "full-no-nabu"
Requires-Dist: resource; extra == "full-no-nabu"
Requires-Dist: tifffile; extra == "full-no-nabu"
Requires-Dist: hdf5plugin; extra == "full-no-nabu"
Requires-Dist: pyicat_plus; extra == "full-no-nabu"
Requires-Dist: ewoksnotify[full]; extra == "full-no-nabu"
Requires-Dist: pyicat_plus; extra == "full-no-nabu"
Provides-Extra: full-no-cuda
Requires-Dist: orange-canvas-core; extra == "full-no-cuda"
Requires-Dist: orange-widget-base; extra == "full-no-cuda"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "full-no-cuda"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full-no-cuda"
Requires-Dist: rsyncmanager; extra == "full-no-cuda"
Requires-Dist: fabio; extra == "full-no-cuda"
Requires-Dist: h5py>=3; extra == "full-no-cuda"
Requires-Dist: lxml; extra == "full-no-cuda"
Requires-Dist: werkzeug; extra == "full-no-cuda"
Requires-Dist: json-rpc; extra == "full-no-cuda"
Requires-Dist: scipy; extra == "full-no-cuda"
Requires-Dist: Pillow; extra == "full-no-cuda"
Requires-Dist: glymur; extra == "full-no-cuda"
Requires-Dist: resource; extra == "full-no-cuda"
Requires-Dist: tifffile; extra == "full-no-cuda"
Requires-Dist: hdf5plugin; extra == "full-no-cuda"
Requires-Dist: pyicat_plus; extra == "full-no-cuda"
Requires-Dist: ewoksnotify[full]; extra == "full-no-cuda"
Requires-Dist: pyicat_plus; extra == "full-no-cuda"
Requires-Dist: nabu>=2023.3.1dev; extra == "full-no-cuda"
Provides-Extra: full
Requires-Dist: orange-canvas-core; extra == "full"
Requires-Dist: orange-widget-base; extra == "full"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "full"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full"
Requires-Dist: rsyncmanager; extra == "full"
Requires-Dist: fabio; extra == "full"
Requires-Dist: h5py>=3; extra == "full"
Requires-Dist: lxml; extra == "full"
Requires-Dist: werkzeug; extra == "full"
Requires-Dist: json-rpc; extra == "full"
Requires-Dist: scipy; extra == "full"
Requires-Dist: Pillow; extra == "full"
Requires-Dist: glymur; extra == "full"
Requires-Dist: resource; extra == "full"
Requires-Dist: tifffile; extra == "full"
Requires-Dist: hdf5plugin; extra == "full"
Requires-Dist: pyicat_plus; extra == "full"
Requires-Dist: ewoksnotify[full]; extra == "full"
Requires-Dist: pyicat_plus; extra == "full"
Requires-Dist: nabu[full]>=2023.3.1dev; extra == "full"
Requires-Dist: pycuda<2024.1.1; extra == "full"
Requires-Dist: scikit-cuda; extra == "full"
Provides-Extra: doc
Requires-Dist: orange-canvas-core; extra == "doc"
Requires-Dist: orange-widget-base; extra == "doc"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "doc"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "doc"
Requires-Dist: rsyncmanager; extra == "doc"
Requires-Dist: fabio; extra == "doc"
Requires-Dist: h5py>=3; extra == "doc"
Requires-Dist: lxml; extra == "doc"
Requires-Dist: werkzeug; extra == "doc"
Requires-Dist: json-rpc; extra == "doc"
Requires-Dist: scipy; extra == "doc"
Requires-Dist: Pillow; extra == "doc"
Requires-Dist: glymur; extra == "doc"
Requires-Dist: resource; extra == "doc"
Requires-Dist: tifffile; extra == "doc"
Requires-Dist: hdf5plugin; extra == "doc"
Requires-Dist: pyicat_plus; extra == "doc"
Requires-Dist: ewoksnotify[full]; extra == "doc"
Requires-Dist: pyicat_plus; extra == "doc"
Requires-Dist: nabu>=2023.3.1dev; extra == "doc"
Requires-Dist: Sphinx>=4.0.0; extra == "doc"
Requires-Dist: nbsphinx; extra == "doc"
Requires-Dist: pandoc; extra == "doc"
Requires-Dist: jupyterlab; extra == "doc"
Requires-Dist: pydata_sphinx_theme; extra == "doc"
Requires-Dist: sphinx-design; extra == "doc"
Requires-Dist: sphinx-autodoc-typehints; extra == "doc"
Requires-Dist: sphinxcontrib-youtube; extra == "doc"
Provides-Extra: dev-spec
Requires-Dist: black; extra == "dev-spec"
Requires-Dist: flake8; extra == "dev-spec"
Requires-Dist: timeout-decorator; extra == "dev-spec"
Requires-Dist: pyopencl; extra == "dev-spec"
Provides-Extra: dev
Requires-Dist: orange-canvas-core; extra == "dev"
Requires-Dist: orange-widget-base; extra == "dev"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "dev"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "dev"
Requires-Dist: rsyncmanager; extra == "dev"
Requires-Dist: fabio; extra == "dev"
Requires-Dist: h5py>=3; extra == "dev"
Requires-Dist: lxml; extra == "dev"
Requires-Dist: werkzeug; extra == "dev"
Requires-Dist: json-rpc; extra == "dev"
Requires-Dist: scipy; extra == "dev"
Requires-Dist: Pillow; extra == "dev"
Requires-Dist: glymur; extra == "dev"
Requires-Dist: resource; extra == "dev"
Requires-Dist: tifffile; extra == "dev"
Requires-Dist: hdf5plugin; extra == "dev"
Requires-Dist: pyicat_plus; extra == "dev"
Requires-Dist: ewoksnotify[full]; extra == "dev"
Requires-Dist: pyicat_plus; extra == "dev"
Requires-Dist: nabu[full]>=2023.3.1dev; extra == "dev"
Requires-Dist: pycuda<2024.1.1; extra == "dev"
Requires-Dist: scikit-cuda; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: flake8; extra == "dev"
Requires-Dist: timeout-decorator; extra == "dev"
Requires-Dist: pyopencl; extra == "dev"
Provides-Extra: dev-no-cuda
Requires-Dist: orange-canvas-core; extra == "dev-no-cuda"
Requires-Dist: orange-widget-base; extra == "dev-no-cuda"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "dev-no-cuda"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "dev-no-cuda"
Requires-Dist: rsyncmanager; extra == "dev-no-cuda"
Requires-Dist: fabio; extra == "dev-no-cuda"
Requires-Dist: h5py>=3; extra == "dev-no-cuda"
Requires-Dist: lxml; extra == "dev-no-cuda"
Requires-Dist: werkzeug; extra == "dev-no-cuda"
Requires-Dist: json-rpc; extra == "dev-no-cuda"
Requires-Dist: scipy; extra == "dev-no-cuda"
Requires-Dist: Pillow; extra == "dev-no-cuda"
Requires-Dist: glymur; extra == "dev-no-cuda"
Requires-Dist: resource; extra == "dev-no-cuda"
Requires-Dist: tifffile; extra == "dev-no-cuda"
Requires-Dist: hdf5plugin; extra == "dev-no-cuda"
Requires-Dist: pyicat_plus; extra == "dev-no-cuda"
Requires-Dist: ewoksnotify[full]; extra == "dev-no-cuda"
Requires-Dist: pyicat_plus; extra == "dev-no-cuda"
Requires-Dist: nabu>=2023.3.1dev; extra == "dev-no-cuda"
Requires-Dist: black; extra == "dev-no-cuda"
Requires-Dist: flake8; extra == "dev-no-cuda"
Requires-Dist: timeout-decorator; extra == "dev-no-cuda"
Requires-Dist: pyopencl; extra == "dev-no-cuda"
Provides-Extra: test
Requires-Dist: orange-canvas-core; extra == "test"
Requires-Dist: orange-widget-base; extra == "test"
Requires-Dist: ewoks[orange]>=0.1.1; extra == "test"
Requires-Dist: ewoksorange>=0.7.0rc0; extra == "test"
Requires-Dist: rsyncmanager; extra == "test"
Requires-Dist: fabio; extra == "test"
Requires-Dist: h5py>=3; extra == "test"
Requires-Dist: lxml; extra == "test"
Requires-Dist: werkzeug; extra == "test"
Requires-Dist: json-rpc; extra == "test"
Requires-Dist: scipy; extra == "test"
Requires-Dist: Pillow; extra == "test"
Requires-Dist: glymur; extra == "test"
Requires-Dist: resource; extra == "test"
Requires-Dist: tifffile; extra == "test"
Requires-Dist: hdf5plugin; extra == "test"
Requires-Dist: pyicat_plus; extra == "test"
Requires-Dist: ewoksnotify[full]; extra == "test"
Requires-Dist: pyicat_plus; extra == "test"
Requires-Dist: nabu>=2023.3.1dev; extra == "test"
Requires-Dist: pytest-asyncio; extra == "test"
Requires-Dist: tomoscan[test]>=2.1.0a18; extra == "test"
Provides-Extra: setup-requires
Requires-Dist: setuptools; extra == "setup-requires"
Requires-Dist: numpy>=1.12; extra == "setup-requires"

.. image:: doc/img/tomwer.png
   :alt: Tomwer Logo
   :align: left
   :width: 400px

Introduction
------------

**Tomwer** provides tools to automate acquisition and reconstruction processes for tomography. The package includes:

- A library to individually access each acquisition process.
- Graphical User Interface (GUI) applications to control key processes such as reconstruction and data transfer, which can be executed as standalone applications.
- An Orange add-on to help users define custom workflows (`Orange3 <http://orange.biolab.si>`_).

Tomwer relies on `Nabu <https://gitlab.esrf.fr/tomotools/nabu>`_ for tomographic reconstruction.

**Note**: Currently, the software is only compatible with Linux.

Documentation
-------------

The latest version of the documentation is available `here <https://tomotools.gitlab-pages.esrf.fr/tomwer/>`_.

Installation
------------

Step 1: Installing Tomwer
'''''''''''''''''''''''''

To install Tomwer with all features:

.. code-block:: bash

    pip install tomwer[full]

Alternatively, you can install the latest development branch from the repository:

.. code-block:: bash

    pip install git+https://gitlab.esrf.fr/tomotools/tomwer/#egg=tomwer[full]


Step 2: (Optional) Update Orange-CANVAS-CORE and Orange-WIDGET-BASE
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

If you need access to additional 'processing' wheels and 'reprocess action,' you may want to update these Orange forks. This is optional, as the project works with the native Orange libraries.

.. code-block:: bash

    pip install git+https://github.com/payno/orange-canvas-core --no-deps --upgrade
    pip install git+https://github.com/payno/orange-widget-base --no-deps --upgrade


Launching Applications
-----------------------

After installation, Tomwer includes several applications. You can launch an application by running:

.. code-block:: bash

    tomwer <appName> [options]

- If you run `tomwer` without arguments, a manual page will be displayed.
- For application-specific help, run:

.. code-block:: bash

    tomwer <appName> --help


Tomwer Canvas - Orange Canvas
-----------------------------

You can launch the Orange canvas to create workflows using the available building blocks:

.. code-block:: bash

    tomwer canvas

- Alternatively, you can use `orange-canvas`.
- If you're using a virtual environment, remember to activate it:

.. code-block:: bash

    source myvirtualenv/bin/activate


Building Documentation
-----------------------

To build the documentation:

.. code-block:: bash

    sphinx-build doc build/html

The documentation will be generated in `doc/build/html`, and the entry point is `index.html`. To view the documentation in a browser:

.. code-block:: bash

    firefox build/html/index.html

**Note**: Building the documentation requires `sphinx` to be installed, which is not a hard dependency of Tomwer. If needed, install it separately.
