https://github.com/ToFuProject/tofu
Project for an open-source python library for synthetic diagnostics and tomography for Fusion devices
https://github.com/ToFuProject/tofu
conda data-visualization diagnostics fusion imas nuclear-fusion open-source physics pip plasma plasma-diagnostics plasma-physics python ray-tracing raytracer science-research synthetic-diagnostics tokamak tomography toolbox
Last synced: 1 day ago
JSON representation
Project for an open-source python library for synthetic diagnostics and tomography for Fusion devices
- Host: GitHub
- URL: https://github.com/ToFuProject/tofu
- Owner: ToFuProject
- License: mit
- Created: 2016-09-13T15:56:56.000Z (almost 10 years ago)
- Default Branch: devel
- Last Pushed: 2026-06-09T21:51:31.000Z (19 days ago)
- Last Synced: 2026-06-09T23:19:13.737Z (19 days ago)
- Topics: conda, data-visualization, diagnostics, fusion, imas, nuclear-fusion, open-source, physics, pip, plasma, plasma-diagnostics, plasma-physics, python, ray-tracing, raytracer, science-research, synthetic-diagnostics, tokamak, tomography, toolbox
- Language: Python
- Homepage: https://tofuproject.github.io/tofu/index.html
- Size: 212 MB
- Stars: 86
- Watchers: 10
- Forks: 13
- Open Issues: 140
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-ml-in-plasma-physics - ToFu - IMAS-compatible Python library for synthetic diagnostics, ray tracing, and tomography for fusion devices (Tools / Simulation and Modeling Frameworks)
README
[](https://app.travis-ci.com/ToFuProject/tofu)
[](https://travis-ci.org/ToFuProject/tofu)
[](https://anaconda.org/conda-forge/tofu)
[](https://anaconda.org/conda-forge/tofu)
[](https://anaconda.org/conda-forge/tofu)
[](https://anaconda.org/conda-forge/tofu)
[](https://github.com/conda-forge/tofu/blob/master/LICENSE.txt)
[](https://anaconda.org/conda-forge/tofu)
[](https://codecov.io/gh/ToFuProject/tofu)
[](https://badge.fury.io/py/tofu)
[](https://gitter.im/ToFuProject/community)
[](https://www.plasmapy.org/affiliates/)
[](https://www.plasmapy.org/affiliates/)
[](https://github.com/ToFuProject/tofu)
tofu
====
**tofu** stands for **To**mography for **Fu**sion, it is an IMAS-compatible open-source machine-independent python library.
tofu tries to take an active part in the plasma community open-source python environment, like [PlasmaPy](https://github.com/PlasmaPy/PlasmaPy), with which some degree of interoperability is being implemented.
It aims at providing the **fusion** and **plasma** community with an object-oriented, transparent and documented tool for designing **tomography diagnostics**, computing **synthetic signal** (direct problem) as well as **tomographic inversions** (inverse problem). It gives access to a full 3D description of the diagnostic geometry, thus reducing the impact of geometrical approximations on the direct and, most importantly, on the inverse problem.
**tofu** is relevant for all diagnostics integrating, in a finitie field of view or along a set of lines of sight, a quantity (scalar or vector) for which the plasma can be considered transparent (e.g.: light in the visible, UV, soft and hard X-ray ranges, or electron density for interferometers).
**tofu** is **command-line oriented**, for maximum flexibility and scriptability.
The absence of a GUI is compensated by built-in one-liners for interactive plots.
It has a sphinx-generated [documentation](https://tofuproject.github.io/tofu/index.html), and the code itself is hosted on [GitHub](https://github.com/ToFuProject/tofu).
## Examples Gallery
Here are some examples of what **tofu** can do
#### Built-in one-liners for interactive camera geometry visualization
#### ...both for 1D and 2D cameras, including the basics for multiple reflections handling
#### Built-in plotting of sinograms
#### Basic magnetic field line tracing
#### Multiple 1d profiles interactive plotting
#### Built-in basic data treatment and interactive plotting: svd and spectrograms
**tofu** provides the user with a series of python classes for creating, handling and visualizing a diagnostic geometry, meshes and basis functions,
geometry matrices, pre-treating experimental data and computing tomographic inversions.
Each one of these main tasks is accomplished by a dedicated module in the larger tofu package.
The geometry module is sufficient for diagnostic designing and for a synthetic diagnostic approach (i.e.: computing the integrated signal from a simulated 2D or 3D emissivity).
This geometry module allows in particular:
* To handle linear and toroidal vaccum vessels
* To define apertures and detectors as planar polygons of arbitrary shapes
* To automatically compute the full Volume of Sight (VOS) in 3D of each {detector+aperture(s)} set
* To discretise the VOS for a numerical 3D integration of a simulated emissivity in order to compute the associated signal
It is in this geometrical sense that tofu enables a synthetic diagnostic approach, it does not provide the tools for simulating the emissivity itself (that should be an input, provided by another code).
## IMAS-compatibility
IMAS is a standardized data structure, it comes as an extra layer on the database of any Tokamak to provide a machine-independent way of accessing scientific data.
tofu has built-in advanced classes for handling the interface with IMAS, hold in the imas2tofu sub-package.
It pre-supposes, of course, that IMAS is installed and operational next to your python install, but tofu does not require IMAS to run in general.
If IMAS is not available, tofu will simply display a warning stating that the imas2tofu sub-package is not usable.
tofu can thus easily load and handle multiple IDSs (IMAS data structure units) and provide command-line tools for exporting IMAS data to other general tofu classes (e.g.: Cameras, Plasma2D...) and for interactive plotting.
All tofu objects have methods to facailitate in-python-console introspection, the ``__repr__`` method is overloaded to display relevant information, an dthis is widely used to explore the data loaded from IMAS.
Do you want to use **tofu** on IMAS and don't know where to start?
[See our documetation.](https://tofuproject.github.io/tofu/installation.html#using-tofu-on-a-iter-cluster)
----
## Installing tofu
Tofu installation currently works with Python 3.10 & 3.11.
For Windows installations, make sure that you've installed [Microsoft C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) prior to proceeding. Select the "Desktop Development with C++" module.
**From source** (compiled on your system using pip, all platforms)
``` pip install tofu ```
**From pre-compiled binaries** (using conda, all platforms)
``` conda install -c conda-forge tofu ```
**For Developers and other platforms**
Clone the git repository from github
[See our documentation.](https://tofuproject.github.io/tofu/installation.html)
## Licensing
It is distributed under the MIT license and aims at providing the fusion
community with a transparent and modular tool for creating / designing
diagnostics and using them for synthetic diagnostic (direct problem)
and tomography (inverse problem).
## History
It was first created at the Max-Planck Institute for Plasma Physics (IPP)
in Garching, Germany, by Didier Vezinet, and is now maintained, debugged
and updated by a team of contributors.
-----
**Warning**
This Pypi package focuses on tomography for fusion research.
It uses the same name as a previous package dedicated to a testing framework
coupling fixtures and tests loosely, now renamed **reahl-tofu** and developped
by Iwan Vosloo since 2006. If you ended up here looking for a web-oriented
library, you should probably redirect to the more recent
[**reahl-tofu**](https://pypi.python.org/pypi/reahl-tofu) page.