What In The Zap Is That? AI categorization of spectra from LIBS/XRF analyzers. https://spacecruft.org/spacecruft/witzit/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jebba 8243a3fc3a api 501 4 months ago
img Deep Learning Sequence() diagram 4 months ago
notebooks pep8/black format jupyter 4 months ago
.gitignore ignore logs 4 months ago
LICENSE witzit - What In The Zap Is That? 4 months ago
README.md api 501 4 months ago
requirements-dev.txt pep8/black format jupyter 4 months ago
requirements.txt more py deps, sklearn, ipywidgets 4 months ago
witzit-load.py use merged spectra csv 4 months ago


witzit - What In The Zap Is That?

witzit --- What In The Zap Is That? AI categorization of spectra from LIBS/XRF analyzers.


Alpha software under development. Need to fix:


Install Dependencies

Get system dependency and upgrade Python pip. Perhaps do something like this, or set up a Python virtual environment.

sudo apt update
sudo apt install git python3-pip
pip install --user --upgrade pip

Clone Git Repo

Get source code with git.

The default requirements.txt installs a Tensorflow without GPU support. You can edit the requirements.txt file to change which is supported. The "generic" version supports both.

git clone https://spacecruft.org/spacecruft/witzit
cd witzit/
pip install --user --upgrade -r requirements.txt

witzit scripts

  • witzit-load.py --- Load and text display a sample CSV.

Development is most easily done under Jupyter with Tensorboard for training models. These files are in the notebooks/ directory.

  • witzit-predict.ipynb --- witzit Jupyter notebook, prediction application.
  • witzit-train.ipynb --- witzit Jupyter notebook, training application.


Note: Files in the data/ directory may be deleted and/or manipulated by scripts in this application.

Note well, the data/ directory is ignored by git, and is a temporary directory where data to be processed is stored. For example, if you have a main original archive of 10,000 samples and you want to process just 1,000 of them, they would be copied to the data/ directory.

Data is also stored here, which can also be deleted/moved by scripts:


Each element sample will be stored under here:


Each element model will be stored under here:


Temporary logs during training may be written to the gitignored logs/ directory.


HOWTO USE. Getting closer...

# Example:
debian@workstation:~/spacecruft/witzit$ ./witzit-load.py
Tensorflow Version:  2.7.0
Num GPUs Available:  0
Num CPUs Available:  1
[PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]
      Pixel Index  wavelength    intensity
0               1  186.551108    13.956667
1               2  186.647845     9.773333
2               3  186.744576    19.723333
3               4  186.841300    17.223333
4               5  186.938018    16.006667
...           ...         ...          ...
8259         8260  960.998400     0.000000
8260         8261  960.998800     0.000000
8261         8262  960.999200     0.000000
8262         8263  960.999600     0.000000
8263         8264  961.000000  1454.250000

[8264 rows x 3 columns]


  • SciAps LIBS Analyzer

  • SciAps XRF Analyzer

Deep Learning Algorithm

Can use lots from wut.

def uncompiled_model():
  model = Sequential([
    Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
    Conv2D(32, 3, padding='same', activation='relu'),
    Conv2D(64, 3, padding='same', activation='relu'),
    Dense(512, activation='relu'),
    Dense(1, activation='sigmoid')
  return model

Amazingly (to me), the paper Classification of radioxenon spectra with deep learning algorithm (2021) by Azimi, et al. uses nearly the identical CNN Sequence() as wut uses, indicating it may be a very good base to start from.

Paper is non-gratis science:

The Sequence() diagram is pulled from the Azimi paper, but is the same as in wut, so makes a good reference.

Deep Learning Sequence



Will likely work best with binary categorizations. E.g. like this: Is it element A or not element A? Is it element B or not element B? Is it element C or not element C? Not "is it element A, B, or C?"

See Also

  • pysalx --- Unofficial scripts for interacting with the SciAps LIBS and XRF analyzers.


  • wut? --- What U Think? SatNOGS Observation AI.



Unofficial, unaffiliated with SciAps.


License: GPLv3 or any later version.

Copyright (C) 2019-2022, Jeff Moe