├── .gitignore ├── .readthedocs.yaml ├── LICENSE ├── MANIFEST.in ├── README.md ├── VERSION ├── docs ├── Makefile ├── conf.py ├── demo │ ├── __init__.py │ ├── phantom_00001.py │ ├── phantom_00002.py │ ├── phantom_00003.py │ ├── phantom_00004.py │ ├── phantom_00005.py │ ├── phantom_00006.py │ ├── phantom_00007.py │ ├── phantom_00008.py │ ├── phantom_00009.py │ ├── phantom_00010.py │ ├── phantom_00011.py │ ├── pt4_projection.py │ ├── pt4_volume.py │ ├── read_xrm_script.py │ ├── rec_phantom_00015.py │ ├── rec_tomo_00022_native.py │ ├── rec_tomo_00025_native.py │ ├── tomopy_rec.py │ ├── tomopy_rec_KBLT.py │ ├── tomopy_rectv.py │ └── tomopy_rectv_fc.py ├── index.rst ├── make.bat └── source │ ├── about.rst │ ├── bibtex │ ├── cite.bib │ └── ref.bib │ ├── credits.rst │ ├── data.rst │ ├── data │ ├── docs.data.XANES.rst │ ├── docs.data.dynamic.rst │ ├── docs.data.insitu.rst │ ├── docs.data.kblt.rst │ ├── docs.data.laminography.rst │ ├── docs.data.localarea.rst │ ├── docs.data.lorentz.rst │ ├── docs.data.nano.rst │ ├── docs.data.phasecontrast.rst │ ├── docs.data.porosity.rst │ ├── docs.data.radio.rst │ ├── docs.data.rings.rst │ ├── docs.data.roundrobin.rst │ ├── docs.data.spheres.rst │ └── docs.data.tomosaic.rst │ ├── img │ ├── clone-in-desktop.png │ ├── commit-screen.png │ ├── create-pr.png │ ├── create-revision.png │ ├── fork-repo.png │ ├── kblt_01.png │ ├── phantom_00001_00000.png │ ├── phantom_00001_ground_truth.png │ ├── phantom_00002_00000.png │ ├── phantom_00002_ground_truth.png │ ├── phantom_00003_00000.png │ ├── phantom_00003_ground_truth.png │ ├── phantom_00004_00000.png │ ├── phantom_00004_ground_truth.png │ ├── phantom_00005_00000.png │ ├── phantom_00005_ground_truth.png │ ├── phantom_00006_00000.png │ ├── phantom_00006_ground_truth.png │ ├── phantom_00007_00000.png │ ├── phantom_00007_ground_truth.png │ ├── phantom_00008_00000.png │ ├── phantom_00008_ground_truth.png │ ├── phantom_00009_00000.png │ ├── phantom_00009_ground_truth.png │ ├── phantom_00010_00000.png │ ├── phantom_00010_ground_truth.png │ ├── phantom_00011_00000.png │ ├── phantom_00011_ground_truth.png │ ├── phantom_00012.png │ ├── phantom_00013.png │ ├── phantom_00014.png │ ├── phantom_00015 │ │ ├── f_00000.png │ │ ├── f_00001.png │ │ ├── f_00002.png │ │ ├── f_00003.png │ │ ├── f_00004.png │ │ ├── f_00005.png │ │ ├── f_00006.png │ │ ├── f_00007.png │ │ ├── rec_0_00000.png │ │ ├── rec_1_00000.png │ │ ├── rec_2_00000.png │ │ ├── rec_3_00000.png │ │ ├── rec_4_00000.png │ │ ├── rec_5_00000.png │ │ ├── rec_6_00000.png │ │ ├── rec_7_00000.png │ │ ├── recb16tv_0_00000.png │ │ ├── recb16tv_1_00000.png │ │ ├── recb16tv_2_00000.png │ │ ├── recb16tv_3_00000.png │ │ ├── recb16tv_4_00000.png │ │ ├── recb16tv_5_00000.png │ │ ├── recb16tv_6_00000.png │ │ └── recb16tv_7_00000.png │ ├── phantom_00016.png │ ├── phantom_00017.png │ ├── phantom_00018.png │ ├── phantom_00019.png │ ├── phantom_00020.png │ ├── phantom_00021.png │ ├── phantom_00022.png │ ├── pt4 │ │ ├── brazil │ │ │ ├── vol00000.png │ │ │ ├── vol00002.png │ │ │ ├── vol00004.png │ │ │ ├── vol00006.png │ │ │ ├── vol00008.png │ │ │ └── vol00010.png │ │ ├── bread │ │ │ ├── vol00000.png │ │ │ ├── vol00002.png │ │ │ ├── vol00004.png │ │ │ ├── vol00006.png │ │ │ ├── vol00008.png │ │ │ └── vol00010.png │ │ ├── fluid_flow │ │ │ ├── vol00000_ZX256.png │ │ │ ├── vol00001_ZX256.png │ │ │ ├── vol00002_ZX256.png │ │ │ ├── vol00003_ZX256.png │ │ │ ├── vol00004_ZX256.png │ │ │ └── vol00005_ZX256.png │ │ ├── fracture_deform │ │ │ ├── vol00000_ZX256.png │ │ │ ├── vol00004_ZX256.png │ │ │ ├── vol00008_ZX256.png │ │ │ ├── vol00012_ZX256.png │ │ │ ├── vol00016_ZX256.png │ │ │ └── vol00020_ZX256.png │ │ └── spheres │ │ │ └── 2dview.png │ ├── rad_00001h.png │ ├── rad_00001l.png │ ├── rad_00002h.png │ ├── rad_00002l.png │ ├── tomo_00001.png │ ├── tomo_00002.png │ ├── tomo_00003.png │ ├── tomo_00004.png │ ├── tomo_00007.png │ ├── tomo_00022.png │ ├── tomo_00023.png │ ├── tomo_00024.png │ ├── tomo_00025.png │ ├── tomo_00026.png │ ├── tomo_00031.png │ ├── tomo_00032.png │ ├── tomo_00057.png │ ├── tomo_00058.png │ ├── tomo_00059.png │ ├── tomo_00060.png │ ├── tomo_00061.png │ ├── tomo_00062.png │ ├── tomo_00063.png │ ├── tomo_00064.png │ ├── tomo_00065.png │ ├── tomo_00066.png │ ├── tomo_00067.png │ ├── tomo_00068.png │ ├── tomo_00069.png │ ├── tomo_00070.png │ ├── tomo_00071.png │ ├── tomo_00072.png │ ├── tomo_00073.png │ ├── tomo_00074.png │ ├── tomo_00075.png │ ├── tomo_00076.png │ ├── tomo_00077.png │ ├── tomo_00078.png │ ├── tomo_00080_0.png │ ├── tomo_00080_1.png │ ├── tomo_00081.png │ ├── tomo_00082.png │ ├── tomo_00083.png │ ├── tomo_00084.png │ ├── tomo_00085.png │ ├── tomo_00086.png │ ├── tomo_00087.png │ ├── tomo_00088.png │ ├── tomo_00089.png │ ├── tomo_00090.png │ ├── tomo_00094.png │ ├── tomo_00094_rec.png │ ├── tomo_00095.png │ ├── tomo_00096.png │ ├── tomo_00097.png │ ├── tomo_00098.png │ ├── tomo_00099-1.png │ ├── tomo_00099-2.png │ ├── tomo_00099-3.png │ ├── tomo_00099-4.png │ ├── tomo_00099-5A.png │ ├── tomo_00099-5B.png │ ├── tomo_00099-6.png │ ├── tomo_00099-7.png │ ├── tomo_00099-8.png │ ├── tomo_00100_1.png │ ├── tomo_00100_2.png │ ├── tomo_00100_3.png │ ├── tomo_00100_4.png │ ├── tomo_00100_5.png │ ├── tomo_00100_6.png │ ├── tomo_00101_1.png │ ├── tomobank-logo.png │ ├── volume_00001.png │ └── volume_00002.png │ ├── ipynb │ └── tomopy_phantom.ipynb │ ├── license.rst │ ├── phantom.rst │ ├── phantom │ ├── docs.phantom.dynamic.rst │ ├── docs.phantom.foams.rst │ ├── docs.phantom.magnetic.rst │ ├── docs.phantom.standard.rst │ └── docs.phantom.wet_circles.rst │ ├── publish.rst │ ├── usage.rst │ └── volumes.rst ├── envs ├── requirements-doc.txt └── requirements.txt └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files # 2 | ######################################### 3 | __pycache__/ 4 | *.py[cod] 5 | 6 | # Compiled source # 7 | ################### 8 | *.com 9 | *.class 10 | *.dll 11 | *.exe 12 | *.o 13 | *.so 14 | 15 | # Packages # 16 | ############ 17 | # it's better to unpack these files and commit the raw source 18 | # git has its own built in compression methods 19 | *.7z 20 | *.dmg 21 | *.gz 22 | *.iso 23 | *.jar 24 | *.rar 25 | *.tar 26 | *.zip 27 | 28 | # Logs and databases # 29 | ###################### 30 | *.log 31 | *.sql 32 | *.sqlite 33 | 34 | # OS generated files # 35 | ###################### 36 | .DS_Store 37 | .DS_Store? 38 | ._* 39 | .Spotlight-V100 40 | .Trashes 41 | ehthumbs.db 42 | Thumbs.db 43 | .spyderworkspace 44 | *.*~ 45 | *~ 46 | 47 | # Python pyproducts # 48 | ##################### 49 | *.pyc 50 | build 51 | dist 52 | docs/_build 53 | doc/_build 54 | *egg-info 55 | *.egg 56 | .settings 57 | 58 | # LaTex generated files # 59 | ######################### 60 | *.aux 61 | *.cls 62 | *.layout 63 | *.bst 64 | *.lof 65 | *.toc 66 | *.out 67 | *.bbl 68 | *.blg 69 | 70 | # Test files # 71 | ############## 72 | test.py 73 | main.py 74 | 75 | # Distribution / packaging # 76 | ############################ 77 | bin/ 78 | build/ 79 | develop-eggs/ 80 | dist/ 81 | eggs/ 82 | lib/ 83 | lib64/ 84 | parts/ 85 | sdist/ 86 | var/ 87 | .installed.cfg 88 | 89 | # Installer logs # 90 | ################## 91 | pip-log.txt 92 | 93 | # Unit test / coverage reports # 94 | ################################ 95 | .tox/ 96 | .coverage 97 | .cache 98 | nosetests.xml 99 | coverage.xml 100 | 101 | # Translations # 102 | ################ 103 | *.mo 104 | 105 | # Mr Developer # 106 | ################ 107 | .mr.developer.cfg 108 | .project 109 | .pydevproject 110 | *.sublime-project 111 | *.sublime-workspace 112 | docs/trunk/* 113 | .spyder* 114 | .idea 115 | 116 | # Francesco's # 117 | ################ 118 | tmp/ 119 | tmp2/ 120 | validate* 121 | workingOn/ 122 | #rec_* 123 | datasets/ 124 | phantoms/ 125 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | version: 2 5 | sphinx: 6 | configuration: docs/conf.py 7 | python: 8 | install: 9 | - requirements: envs/requirements-doc.txt 10 | submodules: 11 | recursive: false 12 | build: 13 | os: ubuntu-22.04 14 | tools: 15 | python: "3" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2016, tomography 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.rst 2 | include LICENSE.txt 3 | include VERSION 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TomoBank 2 | 3 | Repository of tomographic datasets and phantoms. 4 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 0.1.1 2 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | PAPER = 8 | BUILDDIR = _build 9 | 10 | # User-friendly check for sphinx-build 11 | ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) 12 | $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) 13 | endif 14 | 15 | # Internal variables. 16 | PAPEROPT_a4 = -D latex_paper_size=a4 17 | PAPEROPT_letter = -D latex_paper_size=letter 18 | ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . 19 | # the i18n builder cannot share the environment and doctrees with the others 20 | I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . 21 | 22 | .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext 23 | 24 | help: 25 | @echo "Please use \`make ' where is one of" 26 | @echo " html to make standalone HTML files" 27 | @echo " dirhtml to make HTML files named index.html in directories" 28 | @echo " singlehtml to make a single large HTML file" 29 | @echo " pickle to make pickle files" 30 | @echo " json to make JSON files" 31 | @echo " htmlhelp to make HTML files and a HTML help project" 32 | @echo " qthelp to make HTML files and a qthelp project" 33 | @echo " applehelp to make an Apple Help Book" 34 | @echo " devhelp to make HTML files and a Devhelp project" 35 | @echo " epub to make an epub" 36 | @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" 37 | @echo " latexpdf to make LaTeX files and run them through pdflatex" 38 | @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" 39 | @echo " text to make text files" 40 | @echo " man to make manual pages" 41 | @echo " texinfo to make Texinfo files" 42 | @echo " info to make Texinfo files and run them through makeinfo" 43 | @echo " gettext to make PO message catalogs" 44 | @echo " changes to make an overview of all changed/added/deprecated items" 45 | @echo " xml to make Docutils-native XML files" 46 | @echo " pseudoxml to make pseudoxml-XML files for display purposes" 47 | @echo " linkcheck to check all external links for integrity" 48 | @echo " doctest to run all doctests embedded in the documentation (if enabled)" 49 | @echo " coverage to run coverage check of the documentation (if enabled)" 50 | 51 | clean: 52 | rm -rf $(BUILDDIR)/* 53 | 54 | html: 55 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html 56 | @echo 57 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." 58 | 59 | dirhtml: 60 | $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml 61 | @echo 62 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." 63 | 64 | singlehtml: 65 | $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml 66 | @echo 67 | @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." 68 | 69 | pickle: 70 | $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle 71 | @echo 72 | @echo "Build finished; now you can process the pickle files." 73 | 74 | json: 75 | $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json 76 | @echo 77 | @echo "Build finished; now you can process the JSON files." 78 | 79 | htmlhelp: 80 | $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp 81 | @echo 82 | @echo "Build finished; now you can run HTML Help Workshop with the" \ 83 | ".hhp project file in $(BUILDDIR)/htmlhelp." 84 | 85 | qthelp: 86 | $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp 87 | @echo 88 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \ 89 | ".qhcp project file in $(BUILDDIR)/qthelp, like this:" 90 | @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/dquality.qhcp" 91 | @echo "To view the help file:" 92 | @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/dquality.qhc" 93 | 94 | applehelp: 95 | $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp 96 | @echo 97 | @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." 98 | @echo "N.B. You won't be able to view it unless you put it in" \ 99 | "~/Library/Documentation/Help or install it in your application" \ 100 | "bundle." 101 | 102 | devhelp: 103 | $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp 104 | @echo 105 | @echo "Build finished." 106 | @echo "To view the help file:" 107 | @echo "# mkdir -p $$HOME/.local/share/devhelp/dquality" 108 | @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/dquality" 109 | @echo "# devhelp" 110 | 111 | epub: 112 | $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub 113 | @echo 114 | @echo "Build finished. The epub file is in $(BUILDDIR)/epub." 115 | 116 | latex: 117 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 118 | @echo 119 | @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." 120 | @echo "Run \`make' in that directory to run these through (pdf)latex" \ 121 | "(use \`make latexpdf' here to do that automatically)." 122 | 123 | latexpdf: 124 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 125 | @echo "Running LaTeX files through pdflatex..." 126 | $(MAKE) -C $(BUILDDIR)/latex all-pdf 127 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 128 | 129 | latexpdfja: 130 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 131 | @echo "Running LaTeX files through platex and dvipdfmx..." 132 | $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja 133 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 134 | 135 | text: 136 | $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text 137 | @echo 138 | @echo "Build finished. The text files are in $(BUILDDIR)/text." 139 | 140 | man: 141 | $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man 142 | @echo 143 | @echo "Build finished. The manual pages are in $(BUILDDIR)/man." 144 | 145 | texinfo: 146 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 147 | @echo 148 | @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." 149 | @echo "Run \`make' in that directory to run these through makeinfo" \ 150 | "(use \`make info' here to do that automatically)." 151 | 152 | info: 153 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 154 | @echo "Running Texinfo files through makeinfo..." 155 | make -C $(BUILDDIR)/texinfo info 156 | @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." 157 | 158 | gettext: 159 | $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale 160 | @echo 161 | @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." 162 | 163 | changes: 164 | $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes 165 | @echo 166 | @echo "The overview file is in $(BUILDDIR)/changes." 167 | 168 | linkcheck: 169 | $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck 170 | @echo 171 | @echo "Link check complete; look for any errors in the above output " \ 172 | "or in $(BUILDDIR)/linkcheck/output.txt." 173 | 174 | doctest: 175 | $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest 176 | @echo "Testing of doctests in the sources finished, look at the " \ 177 | "results in $(BUILDDIR)/doctest/output.txt." 178 | 179 | coverage: 180 | $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage 181 | @echo "Testing of coverage in the sources finished, look at the " \ 182 | "results in $(BUILDDIR)/coverage/python.txt." 183 | 184 | xml: 185 | $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml 186 | @echo 187 | @echo "Build finished. The XML files are in $(BUILDDIR)/xml." 188 | 189 | pseudoxml: 190 | $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml 191 | @echo 192 | @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." 193 | -------------------------------------------------------------------------------- /docs/demo/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | # ######################################################################### 5 | # Copyright (c) 2015, UChicago Argonne, LLC. All rights reserved. # 6 | # # 7 | # Copyright 2015. UChicago Argonne, LLC. This software was produced # 8 | # under U.S. Government contract DE-AC02-06CH11357 for Argonne National # 9 | # Laboratory (ANL), which is operated by UChicago Argonne, LLC for the # 10 | # U.S. Department of Energy. The U.S. Government has rights to use, # 11 | # reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR # 12 | # UChicago Argonne, LLC MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR # 13 | # ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is # 14 | # modified to produce derivative works, such modified software should # 15 | # be clearly marked, so as not to confuse it with the version available # 16 | # from ANL. # 17 | # # 18 | # Additionally, redistribution and use in source and binary forms, with # 19 | # or without modification, are permitted provided that the following # 20 | # conditions are met: # 21 | # # 22 | # * Redistributions of source code must retain the above copyright # 23 | # notice, this list of conditions and the following disclaimer. # 24 | # # 25 | # * Redistributions in binary form must reproduce the above copyright # 26 | # notice, this list of conditions and the following disclaimer in # 27 | # the documentation and/or other materials provided with the # 28 | # distribution. # 29 | # # 30 | # * Neither the name of UChicago Argonne, LLC, Argonne National # 31 | # Laboratory, ANL, the U.S. Government, nor the names of its # 32 | # contributors may be used to endorse or promote products derived # 33 | # from this software without specific prior written permission. # 34 | # # 35 | # THIS SOFTWARE IS PROVIDED BY UChicago Argonne, LLC AND CONTRIBUTORS # 36 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # 37 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # 38 | # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UChicago # 39 | # Argonne, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # 40 | # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # 41 | # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # 42 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # 43 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # 44 | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # 45 | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # 46 | # POSSIBILITY OF SUCH DAMAGE. # 47 | # ######################################################################### 48 | 49 | from __future__ import absolute_import, division, print_function 50 | -------------------------------------------------------------------------------- /docs/demo/phantom_00001.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00001' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | phantom = SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01) 52 | 53 | ccd_x = 256 54 | ccd_y = 256 55 | n_proj = 512 56 | 57 | step = 1. / ccd_x 58 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 59 | 60 | 61 | n_dark = 1 62 | n_white = 1 63 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 64 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 65 | 66 | sino, probe = sinogram(n_proj, ccd_x, phantom) 67 | proj = np.expand_dims(sino, 1) 68 | 69 | # Theta 70 | theta_step = np.pi / n_proj 71 | theta_step_deg = theta_step * 180./np.pi 72 | theta = np.arange(0, 180., 180. / n_proj) 73 | 74 | # Set data collection angles as equally spaced between 0-180 degrees. 75 | start_angle = 0 76 | start_angle_unit = 'deg' 77 | end_angle = 180 78 | end_angle_unit = 'deg' 79 | angular_step_unit = 'deg' 80 | 81 | # Phantom generation end time 82 | end_date = iso_time() 83 | 84 | # Write ground_truth 85 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 86 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 87 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 88 | 89 | # Save into a data-exchange file. 90 | if os.path.isfile(fname): 91 | print ("Data Exchange file already exists: ", fname) 92 | else: 93 | # Create new folder. 94 | dirPath = os.path.dirname(fname) 95 | if not os.path.exists(dirPath): 96 | os.makedirs(dirPath) 97 | 98 | # Open DataExchange file 99 | f = dx.File(fname, mode='w') 100 | 101 | # Write the Data Exchange HDF5 file. 102 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 103 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 104 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 105 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 106 | 107 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 108 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 111 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 112 | 113 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 114 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 115 | 116 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 119 | 120 | f.close() 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /docs/demo/phantom_00002.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00002' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | phantom = UnitCircle(radius=0.4, mass_atten=1) 52 | 53 | ccd_x = 256 54 | ccd_y = 256 55 | n_proj = 512 56 | 57 | step = 1. / ccd_x 58 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 59 | 60 | 61 | n_dark = 1 62 | n_white = 1 63 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 64 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 65 | 66 | sino, probe = sinogram(n_proj, ccd_x, phantom) 67 | proj = np.expand_dims(sino, 1) 68 | 69 | # Theta 70 | theta_step = np.pi / n_proj 71 | theta_step_deg = theta_step * 180./np.pi 72 | theta = np.arange(0, 180., 180. / n_proj) 73 | 74 | # Set data collection angles as equally spaced between 0-180 degrees. 75 | start_angle = 0 76 | start_angle_unit = 'deg' 77 | end_angle = 180 78 | end_angle_unit = 'deg' 79 | angular_step_unit = 'deg' 80 | 81 | # Phantom generation end time 82 | end_date = iso_time() 83 | 84 | # Write ground_truth 85 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 86 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 87 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 88 | 89 | # Save into a data-exchange file. 90 | if os.path.isfile(fname): 91 | print ("Data Exchange file already exists: ", fname) 92 | else: 93 | # Create new folder. 94 | dirPath = os.path.dirname(fname) 95 | if not os.path.exists(dirPath): 96 | os.makedirs(dirPath) 97 | 98 | # Open DataExchange file 99 | f = dx.File(fname, mode='w') 100 | 101 | # Write the Data Exchange HDF5 file. 102 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 103 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 104 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 105 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 106 | 107 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 108 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 111 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 112 | 113 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 114 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 115 | 116 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 119 | 120 | f.close() 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /docs/demo/phantom_00003.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00003' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | phantom = HyperbolicConcentric() 52 | 53 | ccd_x = 256 54 | ccd_y = 256 55 | n_proj = 512 56 | 57 | step = 1. / ccd_x 58 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 59 | 60 | 61 | n_dark = 1 62 | n_white = 1 63 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 64 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 65 | 66 | sino, probe = sinogram(n_proj, ccd_x, phantom) 67 | proj = np.expand_dims(sino, 1) 68 | 69 | # Theta 70 | theta_step = np.pi / n_proj 71 | theta_step_deg = theta_step * 180./np.pi 72 | theta = np.arange(0, 180., 180. / n_proj) 73 | 74 | # Set data collection angles as equally spaced between 0-180 degrees. 75 | start_angle = 0 76 | start_angle_unit = 'deg' 77 | end_angle = 180 78 | end_angle_unit = 'deg' 79 | angular_step_unit = 'deg' 80 | 81 | # Phantom generation end time 82 | end_date = iso_time() 83 | 84 | # Write ground_truth 85 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 86 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 87 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 88 | 89 | # Save into a data-exchange file. 90 | if os.path.isfile(fname): 91 | print ("Data Exchange file already exists: ", fname) 92 | else: 93 | # Create new folder. 94 | dirPath = os.path.dirname(fname) 95 | if not os.path.exists(dirPath): 96 | os.makedirs(dirPath) 97 | 98 | # Open DataExchange file 99 | f = dx.File(fname, mode='w') 100 | 101 | # Write the Data Exchange HDF5 file. 102 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 103 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 104 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 105 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 106 | 107 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 108 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 111 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 112 | 113 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 114 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 115 | 116 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 119 | 120 | f.close() 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /docs/demo/phantom_00004.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00004' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | phantom = DynamicRange(steps=16, jitter=True, shape='square') 52 | 53 | ccd_x = 256 54 | ccd_y = 256 55 | n_proj = 512 56 | 57 | step = 1. / ccd_x 58 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 59 | 60 | 61 | n_dark = 1 62 | n_white = 1 63 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 64 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 65 | 66 | sino, probe = sinogram(n_proj, ccd_x, phantom) 67 | proj = np.expand_dims(sino, 1) 68 | 69 | # Theta 70 | theta_step = np.pi / n_proj 71 | theta_step_deg = theta_step * 180./np.pi 72 | theta = np.arange(0, 180., 180. / n_proj) 73 | 74 | # Set data collection angles as equally spaced between 0-180 degrees. 75 | start_angle = 0 76 | start_angle_unit = 'deg' 77 | end_angle = 180 78 | end_angle_unit = 'deg' 79 | angular_step_unit = 'deg' 80 | 81 | # Phantom generation end time 82 | end_date = iso_time() 83 | 84 | # Write ground_truth 85 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 86 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 87 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 88 | 89 | # Save into a data-exchange file. 90 | if os.path.isfile(fname): 91 | print ("Data Exchange file already exists: ", fname) 92 | else: 93 | # Create new folder. 94 | dirPath = os.path.dirname(fname) 95 | if not os.path.exists(dirPath): 96 | os.makedirs(dirPath) 97 | 98 | # Open DataExchange file 99 | f = dx.File(fname, mode='w') 100 | 101 | # Write the Data Exchange HDF5 file. 102 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 103 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 104 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 105 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 106 | 107 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 108 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 111 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 112 | 113 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 114 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 115 | 116 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 119 | 120 | f.close() 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /docs/demo/phantom_00005.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00005' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | phantom = DogaCircles(n_sizes=8, size_ratio=0.5, n_shuffles=0) 52 | 53 | ccd_x = 256 54 | ccd_y = 256 55 | n_proj = 512 56 | 57 | step = 1. / ccd_x 58 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 59 | 60 | 61 | n_dark = 1 62 | n_white = 1 63 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 64 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 65 | 66 | sino, probe = sinogram(n_proj, ccd_x, phantom) 67 | proj = np.expand_dims(sino, 1) 68 | 69 | # Theta 70 | theta_step = np.pi / n_proj 71 | theta_step_deg = theta_step * 180./np.pi 72 | theta = np.arange(0, 180., 180. / n_proj) 73 | 74 | # Set data collection angles as equally spaced between 0-180 degrees. 75 | start_angle = 0 76 | start_angle_unit = 'deg' 77 | end_angle = 180 78 | end_angle_unit = 'deg' 79 | angular_step_unit = 'deg' 80 | 81 | # Phantom generation end time 82 | end_date = iso_time() 83 | 84 | # Write ground_truth 85 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 86 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 87 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 88 | 89 | # Save into a data-exchange file. 90 | if os.path.isfile(fname): 91 | print ("Data Exchange file already exists: ", fname) 92 | else: 93 | # Create new folder. 94 | dirPath = os.path.dirname(fname) 95 | if not os.path.exists(dirPath): 96 | os.makedirs(dirPath) 97 | 98 | # Open DataExchange file 99 | f = dx.File(fname, mode='w') 100 | 101 | # Write the Data Exchange HDF5 file. 102 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 103 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 104 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 105 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 106 | 107 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 108 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 111 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 112 | 113 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 114 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 115 | 116 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 119 | 120 | f.close() 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /docs/demo/phantom_00006.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00006' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | phantom = SiemensStar(32) 52 | 53 | ccd_x = 256 54 | ccd_y = 256 55 | n_proj = 512 56 | 57 | step = 1. / ccd_x 58 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 59 | 60 | 61 | n_dark = 1 62 | n_white = 1 63 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 64 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 65 | 66 | sino, probe = sinogram(n_proj, ccd_x, phantom) 67 | proj = np.expand_dims(sino, 1) 68 | 69 | # Theta 70 | theta_step = np.pi / n_proj 71 | theta_step_deg = theta_step * 180./np.pi 72 | theta = np.arange(0, 180., 180. / n_proj) 73 | 74 | # Set data collection angles as equally spaced between 0-180 degrees. 75 | start_angle = 0 76 | start_angle_unit = 'deg' 77 | end_angle = 180 78 | end_angle_unit = 'deg' 79 | angular_step_unit = 'deg' 80 | 81 | # Phantom generation end time 82 | end_date = iso_time() 83 | 84 | # Write ground_truth 85 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 86 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 87 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 88 | 89 | # Save into a data-exchange file. 90 | if os.path.isfile(fname): 91 | print ("Data Exchange file already exists: ", fname) 92 | else: 93 | # Create new folder. 94 | dirPath = os.path.dirname(fname) 95 | if not os.path.exists(dirPath): 96 | os.makedirs(dirPath) 97 | 98 | # Open DataExchange file 99 | f = dx.File(fname, mode='w') 100 | 101 | # Write the Data Exchange HDF5 file. 102 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 103 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 104 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 105 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 106 | 107 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 108 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 111 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 112 | 113 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 114 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 115 | 116 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 119 | 120 | f.close() 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /docs/demo/phantom_00007.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00007' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | phantom = WetCircles() 52 | 53 | ccd_x = 256 54 | ccd_y = 256 55 | n_proj = 512 56 | 57 | step = 1. / ccd_x 58 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 59 | 60 | 61 | n_dark = 1 62 | n_white = 1 63 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 64 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 65 | 66 | sino, probe = sinogram(n_proj, ccd_x, phantom) 67 | proj = np.expand_dims(sino, 1) 68 | 69 | # Theta 70 | theta_step = np.pi / n_proj 71 | theta_step_deg = theta_step * 180./np.pi 72 | theta = np.arange(0, 180., 180. / n_proj) 73 | 74 | # Set data collection angles as equally spaced between 0-180 degrees. 75 | start_angle = 0 76 | start_angle_unit = 'deg' 77 | end_angle = 180 78 | end_angle_unit = 'deg' 79 | angular_step_unit = 'deg' 80 | 81 | # Phantom generation end time 82 | end_date = iso_time() 83 | 84 | # Write ground_truth 85 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 86 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 87 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 88 | 89 | # Save into a data-exchange file. 90 | if os.path.isfile(fname): 91 | print ("Data Exchange file already exists: ", fname) 92 | else: 93 | # Create new folder. 94 | dirPath = os.path.dirname(fname) 95 | if not os.path.exists(dirPath): 96 | os.makedirs(dirPath) 97 | 98 | # Open DataExchange file 99 | f = dx.File(fname, mode='w') 100 | 101 | # Write the Data Exchange HDF5 file. 102 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 103 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 104 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 105 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 106 | 107 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 108 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 111 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 112 | 113 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 114 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 115 | 116 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 119 | 120 | f.close() 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /docs/demo/phantom_00008.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00008' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | np.random.seed(0) # random seed for repeatability 52 | phantom = Foam(size_range=[0.05, 0.01], gap=0, porosity=1) 53 | 54 | ccd_x = 256 55 | ccd_y = 256 56 | n_proj = 512 57 | 58 | step = 1. / ccd_x 59 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 60 | 61 | 62 | n_dark = 1 63 | n_white = 1 64 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 65 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 66 | 67 | sino, probe = sinogram(n_proj, ccd_x, phantom) 68 | proj = np.expand_dims(sino, 1) 69 | 70 | # Theta 71 | theta_step = np.pi / n_proj 72 | theta_step_deg = theta_step * 180./np.pi 73 | theta = np.arange(0, 180., 180. / n_proj) 74 | 75 | # Set data collection angles as equally spaced between 0-180 degrees. 76 | start_angle = 0 77 | start_angle_unit = 'deg' 78 | end_angle = 180 79 | end_angle_unit = 'deg' 80 | angular_step_unit = 'deg' 81 | 82 | # Phantom generation end time 83 | end_date = iso_time() 84 | 85 | # Write ground_truth 86 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 87 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 88 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 89 | 90 | # Save into a data-exchange file. 91 | if os.path.isfile(fname): 92 | print ("Data Exchange file already exists: ", fname) 93 | else: 94 | # Create new folder. 95 | dirPath = os.path.dirname(fname) 96 | if not os.path.exists(dirPath): 97 | os.makedirs(dirPath) 98 | 99 | # Open DataExchange file 100 | f = dx.File(fname, mode='w') 101 | 102 | # Write the Data Exchange HDF5 file. 103 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 104 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 105 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 106 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 107 | 108 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 111 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 112 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 113 | 114 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 115 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 116 | 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 119 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 120 | 121 | f.close() 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/demo/phantom_00009.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00009' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | np.random.seed(0) # random seed for repeatability 52 | phantom = Foam(size_range=[0.07, 0.01], gap=0, porosity=0.75) 53 | 54 | ccd_x = 256 55 | ccd_y = 256 56 | n_proj = 512 57 | 58 | step = 1. / ccd_x 59 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 60 | 61 | 62 | n_dark = 1 63 | n_white = 1 64 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 65 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 66 | 67 | sino, probe = sinogram(n_proj, ccd_x, phantom) 68 | proj = np.expand_dims(sino, 1) 69 | 70 | # Theta 71 | theta_step = np.pi / n_proj 72 | theta_step_deg = theta_step * 180./np.pi 73 | theta = np.arange(0, 180., 180. / n_proj) 74 | 75 | # Set data collection angles as equally spaced between 0-180 degrees. 76 | start_angle = 0 77 | start_angle_unit = 'deg' 78 | end_angle = 180 79 | end_angle_unit = 'deg' 80 | angular_step_unit = 'deg' 81 | 82 | # Phantom generation end time 83 | end_date = iso_time() 84 | 85 | # Write ground_truth 86 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 87 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 88 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 89 | 90 | # Save into a data-exchange file. 91 | if os.path.isfile(fname): 92 | print ("Data Exchange file already exists: ", fname) 93 | else: 94 | # Create new folder. 95 | dirPath = os.path.dirname(fname) 96 | if not os.path.exists(dirPath): 97 | os.makedirs(dirPath) 98 | 99 | # Open DataExchange file 100 | f = dx.File(fname, mode='w') 101 | 102 | # Write the Data Exchange HDF5 file. 103 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 104 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 105 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 106 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 107 | 108 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 111 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 112 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 113 | 114 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 115 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 116 | 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 119 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 120 | 121 | f.close() 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/demo/phantom_00010.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00010' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | np.random.seed(0) # random seed for repeatability 52 | phantom = Foam(size_range=[0.1, 0.01], gap=0, porosity=0.5) 53 | 54 | ccd_x = 256 55 | ccd_y = 256 56 | n_proj = 512 57 | 58 | step = 1. / ccd_x 59 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 60 | 61 | 62 | n_dark = 1 63 | n_white = 1 64 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 65 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 66 | 67 | sino, probe = sinogram(n_proj, ccd_x, phantom) 68 | proj = np.expand_dims(sino, 1) 69 | 70 | # Theta 71 | theta_step = np.pi / n_proj 72 | theta_step_deg = theta_step * 180./np.pi 73 | theta = np.arange(0, 180., 180. / n_proj) 74 | 75 | # Set data collection angles as equally spaced between 0-180 degrees. 76 | start_angle = 0 77 | start_angle_unit = 'deg' 78 | end_angle = 180 79 | end_angle_unit = 'deg' 80 | angular_step_unit = 'deg' 81 | 82 | # Phantom generation end time 83 | end_date = iso_time() 84 | 85 | # Write ground_truth 86 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 87 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 88 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 89 | 90 | # Save into a data-exchange file. 91 | if os.path.isfile(fname): 92 | print ("Data Exchange file already exists: ", fname) 93 | else: 94 | # Create new folder. 95 | dirPath = os.path.dirname(fname) 96 | if not os.path.exists(dirPath): 97 | os.makedirs(dirPath) 98 | 99 | # Open DataExchange file 100 | f = dx.File(fname, mode='w') 101 | 102 | # Write the Data Exchange HDF5 file. 103 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 104 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 105 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 106 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 107 | 108 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 111 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 112 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 113 | 114 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 115 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 116 | 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 119 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 120 | 121 | f.close() 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/demo/phantom_00011.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Dec 3 15:35:30 2016 4 | 5 | @author: decarlo 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | from xdesign import * 11 | 12 | import os 13 | import time 14 | import pytz 15 | import datetime 16 | import numpy as np 17 | import matplotlib.pyplot as plt 18 | import matplotlib.gridspec as gridspec 19 | import dxfile.dxtomo as dx 20 | import dxchange 21 | 22 | def iso_time(): 23 | # set the experiment date 24 | now = datetime.datetime.today() 25 | 26 | # set iso format time 27 | central = pytz.timezone('US/Central') 28 | local_time = central.localize(now) 29 | local_time_iso = local_time.isoformat() 30 | 31 | return local_time_iso 32 | 33 | 34 | if __name__ == '__main__': 35 | 36 | # Set tomobank id 37 | tomobank_id = 'phantom_00011' 38 | 39 | # Set path to the micro-CT data to convert. 40 | fname = 'tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '.h5' 41 | 42 | # Set meta-data 43 | experimenter_affiliation="Argonne National Laboratory" 44 | experimenter_email="tomobank@anl.gov" 45 | instrument_name="XDesign VERSION:0.2.0.dev0+1d67599b8f104ebded86bac98100dbf15e251a66 FUNCTION: SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01), prop='mass_atten'" 46 | sample_name = tomobank_id 47 | 48 | # Phantom generation start time 49 | start_date = iso_time() 50 | 51 | np.random.seed(0) # random seed for repeatability 52 | phantom = Foam(size_range=[0.1, 0.01], gap=0.015, porosity=0.5) 53 | 54 | ccd_x = 256 55 | ccd_y = 256 56 | n_proj = 512 57 | 58 | step = 1. / ccd_x 59 | prb = Probe(Point([step / 2., -10]), Point([step / 2., 10]), step) 60 | 61 | 62 | n_dark = 1 63 | n_white = 1 64 | dark = np.zeros((n_dark, ccd_y, ccd_x)) # Array filled with zeros 65 | flat = np.ones((n_white, ccd_y, ccd_x)) # Array filled with ones 66 | 67 | sino, probe = sinogram(n_proj, ccd_x, phantom) 68 | proj = np.expand_dims(sino, 1) 69 | 70 | # Theta 71 | theta_step = np.pi / n_proj 72 | theta_step_deg = theta_step * 180./np.pi 73 | theta = np.arange(0, 180., 180. / n_proj) 74 | 75 | # Set data collection angles as equally spaced between 0-180 degrees. 76 | start_angle = 0 77 | start_angle_unit = 'deg' 78 | end_angle = 180 79 | end_angle_unit = 'deg' 80 | angular_step_unit = 'deg' 81 | 82 | # Phantom generation end time 83 | end_date = iso_time() 84 | 85 | # Write ground_truth 86 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 87 | fname_gt='tomobank/phantoms/' + tomobank_id + '/' + tomobank_id + '_ground_truth' 88 | dxchange.write_tiff(ground_truth, fname=fname_gt, dtype='float32') 89 | 90 | # Save into a data-exchange file. 91 | if os.path.isfile(fname): 92 | print ("Data Exchange file already exists: ", fname) 93 | else: 94 | # Create new folder. 95 | dirPath = os.path.dirname(fname) 96 | if not os.path.exists(dirPath): 97 | os.makedirs(dirPath) 98 | 99 | # Open DataExchange file 100 | f = dx.File(fname, mode='w') 101 | 102 | # Write the Data Exchange HDF5 file. 103 | f.add_entry(dx.Entry.experimenter(affiliation={'value': experimenter_affiliation})) 104 | f.add_entry(dx.Entry.experimenter(email={'value': experimenter_email})) 105 | f.add_entry(dx.Entry.instrument(name={'value': instrument_name})) 106 | f.add_entry(dx.Entry.sample(name={'value': sample_name})) 107 | 108 | f.add_entry(dx.Entry.data(data={'value': proj, 'units':'counts'})) 109 | f.add_entry(dx.Entry.data(data_white={'value': flat, 'units':'counts'})) 110 | f.add_entry(dx.Entry.data(data_dark={'value': dark, 'units':'counts'})) 111 | f.add_entry(dx.Entry.data(theta={'value': theta, 'units':'degrees'})) 112 | f.add_entry(dx.Entry.data(ground_truth={'value': ground_truth, 'units':'counts'})) 113 | 114 | f.add_entry(dx.Entry.acquisition(start_date={'value': start_date})) 115 | f.add_entry(dx.Entry.acquisition(end_date={'value': end_date})) 116 | 117 | f.add_entry(dx.Entry.acquisition_setup(rotation_start_angle={'value': start_angle, 'unit': start_angle_unit})) 118 | f.add_entry(dx.Entry.acquisition_setup(rotation_end_angle={'value': end_angle, 'unit': end_angle_unit})) 119 | f.add_entry(dx.Entry.acquisition_setup(angular_step={'value': theta_step_deg, 'unit': angular_step_unit})) 120 | 121 | f.close() 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/demo/pt4_projection.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | import numpy as np 4 | from PIL import Image 5 | 6 | 7 | def load_tiff_dir(dirname): 8 | tiff_files = [f for f in os.listdir(dirname) if f.endswith('.tiff')] 9 | 10 | tiff_files.sort() 11 | 12 | tiff_arrays = [] 13 | 14 | for tiff_file in tiff_files: 15 | tiff_path = os.path.join(dirname, tiff_file) 16 | 17 | with Image.open(tiff_path) as tiff_stack: 18 | tiff_array = np.array(tiff_stack) 19 | tiff_arrays.append(tiff_array) 20 | return tiff_arrays; 21 | 22 | if __name__ == "__main__": 23 | if len(sys.argv) == 2: 24 | filename = sys.argv[1] 25 | 26 | projections = load_tiff_dir(filename) 27 | 28 | ##add your code here 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/demo/pt4_volume.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import numpy as np 3 | import netCDF4 as nc 4 | 5 | def ncread(filename, ncVariable='guess'): 6 | 7 | ncIn = nc.Dataset(filename, 'r') 8 | 9 | print(ncIn) 10 | 11 | if (ncVariable=='guess'): 12 | #find variable with max size 13 | v = ncIn.variables.keys() 14 | sizeMax=0 15 | vMax=0 16 | for vKey in v: 17 | vShape = ncIn.variables[vKey].shape 18 | sizeCurr=1 19 | for dim in np.arange(len(vShape)): 20 | sizeCurr *= vShape[dim] 21 | if (sizeCurr > sizeMax): 22 | sizeMax = sizeCurr 23 | vMax = vKey 24 | var = ncIn.variables[vMax] 25 | print("Determined variable %s to be the data to be read in file: %s"%(vMax,filename)) 26 | else: 27 | var = ncIn.variables[ncVariable] 28 | 29 | data = var[:] 30 | 31 | ncIn.close() 32 | 33 | return data 34 | 35 | 36 | if __name__ == "__main__": 37 | if len(sys.argv) == 2: 38 | filename = sys.argv[1] 39 | volume = ncread(filename) 40 | 41 | ##add your code here 42 | 43 | -------------------------------------------------------------------------------- /docs/demo/read_xrm_script.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | import dxchange 3 | import numpy as np 4 | 5 | # Loads tomo_00089 dataset from Tomobank for processing 6 | # data was taken in following patter... 7 | # set energy 8 | # take 10 reference flats 9 | # take [-90, -1] projects in 1 deg interval 10 | # take 10 reference flats 11 | # take [0, 89] projects in 1 deg interval 12 | # repeat for each energy 13 | 14 | def load_xrm_list(xrm_list): 15 | data_stack = None 16 | metadatas = [] 17 | for i, filename in enumerate(xrm_list): 18 | data, metadata = dxchange.read_xrm(str(filename)) 19 | if data_stack is None: 20 | data_stack = np.zeros((len(xrm_list),)+data.shape, data.dtype) 21 | data_stack[i] = data 22 | metadatas.append(metadata) 23 | return data_stack, metadatas 24 | 25 | 26 | def parse_scan_file(txt_file): 27 | energies = [] 28 | refs = [] 29 | collects = [] 30 | with open(txt_file, "r") as f: 31 | for line in f.readlines(): 32 | if line.startswith("sete "): 33 | energies.append(float(line[5:])) 34 | refs.append([]) 35 | collects.append([]) 36 | elif line.startswith("collect "): 37 | filename = line[8:].strip() 38 | if "_ref_" in filename: 39 | refs[-1].append(Path(txt_file).parent / filename) 40 | else: 41 | collects[-1].append(Path(txt_file).parent / filename) 42 | return energies, refs, collects 43 | 44 | 45 | def load_energy_index(energy_index, refs, collects): 46 | flats, _ = load_xrm_list(refs[energy_index]) 47 | projs, metadatas = load_xrm_list(collects[energy_index]) 48 | thetas = [metadata['thetas'][0] for metadata in metadatas] 49 | return flats, projs, thetas 50 | 51 | 52 | if __name__ == "__main__": 53 | txt_file = Path("/path/to/tomobank/tomo_00089/AC3_C4p6_3DXANES/AC3_C4p6_3DXANES_TOMO-XANES.txt") 54 | 55 | energies, refs, collects = parse_scan_file(txt_file) 56 | energy_index = 0 57 | print("Loading energy %feV"%(energies[energy_index])) 58 | flats, projs, thetas = load_energy_index(energy_index, refs, collects) 59 | 60 | # the flats can be split into two groups for better flat field correction 61 | flats1 = flats[:10] 62 | flats2 = flats[10:] 63 | 64 | # same for projections... 65 | projs1 = projs[:90] 66 | projs2 = projs[90:] 67 | 68 | -------------------------------------------------------------------------------- /docs/demo/rec_phantom_00015.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import rectv 5 | import numpy as np 6 | import dxchange 7 | import tomopy 8 | import sys 9 | 10 | def rec_tv(data,m,nsp,rot_center, 11 | lambda0,lambda1,niters,ngpus): 12 | """ 13 | Reconstruct. Time-domain decomposition + regularization. 14 | """ 15 | 16 | [nframes, nproj, ns, n] = data.shape 17 | 18 | # cut data according to the rotation center 19 | if (rot_centern//2): 22 | data = data[:,:,:,rot_center-n//2:] 23 | n = data.shape[3] 24 | 25 | # reorder input data for compatibility 26 | data = np.reshape(data,[nframes*nproj,ns,n]) 27 | data = np.ndarray.flatten(data.swapaxes(0, 1)) 28 | 29 | # memory for result 30 | rec = np.zeros([n*n*ns*m], dtype='float32') 31 | 32 | # Make a class for tv 33 | cl = rectv.rectv(n, nframes*nproj, m, nframes, ns, 34 | ns, ngpus, lambda0, lambda1) 35 | # Run iterations 36 | cl.itertvR_wrap(rec, data, niters) 37 | 38 | # reorder result for compatibility with tomopy 39 | rec = np.rot90(np.reshape(rec, [ns, m, n, n]).swapaxes(0, 1), axes=( 40 | 2, 3))/nproj*2 41 | 42 | # take slices corresponding to angles k\pi 43 | rec = rec[::m//nframes] 44 | for time_frame in range(0, nframes): 45 | # Mask each reconstructed slice with a circle. 46 | rec[time_frame] = tomopy.circ_mask(rec[time_frame], axis=0, ratio=0.95) 47 | 48 | return rec 49 | 50 | def rec(data,rot_center): 51 | """ 52 | Reconstruct with Gridrec. 53 | """ 54 | 55 | [nframes, nproj, ns, n] = data.shape 56 | theta = np.linspace(0, np.pi*nframes, nproj*nframes, endpoint=False) 57 | # Reconstruct object. FBP. 58 | rec = np.zeros([nframes, ns, n, n], dtype='float32') 59 | for time_frame in range(0, nframes): 60 | rec0 = tomopy.recon(data[time_frame], theta[time_frame*nproj:(time_frame+1)*nproj], center=rot_center, algorithm='gridrec') 61 | # Mask each reconstructed slice with a circle. 62 | rec[time_frame] = tomopy.circ_mask(rec0, axis=0, ratio=0.95) 63 | 64 | return rec 65 | 66 | if __name__ == "__main__": 67 | 68 | # read 8 time frames of data 69 | data = dxchange.reader.read_tiff_stack(sys.argv[1],ind=np.arange(0,8)) 70 | # add dimension for slices 71 | data = np.expand_dims(data,2) 72 | 73 | rot_center = 128 # rotation center 74 | 75 | # 1) reconstruct by gridrec 76 | r = rec(data,rot_center) 77 | 78 | for k in range(r.shape[0]): 79 | dxchange.write_tiff_stack(r[k],'recfbp/recfbp_'+str(k)) 80 | 81 | 82 | # 2) reconstruct by the time-domain decomposition + regularization 83 | nsp = 1 # number of slices to process simultaniously by gpus 84 | niters = 1024 # number of iterations 85 | ngpus = 1 # number of gpus 86 | m = 16# number of basis functions, must be a multiple of nframes 87 | lambda0 = pow(2, -9) # regularization parameter 1 88 | lambda1 = pow(2, 1) # regularization parameter 2 89 | 90 | rtv = rec_tv(data,m,nsp,rot_center,lambda0,lambda1,niters,ngpus) 91 | for k in range(rtv.shape[0]): 92 | dxchange.write_tiff_stack(rtv[k],'rectv/recb16tv_'+str(k)) 93 | 94 | -------------------------------------------------------------------------------- /docs/demo/rec_tomo_00022_native.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | TomoPy example script to reconstruct the Elettra data saved as elettra native dxchange (data in sinogram order) 6 | """ 7 | 8 | from __future__ import print_function 9 | 10 | import os 11 | import tomopy 12 | import dxchange 13 | import numpy as np 14 | 15 | if __name__ == '__main__': 16 | # Set tomobank id 17 | tomobank_id = 'tomo_00022' 18 | 19 | # Set path to the micro-CT data to reconstruct. 20 | fname = 'tomobank/' + tomobank_id + '/native/' + tomobank_id + '.h5' 21 | 22 | proj, flat, dark, th = dxchange.read_aps_32id(fname) 23 | 24 | theta = tomopy.angles(proj.shape[1]) 25 | 26 | proj = np.swapaxes(proj, 0, 1) 27 | flat = np.swapaxes(flat, 0, 1) 28 | dark = np.swapaxes(dark, 0, 1) 29 | 30 | # Select the sinogram range to reconstruct. 31 | start = 1024 32 | end = 1025 33 | proj = proj[:, [start,end], :] 34 | flat = flat[:, [start,end], :] 35 | dark = dark[:, [start,end], :] 36 | 37 | # Flat-field correction of raw data. 38 | proj = tomopy.normalize(proj, flat, dark) 39 | 40 | # Set rotation center. 41 | rot_center = 980 42 | 43 | proj = tomopy.minus_log(proj) 44 | 45 | # Reconstruct object using Gridrec algorithm. 46 | rec = tomopy.recon(proj, theta, center=rot_center, algorithm='gridrec', nchunk=1) 47 | 48 | # Mask each reconstructed slice with a circle. 49 | rec = tomopy.circ_mask(rec, axis=0, ratio=0.95) 50 | 51 | # Write data as stack of TIFs. 52 | fname='tomobank/' + tomobank_id + '/' + tomobank_id 53 | dxchange.write_tiff_stack(rec, fname=fname) 54 | 55 | -------------------------------------------------------------------------------- /docs/demo/rec_tomo_00025_native.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | Python example of how to read am images. 6 | """ 7 | 8 | from __future__ import print_function 9 | import os 10 | import sys 11 | import argparse 12 | import fnmatch 13 | import tomopy 14 | import dxchange 15 | import numpy as np 16 | 17 | 18 | from os.path import expanduser 19 | 20 | 21 | def main(arg): 22 | # Set tomobank id 23 | tomobank_id = 'tomo_00025' 24 | 25 | # Set path to the micro-CT data to reconstruct. 26 | fname = 'tomobank/' + tomobank_id + '/native/' + tomobank_id + '.h5' 27 | 28 | # Read the hdf raw data. 29 | sino, sflat, sdark, th = dxchange.read_aps_32id(fname) 30 | 31 | # Set data collection angles as equally spaced between 0-180 degrees. 32 | theta = tomopy.angles(sino.shape[1], ang1=0.0, ang2=180.0) 33 | 34 | print(sino.shape, sdark.shape, sflat.shape, theta.shape) 35 | 36 | # Quick normalization just to see something .... 37 | ndata = sino / float(np.amax(sino)) 38 | slider(ndata) 39 | 40 | # Find rotation center. 41 | rot_center = 952 42 | 43 | binning = 1 44 | ndata = tomopy.downsample(ndata, level=int(binning)) 45 | rot_center = rot_center/np.power(2, float(binning)) 46 | 47 | ndata = tomopy.minus_log(ndata) 48 | 49 | # Reconstruct object using Gridrec algorithm. 50 | rec = tomopy.recon(ndata, theta, center=rot_center, sinogram_order=True, algorithm='gridrec') 51 | 52 | # Mask each reconstructed slice with a circle. 53 | rec = tomopy.circ_mask(rec, axis=0, ratio=0.95) 54 | 55 | # Write data as stack of TIFs. 56 | dxchange.write_tiff_stack(rec, fname='recon_dir/recon') 57 | 58 | if __name__ == "__main__": 59 | main(sys.argv[1:]) 60 | -------------------------------------------------------------------------------- /docs/demo/tomopy_rec_KBLT.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | TomoPy example script to reconstruct a single KBLT data sets. 6 | Author: Emanuel Larsson, Lund University, Lund, Sweden 7 | email: emanuel.larsson@solid.lth.se 8 | """ 9 | 10 | from __future__ import print_function 11 | 12 | import os 13 | import sys 14 | import numpy as np 15 | from numpy import inf 16 | 17 | import h5py 18 | import tomopy 19 | import dxchange 20 | 21 | import tomopy.util.mproc as mproc 22 | import tomopy.util.dtype as dtype 23 | import numexpr as ne 24 | 25 | from skimage.color import rgb2gray 26 | from skimage.util import img_as_uint, img_as_ubyte, img_as_float32 27 | from skimage.transform import rotate 28 | 29 | def kblt_normalize(arr, flat, cutoff=None, ncore=None, out=None): 30 | """ 31 | Normalize raw projection KBLT data using only the flat field projections. 32 | 33 | This function is a modified version of the following function from TomoPy: 34 | https://tomopy.readthedocs.io/en/latest/api/tomopy.prep.normalize.html#tomopy.prep.normalize.normalize 35 | 36 | Parameters 37 | ---------- 38 | arr : ndarray 39 | 3D stack of projections. 40 | flat : ndarray 41 | 3D flat field data. 42 | cutoff : float, optional 43 | Permitted maximum vaue for the normalized data. 44 | ncore : int, optional 45 | Number of cores that will be assigned to jobs. 46 | out : ndarray, optional 47 | Output array for result. If same as arr, 48 | process will be done in-place. 49 | 50 | Returns 51 | ------- 52 | ndarray 53 | Normalized 3D KBLT tomographic data. 54 | """ 55 | arr = dtype.as_float32(arr) 56 | l = np.float32(1e-6) 57 | flat = np.mean(flat, axis=0, dtype=np.float32) 58 | 59 | with mproc.set_numexpr_threads(ncore): 60 | denom = ne.evaluate('flat') 61 | ne.evaluate('where(denomcutoff,cutoff,out)', out=out) 67 | return out 68 | 69 | def main(arg): 70 | 71 | #sample names of datasets to reconstruct 72 | 73 | sample = '1_plastic_screw_RGB' 74 | tilt = 1.4 75 | angle = 360 76 | rot_center_user = 104.75 77 | 78 | #sample = '2_plastic_beeds_RGB' 79 | #tilt = -0.6 80 | #angle = 360 81 | #rot_center_user = 65 82 | 83 | #sample = '3_legoman_RGB' 84 | #tilt = 1.2 85 | #angle = 360 86 | #rot_center_user = 180 87 | 88 | #sample = '4_fairy_slime_RGB' 89 | #tilt = 0 90 | #angle = 360 91 | #rot_center_user = 174.5 92 | 93 | #sample = '5A_seeds_drink_1st_light_RGB' 94 | #tilt = -0.6 95 | #angle = 360 96 | #rot_center_user = 158.5 97 | 98 | #sample = '5B_seeds_drink_2nd_light_RGB' 99 | #tilt = -0.3 100 | #angle = 360 101 | #rot_center_user = 164.25 102 | 103 | #sample = '6_hourglass_RGB' 104 | #tilt = 0.4 105 | #angle = 360 106 | #rot_center_user = 93 107 | #rep = 'rep_01' 108 | 109 | #sample = '7_chocolate_RGB' 110 | #tilt = 0 111 | #angle = 360 112 | #rot_center_user = 198.75 113 | #rep = 'rep_02' 114 | 115 | #sample = '8_lavalamp_RGB' 116 | #tilt = 0 117 | #angle = 180 118 | #rot_center_user = 319.25 119 | #rep = 'rep_15' 120 | 121 | #folders 122 | fname = 'C:/Users/Emanuel Larsson/Desktop/KBLT/DATA_SETS/h5_data_sets_JMTS/' 123 | #fname = 'E:/KBLT/lava_dyn7/180_scans/' 124 | fname_in = fname + str(sample) + '.h5' 125 | fname_out = os.path.join( fname + str(sample) + '/' ) 126 | 127 | print(fname_out) 128 | 129 | #create the output folder 130 | if not os.path.exists(fname_out): 131 | os.makedirs(fname_out) 132 | 133 | #read in the h5 dataset (in RGB format) 134 | hf = h5py.File(fname_in, 'r') 135 | flat = hf.get('flat') 136 | 137 | #for 3D KBLT only one tomo exists. For 4D several repetitive tomos over time exist. 138 | if 'rep' in locals(): 139 | print('4D KBLT dataset!') 140 | tomo = hf.get('tomo/' + rep) 141 | else: 142 | print('3D KBLT dataset!') 143 | tomo = hf.get('tomo') 144 | 145 | #convert to numpy array 146 | tomo = np.array(tomo) 147 | flat = np.array(flat) 148 | 149 | #convert from RGB to 16 bit grey scale level 150 | #individual user defined conversion value, depending on the lightening conditions 151 | conversion_factor = 32767 152 | tomo = rgb2gray(tomo) * conversion_factor 153 | tomo = tomo.astype(np.int16) 154 | flat = rgb2gray(flat) * conversion_factor 155 | flat = flat.astype(np.int16) 156 | 157 | #Normalize the projection images 158 | data = kblt_normalize(tomo, flat) 159 | 160 | #Set potentiall +/-infinity to either 0 or 1 respectively 161 | data[np.isnan(data)] = 0 162 | data[data == -inf] = 0 163 | data[data == inf] = 1 164 | data = tomopy.minus_log(data) 165 | 166 | #if the defined tilt is not zero, then correct the tilt for the respecive datasets 167 | if tilt is not 0: 168 | 169 | #convert 16 bit flat-fielded projections to 32 bit projections for higher accuracy 170 | #data=img_as_float32(data) 171 | 172 | #tilt correct the flat-fielded projections 173 | for i in range(len(data)): 174 | data[i] = rotate(data[i], angle=tilt, resize=False, center=None, order=1, mode='constant', cval=0, clip=True, preserve_range=False) 175 | 176 | #convert back from 32 bit to 16 bit 177 | #data=img_as_uint(data) 178 | 179 | print('tilt correction done!') 180 | 181 | else: 182 | print('skipped tilt correction!') 183 | 184 | #define scanning angles 185 | theta = tomopy.angles(data.shape[0], 0, angle) 186 | 187 | #center of rotation in the middle of the image 188 | rot_center = (data.shape[2]) / 2.0 189 | print('The central point of the image is: ' + str(rot_center)) 190 | rot_center = tomopy.find_center_pc(data[0], data[-1], tol=0.5, rotc_guess=rot_center) 191 | print('The automatically detected CoR is: ' + str(rot_center)) 192 | rot_center = rot_center_user 193 | print('User-defined CoR is: ' + str(rot_center)) 194 | 195 | #define slices to reconstruct 196 | slice_start = 0 197 | slice_end = len(data[0]) 198 | #slice_start = 200 199 | #slice_end = 300 200 | 201 | #reconstruct slices 202 | rec = tomopy.recon(data[:, slice_start:slice_end, :], theta=theta, center=rot_center, algorithm='gridrec') 203 | 204 | #set pixels outside the circle to zero 205 | rec = tomopy.circ_mask(rec, axis=0, ratio=0.95) 206 | 207 | fname_out_tiff = os.path.join( fname_out + '/rec_cr_' + str(rot_center_user) + '/') 208 | 209 | #for writing out repetitive reconstructions as individual files 210 | if 'rep' in locals(): 211 | fname_out_tiff = fname_out_tiff + '/' + str(rep) + '/' 212 | fname_out_hdf5 = fname_out + str(sample) + '_' + str(rep) + '_cr_' + str(rot_center_user) + '.h5' 213 | else: 214 | fname_out_hdf5 = fname_out + str(sample) + '_cr_' + str(rot_center_user) + '.h5' 215 | 216 | print(fname_out_hdf5) 217 | 218 | #create final output folder 219 | if not os.path.exists(fname_out_tiff): 220 | os.makedirs(fname_out_tiff) 221 | 222 | #save out the reconstructed volume as a tiff stack 223 | dxchange.write_tiff_stack(rec[:, :, :], fname = fname_out_tiff + 'slice') 224 | 225 | #save out the reconstructed volume as a single h5 file 226 | dxchange.writer.write_dxf(rec, fname=fname_out_hdf5, axes=u'theta:y:x', dtype=None, overwrite=False) 227 | 228 | if __name__ == "__main__": 229 | main(sys.argv[1:]) 230 | 231 | -------------------------------------------------------------------------------- /docs/demo/tomopy_rectv.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | TomoPy example script to reconstruct a single data set. 6 | """ 7 | 8 | from __future__ import print_function 9 | 10 | import os 11 | import sys 12 | import json 13 | import argparse 14 | import numpy as np 15 | import collections 16 | 17 | import h5py 18 | import tomopy 19 | import dxchange 20 | 21 | 22 | def get_dx_dims(fname, dataset): 23 | """ 24 | Read array size of a specific group of Data Exchange file.ls 25 | 26 | Parameters 27 | ---------- 28 | fname : str 29 | String defining the path of file or file name. 30 | dataset : str 31 | Path to the dataset inside hdf5 file where data is located. 32 | 33 | Returns 34 | ------- 35 | ndarray 36 | Data set size. 37 | """ 38 | 39 | grp = '/'.join(['exchange', dataset]) 40 | 41 | with h5py.File(fname, "r") as f: 42 | try: 43 | data = f[grp] 44 | except KeyError: 45 | return None 46 | 47 | shape = data.shape 48 | 49 | return shape 50 | 51 | 52 | def restricted_float(x): 53 | 54 | x = float(x) 55 | if x < 0.0 or x >= 1.0: 56 | raise argparse.ArgumentTypeError("%r not in range [0.0, 1.0]"%(x,)) 57 | return x 58 | 59 | def reconstruct(h5fname, sino, nframes, frame, nproj, binning, tv): 60 | 61 | # Read APS 32-BM raw data. 62 | print("Read data") 63 | proj, flat, dark, theta = dxchange.read_aps_32id(h5fname, sino=sino) 64 | 65 | print("Processing") 66 | proj = proj[(frame-nframes/2)*nproj:(frame+nframes/2)*nproj,:,:] 67 | 68 | # Flat-field correction of raw data. 69 | data = tomopy.normalize(proj, flat, dark, cutoff=1.4) 70 | 71 | # remove stripes 72 | data = tomopy.remove_stripe_fw(data,level=7,wname='sym16',sigma=1,pad=True) 73 | 74 | print("Raw data: ", h5fname) 75 | print("Frames for reconstruction:",(frame-nframes/2),"..",(frame+nframes/2)) 76 | # Phase retrieval for tomobank id 00080 77 | # sample_detector_distance = 25 78 | # detector_pixel_size_x = 3.0e-4 79 | # monochromator_energy = 16 80 | 81 | # phase retrieval 82 | # data = tomopy.prep.phase.retrieve_phase(data,pixel_size=detector_pixel_size_x,dist=sample_detector_distance,energy=monochromator_energy,alpha=8e-03,pad=True) 83 | 84 | data = tomopy.minus_log(data) 85 | 86 | data = tomopy.remove_nan(data, val=0.0) 87 | data = tomopy.remove_neg(data, val=0.00) 88 | data[np.where(data == np.inf)] = 0.00 89 | 90 | # Binning 91 | data = tomopy.downsample(data, level=binning, axis=2) 92 | if data.shape[1]>1: 93 | data = tomopy.downsample(data, level=binning, axis=1) 94 | 95 | rot_center = data.shape[2]/2 96 | theta = np.linspace(0,np.pi*nframes,nproj*nframes,endpoint=False) 97 | 98 | if tv: 99 | import rectv 100 | # Reconstruct. Iterative TV. 101 | [Ntheta,Nz,N] = data.shape 102 | Nzp = 4 # number of slices to process simultaniously by gpus 103 | M = nframes # number of basis functions, must be a multiple of nframes 104 | lambda0 = pow(2,-9) # regularization parameter 1 105 | lambda1 = pow(2,2) # regularization parameter 2 106 | niters = 1024 # number of iterations 107 | ngpus = 1 # number of gpus 108 | 109 | data = np.ndarray.flatten(data.swapaxes(0,1)) # reorder input data for compatibility 110 | rec = np.zeros([N*N*Nz*M],dtype='float32') # memory for result 111 | 112 | # Make a class for tv 113 | cl = rectv.rectv(N,Ntheta,M,nframes,Nz,Nzp,ngpus,lambda0,lambda1) 114 | # Run iterations 115 | cl.itertvR_wrap(rec,data,niters) 116 | 117 | rec = np.rot90(np.reshape(rec,[Nz,M,N,N]).swapaxes(0,1),axes=(2,3))/Ntheta*nframes*2 # reorder result for compatibility 118 | rec = rec[::M/nframes] 119 | else: 120 | # Reconstruct object. FBP. 121 | rec = np.zeros((nframes,data.shape[1],data.shape[2],data.shape[2]),dtype='float32') 122 | for time_frame in range(0,nframes): 123 | rec0 = tomopy.recon(data[time_frame*nproj:(time_frame+1)*nproj], theta[time_frame*nproj:(time_frame+1)*nproj], center=rot_center-np.mod(time_frame,2), algorithm='gridrec') 124 | # Mask each reconstructed slice with a circle. 125 | rec[time_frame] = tomopy.circ_mask(rec0, axis=0, ratio=0.95) 126 | return rec 127 | 128 | 129 | def rec_full(h5fname, nframes, frame, nproj, binning, tv): 130 | 131 | data_size = get_dx_dims(h5fname, 'data') 132 | 133 | # Select sinogram range to reconstruct. 134 | sino_start = 0 135 | sino_end = data_size[1] 136 | 137 | chunks = data_size[1]/(8*pow(2,binning)) # number of sinogram chunks to reconstruct 138 | # only one chunk at the time is reconstructed 139 | # allowing for limited RAM machines to complete a full reconstruction 140 | 141 | nSino_per_chunk = (sino_end - sino_start)/chunks 142 | print("Reconstructing [%d] slices from slice [%d] to [%d] in [%d] chunks of [%d] slices each" % ((sino_end - sino_start), sino_start, sino_end, chunks, nSino_per_chunk)) 143 | 144 | strt = 0 145 | for iChunk in range(0,chunks): 146 | print('\n -- chunk # %i' % (iChunk+1)) 147 | sino_chunk_start = sino_start + nSino_per_chunk*iChunk 148 | sino_chunk_end = sino_start + nSino_per_chunk*(iChunk+1) 149 | print('\n --------> [%i, %i]' % (sino_chunk_start, sino_chunk_end)) 150 | 151 | if sino_chunk_end > sino_end: 152 | break 153 | 154 | sino = (int(sino_chunk_start), int(sino_chunk_end)) 155 | 156 | # Reconstruct. 157 | rec = reconstruct(h5fname, sino, nframes, frame, nproj, binning, tv) 158 | 159 | # Write data as stack of TIFs. 160 | for time_frame in range(0,nframes): 161 | fname = os.path.dirname(os.path.abspath(h5fname)) + '/' + os.path.splitext(os.path.basename(h5fname))[0]+ '_rec_full/' + 'recon' + str(frame-nframes/2+time_frame) + '_' 162 | print("Reconstructions: ", fname) 163 | dxchange.write_tiff_stack(rec[time_frame], fname=fname, start=strt) 164 | strt += (sino[1] - sino[0])/pow(2,binning) 165 | 166 | def rec_subset(h5fname, nsino, nframes, frame, nproj, binning, tv): 167 | 168 | data_size = get_dx_dims(h5fname, 'data') 169 | 170 | # Select sinogram range to reconstruct. 171 | ssino = int(data_size[1] * nsino) 172 | sino_start = ssino-4*pow(2,binning) 173 | sino_end = ssino+4*pow(2,binning) 174 | 175 | print("Reconstructing [%d] slices from slice [%d] to [%d]" % ((sino_end - sino_start), sino_start, sino_end)) 176 | 177 | sino = (int(sino_start), int(sino_end)) 178 | # Reconstruct. 179 | rec = reconstruct(h5fname, sino, nframes, frame, nproj, binning, tv) 180 | 181 | # Write data as stack of TIFs. 182 | for time_frame in range(0,nframes): 183 | fname = os.path.dirname(os.path.abspath(h5fname)) + '/' + os.path.splitext(os.path.basename(h5fname))[0]+ '_rec_subset/' + 'recon' + str(frame-nframes/2+time_frame) + '_' 184 | print("Reconstructions: ", fname) 185 | dxchange.write_tiff_stack(rec[time_frame], fname=fname, start=sino_start) 186 | 187 | 188 | 189 | def rec_slice(h5fname, nsino, nframes, frame, nproj, binning, tv): 190 | 191 | data_size = get_dx_dims(h5fname, 'data') 192 | ssino = int(data_size[1] * nsino) 193 | 194 | # Select sinogram range to reconstruct 195 | sino = None 196 | 197 | start = ssino 198 | end = start + 1 199 | sino = (start, end) 200 | 201 | # Reconstruct 202 | rec = reconstruct(h5fname, sino, nframes, frame, nproj, binning, tv) 203 | # Write data as stack of TIFs. 204 | 205 | for time_frame in range(0,nframes): 206 | fname = os.path.dirname(os.path.abspath(h5fname)) + '/' + os.path.splitext(os.path.basename(h5fname))[0]+ '_rec_slice/' + 'recon' + str(frame-nframes/2+time_frame) + '_' 207 | dxchange.write_tiff_stack(rec[time_frame], fname=fname) 208 | print("Rec: ", fname) 209 | print("Slice: ", start) 210 | 211 | 212 | def main(arg): 213 | 214 | parser = argparse.ArgumentParser() 215 | parser.add_argument("fname", help="file name of a tomographic dataset") 216 | parser.add_argument("--type", nargs='?', type=str, default="slice", help="reconstruction type: full (default slice)") 217 | parser.add_argument("--nsino", nargs='?', type=restricted_float, default=0.5, help="location of the sinogram used by slice reconstruction (0 top, 1 bottom): 0.5 (default 0.5)") 218 | parser.add_argument("--tv", nargs='?', type=bool, default=False, help="Use Total variation reconstruction method (Gridrec otherwise): False (default False)") 219 | parser.add_argument("--binning", nargs='?', type=str, default=0, help="binning projections: 0 (default 0)") 220 | parser.add_argument("--frame", nargs='?', type=str, default=92, help="time frame with motion: 92 (default 92)") 221 | 222 | args = parser.parse_args() 223 | 224 | # Set path to the micro-CT data to reconstruct. 225 | fname = args.fname 226 | 227 | nsino = float(args.nsino) 228 | binning = int(args.binning) 229 | frame = int(args.frame) 230 | tv = args.tv 231 | 232 | print(tv) 233 | nframes = 8 #number of time frames for reconstruction 234 | nproj = 300 #number of projections per 180 degrees interval 235 | 236 | slice = False 237 | subset = False 238 | 239 | if args.type == "slice": 240 | slice = True 241 | if args.type == "subset": 242 | subset = True 243 | 244 | 245 | if os.path.isfile(fname): 246 | if slice: 247 | rec_slice(fname, nsino, nframes, frame, nproj, binning, tv) 248 | else: 249 | if subset: 250 | rec_subset(fname, nsino, nframes, frame, nproj, binning, tv) 251 | else: 252 | rec_full(fname, nframes, frame, nproj, binning, tv) 253 | else: 254 | print("File Name does not exist: ", fname) 255 | 256 | if __name__ == "__main__": 257 | main(sys.argv[1:]) 258 | 259 | 260 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | ======== 2 | TomoBank 3 | ======== 4 | 5 | 6 | .. image:: source/img/tomobank-logo.png 7 | :width: 320px 8 | :alt: project 9 | 10 | The X-ray Tomography Data Bank or TomoBank, provides a repository of experimental 11 | and simulated data sets with the aim to foster collaboration among computational scientists, 12 | beamline scientists and experimentalists, to accelerate the development of tomographic 13 | reconstruction and 3D visualization methods and to speed up their implementation in the various 14 | synchrotron facility data analysis software packages. 15 | 16 | If you use the tomoBank Toolbox for your research, we would appreciate it if you would refer to the following papers :cite:`decarlo:01`: 17 | 18 | De Carlo, Francesco, et al. "TomoBank: a tomographic data repository for computational x-ray science." Measurement Science and Technology 29.3 (2018): 034004. http://www.doi.org/10.1088/1361-6501/aa9c19 19 | 20 | From 2016 to 2021, TomoBank relied on `Petrel `_ :cite:`petrel:19`, a resource of the 21 | `Argonne Leadership Computing Facility `_, which is a U.S. Department of Energy (DOE) Office of Science User Facility located at Argonne National Laboratory and supported under Contract DE-AC02-06CH11357. 22 | 23 | From 2022 TomoBank relies on `Eagle `_, a resource of the 24 | `Argonne Leadership Computing Facility `_, which is a U.S. Department of Energy (DOE) Office of Science User Facility located at Argonne National Laboratory and supported under Contract DE-AC02-06CH11357. 25 | 26 | Features 27 | -------- 28 | 29 | * Tomographic datasets and phantom repository available via `Globus `_ 30 | 31 | 32 | * Python scripts to read and reconstruct all data sets 33 | 34 | Example: :: 35 | 36 | $ tomopy recon --file-name tomo_0001.h5 --rotation-axis 1024.0 37 | 38 | 39 | Contribute 40 | ---------- 41 | 42 | * Documentation: https://github.com/tomography/tomobank/tree/master/ 43 | * Issue Tracker: https://github.com/tomography/tomobank/issues 44 | 45 | Content 46 | ------- 47 | 48 | .. toctree:: 49 | :maxdepth: 1 50 | 51 | source/about 52 | source/usage 53 | source/data 54 | source/phantom 55 | source/volumes 56 | source/publish 57 | source/credits 58 | source/license 59 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | REM Command file for Sphinx documentation 4 | 5 | if "%SPHINXBUILD%" == "" ( 6 | set SPHINXBUILD=sphinx-build 7 | ) 8 | set BUILDDIR=_build 9 | set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . 10 | set I18NSPHINXOPTS=%SPHINXOPTS% . 11 | if NOT "%PAPER%" == "" ( 12 | set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% 13 | set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% 14 | ) 15 | 16 | if "%1" == "" goto help 17 | 18 | if "%1" == "help" ( 19 | :help 20 | echo.Please use `make ^` where ^ is one of 21 | echo. html to make standalone HTML files 22 | echo. dirhtml to make HTML files named index.html in directories 23 | echo. singlehtml to make a single large HTML file 24 | echo. pickle to make pickle files 25 | echo. json to make JSON files 26 | echo. htmlhelp to make HTML files and a HTML help project 27 | echo. qthelp to make HTML files and a qthelp project 28 | echo. devhelp to make HTML files and a Devhelp project 29 | echo. epub to make an epub 30 | echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter 31 | echo. text to make text files 32 | echo. man to make manual pages 33 | echo. texinfo to make Texinfo files 34 | echo. gettext to make PO message catalogs 35 | echo. changes to make an overview over all changed/added/deprecated items 36 | echo. xml to make Docutils-native XML files 37 | echo. pseudoxml to make pseudoxml-XML files for display purposes 38 | echo. linkcheck to check all external links for integrity 39 | echo. doctest to run all doctests embedded in the documentation if enabled 40 | echo. coverage to run coverage check of the documentation if enabled 41 | goto end 42 | ) 43 | 44 | if "%1" == "clean" ( 45 | for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i 46 | del /q /s %BUILDDIR%\* 47 | goto end 48 | ) 49 | 50 | 51 | REM Check if sphinx-build is available and fallback to Python version if any 52 | %SPHINXBUILD% 2> nul 53 | if errorlevel 9009 goto sphinx_python 54 | goto sphinx_ok 55 | 56 | :sphinx_python 57 | 58 | set SPHINXBUILD=python -m sphinx.__init__ 59 | %SPHINXBUILD% 2> nul 60 | if errorlevel 9009 ( 61 | echo. 62 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 63 | echo.installed, then set the SPHINXBUILD environment variable to point 64 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 65 | echo.may add the Sphinx directory to PATH. 66 | echo. 67 | echo.If you don't have Sphinx installed, grab it from 68 | echo.http://sphinx-doc.org/ 69 | exit /b 1 70 | ) 71 | 72 | :sphinx_ok 73 | 74 | 75 | if "%1" == "html" ( 76 | %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html 77 | if errorlevel 1 exit /b 1 78 | echo. 79 | echo.Build finished. The HTML pages are in %BUILDDIR%/html. 80 | goto end 81 | ) 82 | 83 | if "%1" == "dirhtml" ( 84 | %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml 85 | if errorlevel 1 exit /b 1 86 | echo. 87 | echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. 88 | goto end 89 | ) 90 | 91 | if "%1" == "singlehtml" ( 92 | %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml 93 | if errorlevel 1 exit /b 1 94 | echo. 95 | echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. 96 | goto end 97 | ) 98 | 99 | if "%1" == "pickle" ( 100 | %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle 101 | if errorlevel 1 exit /b 1 102 | echo. 103 | echo.Build finished; now you can process the pickle files. 104 | goto end 105 | ) 106 | 107 | if "%1" == "json" ( 108 | %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json 109 | if errorlevel 1 exit /b 1 110 | echo. 111 | echo.Build finished; now you can process the JSON files. 112 | goto end 113 | ) 114 | 115 | if "%1" == "htmlhelp" ( 116 | %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp 117 | if errorlevel 1 exit /b 1 118 | echo. 119 | echo.Build finished; now you can run HTML Help Workshop with the ^ 120 | .hhp project file in %BUILDDIR%/htmlhelp. 121 | goto end 122 | ) 123 | 124 | if "%1" == "qthelp" ( 125 | %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp 126 | if errorlevel 1 exit /b 1 127 | echo. 128 | echo.Build finished; now you can run "qcollectiongenerator" with the ^ 129 | .qhcp project file in %BUILDDIR%/qthelp, like this: 130 | echo.^> qcollectiongenerator %BUILDDIR%\qthelp\dmagic.qhcp 131 | echo.To view the help file: 132 | echo.^> assistant -collectionFile %BUILDDIR%\qthelp\dmagic.ghc 133 | goto end 134 | ) 135 | 136 | if "%1" == "devhelp" ( 137 | %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp 138 | if errorlevel 1 exit /b 1 139 | echo. 140 | echo.Build finished. 141 | goto end 142 | ) 143 | 144 | if "%1" == "epub" ( 145 | %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub 146 | if errorlevel 1 exit /b 1 147 | echo. 148 | echo.Build finished. The epub file is in %BUILDDIR%/epub. 149 | goto end 150 | ) 151 | 152 | if "%1" == "latex" ( 153 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 154 | if errorlevel 1 exit /b 1 155 | echo. 156 | echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. 157 | goto end 158 | ) 159 | 160 | if "%1" == "latexpdf" ( 161 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 162 | cd %BUILDDIR%/latex 163 | make all-pdf 164 | cd %~dp0 165 | echo. 166 | echo.Build finished; the PDF files are in %BUILDDIR%/latex. 167 | goto end 168 | ) 169 | 170 | if "%1" == "latexpdfja" ( 171 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 172 | cd %BUILDDIR%/latex 173 | make all-pdf-ja 174 | cd %~dp0 175 | echo. 176 | echo.Build finished; the PDF files are in %BUILDDIR%/latex. 177 | goto end 178 | ) 179 | 180 | if "%1" == "text" ( 181 | %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text 182 | if errorlevel 1 exit /b 1 183 | echo. 184 | echo.Build finished. The text files are in %BUILDDIR%/text. 185 | goto end 186 | ) 187 | 188 | if "%1" == "man" ( 189 | %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man 190 | if errorlevel 1 exit /b 1 191 | echo. 192 | echo.Build finished. The manual pages are in %BUILDDIR%/man. 193 | goto end 194 | ) 195 | 196 | if "%1" == "texinfo" ( 197 | %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo 198 | if errorlevel 1 exit /b 1 199 | echo. 200 | echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. 201 | goto end 202 | ) 203 | 204 | if "%1" == "gettext" ( 205 | %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale 206 | if errorlevel 1 exit /b 1 207 | echo. 208 | echo.Build finished. The message catalogs are in %BUILDDIR%/locale. 209 | goto end 210 | ) 211 | 212 | if "%1" == "changes" ( 213 | %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes 214 | if errorlevel 1 exit /b 1 215 | echo. 216 | echo.The overview file is in %BUILDDIR%/changes. 217 | goto end 218 | ) 219 | 220 | if "%1" == "linkcheck" ( 221 | %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck 222 | if errorlevel 1 exit /b 1 223 | echo. 224 | echo.Link check complete; look for any errors in the above output ^ 225 | or in %BUILDDIR%/linkcheck/output.txt. 226 | goto end 227 | ) 228 | 229 | if "%1" == "doctest" ( 230 | %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest 231 | if errorlevel 1 exit /b 1 232 | echo. 233 | echo.Testing of doctests in the sources finished, look at the ^ 234 | results in %BUILDDIR%/doctest/output.txt. 235 | goto end 236 | ) 237 | 238 | if "%1" == "coverage" ( 239 | %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage 240 | if errorlevel 1 exit /b 1 241 | echo. 242 | echo.Testing of coverage in the sources finished, look at the ^ 243 | results in %BUILDDIR%/coverage/python.txt. 244 | goto end 245 | ) 246 | 247 | if "%1" == "xml" ( 248 | %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml 249 | if errorlevel 1 exit /b 1 250 | echo. 251 | echo.Build finished. The XML files are in %BUILDDIR%/xml. 252 | goto end 253 | ) 254 | 255 | if "%1" == "pseudoxml" ( 256 | %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml 257 | if errorlevel 1 exit /b 1 258 | echo. 259 | echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. 260 | goto end 261 | ) 262 | 263 | :end 264 | -------------------------------------------------------------------------------- /docs/source/about.rst: -------------------------------------------------------------------------------- 1 | ===== 2 | About 3 | ===== 4 | 5 | `TomoBank `_ :cite:`decarlo:01` is a repository 6 | of tomographic datasets and phantoms. TomoBank provides also python scripts to read and perform 7 | a basic tomographic reconstruction using tomoPy :cite:`Gursoy:14a`. 8 | 9 | From 2016 to 2021, TomoBank relied on Petrel :cite:`petrel:19`, a resource of the 10 | `Argonne Leadership Computing Facility `_, which is a U.S. Department of Energy (DOE) Office of Science User Facility located at Argonne National Laboratory and supported under Contract DE-AC02-06CH11357. 11 | 12 | From 2022 TomoBank relies on `Eagle `_, a resource of the 13 | `Argonne Leadership Computing Facility `_, which is a U.S. Department of Energy (DOE) Office of Science User Facility located at Argonne National Laboratory and supported under Contract DE-AC02-06CH11357. 14 | 15 | .. contents:: Contents: 16 | :local: 17 | 18 | -------------------------------------------------------------------------------- /docs/source/bibtex/cite.bib: -------------------------------------------------------------------------------- 1 | @article{decarlo:01, 2 | author={Francesco De Carlo and Doğa Gürsoy and Daniel J Ching and K Joost Batenburg and Wolfgang Ludwig and Lucia Mancini and Federica Marone and Rajmund Mokso and Daniël M Pelt and Jan Sijbers and Mark Rivers}, 3 | title={TomoBank: a tomographic data repository for computational x-ray science}, 4 | journal={Measurement Science and Technology}, 5 | volume={29}, 6 | number={3}, 7 | pages={034004}, 8 | url={http://stacks.iop.org/0957-0233/29/i=3/a=034004}, 9 | year={2018}, 10 | abstract={There is a widening gap between the fast advancement of computational methods for tomographic reconstruction and their successful implementation in production software at various synchrotron facilities. This is due in part to the lack of readily available instrument datasets and phantoms representative of real materials for validation and comparison of new numerical methods. Recent advancements in detector technology have made sub-second and multi-energy tomographic data collection possible (Gibbs et al 2015 Sci. Rep . 5 11824), but have also increased the demand to develop new reconstruction methods able to handle in situ (Pelt and Batenburg 2013 IEEE Trans. Image Process . 22 5238–51) and dynamic systems (Mohan et al 2015 IEEE Trans. Comput. Imaging 1 96–111) that can be quickly incorporated in beamline production software (Gürsoy et al 2014 J. Synchrotron Radiat . 21 1188–93). The x-ray tomography data bank, tomoBank, provides a repository of experimental and simulated datasets with the aim to foster collaboration among computational scientists, beamline scientists, and experimentalists and to accelerate the development and implementation of tomographic reconstruction methods for synchrotron facility production software by providing easy access to challenging datasets and their descriptors.} 11 | } 12 | 13 | @article{gursoy:04, 14 | author = "G{\"{u}}rsoy, Do{\v{g}}a and De Carlo, Francesco and Xiao, Xianghui and Jacobsen, Chris", 15 | title = "{TomoPy: a framework for the analysis of synchrotron~tomographic data}", 16 | journal = "Journal of Synchrotron Radiation", 17 | year = "2014", 18 | volume = "21", 19 | number = "5", 20 | pages = "1188--1193", 21 | month = "Sep", 22 | doi = {10.1107/S1600577514013939}, 23 | url = {https://doi.org/10.1107/S1600577514013939} 24 | } 25 | 26 | @article{DeCarlo:14, 27 | author = "De Carlo, Francesco and G{\"{u}}rsoy, Do{\v{g}}a and Marone, Federica and Rivers, Mark and Parkinson, Dilworth Y. and Khan, Faisal and Schwarz, Nicholas and Vine, David J. and Vogt, Stefan and Gleber, Sophie-Charlotte and Narayanan, Suresh and Newville, Matt and Lanzirotti, Tony and Sun, Yue and Hong, Young Pyo and Jacobsen, Chris", 28 | title = "{Scientific data exchange: a schema for HDF5-based storage of raw and analyzed data}", 29 | journal = "Journal of Synchrotron Radiation", 30 | year = "2014", 31 | volume = "21", 32 | number = "6", 33 | pages = "1224--1230", 34 | month = "Nov", 35 | doi = {10.1107/S160057751401604X}, 36 | url = {https://doi.org/10.1107/S160057751401604X}, 37 | abstract = {Data Exchange is a simple data model designed to interface, or `exchange', data among different instruments, and to enable sharing of data analysis tools. Data Exchange focuses on technique rather than instrument descriptions, and on provenance tracking of analysis steps and results. In this paper the successful application of the Data Exchange model to a variety of X-ray techniques, including tomography, fluorescence spectroscopy, fluorescence tomography and photon correlation spectroscopy, is described.}, 38 | keywords = {data storage, provenance, HDF5}, 39 | } -------------------------------------------------------------------------------- /docs/source/credits.rst: -------------------------------------------------------------------------------- 1 | ======= 2 | Credits 3 | ======= 4 | 5 | Citations 6 | ========= 7 | 8 | Cite :cite:`decarlo:01` if you use TomoBank 9 | 10 | Cite :cite:`DeCarlo:14` if using Data Exchange 11 | 12 | Cite :cite:`gursoy:04` if using tomoPy 13 | 14 | 15 | .. bibliography:: bibtex/cite.bib 16 | :style: plain 17 | :labelprefix: A 18 | 19 | References 20 | ========== 21 | 22 | .. bibliography:: bibtex/ref.bib 23 | :style: plain 24 | :labelprefix: B 25 | :all: 26 | -------------------------------------------------------------------------------- /docs/source/data.rst: -------------------------------------------------------------------------------- 1 | Datasets 2 | ======== 3 | 4 | All tomobank data sets are distributed in the native file format or in data exchange :cite:`decarlo:02`. To 5 | perform a basic reconstruction using tomoPy :cite:`Gursoy:14a` use: :: 6 | 7 | $ tomopy recon --file-name tomo_0001.h5 --rotation-axis 1024.0 8 | 9 | 10 | .. toctree:: 11 | 12 | data/docs.data.dynamic 13 | data/docs.data.insitu 14 | data/docs.data.kblt 15 | data/docs.data.laminography 16 | data/docs.data.localarea 17 | data/docs.data.lorentz 18 | data/docs.data.nano 19 | data/docs.data.phasecontrast 20 | data/docs.data.porosity 21 | data/docs.data.radio 22 | data/docs.data.rings 23 | data/docs.data.roundrobin 24 | data/docs.data.spheres 25 | data/docs.data.tomosaic 26 | data/docs.data.XANES 27 | -------------------------------------------------------------------------------- /docs/source/data/docs.data.XANES.rst: -------------------------------------------------------------------------------- 1 | XANES 2 | ----- 3 | 4 | SSRL XANES tomography 5 | ~~~~~~~~~~~~~~~~~~~~~ 6 | 7 | This spectro-tomography dataset contains 67 tomograms of an NMC battery cathode particle at different x-ray energies. For each tomogram, 180 projection images were acquired at different angles. The x-ray energy points were selected such that we will be able to reconstruct the elemental maps of Mn, Co, and Ni (6 energies, one above and one below the respective K-edges of Mn, Co, and Ni), and a XANES scan across the Ni K-edge (for valence state distribution). The idea is to correlate the compositional heterogeneity with the redox heterogeneity. To read the data use :download:`read_xrm_script.py <../../demo/read_xrm_script.py>` python script. 8 | 9 | There are two independent image alignment tasks: 1) we need to correct the image jitter in a tomography dataset and 2) we need to register the tomograms at different x-ray energies. 10 | 11 | For task 1, the SSRL team uses an iterative alignment protocol described in :cite:`Yu:fv5093`, which works fine except that this process is very slow. 12 | 13 | For task 2, the SSRL team use TXM-Wizard to register the projection images in the same sample orientation angle by angle. Images at different x-ray energies are of different magnification and contrast. SSRL’s approach is essentially calling the function described in section 3 of :cite:`Liu:hf5192` multiple times. An improved approach with better quality control and assessment is highly desirable. Note that the pixel size is nearly proportional to the x-ray energy. 14 | 15 | .. |00089| image:: ../img/tomo_00089.png 16 | :width: 20pt 17 | :height: 20pt 18 | 19 | .. _tomo_00089: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00089%2F 20 | 21 | 22 | 23 | 24 | +-----------------------------------------+----------------------------------------------------+ 25 | | tomo_ID | 00089 | 26 | +=========================================+====================================================+ 27 | | Image preview | |00089| | 28 | +-----------------------------------------+----------------------------------------------------+ 29 | | Download | tomo_00089_ | 30 | +-----------------------------------------+----------------------------------------------------+ 31 | | Instrument | SSRL nano-CT | 32 | +-----------------------------------------+----------------------------------------------------+ 33 | | Sample name | Heterogeneous_NMC | 34 | +-----------------------------------------+----------------------------------------------------+ 35 | | X-ray energy | 6534, 6558, 7704, 7728, 8178, 8570 eV | 36 | +-----------------------------------------+----------------------------------------------------+ 37 | | Pixel size | 33.4 nm at 8670 eV | 38 | +-----------------------------------------+----------------------------------------------------+ 39 | -------------------------------------------------------------------------------- /docs/source/data/docs.data.laminography.rst: -------------------------------------------------------------------------------- 1 | Laminography 2 | ------------ 3 | 4 | Laminography is well suited for flat samples. In this configuration the rotation axis is tilted with respect to the incident x-ray beam: 5 | 6 | 7 | .. image:: ../img/tomo_00100_1.png 8 | :width: 128pt 9 | 10 | .. image:: ../img/tomo_00100_2.png 11 | :width: 128pt 12 | 13 | 14 | 15 | 16 | .. _tomo_00100: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00100%2F 17 | 18 | 19 | .. |00100| image:: ../img/tomo_00100_3.png 20 | :width: 20pt 21 | 22 | 23 | Camera caffè 24 | ~~~~~~~~~~~~ 25 | 26 | 27 | The Camera caffè data set has been created using a leaf from a plant of `Epipremnum aureum `_ also known as Devil’s Ivy. The specific plant used to live at the University of Trieste, Italy in the so called "Camera Caffè" between 1987 and 1993 where a group of students (Sara, Silvano, Claudio, Federico and Francesco) enjoyed their daily cup of coffee. In 1994 the plant traveled to the Netherland, then Germany in 1995 and since 1998 is at the Advanced Photon Source at Argonne National Laboratory next to the sector 32 coffee machine. Because this plant always lived near a coffee maker we decided to dedicate the data set to the "Camera caffè" to remember and celebrate the coffee discussions with friends and colleagues this plant enjoyed through the years. 28 | 29 | 30 | .. image:: ../img/tomo_00100_6.png 31 | :width: 512pt 32 | 33 | 34 | .. image:: ../img/tomo_00100_4.png 35 | :width: 512pt 36 | 37 | 38 | The leaf was installed on the laminography set up of beamline 2-BM of the Advanced Photon Source: 39 | 40 | .. image:: ../img/tomo_00100_3.png 41 | :width: 256pt 42 | 43 | 44 | 45 | A laminigraphy reconstruction using `tomocupy `_ produces the following result: 46 | 47 | 48 | .. image:: ../img/tomo_00100_5.png 49 | :width: 256pt 50 | 51 | +---------------------------------+------------------------------------+ 52 | | tomo_ID | 00100 | 53 | +=================================+====================================+ 54 | | Image preview | |00100| | 55 | +---------------------------------+------------------------------------+ 56 | | Download | tomo_00100_ | 57 | +---------------------------------+------------------------------------+ 58 | | Instrument | APS 2-BM-B | 59 | +---------------------------------+------------------------------------+ 60 | | Energy | 30.0 keV (Pink) | 61 | +---------------------------------+------------------------------------+ 62 | | Monochromator | - | 63 | +---------------------------------+------------------------------------+ 64 | | Scan Range | 360 degree | 65 | +---------------------------------+------------------------------------+ 66 | | Number of Projections | 3000 | 67 | +---------------------------------+------------------------------------+ 68 | | White Fields | 20 before | 69 | +---------------------------------+------------------------------------+ 70 | | Dark Fields | 20 before | 71 | +---------------------------------+------------------------------------+ 72 | | Mode | fly-scan | 73 | +---------------------------------+------------------------------------+ 74 | | Rotation Speed | 2.4 deg/s | 75 | +---------------------------------+------------------------------------+ 76 | | Sample Detector Distance | 120 mm | 77 | +---------------------------------+------------------------------------+ 78 | | Attenuator | mm C + 6mm Glass | 79 | +---------------------------------+------------------------------------+ 80 | | Detector Name | Oryx 31.0 MP Mono 10GigE | 81 | +---------------------------------+------------------------------------+ 82 | | Exposure Time | 0.05 s | 83 | +---------------------------------+------------------------------------+ 84 | | Pixel Size | 1.38 µm | 85 | +---------------------------------+------------------------------------+ 86 | | Detector shutter mode | global | 87 | +---------------------------------+------------------------------------+ 88 | | Detector Dimension x | 3232 | 89 | +---------------------------------+------------------------------------+ 90 | | Detector Dimension y | 1536 | 91 | +---------------------------------+------------------------------------+ 92 | | Objective Magnification | Mitutoyo 5x | 93 | +---------------------------------+------------------------------------+ 94 | | Scintillator | GGG:Eu 23 µm | 95 | +---------------------------------+------------------------------------+ 96 | 97 | 98 | Brain slab 99 | ~~~~~~~~~~ 100 | 101 | Brain slab is a laminography dataset presented at :cite:`nikitin:2024`. This is referred in the paper as brain_x2y1.h5. 102 | 103 | .. image:: ../img/tomo_00101_1.png 104 | :width: 256pt 105 | 106 | .. _tomo_00101: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00101%2F 107 | 108 | 109 | .. |00101| image:: ../img/tomo_00101_1.png 110 | :width: 20pt 111 | 112 | +---------------------------------+------------------------------------+ 113 | | tomo_ID | 00101 | 114 | +=================================+====================================+ 115 | | Image preview | |00101| | 116 | +---------------------------------+------------------------------------+ 117 | | Download | tomo_00101_ | 118 | +---------------------------------+------------------------------------+ 119 | | Instrument | APS 2-BM-B | 120 | +---------------------------------+------------------------------------+ 121 | | Energy | 30.0 keV (Pink) | 122 | +---------------------------------+------------------------------------+ 123 | | Monochromator | - | 124 | +---------------------------------+------------------------------------+ 125 | | Scan Range | 360 degree | 126 | +---------------------------------+------------------------------------+ 127 | | Number of Projections | 3000 | 128 | +---------------------------------+------------------------------------+ 129 | | White Fields | 20 before | 130 | +---------------------------------+------------------------------------+ 131 | | Dark Fields | 20 before | 132 | +---------------------------------+------------------------------------+ 133 | | Mode | fly-scan | 134 | +---------------------------------+------------------------------------+ 135 | | Rotation Speed | 2.4 deg/s | 136 | +---------------------------------+------------------------------------+ 137 | | Sample Detector Distance | 200 mm | 138 | +---------------------------------+------------------------------------+ 139 | | Attenuator | mm C + 6mm Glass | 140 | +---------------------------------+------------------------------------+ 141 | | Detector Name | Oryx 31.0 MP Mono 10GigE | 142 | +---------------------------------+------------------------------------+ 143 | | Exposure Time | 0.05 s | 144 | +---------------------------------+------------------------------------+ 145 | | Pixel Size | 0.92 µm | 146 | +---------------------------------+------------------------------------+ 147 | | Detector shutter mode | global | 148 | +---------------------------------+------------------------------------+ 149 | | Detector Dimension x | 3232 | 150 | +---------------------------------+------------------------------------+ 151 | | Detector Dimension y | 2256 | 152 | +---------------------------------+------------------------------------+ 153 | | Objective Magnification | Mitutoyo 7.5x | 154 | +---------------------------------+------------------------------------+ 155 | | Scintillator | GGG:Eu 23 µm | 156 | +---------------------------------+------------------------------------+ 157 | -------------------------------------------------------------------------------- /docs/source/data/docs.data.lorentz.rst: -------------------------------------------------------------------------------- 1 | Lorentz 2 | ------- 3 | 4 | 5 | 6 | 7 | The Lorenz data set is part of a demo data collection perfomed at the 8 | `Lorentz Workshop `_ 9 | 10 | 11 | .. |00088| image:: ../img/tomo_00088.png 12 | :width: 20pt 13 | :height: 20pt 14 | 15 | .. _tomo_00088: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Ftomo_00088%2F 16 | 17 | 18 | +-----------------------------------------+----------------------------+ 19 | | tomo_ID | 00088 | 20 | +=========================================+============================+ 21 | | Image preview | |00088| | 22 | +-----------------------------------------+----------------------------+ 23 | | Download | tomo_00088_ | 24 | +-----------------------------------------+----------------------------+ 25 | | Instrument | APS 2-BM-BM | 26 | +-----------------------------------------+----------------------------+ 27 | | Sample name | wood stick | 28 | +-----------------------------------------+----------------------------+ 29 | | X-ray energy | 27.4 keV | 30 | +-----------------------------------------+----------------------------+ 31 | | Sample-to-detector distance | 50 cm | 32 | +-----------------------------------------+----------------------------+ 33 | | Scan Range | 180 degree | 34 | +-----------------------------------------+----------------------------+ 35 | | Number of Projections | 1500 | 36 | +-----------------------------------------+----------------------------+ 37 | | White Fields | 10 | 38 | +-----------------------------------------+----------------------------+ 39 | | Dark Fields | 10 | 40 | +-----------------------------------------+----------------------------+ 41 | | Pixel size | 1.725 µm | 42 | +-----------------------------------------+----------------------------+ 43 | | FOV size | 2448 x 1080 | 44 | +-----------------------------------------+----------------------------+ 45 | | Rotation axis location | 1226.0 | 46 | +-----------------------------------------+----------------------------+ 47 | 48 | To load the data sets and perform a basic reconstruction using `tomopy `_ 49 | 50 | :: 51 | 52 | tomopy recon --file-name tomo_00088.h5 --rotation-axis 1226.0 53 | 54 | -------------------------------------------------------------------------------- /docs/source/data/docs.data.porosity.rst: -------------------------------------------------------------------------------- 1 | Porosity 2 | -------- 3 | 4 | N2-1, Ar-1, Ar-2, and Ar-3 are CT datasets of a few different gas atomized 17-4 stainless powders. They have various levels of entrapped gas porosity which were intentionally introduced during atomization. 5 | 6 | .. image:: ../img/tomo_00090.png 7 | :width: 512pt 8 | :height: 512pt 9 | 10 | Detailed information area available at :cite:`Wu:2021`. 11 | 12 | +---------------------------------+------------------------------------+ 13 | | Instrument | APS 2-BM-A fast tomo | 14 | +---------------------------------+------------------------------------+ 15 | | Energy | pink beam | 16 | +---------------------------------+------------------------------------+ 17 | | Scan Range | 180 degree | 18 | +---------------------------------+------------------------------------+ 19 | | Number of Projections | 1500 | 20 | +---------------------------------+------------------------------------+ 21 | | White Fields | 10 before | 22 | +---------------------------------+------------------------------------+ 23 | | Dark Fields | 10 before | 24 | +---------------------------------+------------------------------------+ 25 | | Mode | fly-scan | 26 | +---------------------------------+------------------------------------+ 27 | | Detector Name | FLIR | 28 | +---------------------------------+------------------------------------+ 29 | | Exposure Time | 0.024 s | 30 | +---------------------------------+------------------------------------+ 31 | | Pixel Size | 0.69 µm | 32 | +---------------------------------+------------------------------------+ 33 | | Detector shutter mode | global | 34 | +---------------------------------+------------------------------------+ 35 | | Detector Dimension (mm) | 1.55 | 36 | +---------------------------------+------------------------------------+ 37 | | Detector Dimension (mm) | 1.41 | 38 | +---------------------------------+------------------------------------+ 39 | | Objective Magnification | Mitutoyo 5x | 40 | +---------------------------------+------------------------------------+ 41 | | Scintillator | LuAG 10 µm | 42 | +---------------------------------+------------------------------------+ 43 | 44 | 45 | To load the data sets and perform a basic reconstruction using `tomopy `_ :: 46 | 47 | tomopy recon --file-name tomo_00090.h5 48 | tomopy recon --file-name tomo_00091.h5 49 | tomopy recon --file-name tomo_00092.h5 50 | tomopy recon --file-name tomo_00093.h5 51 | 52 | 53 | 54 | .. _tomo_00090: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00090_to_00093%2F 55 | .. _tomo_00091: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00090_to_00093%2F 56 | .. _tomo_00092: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00090_to_00093%2F 57 | .. _tomo_00093: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00090_to_00093%2F 58 | 59 | 60 | 61 | +-------------+-----------------------------------------+-----------------------------------------+ 62 | | Tomo ID | Original File Name | Sample Name used in :cite:`Wu:2021` | 63 | +-------------+-----------------------------------------+-----------------------------------------+ 64 | | tomo_00090_ | 070_carpenter_174ph_powder_27347 | Ar-3 | 65 | +-------------+-----------------------------------------+-----------------------------------------+ 66 | | tomo_00091_ | 072_carpenter_174ph_powder_017175 | Ar-2 | 67 | +-------------+-----------------------------------------+-----------------------------------------+ 68 | | tomo_00092_ | 073_carpenter_174ph_powder_Y5863B | N2-1 | 69 | +-------------+-----------------------------------------+-----------------------------------------+ 70 | | tomo_00093_ | 074_carpenter_174ph_powder_017174 | Ar-1 | 71 | +-------------+-----------------------------------------+-----------------------------------------+ 72 | 73 | -------------------------------------------------------------------------------- /docs/source/data/docs.data.radio.rst: -------------------------------------------------------------------------------- 1 | Radiography 2 | ----------- 3 | 4 | XradFusion 5 | ~~~~~~~~~~ 6 | 7 | XradFusion are a set of radiography data sets used in :cite:`tang:2024`. 8 | 9 | Each dataset consists in a series of high speed radiagraphy images at high and low resolution: 10 | 11 | Add here a description of data set1: 12 | 13 | +-----------------------------------------+----------------------------+ 14 | | rad_ID | 00001 | 15 | +=========================================+============================+ 16 | | Image preview | |r00001l| - |r00001h| | 17 | +-----------------------------------------+----------------------------+ 18 | | Download | rad_00001_ | 19 | +-----------------------------------------+----------------------------+ 20 | | Instrument | | 21 | +-----------------------------------------+----------------------------+ 22 | | Sample name | | 23 | +-----------------------------------------+----------------------------+ 24 | | X-ray energy | | 25 | +-----------------------------------------+----------------------------+ 26 | | Low res | | 27 | +-----------------------------------------+----------------------------+ 28 | | --------- Image size | 256 x 100 pixels | 29 | +-----------------------------------------+----------------------------+ 30 | | --------- Number of images | 450 | 31 | +-----------------------------------------+----------------------------+ 32 | | --------- Pixel size | 8 µm | 33 | +-----------------------------------------+----------------------------+ 34 | | --------- Frame rate | 50000 fps | 35 | +-----------------------------------------+----------------------------+ 36 | | High res | | 37 | +-----------------------------------------+----------------------------+ 38 | | --------- Image size | 1024 x 400 pixels | 39 | +-----------------------------------------+----------------------------+ 40 | | --------- Number of images | 450 | 41 | +-----------------------------------------+----------------------------+ 42 | | --------- Pixel size | 2 µm | 43 | +-----------------------------------------+----------------------------+ 44 | | --------- Frame rate(*) | 50000 fps | 45 | +-----------------------------------------+----------------------------+ 46 | 47 | Add here a description of data set2: 48 | 49 | +-----------------------------------------+----------------------------+ 50 | | rad_ID | 00002 | 51 | +=========================================+============================+ 52 | | Image preview | |r00002l| - |r00002h| | 53 | +-----------------------------------------+----------------------------+ 54 | | Download | rad_00002_ | 55 | +-----------------------------------------+----------------------------+ 56 | | Instrument | | 57 | +-----------------------------------------+----------------------------+ 58 | | Sample name | | 59 | +-----------------------------------------+----------------------------+ 60 | | X-ray energy | | 61 | +-----------------------------------------+----------------------------+ 62 | | Low res | | 63 | +-----------------------------------------+----------------------------+ 64 | | --------- Image size | 256 x 256 pixels | 65 | +-----------------------------------------+----------------------------+ 66 | | --------- Number of images | 450 | 67 | +-----------------------------------------+----------------------------+ 68 | | --------- Pixel size | 8 µm | 69 | +-----------------------------------------+----------------------------+ 70 | | --------- Frame rate | 20000 fps | 71 | +-----------------------------------------+----------------------------+ 72 | | High res | | 73 | +-----------------------------------------+----------------------------+ 74 | | --------- Image size | 1024 x 1024 pixels | 75 | +-----------------------------------------+----------------------------+ 76 | | --------- Number of images | 450 | 77 | +-----------------------------------------+----------------------------+ 78 | | --------- Pixel size | 2 µm | 79 | +-----------------------------------------+----------------------------+ 80 | | --------- Frame rate(*) | 20000 fps | 81 | +-----------------------------------------+----------------------------+ 82 | 83 | (*) lower frame rate were obtained by time downsampling. 84 | 85 | .. _rad_00001: https://g-a0400.fd635.8443.data.globus.org/rad_00001/rad_00001.zip 86 | 87 | .. |r00001l| image:: ../img/rad_00001l.png 88 | :width: 20pt 89 | :height: 20pt 90 | 91 | .. |r00001h| image:: ../img/rad_00001h.png 92 | :width: 20pt 93 | :height: 20pt 94 | 95 | .. _rad_00002: https://g-a0400.fd635.8443.data.globus.org/rad_00002/rad_00002.zip 96 | 97 | .. |r00002l| image:: ../img/rad_00002l.png 98 | :width: 20pt 99 | :height: 20pt 100 | 101 | .. |r00002h| image:: ../img/rad_00002h.png 102 | :width: 20pt 103 | :height: 20pt -------------------------------------------------------------------------------- /docs/source/data/docs.data.roundrobin.rst: -------------------------------------------------------------------------------- 1 | Round-Robin 2 | ----------- 3 | 4 | The Tomography Round-Robin data sets :cite:`round-robin:17` consist of two shale samples obtained from the North Sea (sample N1) and the Upper Barnett Formation in Texas (sample B1) :cite:`Kanitpanyacharoen:13`. Shale is a challenging material because of its multiphase composition, small grain size, low but significant amount of porosity, as well as strong shape- and lattice-preferred orientation. The goals of this round-robin project were to (i) characterize microstructures and porosity on the micrometer scale, (ii) compare results measured at three synchrotron facilities, and (iii) identify optimal experimental conditions of high-resolution tomography (microCT) for fine-grained materials. microCT data of these shales were acquired under similar conditions at the Advanced Photon Source (APS) of Argonne National Laboratory, USA, at the Swiss Light Source (SLS) of the Paul Scherrer Institut, Switzerland and at the Advanced Light Source (ALS) of Lawrence Berkeley National Laboratory, USA with the goal to compare the data quality and determine phase proportions and microstructures differences from the same samples as measured at the three facilities. All instruments used a 10× objective lens with an effective pixel size of ~ 0.7 µm. The Round-Robin Data Sets consists of one measurement of sample N1 and one measurement of sample B1 taken at all three facilities for a total of 6 tomographic data sets. 5 | 6 | 7 | To load the data sets and perform a basic reconstruction using tomoPy :cite:`Gursoy:14a` use the 8 | :download:`tomopy_rec.py <../../demo/tomopy_rec.py>` python script. 9 | 10 | Example: :: 11 | 12 | tomopy recon --file-name /tomobank/tomo_00001.h5 --rotation-axis 1024 13 | 14 | 15 | .. |d00001| image:: ../img/tomo_00001.png 16 | :width: 20pt 17 | :height: 20pt 18 | .. |d00002| image:: ../img/tomo_00002.png 19 | :width: 20pt 20 | :height: 20pt 21 | .. |d00003| image:: ../img/tomo_00003.png 22 | :width: 20pt 23 | :height: 20pt 24 | .. |d00004| image:: ../img/tomo_00004.png 25 | :width: 20pt 26 | :height: 20pt 27 | 28 | 29 | .. _tomo_00001: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00001_to_00006%2F 30 | .. _tomo_00002: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00001_to_00006%2F 31 | .. _tomo_00003: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00001_to_00006%2F 32 | .. _tomo_00004: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00001_to_00006%2F 33 | .. _tomo_00005: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00001_to_00006%2F 34 | .. _tomo_00006: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Ftomo_00001_to_00006%2F 35 | 36 | 37 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 38 | | Tomo ID | Facility | Sample | Scan Name | Image | Axis | 39 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 40 | | tomo_00001_ | APS | B1 | hornby | |d00001| | 1024 | 41 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 42 | | tomo_00002_ | APS | N1 | blakely | |d00002| | 1029 | 43 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 44 | | tomo_00003_ | SLS | B1 | hornby | |d00003| | 1011 | 45 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 46 | | tomo_00004_ | SLS | N1 | blakely | |d00004| | 1048 | 47 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 48 | | tomo_00005_ | ALS | B1 | hornby | | | 49 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 50 | | tomo_00006_ | ALS | N1 | blakely | | | 51 | +---------------+----------------+------------------+--------------+-----------+-------------------------+ 52 | 53 | -------------------------------------------------------------------------------- /docs/source/data/docs.data.spheres.rst: -------------------------------------------------------------------------------- 1 | Spheres 2 | ------- 3 | 4 | These sphere data sets :cite:`singh:17` contains samples with varied volume fractions of 5 | borosilicate glass spheres encased in a polypropylene matrix :cite:`stannard_01:17`. 6 | The sphere diameter is a gaussian distribution ranging from 38-45 µm. 7 | The samples were scanned at both 25 mm and 60 mm sample to detector distance with 8 | the experimental conditions reported in the table below: 9 | 10 | 11 | +---------------------------------+------------------------------------+ 12 | | Instrument | APS 2-BM-A fast tomo | 13 | +---------------------------------+------------------------------------+ 14 | | Energy | 27.4 keV | 15 | +---------------------------------+------------------------------------+ 16 | | Monochromator | multi-layer | 17 | +---------------------------------+------------------------------------+ 18 | | Scan Range | 180 degree | 19 | +---------------------------------+------------------------------------+ 20 | | Number of Projections | 1500 | 21 | +---------------------------------+------------------------------------+ 22 | | White Fields | 10 before | 23 | +---------------------------------+------------------------------------+ 24 | | Dark Fields | 10 before | 25 | +---------------------------------+------------------------------------+ 26 | | Mode | fly-scan | 27 | +---------------------------------+------------------------------------+ 28 | | Rotation Speed | 0.75 deg/s | 29 | +---------------------------------+------------------------------------+ 30 | | Sample Detector Distance | 60 mm | 31 | +---------------------------------+------------------------------------+ 32 | | Attenuator | mm C + 1mm Glass | 33 | +---------------------------------+------------------------------------+ 34 | | Detector Name | PCO edge | 35 | +---------------------------------+------------------------------------+ 36 | | Exposure Time | 0.0001 s | 37 | +---------------------------------+------------------------------------+ 38 | | Pixel Size | 0.65 µm | 39 | +---------------------------------+------------------------------------+ 40 | | Detector shutter mode | global | 41 | +---------------------------------+------------------------------------+ 42 | | Detector Dimension x | 2560 | 43 | +---------------------------------+------------------------------------+ 44 | | Detector Dimension y | 2160 | 45 | +---------------------------------+------------------------------------+ 46 | | Objective Magnification | Mitutoyo 10x | 47 | +---------------------------------+------------------------------------+ 48 | | Scintillator | LuAG 10 µm | 49 | +---------------------------------+------------------------------------+ 50 | 51 | 52 | The sphere data sets includes 6 tomographic data sets collected at different 53 | sample to detector distance and different concentrations as reported in the table below: 54 | 55 | To load the data sets and perform a basic reconstruction using `tomopy `_ :: 56 | 57 | tomopy recon --file-name tomo_00058.h5 --rotation-axis 1427 58 | tomopy recon --file-name tomo_00059.h5 --rotation-axis 1440 59 | tomopy recon --file-name tomo_00060.h5 --rotation-axis 1337 60 | tomopy recon --file-name tomo_00061.h5 --rotation-axis 1316.5 61 | tomopy recon --file-name tomo_00062.h5 --rotation-axis 1359.5 62 | tomopy recon --file-name tomo_00063.h5 --rotation-axis 1322,5 63 | 64 | 65 | To enable phase retrieval un-comment the appropriate setting in :download:`tomopy_rec.py <../../demo/tomopy_rec.py>` 66 | 67 | 68 | .. _tomo_00058: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Ftomo_00058_to_00063%2F 69 | .. _tomo_00059: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Ftomo_00058_to_00063%2F 70 | .. _tomo_00060: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Ftomo_00058_to_00063%2F 71 | .. _tomo_00061: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Ftomo_00058_to_00063%2F 72 | .. _tomo_00062: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Ftomo_00058_to_00063%2F 73 | .. _tomo_00063: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Ftomo_00058_to_00063%2F 74 | 75 | 76 | .. |00058| image:: ../img/tomo_00058.png 77 | :width: 20pt 78 | :height: 20pt 79 | 80 | .. |00059| image:: ../img/tomo_00059.png 81 | :width: 20pt 82 | :height: 20pt 83 | 84 | .. |00060| image:: ../img/tomo_00060.png 85 | :width: 20pt 86 | :height: 20pt 87 | 88 | .. |00061| image:: ../img/tomo_00061.png 89 | :width: 20pt 90 | :height: 20pt 91 | 92 | .. |00062| image:: ../img/tomo_00062.png 93 | :width: 20pt 94 | :height: 20pt 95 | 96 | .. |00063| image:: ../img/tomo_00063.png 97 | :width: 20pt 98 | :height: 20pt 99 | 100 | 101 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 102 | | Tomo ID | Concentration (%) | Distance | Sample Name | Image | Axis | 103 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 104 | | tomo_00058_ | 20 | 60 | Somya_20_60 | |00058| | 1427 | 105 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 106 | | tomo_00059_ | 30 | 60 | Somya_30_60 | |00059| | 1440 | 107 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 108 | | tomo_00060_ | 30 | 25 | Somya_30_25 | |00060| | 1337 | 109 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 110 | | tomo_00061_ | 20 | 25 | Somya_20_25 | |00061| | 1316.5 | 111 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 112 | | tomo_00062_ | 10 | 25 | Somya_10_25 | |00062| | 1359.5 | 113 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 114 | | tomo_00063_ | 5 | 25 | Somya_5_25 | |00063| | 1322.5 | 115 | +-------------+-----------------------+----------+--------------+-----------+--------------+ 116 | 117 | 118 | -------------------------------------------------------------------------------- /docs/source/img/clone-in-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/clone-in-desktop.png -------------------------------------------------------------------------------- /docs/source/img/commit-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/commit-screen.png -------------------------------------------------------------------------------- /docs/source/img/create-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/create-pr.png -------------------------------------------------------------------------------- /docs/source/img/create-revision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/create-revision.png -------------------------------------------------------------------------------- /docs/source/img/fork-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/fork-repo.png -------------------------------------------------------------------------------- /docs/source/img/kblt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/kblt_01.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00001_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00001_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00001_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00001_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00002_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00002_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00002_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00002_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00003_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00003_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00003_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00003_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00004_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00004_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00004_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00004_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00005_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00005_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00005_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00005_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00006_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00006_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00006_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00006_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00007_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00007_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00007_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00007_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00008_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00008_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00008_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00008_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00009_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00009_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00009_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00009_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00010_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00010_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00010_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00010_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00011_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00011_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00011_ground_truth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00011_ground_truth.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00012.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00013.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00014.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00001.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00002.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00003.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00004.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00005.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00006.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/f_00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/f_00007.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_0_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_0_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_1_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_1_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_2_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_2_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_3_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_3_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_4_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_4_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_5_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_5_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_6_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_6_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/rec_7_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/rec_7_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_0_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_0_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_1_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_1_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_2_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_2_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_3_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_3_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_4_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_4_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_5_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_5_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_6_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_6_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00015/recb16tv_7_00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00015/recb16tv_7_00000.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00016.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00017.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00018.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00019.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00020.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00021.png -------------------------------------------------------------------------------- /docs/source/img/phantom_00022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/phantom_00022.png -------------------------------------------------------------------------------- /docs/source/img/pt4/brazil/vol00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/brazil/vol00000.png -------------------------------------------------------------------------------- /docs/source/img/pt4/brazil/vol00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/brazil/vol00002.png -------------------------------------------------------------------------------- /docs/source/img/pt4/brazil/vol00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/brazil/vol00004.png -------------------------------------------------------------------------------- /docs/source/img/pt4/brazil/vol00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/brazil/vol00006.png -------------------------------------------------------------------------------- /docs/source/img/pt4/brazil/vol00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/brazil/vol00008.png -------------------------------------------------------------------------------- /docs/source/img/pt4/brazil/vol00010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/brazil/vol00010.png -------------------------------------------------------------------------------- /docs/source/img/pt4/bread/vol00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/bread/vol00000.png -------------------------------------------------------------------------------- /docs/source/img/pt4/bread/vol00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/bread/vol00002.png -------------------------------------------------------------------------------- /docs/source/img/pt4/bread/vol00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/bread/vol00004.png -------------------------------------------------------------------------------- /docs/source/img/pt4/bread/vol00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/bread/vol00006.png -------------------------------------------------------------------------------- /docs/source/img/pt4/bread/vol00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/bread/vol00008.png -------------------------------------------------------------------------------- /docs/source/img/pt4/bread/vol00010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/bread/vol00010.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fluid_flow/vol00000_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fluid_flow/vol00000_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fluid_flow/vol00001_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fluid_flow/vol00001_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fluid_flow/vol00002_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fluid_flow/vol00002_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fluid_flow/vol00003_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fluid_flow/vol00003_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fluid_flow/vol00004_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fluid_flow/vol00004_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fluid_flow/vol00005_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fluid_flow/vol00005_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fracture_deform/vol00000_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fracture_deform/vol00000_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fracture_deform/vol00004_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fracture_deform/vol00004_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fracture_deform/vol00008_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fracture_deform/vol00008_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fracture_deform/vol00012_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fracture_deform/vol00012_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fracture_deform/vol00016_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fracture_deform/vol00016_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/fracture_deform/vol00020_ZX256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/fracture_deform/vol00020_ZX256.png -------------------------------------------------------------------------------- /docs/source/img/pt4/spheres/2dview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/pt4/spheres/2dview.png -------------------------------------------------------------------------------- /docs/source/img/rad_00001h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/rad_00001h.png -------------------------------------------------------------------------------- /docs/source/img/rad_00001l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/rad_00001l.png -------------------------------------------------------------------------------- /docs/source/img/rad_00002h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/rad_00002h.png -------------------------------------------------------------------------------- /docs/source/img/rad_00002l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/rad_00002l.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00001.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00002.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00003.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00004.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00007.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00022.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00023.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00024.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00025.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00026.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00031.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00032.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00057.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00058.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00059.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00060.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00061.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00062.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00063.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00064.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00065.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00066.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00067.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00068.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00069.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00070.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00071.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00072.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00073.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00074.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00075.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00076.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00077.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00078.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00080_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00080_0.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00080_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00080_1.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00081.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00082.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00083.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00084.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00085.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00085.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00086.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00087.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00087.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00088.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00089.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00090.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00094.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00094.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00094_rec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00094_rec.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00095.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00095.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00096.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00096.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00097.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00097.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00098.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00098.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-1.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-2.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-3.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-4.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-5A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-5A.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-5B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-5B.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-6.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-7.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00099-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00099-8.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00100_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00100_1.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00100_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00100_2.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00100_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00100_3.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00100_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00100_4.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00100_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00100_5.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00100_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00100_6.png -------------------------------------------------------------------------------- /docs/source/img/tomo_00101_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomo_00101_1.png -------------------------------------------------------------------------------- /docs/source/img/tomobank-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/tomobank-logo.png -------------------------------------------------------------------------------- /docs/source/img/volume_00001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/volume_00001.png -------------------------------------------------------------------------------- /docs/source/img/volume_00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomography/tomobank/6dcf58786dfdce04185dd685c33521390a811c73/docs/source/img/volume_00002.png -------------------------------------------------------------------------------- /docs/source/license.rst: -------------------------------------------------------------------------------- 1 | ======= 2 | License 3 | ======= 4 | 5 | Contributed Data 6 | ================ 7 | 8 | Datasets contributed to and hosted on tomoBank, except "Argonne Data", are subject to the `creative commons license 4.0 `_. 9 | 10 | Datasets contributed to, but not hosted on tomoBank, are subject to their owner's conditions of use. 11 | 12 | 13 | Argonne Data 14 | ============ 15 | 16 | Datasets generated at the Argonne National Laboratory are subject to the following restrictions: 17 | 18 | NOTICE 19 | 20 | This product includes software/data produced by UChicago Argonne, LLC under Contract No. DE-AC02-06CH11357 with the Department of Energy. 21 |   22 | It is provided for use subject to the disclaimer below. 23 | 24 | Redistribution and use with or without modification are permitted.  Please include this notice and credit Argonne National Laboratory if you use or distribute it further. 25 | 26 | DISCLAIMER 27 | 28 | THE SOFTWARE/DATA IS SUPPLIED "AS IS" WITHOUT WARRANTY OF ANY KIND. 29 | 30 | Neither the United States GOVERNMENT, nor the United States Department of Energy, NOR UChicago Argonne, LLC, nor any of their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, data, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. 31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/source/phantom.rst: -------------------------------------------------------------------------------- 1 | Phantoms 2 | ======== 3 | 4 | All phantom data sets are generated with `XDesign `_ :cite:`ching:17` 5 | and distributed in the data exchange file format :cite:`decarlo:02` together with a python script 6 | to generate them (see individual phantom home page) to load and perform a basic 7 | reconstruction using tomoPy :cite:`Gursoy:14a` 8 | 9 | To reconstruct the phantom with tomopy you may run the phantom 10 | `Jupyter notebook `_ 11 | example on your local machine or run the equivalent Python 12 | scripts from `here `_. 13 | 14 | 15 | .. toctree:: 16 | 17 | phantom/docs.phantom.standard 18 | phantom/docs.phantom.wet_circles 19 | phantom/docs.phantom.foams 20 | phantom/docs.phantom.magnetic 21 | phantom/docs.phantom.dynamic 22 | -------------------------------------------------------------------------------- /docs/source/phantom/docs.phantom.magnetic.rst: -------------------------------------------------------------------------------- 1 | Magnetic 2 | -------- 3 | 4 | 5 | M4R1 6 | ~~~~ 7 | 8 | 9 | The magnetic simulation dataset M4R1 consists of a micro-particle of two layers of 10 | Py (permalloy) with an intermediate layer acting as magnetic decoupling. 11 | The projections and the tomographic reconstruction can be computed using the method 12 | described in `vector reconstruction algorithm `_ 13 | 14 | 15 | +-----------------------------------------+----------------------------+ 16 | | Phantom ID | 00012 | 17 | +=========================================+============================+ 18 | | Image preview | |00012| | 19 | +-----------------------------------------+----------------------------+ 20 | | Download | phan_00012_ | 21 | +-----------------------------------------+----------------------------+ 22 | | X-ray energy | 707.8 eV | 23 | +-----------------------------------------+----------------------------+ 24 | | Scan Range | -90 tp +90 deg | 25 | +-----------------------------------------+----------------------------+ 26 | 27 | .. _phan_00012: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00012%2F 28 | 29 | .. |00012| image:: ../img/phantom_00012.png 30 | :width: 20pt 31 | :height: 20pt 32 | 33 | 34 | µ-square 35 | ~~~~~~~~ 36 | 37 | The µ-square heterostructructure dataset consists of micro-particle of a 1 µm side square with 38 | 100nm/40nm/40nm thickness structure of Py/Al/Py respectively. 39 | The magnetization configurations changes across the sample as different slices are observed. 40 | The system supports stripe domains in the thick Py layer and mainly in-plane magnetization is 41 | present in the thin one. The decoupling is mediated by the non-magnetic Al spacer. 42 | The tomographic reconstruction can be performed using the 43 | `vector reconstruction algorithm `_ 44 | 45 | 46 | +-----------------------------------------+----------------------------+ 47 | | Phantom ID | 00013 | 48 | +=========================================+============================+ 49 | | Image preview | |00013| | 50 | +-----------------------------------------+----------------------------+ 51 | | Download | phan_00013_ | 52 | +-----------------------------------------+----------------------------+ 53 | | X-ray energy | 707.8 eV | 54 | +-----------------------------------------+----------------------------+ 55 | | Scan Range | -90 tp +90 deg | 56 | +-----------------------------------------+----------------------------+ 57 | 58 | .. _phan_00013: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00013%2F 59 | 60 | .. |00013| image:: ../img/phantom_00013.png 61 | :width: 20pt 62 | :height: 20pt 63 | 64 | 65 | nanodisc 66 | ~~~~~~~~ 67 | 68 | Calculated tomograms from a micromagnetically simulated Permalloy (Fe20Ni80) nanodisc with diameter 290 nm and 40 nm thickness. 69 | The projections and the tomographic reconstruction can be computed using the method described in 70 | `vector reconstruction algorithm `_ 71 | 72 | 73 | +-----------------------------------------+----------------------------+ 74 | | Phantom ID | 00014 | 75 | +=========================================+============================+ 76 | | Image preview | |00014| | 77 | +-----------------------------------------+----------------------------+ 78 | | Download | phan_00014_ | 79 | +-----------------------------------------+----------------------------+ 80 | | X-ray energy | 707.8 eV | 81 | +-----------------------------------------+----------------------------+ 82 | | Scan Range | -90 tp +90 deg | 83 | +-----------------------------------------+----------------------------+ 84 | 85 | .. _phan_00014: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00014%2F 86 | 87 | .. |00014| image:: ../img/phantom_00014.png 88 | :width: 20pt 89 | :height: 20pt 90 | -------------------------------------------------------------------------------- /docs/source/phantom/docs.phantom.standard.rst: -------------------------------------------------------------------------------- 1 | Standard 2 | -------- 3 | 4 | .. |rec00001| image:: ../img/phantom_00001_00000.png 5 | :width: 20pt 6 | :height: 20pt 7 | 8 | .. |gt00001| image:: ../img/phantom_00001_ground_truth.png 9 | :width: 20pt 10 | :height: 20pt 11 | 12 | .. |phan_00001| replace:: :download:`gen_script.py <../../../docs/demo/phantom_00001.py>` 13 | 14 | .. _phan_00001: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00001%2F 15 | 16 | .. |rec00002| image:: ../img/phantom_00002_00000.png 17 | :width: 20pt 18 | :height: 20pt 19 | 20 | .. |gt00002| image:: ../img/phantom_00002_ground_truth.png 21 | :width: 20pt 22 | :height: 20pt 23 | 24 | .. |phan_00002| replace:: :download:`gen_script.py <../../../docs/demo/phantom_00002.py>` 25 | 26 | .. _phan_00002: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00002%2F 27 | 28 | .. |rec00003| image:: ../img/phantom_00003_00000.png 29 | :width: 20pt 30 | :height: 20pt 31 | 32 | .. |gt00003| image:: ../img/phantom_00003_ground_truth.png 33 | :width: 20pt 34 | :height: 20pt 35 | 36 | .. |phan_00003| replace:: :download:`gen_script.py <../../../docs/demo/phantom_00003.py>` 37 | 38 | .. _phan_00003: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00003%2F 39 | 40 | .. |rec00004| image:: ../img/phantom_00004_00000.png 41 | :width: 20pt 42 | :height: 20pt 43 | 44 | .. |gt00004| image:: ../img/phantom_00004_ground_truth.png 45 | :width: 20pt 46 | :height: 20pt 47 | 48 | .. |phan_00004| replace:: :download:`gen_script.py <../../../docs/demo/phantom_00004.py>` 49 | 50 | .. _phan_00004: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00004%2F 51 | 52 | .. |rec00005| image:: ../img/phantom_00005_00000.png 53 | :width: 20pt 54 | :height: 20pt 55 | 56 | .. |gt00005| image:: ../img/phantom_00005_ground_truth.png 57 | :width: 20pt 58 | :height: 20pt 59 | 60 | .. |phan_00005| replace:: :download:`gen_script.py <../../../docs/demo/phantom_00005.py>` 61 | 62 | .. _phan_00005: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00005%2F 63 | 64 | .. |rec00006| image:: ../img/phantom_00006_00000.png 65 | :width: 20pt 66 | :height: 20pt 67 | 68 | .. |gt00006| image:: ../img/phantom_00006_ground_truth.png 69 | :width: 20pt 70 | :height: 20pt 71 | 72 | .. |phan_00006| replace:: :download:`gen_script.py <../../../docs/demo/phantom_00006.py>` 73 | 74 | .. _phan_00006: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00006%2F 75 | 76 | These phantom use `XDesign `_ 77 | version `0.2.0.dev0+1d67599 `_ 78 | are generated as follows: 79 | 80 | 81 | .. code:: python 82 | 83 | ccd_x = 256 84 | ccd_y = 1 85 | n_proj = 512 86 | 87 | phantom_00001 = xdesign.SlantedSquares(count=16, angle=5/360*2*np.pi, gap=0.01) 88 | phantom_00002 = xdesign.UnitCircle(radius=0.4, mass_atten=1) 89 | phantom_00003 = xdesign.HyperbolicConcentric() 90 | phantom_00004 = xdesign.DynamicRange(steps=16, jitter=True, shape='square') 91 | phantom_00005 = xdesign.DogaCircles(n_sizes=8, size_ratio=0.5, n_shuffles=0) 92 | phantom_00006 = xdesign.SiemensStar(32) 93 | 94 | The ground truth, sinogram and projection are obtained with: 95 | 96 | .. code:: python 97 | 98 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 99 | 100 | sino, probe = sinogram(n_proj, ccd_x, phantom) 101 | proj = np.expand_dims(sino, 1) 102 | 103 | To load the phantom data sets and perform a basic reconstruction using `tomopy `_ you may run the phantom `Jupyter notebook `_ example on your local machine or run the equivalent Python scripts from `here `_. 104 | 105 | 106 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 107 | | Phantom ID | Facility | Sample | Ground Truth | Grirec | Downloads | 108 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 109 | | phan_00001_ | XDesign | Slanted Squares | |gt00001| | |rec00001| | |phan_00001| | 110 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 111 | | phan_00002_ | XDesign | Unit Circle | |gt00002| | |rec00002| | |phan_00002| | 112 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 113 | | phan_00003_ | XDesign | Hyperbolic Concentric | |gt00003| | |rec00003| | |phan_00003| | 114 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 115 | | phan_00004_ | XDesign | Dynamic Range | |gt00004| | |rec00004| | |phan_00004| | 116 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 117 | | phan_00005_ | XDesign | Doga's Circles | |gt00005| | |rec00005| | |phan_00005| | 118 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 119 | | phan_00006_ | XDesign | Siemens Star | |gt00006| | |rec00006| | |phan_00006| | 120 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 121 | 122 | -------------------------------------------------------------------------------- /docs/source/phantom/docs.phantom.wet_circles.rst: -------------------------------------------------------------------------------- 1 | Wet Circles 2 | ----------- 3 | 4 | .. |rec00007| image:: ../img/phantom_00007_00000.png 5 | :width: 20pt 6 | :height: 20pt 7 | 8 | .. |gt00007| image:: ../img/phantom_00007_ground_truth.png 9 | :width: 20pt 10 | :height: 20pt 11 | 12 | .. |phan_00007| replace:: :download:`gen_script.py <../../../docs/demo/phantom_00007.py>` 13 | 14 | .. _phan_00007: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2Fphantom_00007%2F 15 | 16 | These phantom use `XDesign `_ 17 | version `0.2.0.dev0+1d67599 `_ 18 | are generated as follows: 19 | 20 | 21 | .. code:: python 22 | 23 | ccd_x = 256 24 | ccd_y = 1 25 | n_proj = 512 26 | 27 | phantom_00007 = xdesign.WetCircles() 28 | 29 | The ground truth, sinogram and projection are obtained with: 30 | 31 | .. code:: python 32 | 33 | ground_truth = discrete_phantom(phantom, ccd_x, prop='mass_atten') 34 | 35 | sino, probe = sinogram(n_proj, ccd_x, phantom) 36 | proj = np.expand_dims(sino, 1) 37 | 38 | To load the phantom data sets and perform a basic reconstruction using `tomopy `_ you may run the phantom `Jupyter notebook `_ example on your local machine or run the equivalent Python scripts from `here `_. 39 | 40 | 41 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 42 | | Phantom ID | Facility | Sample | Ground Truth | Grirec | Downloads | 43 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 44 | | phan_00007_ | XDesign | Wet Circles | |gt00007| | |rec00007| | |phan_00007| | 45 | +---------------+----------------+------------------------+--------------+------------+--------------------+ 46 | 47 | 48 | -------------------------------------------------------------------------------- /docs/source/publish.rst: -------------------------------------------------------------------------------- 1 | ======= 2 | Publish 3 | ======= 4 | 5 | If you are familiar with `sphinx readthedocs `_ and `github `_ you can propose the publication of a new data sets or phantoms on `TomoBank `_ :cite:`decarlo:01` by starting a new `pull request `_. 6 | 7 | If you are not familiar with these tools send an email to tomobank@anl.gov including data set description and experimental conditions using `this template `_ and a 8 | `pull request `_ will be opened for you. 9 | 10 | .. contents:: Contents: 11 | :local: 12 | 13 | -------------------------------------------------------------------------------- /docs/source/usage.rst: -------------------------------------------------------------------------------- 1 | ===== 2 | Usage 3 | ===== 4 | 5 | TomoBank data sets and phantoms are distributed using a 6 | `Globus `_ server. 7 | The first time you use tomoBank you need to create a `Globus Account `_ 8 | and set up you computer as a `Globus EndPoint `_. 9 | 10 | To read tomoBank files and perform a basic tomographic reconstruction first, you must have `Conda `_ installed. Next, install `tomoPy `_ and all its runtime dependencies into a new Conda 11 | environment called ``tomopy`` by running:: 12 | 13 | $ conda create --name tomopy --channel conda-forge tomopy 14 | 15 | Use this TomoPy installation by activating this environment:: 16 | 17 | $ conda activate tomopy 18 | 19 | then install `dxchange `_:: 20 | 21 | $ conda install -c conda-forge dxchange 22 | 23 | and `tomopy cli `_:: 24 | 25 | $ git clone https://github.com/tomography/tomopy-cli.git 26 | $ cd tomopy-cli 27 | $ python setup.py install 28 | 29 | After the above installation all tomobank datasets and phantoms can be reconstructed with:: 30 | 31 | $ tomopy recon --file-name tomo_0001.h5 --rotation-axis 1024.0 -------------------------------------------------------------------------------- /docs/source/volumes.rst: -------------------------------------------------------------------------------- 1 | Volumes 2 | ======= 3 | 4 | 5 | This repository contains a series of volumnetric datasets 6 | 7 | 8 | Dagstuhl 9 | -------- 10 | 11 | The Dagstuhl datasets was shared during the Dagstuhl Seminar 19151 on Visual Computing in Material Science | April 7-12, 2019 12 | 13 | Al-Si alloy 3D networks 14 | ~~~~~~~~~~~~~~~~~~~~~~~ 15 | 16 | **Data collection condition:** 17 | 18 | +----------------------------+----------------------------+ 19 | | Instrument | APS 2-BM-A fast tomo | 20 | +----------------------------+----------------------------+ 21 | | Energy | 19 keV | 22 | +----------------------------+----------------------------+ 23 | | Scan Range | 360 degree | 24 | +----------------------------+----------------------------+ 25 | | Number of Projections | 1500 | 26 | +----------------------------+----------------------------+ 27 | | Sample Detector Distance | 60 mm | 28 | +----------------------------+----------------------------+ 29 | | Detector Name | FReLoN CCD (2k, E2V) | 30 | +----------------------------+----------------------------+ 31 | | Exposure Time | 0.03 s | 32 | +----------------------------+----------------------------+ 33 | | Pixel Size | 0.28 µm | 34 | +----------------------------+----------------------------+ 35 | | Detector Dimension x | 2048 | 36 | +----------------------------+----------------------------+ 37 | | Detector Dimension y | 2048 | 38 | +----------------------------+----------------------------+ 39 | | Objective Magnification | 20x | 40 | +----------------------------+----------------------------+ 41 | 42 | **Volumetric data** 43 | 44 | X-ray synchrotron tomography was used to visualize the effect of thermal treatment on the 3D network of Al-Si alloys. 45 | For this the same sample was measured at the same position before and after heat treatment. The intermetallic phases 46 | in the reconstructed volumes have been segmented using global grey value thresholding. 47 | The three-dimensional tomography of Al-Si alloys during heat treatment is required to gain information about the 48 | stability of phases and especially the evolution of interconnectivity of 3D networks of rigid phases embedded in the 49 | Al-matrix. 50 | 51 | The volumentric data consists of two binary tiff volumes of tomographic data sets collected of the same sample 52 | in different thermal heat treatment conditions. 53 | 54 | 55 | +---------------+----------------------------------------------------+-----------+-----------------------+ 56 | | Tomo ID | Sample Name | Image | Dimentions | 57 | +---------------+----------------------------------------------------+-----------+-----------------------+ 58 | | volume_00001_ | AlSi_0hST_808x704x1929_Binary_aluminides_rem64 | |v00001| | (808 x 704 x 1929) | 59 | +---------------+----------------------------------------------------+-----------+-----------------------+ 60 | | volume_00002_ | AlSi_4hST_808x704x1929_Binary_aluminides_rem64 | |v00002| | (808 x 704 x 1929) | 61 | +---------------+----------------------------------------------------+-----------+-----------------------+ 62 | 63 | .. _volume_00001: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Fvolume_00001%2F 64 | .. _volume_00002: https://app.globus.org/file-manager?origin_id=9f00a780-4aee-42a7-b7f4-6a2773c8da30&origin_path=%2F%2Fvolume_00002%2F 65 | 66 | 67 | .. |v00001| image:: img/volume_00001.png 68 | :width: 20pt 69 | :height: 20pt 70 | 71 | .. |v00002| image:: img/volume_00002.png 72 | :width: 20pt 73 | :height: 20pt 74 | 75 | -------------------------------------------------------------------------------- /envs/requirements-doc.txt: -------------------------------------------------------------------------------- 1 | sphinx >=5, <6 2 | sphinx_rtd_theme >=1, <2 3 | sphinxcontrib-bibtex >=2, <3 4 | nbsphinx 5 | pandoc 6 | jupyter -------------------------------------------------------------------------------- /envs/requirements.txt: -------------------------------------------------------------------------------- 1 | python 2 | numpy -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from setuptools import setup, find_packages 4 | 5 | 6 | setup( 7 | name='tomobank', 8 | author='Francesco De Carlo', 9 | packages=find_packages(), 10 | version=open('VERSION').read().strip(), 11 | description = 'Tomography Data Archive.', 12 | license='BSD-3', 13 | platforms='Any', 14 | classifiers=[ 15 | 'Development Status :: 4 - Beta', 16 | 'Intended Audience :: Science/Research', 17 | 'License :: BSD-3', 18 | 'Natural Language :: English', 19 | # 'Programming Language :: Python :: 2', 20 | # 'Programming Language :: Python :: 2.7', 21 | 'Programming Language :: Python :: 3', 22 | 'Programming Language :: Python :: 3.5', 23 | 'Programming Language :: Python :: 3.6', 24 | ], 25 | ) 26 | --------------------------------------------------------------------------------