Over the next 23 days, I am posting a series of blog posts, in which I convert the ASTRA-toolbox' Python code samples to tomosipo.
The ASTRA-toolbox is a toolbox of high-performance GPU primitives for computations in tomography. It is notorious its speed, but its API can be tedious to use. One of the great advantages of ASTRA is that it allows the user to model elaborate and flexible acquisition geometries. The toolbox does not provide much support for defining these geometries, which is a laborious and error-prone process. The tomosipo package has been developed with the aim of helping the user define flexible geometries and aid the user in expressing complex algorithms succinctly without yielding control of resource usage.
I am introducing this blog series for three reasons. First, using any new piece of software can be daunting. The easiest way to get a footing is by changing existing scripts. This series aims to provide these existing scripts for tomosipo, betting on the assumption that desirable use cases have already been explored in the example scripts of ASTRA.
Second, exploring the extent to which the ASTRA code samples can be efficiently expressed in tomosipo serves as a test for the design of the new API. Heavy development has taken place, and some time should be taken to evaluate if the design actually works out in practice. I hope that in the course of writing the code samples, the design will prove its worth.
Finally, many will question whether a new software package is necessary at all. I hope that displaying the ASTRA code side by side with the new code, I can convince the reader that a new approach is neccessary and possible. This also provides the opportunity to explore some of the design considerations of the package.
I was inspired to start this blog series by 24 days of hackage. This Christmas tour of packages in the Haskell programming language ecosystem was published in 2012. I hope that you will forgive me for starting this blog series a couple months early.
Thanks to Willem Jan Palenstijn for valuable suggestions.
The rest of the posts may be found here:
- Advent of tomosipo: s001_sinogram_par2d
- Advent of tomosipo: s002_data2d
- Advent of tomosipo: s003_gpu_reconstruction
- Advent of tomosipo: s004_cpu_reconstruction
- Advent of tomosipo: s005_3d_geometry
- Advent of tomosipo: s006_3d_data