TeTI Atlas is a website that collects crystal structures, headline experimental results and learning resources for thermoelectric (TE) and topological-insulator (TI) materials in one place. It is written mainly for experimentalists: every exhibit says which DFT structure to trust, how far it is from the measured one, and what to watch out for before comparing it with your own XRD, ARPES or transport data.
Live site: https://anny-tech.github.io/Therm-Topo-museum/
The atlas is organised as exhibit halls (material families), each holding exhibits (individual compounds and alloys). The current catalogue has 55 materials in 7 halls:
| Hall | Materials on display |
|---|---|
| Tetradymites | Bi₂Te₃, Sb₂Te₃, Bi₂Se₃, Bi₂Te₂Se, MnBi₂Te₄, Bi₀.₅Sb₁.₅Te₃, Bi₂Te₃₋ₓSeₓ |
| Skutterudites | CoSb₃, RhSb₃, IrSb₃, CoAs₃, CeFe₄Sb₁₂, LaFe₄Sb₁₂, YbFe₄Sb₁₂, filled (Ba,La,Yb)ᵧCo₄Sb₁₂ |
| Half-Heuslers | ZrNiSn, HfNiSn, TiNiSn, NbFeSb, ZrCoSb, ZrCoBi, TiCoSb, YPtBi, LuPtBi, ScPtBi |
| Zintl phases | Mg₃Sb₂, Mg₃Bi₂, Mg₃Sb₂₋ₓBiₓ, CaZn₂Sb₂, YbZn₂Sb₂, EuZn₂Sb₂, Yb₁₄MnSb₁₁, Ca₅Al₂Sb₆, EuIn₂As₂ |
| IV–VI chalcogenides | PbTe, PbSe, SnTe, Pb₁₋ₓSnₓSe, SnSe, GeTe |
| Topological semimetals | Bi, Sb, Bi₁₋ₓSbₓ, Cd₃As₂, Na₃Bi, TaAs, NbP, WTe₂, ZrTe₅, HfTe₅ |
| More thermoelectrics | Mg₂Si, Mg₂Sn, Mg₂Si₁₋ₓSnₓ, Cu₂Se, BiCuSeO |
Each compound exhibit includes:
The atlas is built as a set of plugins over one catalogue of materials. Each plugin adds one kind of knowledge.
| Plugin | Status |
|---|---|
| DFT-relaxed crystal structures | ✓ active |
| Tutorials & learning paths (41 curated reviews, courses, books, software docs and databases, tagged by level and audience) | ✓ active |
| Knowledge graph & ontology (JSON-LD and Turtle, aligned with schema.org, SKOS and RDFS) | ✓ active |
The knowledge graph is published at site/data/knowledge-graph.jsonld, and the ontology at site/data/ontology/ttm.jsonld and ttm.ttl.
The only hand-written content is the curated catalogue in pipeline/catalog/*.yaml. Everything else is generated:
dft_3d dataset).pipeline/check_links.py.├── config.yaml # public site URL (used in JSON-LD identifiers and citations)
├── requirements.txt
├── pipeline/
│ ├── build.py # builds everything in site/data/
│ ├── check_links.py # verifies every external link in the built site
│ ├── catalog/
│ │ ├── families.yaml # exhibit halls (order here = order on the site)
│ │ ├── materials.yaml # the curated materials catalogue
│ │ └── tutorials.yaml # the tutorials plugin
│ └── ttm/ # pipeline package
│ ├── sources.py # OPTIMADE providers, JARVIS-DFT, COD
│ ├── symmetry.py # spglib analysis at several tolerances
│ ├── analysis.py # robocrys + Crystal-GENUI
│ ├── crossref.py # DOI resolution
│ ├── ontology.py # ontology (TBox) and knowledge graph (ABox)
│ └── ...
├── site/ # the static website (deployed as-is)
│ ├── index.html
│ ├── assets/ # CSS, JS (hash router, page modules, 3D viewer)
│ ├── plugins/registry.json # list of knowledge plugins
│ └── data/ # generated by the pipeline; do not edit by hand
└── .github/workflows/
├── pages.yml # deploys site/ to GitHub Pages
└── refresh-data.yml # monthly data rebuild → pull request
The site is plain HTML and JavaScript with no build step, but it loads JSON with fetch, so it must be served over HTTP rather than opened from disk:
git clone https://github.com/Anny-tech/Therm-Topo-museum.git
cd Therm-Topo-museum
python3 -m http.server -d site
Then open http://localhost:8000.
Requires Python 3.10+ (CI uses 3.12).
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python pipeline/build.py --download-jarvis # first run: also fetches the JARVIS-DFT dataset (~45 MB)
python pipeline/check_links.py # optional: check all external links
Useful options for build.py:
| Option | What it does |
|---|---|
--only bi2te3 snse |
Rebuild only these material ids; the rest are kept from the last build |
--refresh |
Ignore the HTTP cache and re-query every source |
--strict |
Fail if any DOI does not resolve on Crossref |
--skip-analysis |
Skip robocrystallographer and Crystal-GENUI (much faster) |
--download-jarvis |
Download (or re-download) the JARVIS-DFT dataset |
HTTP responses are cached in pipeline/cache/ (git-ignored), so repeated builds are fast and polite to the databases.
Add an entry to pipeline/catalog/materials.yaml. The header of that file documents every field. The essentials are:
- id: bi2te3 # URL slug
formula: Bi2Te3 # reduced formula, used to query the databases
name: Bismuth telluride
kind: compound # compound | alloy (alloys list their end-members under `members`)
family: tetradymites # an id from families.yaml
applications: [thermoelectric, topological]
spacegroups: [166] # experimental space group(s); used to pick the right polymorph
topology: 3D strong topological insulator
thermoelectric: n- and p-type, best near 300–450 K
summary: >
One short paragraph for an experimentalist.
highlights:
- property: Surface state
value: Single Dirac cone observed by ARPES
doi: 10.1126/science.1173034
caveats: >
What to know before trusting DFT numbers for this material.
refs:
- 10.1038/nphys1270
python pipeline/build.py --only <id>Every claim in highlights must carry a DOI. Leave topology out if the classification is not established in the literature.
pipeline/build.py (or a separate script) that writes static JSON to site/data/<plugin>/, keyed by the material id.site/assets/js/pages/<plugin>.js exporting render(root, params, query), and register its route in site/assets/js/app.js.pipeline/ttm/ontology.py so they appear in the knowledge graph.site/plugins/registry.json. Record the source and licence of every number.pages.yml deploys the site/ folder to GitHub Pages on every push to main that touches site/. In the repository settings, set Pages → Source to GitHub Actions.refresh-data.yml rebuilds all data on the 3rd of each month (or on demand from the Actions tab) and opens a pull request instead of pushing directly, so a person reviews every change to the structures before it goes live. Before merging, check site/data/build_info.json (source counts, unresolved DOIs) and the diffs in site/data/materials/.The code is released under the MIT License. The data keeps the licence of the database it came from. If you reuse a structure, cite and credit that database:
| Source | Functional | Licence | Cite |
|---|---|---|---|
| Materials Project | GGA/GGA+U/r²SCAN | CC BY 4.0 | 10.1063/1.4812323 |
| JARVIS-DFT | OptB88vdW | NIST public data | 10.1038/s41524-020-00440-1 |
| Alexandria | PBE, PBEsol | CC BY 4.0 | 10.1002/adma.202210788 |
| OQMD | PBE (+U) | CC BY 4.0 | 10.1038/npjcompumats.2015.10 |
| Crystallography Open Database | experiment | CC0 | 10.1107/S0021889809016690 |
Transport data: JARVIS-DFT BoltzTraP calculations, Choudhary, Garrity & Tavazza, J. Phys.: Condens. Matter 32, 475501 (2020), 10.1088/1361-648X/aba06b.
Data access uses OPTIMADE (Andersen et al., Sci. Data 2021, 10.1038/s41597-021-00974-z). Structure analysis uses spglib, robocrystallographer and Crystal-GENUI.
Corrections and new materials are welcome. Open an issue for a wrong number, a broken link or a missing material, or open a pull request following the steps under Adding a material. Experimental results are especially welcome when they come with a DOI.
Ankita Biswas, University of Virginia