QCLM¶
QCLM (Quantum Cascade Laser Microscopy) is an open toolkit for hyperspectral infrared imaging. It has two parts:
- a desktop app for instrument control, live acquisition and spectral analysis
- a backend that runs on your machine: it builds and calibrates spectral cubes, stores your data and runs classification
You install the desktop app like any other application and start the backend with a single Docker command.
Then follow Installation and Backend setup. Getting to a first scan takes about ten minutes.
What you can do with it¶
- Control the instrument. Tune the laser by wavenumber, set the pulse rate, coadds and frame rate, and move the X/Y/Z stage. Choose single-wavelength, full hyperspectral or discrete (sparse) wavelength scans.
- Watch acquisitions live. Frames stream into the viewer as they are captured, and a spectral profile follows the cursor.
- Open existing data. Import sessions saved as ENVI (
.hdr), HDF5, NetCDF, NumPy (.npy), TIFF, Zarr or raw binary. - Calibrate and clean. Apply white/dark reference correction, destriping, normalization, band cropping, downsampling and ROI cropping.
- Mask and select regions. Draw ROIs and sub-ROIs, threshold, combine and clean masks, and define a measurement ROI.
- Reduce dimensionality. Run MNF or PCA transforms, view eigenvalue plots, pick bands by correlation, and extract end-members with the Pure Pixel Index (PPI).
- Compute spectral indices. Use the built-in RABD, RABA, ratio and mean-reflectance indices, or define your own and export the maps and plots.
- Classify. Run a classification model on a cube and compare models side by side.
- Automate. Run batch preprocessing and batch index computation over whole folders, and export or import complete projects.
Project status
QCLM is under active development.
- Simulated laser: the backend currently drives a simulated laser and detector, so you can learn the full workflow without hardware. Drivers for real instruments plug in behind the same interface.
- Placeholder classifier: the bundled classification model is a simple reference model (a threshold classifier) that shows the inference workflow. It is not trained for any particular sample type.
How it fits together¶
flowchart LR
A["QCLM desktop app"] -- "REST + live events" --> G["API gateway :8080"]
subgraph B["Backend (Docker, on your machine)"]
G --> E[Experiment]
G --> Q[Acquisition]
G --> P[Processing]
G --> I[Inference]
G --> M[Metadata]
G --> D[Data storage]
Q -- frames --> K[(Kafka)]
K --> P -- cubes --> K --> I
end
The desktop app only talks to the gateway. By default that is http://localhost:8080, but you can point the app at a backend on another machine in your lab. System architecture explains each service.