# Algotom
### Data processing (**ALGO**)rithms for (**TOM**)ography.
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/algotom/algotom/algotom_ga.yml) [![Downloads](https://static.pepy.tech/personalized-badge/algotom?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Pypi-downloads)](https://pepy.tech/project/algotom) ![Conda](https://img.shields.io/conda/dn/algotom/algotom?label=conda-downloads) ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/algotom/algotom) ![Conda](https://img.shields.io/conda/pn/algotom/algotom) ![GitHub issues](https://img.shields.io/github/issues-raw/algotom/algotom) ![Conda](https://img.shields.io/conda/dn/conda-forge/algotom?label=conda-forge%20downloads) ![Coverage](https://github.com/algotom/algotom/raw/doc/docs/coverage_report/coverage.svg)
![logo](https://github.com/algotom/algotom/raw/master/figs/readme/logo2.png)
**Algotom** is a Python package designed for tomography data processing. It
offers a complete data processing pipeline; including reading and writing data,
pre-processing, tomographic reconstruction, post-processing, data simulation,
and calibration techniques. The package provides many utility methods to
assist users in constructing a pipeline for processing their own data or
developing new methods. Key features of Algotom include a wide range of
processing methods such as artifact removal, distortion correction,
speckle-based phase-contrast imaging, data reduction; and the capability of
processing non-standard tomography acquisitions such as grid scans or helical scans.
The software stands out for its readability, minimal dependencies, and rich documentation.
Developed specifically for synchrotron-based tomographic beamlines, Algotom aims to
maximize data quality, enhance workflow throughput, and exploit full beamline
capabilities.
Features
--------
Algotom is a lightweight package. The software is built on top of a few core
Python libraries to ensure its ease-of-installation. Methods distributed in
Algotom have been developed and tested at synchrotron beamlines where massive
datasets are produced. This factor drives the methods developed to be easy-to-use,
robust, and practical. Algotom can be used on a normal computer to process large
tomographic data. Some featuring methods in Algotom are as follows:
- Methods in a full data processing pipeline: reading-writing data,
pre-processing, tomographic reconstruction, and post-processing.
![pipe_line](https://github.com/algotom/algotom/raw/master/figs/readme/data_processing_space.png)
- Methods for processing grid scans (or tiled scans) with the offset rotation-axis
to multiply double the field-of-view (FOV) of a parallel-beam tomography system.
These techniques enable high-resolution tomographic scanning of large samples.
![grid_scan](https://github.com/algotom/algotom/raw/master/figs/readme/grid_scan.jpg)
- Methods for processing helical scans (with/without the offset rotation-axis).
![helical_scan](https://github.com/algotom/algotom/raw/master/figs/readme/helical_scan.jpg)
- Methods for determining the center-of-rotation (COR) and auto-stitching images
in half-acquisition scans (360-degree acquisition with the offset COR).
- Practical methods developed and implemented for the package: zinger removal,
tilted sinogram generation, sinogram distortion correction, simplified form of Paganin's filter,
beam hardening correction, DFI (direct Fourier inversion) reconstruction,
FBP (filtered back-projection) reconstruction, BPF (back-projection filtering) reconstruction,
and double-wedge filter for removing sample parts larger than the FOV in a sinogram.
![pipe_line](https://github.com/algotom/algotom/raw/master/figs/readme/double_wedge_filter.jpg)
- Utility methods for [customizing ring/stripe artifact removal methods](https://algotom.readthedocs.io/en/latest/toc/section4/section4_3.html)
and parallelizing computational work.
- Calibration methods for helical scans and tomography alignment.
- Methods for generating simulation data: phantom creation, sinogram calculation
based on the Fourier slice theorem, and artifact generation.
![simulation](https://github.com/algotom/algotom/raw/master/figs/readme/simulation.png)
- Methods for phase-contrast imaging: phase unwrapping, speckle-based phase retrieval, image correlation, and image alignment.
![speckle](https://github.com/algotom/algotom/raw/master/figs/readme/speckle_based_tomography.png)
- Methods for downsampling, rescaling, and reslicing (+rotating, cropping)
3D reconstructed image without large memory usage.
![reslicing](https://github.com/algotom/algotom/raw/master/figs/readme/reslicing.jpg)
- Direct vertical reconstruction for single slice, multiple slices, and multiple slices at
different orientations.
![vertical_slice1](https://github.com/algotom/algotom/raw/master/figs/readme/direct_vertical_reconstruction.png)
![vertical_slice1](https://github.com/algotom/algotom/raw/master/figs/readme/limited_angle_tomography.png)
Installation
------------
- https://algotom.readthedocs.io/en/latest/toc/section3.html
- If users install Algotom to an existing environment and Numba fails to install due to the latest Numpy:
+ Downgrade Numpy and install Algotom/Numba again.
+ Create a new environment and install Algotom first, then other packages.
+ Use conda instead of pip.
- Avoid using the latest version of Python or Numpy as the Python ecosystem taking time to keep up with these twos.
Usage
-----
- https://algotom.readthedocs.io/en/latest/toc/section4/section4_5.html
- https://algotom.readthedocs.io/en/latest/toc/section1/section1_4.html
- https://algotom.readthedocs.io/en/latest/toc/section4.html
- https://github.com/algotom/algotom/tree/master/examples
Development principles
----------------------
- While Algotom offers a complete set of tools for tomographic data processing covering
pre-processing, reconstruction, post-processing, data simulation, and calibration techniques;
its development strongly focuses on pre-processing techniques. This distinction makes it a
prominent feature among other tomographic software.
- To ensure that the software can work across platforms and is easy-to-install; dependencies are minimized, and only
well-maintained [Python libraries](https://github.com/algotom/algotom/blob/master/requirements.txt) are used.
- To achieve high-performance computing and leverage GPU utilization while ensuring ease of understanding, usage, and software
maintenance, Numba is used instead of Cupy or PyCuda.
- Methods are structured into modules and functions rather than classes to enhance usability, debugging, and maintenance.
- Algotom is highly practical as it can run on computers with or without a GPU, multicore CPUs; and accommodates both small
and large memory capacities.
Update notes
------------
- https://algotom.readthedocs.io/en/latest/toc/section6.html
Author
------
- Nghia T. Vo - *NSLS-II, Brookhaven National Lab, USA*; *Diamond Light Source, UK.*
Highlights
----------
Algotom was used for some experiments featured on media:
- Scanning [Moon rocks and Martian meteorites](https://www.diamond.ac.uk/Home/News/LatestNews/2019/17-07-2019.html)
using helical scans with offset rotation-axis. Featured on [Reuters](https://www.reuters.com/article/idUKKCN1UC16V?edition-redirect=uk).
![moon_rock](https://github.com/algotom/algotom/raw/master/figs/readme/Moon_rock_Mars_meteorite.jpg)
- Scanning [Herculaneum Scrolls](https://www.diamond.ac.uk/Home/News/LatestNews/2019/03-10-2019.html)
using grid scans with offset rotation-axis respect to the grid's FOV (pixel size of 7.9 micron;
total size of 11.3 TB). Featured on [BBC](https://www.bbc.co.uk/news/av/uk-england-oxfordshire-49926789).
The latest updates on the scroll's reading progress are [here](https://www.nature.com/articles/d41586-023-03212-1).
![herculaneum_scroll](https://github.com/algotom/algotom/raw/master/figs/readme/Herculaneum_scroll.jpg)
- Scanning ['Little Foot' fossil](https://www.diamond.ac.uk/Home/News/LatestNews/2021/02-03-21.html)
using two-camera detector with offset rotation-axis. Featured on [BBC](https://www.bbc.co.uk/news/science-environment-56241509).
![little_foot](https://github.com/algotom/algotom/raw/master/figs/readme/Little_foot.jpg)
Raw data
{
"_id": null,
"home_page": "https://github.com/algotom/algotom",
"name": "algotom",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "Parallel-beam Computed Tomography, Image Processing, Tomography, X-ray Imaging, Phase Contrast Imaging, Ring artifact removal",
"author": "Nghia Vo",
"author_email": "nvo@bnl.gov",
"download_url": "https://files.pythonhosted.org/packages/26/f2/ac34ac24f30ca5977f18e27efaf53076015f507ffe89a847d8cf64f81329/algotom-1.6.0.tar.gz",
"platform": "Any",
"description": "# Algotom\r\n### Data processing (**ALGO**)rithms for (**TOM**)ography.\r\n\r\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/algotom/algotom/algotom_ga.yml) [![Downloads](https://static.pepy.tech/personalized-badge/algotom?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Pypi-downloads)](https://pepy.tech/project/algotom) ![Conda](https://img.shields.io/conda/dn/algotom/algotom?label=conda-downloads) ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/algotom/algotom) ![Conda](https://img.shields.io/conda/pn/algotom/algotom) ![GitHub issues](https://img.shields.io/github/issues-raw/algotom/algotom) ![Conda](https://img.shields.io/conda/dn/conda-forge/algotom?label=conda-forge%20downloads) ![Coverage](https://github.com/algotom/algotom/raw/doc/docs/coverage_report/coverage.svg)\r\n\r\n\r\n![logo](https://github.com/algotom/algotom/raw/master/figs/readme/logo2.png)\r\n\r\n**Algotom** is a Python package designed for tomography data processing. It \r\noffers a complete data processing pipeline; including reading and writing data, \r\npre-processing, tomographic reconstruction, post-processing, data simulation, \r\nand calibration techniques. The package provides many utility methods to \r\nassist users in constructing a pipeline for processing their own data or \r\ndeveloping new methods. Key features of Algotom include a wide range of \r\nprocessing methods such as artifact removal, distortion correction, \r\nspeckle-based phase-contrast imaging, data reduction; and the capability of \r\nprocessing non-standard tomography acquisitions such as grid scans or helical scans. \r\nThe software stands out for its readability, minimal dependencies, and rich documentation. \r\nDeveloped specifically for synchrotron-based tomographic beamlines, Algotom aims to \r\nmaximize data quality, enhance workflow throughput, and exploit full beamline \r\ncapabilities.\r\n\r\nFeatures\r\n--------\r\n\r\nAlgotom is a lightweight package. The software is built on top of a few core\r\nPython libraries to ensure its ease-of-installation. Methods distributed in \r\nAlgotom have been developed and tested at synchrotron beamlines where massive\r\ndatasets are produced. This factor drives the methods developed to be easy-to-use, \r\nrobust, and practical. Algotom can be used on a normal computer to process large \r\ntomographic data. Some featuring methods in Algotom are as follows:\r\n\r\n- Methods in a full data processing pipeline: reading-writing data, \r\n pre-processing, tomographic reconstruction, and post-processing.\r\n \r\n ![pipe_line](https://github.com/algotom/algotom/raw/master/figs/readme/data_processing_space.png) \r\n \r\n- Methods for processing grid scans (or tiled scans) with the offset rotation-axis \r\n to multiply double the field-of-view (FOV) of a parallel-beam tomography system.\r\n These techniques enable high-resolution tomographic scanning of large samples.\r\n \r\n ![grid_scan](https://github.com/algotom/algotom/raw/master/figs/readme/grid_scan.jpg)\r\n \r\n- Methods for processing helical scans (with/without the offset rotation-axis).\r\n \r\n ![helical_scan](https://github.com/algotom/algotom/raw/master/figs/readme/helical_scan.jpg)\r\n\r\n- Methods for determining the center-of-rotation (COR) and auto-stitching images \r\n in half-acquisition scans (360-degree acquisition with the offset COR).\r\n\r\n- Practical methods developed and implemented for the package: zinger removal, \r\n tilted sinogram generation, sinogram distortion correction, simplified form of Paganin's filter,\r\n beam hardening correction, DFI (direct Fourier inversion) reconstruction,\r\n FBP (filtered back-projection) reconstruction, BPF (back-projection filtering) reconstruction, \r\n and double-wedge filter for removing sample parts larger than the FOV in a sinogram.\r\n \r\n ![pipe_line](https://github.com/algotom/algotom/raw/master/figs/readme/double_wedge_filter.jpg)\r\n \r\n- Utility methods for [customizing ring/stripe artifact removal methods](https://algotom.readthedocs.io/en/latest/toc/section4/section4_3.html) \r\n and parallelizing computational work.\r\n\r\n- Calibration methods for helical scans and tomography alignment.\r\n\r\n- Methods for generating simulation data: phantom creation, sinogram calculation\r\n based on the Fourier slice theorem, and artifact generation.\r\n \r\n ![simulation](https://github.com/algotom/algotom/raw/master/figs/readme/simulation.png)\r\n\r\n- Methods for phase-contrast imaging: phase unwrapping, speckle-based phase retrieval, image correlation, and image alignment.\r\n\r\n ![speckle](https://github.com/algotom/algotom/raw/master/figs/readme/speckle_based_tomography.png)\r\n\r\n- Methods for downsampling, rescaling, and reslicing (+rotating, cropping) \r\n 3D reconstructed image without large memory usage.\r\n\r\n ![reslicing](https://github.com/algotom/algotom/raw/master/figs/readme/reslicing.jpg)\r\n\r\n- Direct vertical reconstruction for single slice, multiple slices, and multiple slices at \r\n different orientations.\r\n \r\n ![vertical_slice1](https://github.com/algotom/algotom/raw/master/figs/readme/direct_vertical_reconstruction.png)\r\n\r\n ![vertical_slice1](https://github.com/algotom/algotom/raw/master/figs/readme/limited_angle_tomography.png)\r\n \r\n \r\n\r\nInstallation\r\n------------\r\n\r\n- https://algotom.readthedocs.io/en/latest/toc/section3.html\r\n- If users install Algotom to an existing environment and Numba fails to install due to the latest Numpy:\r\n + Downgrade Numpy and install Algotom/Numba again.\r\n + Create a new environment and install Algotom first, then other packages.\r\n + Use conda instead of pip.\r\n- Avoid using the latest version of Python or Numpy as the Python ecosystem taking time to keep up with these twos.\r\n\r\nUsage\r\n-----\r\n- https://algotom.readthedocs.io/en/latest/toc/section4/section4_5.html\r\n- https://algotom.readthedocs.io/en/latest/toc/section1/section1_4.html\r\n- https://algotom.readthedocs.io/en/latest/toc/section4.html\r\n- https://github.com/algotom/algotom/tree/master/examples\r\n\r\nDevelopment principles\r\n----------------------\r\n\r\n- While Algotom offers a complete set of tools for tomographic data processing covering \r\n pre-processing, reconstruction, post-processing, data simulation, and calibration techniques;\r\n its development strongly focuses on pre-processing techniques. This distinction makes it a\r\n prominent feature among other tomographic software. \r\n\r\n- To ensure that the software can work across platforms and is easy-to-install; dependencies are minimized, and only \r\n well-maintained [Python libraries](https://github.com/algotom/algotom/blob/master/requirements.txt) are used.\r\n\r\n- To achieve high-performance computing and leverage GPU utilization while ensuring ease of understanding, usage, and software \r\n maintenance, Numba is used instead of Cupy or PyCuda.\r\n\r\n- Methods are structured into modules and functions rather than classes to enhance usability, debugging, and maintenance.\r\n\r\n- Algotom is highly practical as it can run on computers with or without a GPU, multicore CPUs; and accommodates both small \r\n and large memory capacities.\r\n\r\nUpdate notes\r\n------------\r\n\r\n- https://algotom.readthedocs.io/en/latest/toc/section6.html\r\n\r\nAuthor\r\n------\r\n\r\n- Nghia T. Vo - *NSLS-II, Brookhaven National Lab, USA*; *Diamond Light Source, UK.* \r\n \r\nHighlights\r\n----------\r\n\r\nAlgotom was used for some experiments featured on media:\r\n\r\n- Scanning [Moon rocks and Martian meteorites](https://www.diamond.ac.uk/Home/News/LatestNews/2019/17-07-2019.html) \r\n using helical scans with offset rotation-axis. Featured on [Reuters](https://www.reuters.com/article/idUKKCN1UC16V?edition-redirect=uk).\r\n \r\n ![moon_rock](https://github.com/algotom/algotom/raw/master/figs/readme/Moon_rock_Mars_meteorite.jpg)\r\n\r\n- Scanning [Herculaneum Scrolls](https://www.diamond.ac.uk/Home/News/LatestNews/2019/03-10-2019.html) \r\n using grid scans with offset rotation-axis respect to the grid's FOV (pixel size of 7.9 micron; \r\n total size of 11.3 TB). Featured on [BBC](https://www.bbc.co.uk/news/av/uk-england-oxfordshire-49926789).\r\n The latest updates on the scroll's reading progress are [here](https://www.nature.com/articles/d41586-023-03212-1).\r\n\r\n ![herculaneum_scroll](https://github.com/algotom/algotom/raw/master/figs/readme/Herculaneum_scroll.jpg)\r\n\r\n- Scanning ['Little Foot' fossil](https://www.diamond.ac.uk/Home/News/LatestNews/2021/02-03-21.html) \r\n using two-camera detector with offset rotation-axis. Featured on [BBC](https://www.bbc.co.uk/news/science-environment-56241509).\r\n \r\n ![little_foot](https://github.com/algotom/algotom/raw/master/figs/readme/Little_foot.jpg) \r\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "Data processing algorithms for tomography",
"version": "1.6.0",
"project_urls": {
"Homepage": "https://github.com/algotom/algotom"
},
"split_keywords": [
"parallel-beam computed tomography",
" image processing",
" tomography",
" x-ray imaging",
" phase contrast imaging",
" ring artifact removal"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "3b85e1f320db66faea81c2ef1230f7057dfbb988795f3ce99b2a07663a48daed",
"md5": "df8bd12aea7f921fe57d6227b7275d13",
"sha256": "882948e0b249405e61fd4a9bb4016cd580e9de6c5b303efe84456067b2e7c200"
},
"downloads": -1,
"filename": "algotom-1.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "df8bd12aea7f921fe57d6227b7275d13",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 118859,
"upload_time": "2024-05-07T03:18:37",
"upload_time_iso_8601": "2024-05-07T03:18:37.318671Z",
"url": "https://files.pythonhosted.org/packages/3b/85/e1f320db66faea81c2ef1230f7057dfbb988795f3ce99b2a07663a48daed/algotom-1.6.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "26f2ac34ac24f30ca5977f18e27efaf53076015f507ffe89a847d8cf64f81329",
"md5": "a3ef8f2c43b613408a707ea0ce1a377e",
"sha256": "9b9f8a6fcd8d9ce9b8e6236d6181947d14b26aa3186cda0675c142ca3532417d"
},
"downloads": -1,
"filename": "algotom-1.6.0.tar.gz",
"has_sig": false,
"md5_digest": "a3ef8f2c43b613408a707ea0ce1a377e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 109993,
"upload_time": "2024-05-07T03:18:39",
"upload_time_iso_8601": "2024-05-07T03:18:39.057806Z",
"url": "https://files.pythonhosted.org/packages/26/f2/ac34ac24f30ca5977f18e27efaf53076015f507ffe89a847d8cf64f81329/algotom-1.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-07 03:18:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "algotom",
"github_project": "algotom",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "numpy",
"specs": [
[
">=",
"1.18"
]
]
},
{
"name": "scipy",
"specs": []
},
{
"name": "numba",
"specs": [
[
">=",
"0.50.1"
]
]
},
{
"name": "pywavelets",
"specs": []
},
{
"name": "pillow",
"specs": []
},
{
"name": "h5py",
"specs": []
},
{
"name": "joblib",
"specs": []
}
],
"lcname": "algotom"
}