# Deep Learning in Mass Spectrometry Imaging: A Hybrid Julia-Python Workflow This repository contains the computational pipeline for the automated anatomical mapping of *Datura innoxia* (toloache) using Mass Spectrometry Imaging (MSI). The workflow addresses the "two-language problem" by leveraging **Julia** for high-performance data preprocessing and **Python** for self-supervised representation learning. ## Key Features - **High-Performance Preprocessing**: Rapid `.imzML` ingestion and TrIQ normalization using Julia. - **Self-Supervised Learning**: Contrastive learning (SimCLR) with an EfficientNet-B0 backbone implemented in PyTorch. - **Reproducibility**: Integrated Docker environment and fixed random seeds for consistent results. - **Performance Benchmarking**: Real-time monitoring of execution time and RAM usage across the hybrid pipeline. - **CUDA/GPU Support**: Optimized for NVIDIA hardware for accelerated training and inference. - **Hybrid Bridge**: Automated data transfer between Julia and Python ecosystems via standardized intermediate files. ## Project Structure - `scripts_julia/`: Julia scripts for mass slice extraction and TrIQ normalization. - `scripts_python/`: Python scripts for SimCLR training, feature extraction, and clustering. - `models/`: Contains the pre-trained weights (`msi_encoder_trained.pth`). - `environment/`: Dependency files (`requirements.txt`, `Project.toml`). - `figures/`: Generated plots and cluster galleries. - `data/`: (User-provided) Location for `.imzML` and mask files. ## Reproducibility & Docker (Recommended) To ensure identical environments for both Julia and Python, we provide a unified Docker setup. This setup includes the **JuliaMSI** framework. ### Building the Container Before building, ensure the `JuliaMSI` repository is present in the root directory (it was cloned from `https://git.nube-gran.de/Julian/JuliaMSI`). ```bash docker build -t msi-hybrid-workflow . ``` ### Running the Container (CPU Mode) ```bash docker run -it --rm -v $(pwd):/app msi-hybrid-workflow ``` ### Running the Container (GPU/CUDA Mode) ```bash docker run -it --rm --shm-size=2gb --gpus all -v $(pwd):/app msi-hybrid-workflow ``` ## Usage Workflow ### 1. Preprocessing (Julia) Leverage Julia's performance and the **JuliaMSI** framework. **Run this clean runtime instantiation command one time to sync everything down to your local directory:** ```bash docker run -it --rm -v $(pwd):/app msi-hybrid-workflow \ julia --project=/app/environment -e 'using Pkg; Pkg.resolve(); Pkg.instantiate()' ``` **Run the MSI Bridge (Normalization & PNG Export):** ```bash docker run -it --rm --gpus all -v $(pwd):/app msi-hybrid-workflow \ julia --threads auto --project=/app/environment /app/scripts_julia/julia_msi_bridge.jl ``` **Optional: Plot Cluster Spectra:** ```bash docker run -it --rm --gpus all -v $(pwd):/app msi-hybrid-workflow \ julia --threads auto --project=/app/environment scripts_julia/graph_cluster_spectra.jl ``` ### 2. Representation Learning (Python) Train the SimCLR encoder to extract morphological features using CUDA. **Run CNN Training (SimCLR):** ```bash docker run -it --rm \ --shm-size=2gb \ --gpus all \ -v $(pwd):/app \ -v msi_torch_cache:/root/.cache/torch \ msi-hybrid-workflow \ python3 scripts_python/CNN_proof_1.py ``` *Note: The script automatically detects CUDA and logs per-epoch RAM usage.* ### 3. Clustering & Validation Determine optimal clusters and perform quantitative validation. **Generate Clusters:** ```bash docker run -it --rm --shm-size=2gb --gpus all -v $(pwd):/app msi-hybrid-workflow \ python3 scripts_python/cluster_msi_direct.py ``` **Evaluate Clustering:** ```bash docker run -it --rm --gpus all -v $(pwd):/app msi-hybrid-workflow \ python3 scripts_python/evaluate_clustering.py ``` **Quantitative Validation:** ```bash docker run -it --rm --gpus all -v $(pwd):/app msi-hybrid-workflow \ python3 scripts_python/quantitative_validation.py ``` ### 4. Visualization Generate the final galleries and t-SNE maps. **Generate t-SNE Maps:** ```bash docker run -it --rm --shm-size=2gb --gpus all -v $(pwd):/app msi-hybrid-workflow \ python3 scripts_python/graficar_tsne_msi.py ``` **Create Cluster Galleries:** ```bash docker run -it --rm --shm-size=2gb --gpus all -v $(pwd):/app msi-hybrid-workflow \ python3 scripts_python/visualize_clusters.py ``` ## Citation & Acknowledgments This implementation is based on the methodology proposed by: > Hu, H., Bindu, J. P., & Laskin, J. (2022). Self-supervised clustering of mass spectrometry imaging data using contrastive learning. *Chemical Science*, 13(1), 90-98. DOI: [10.1039/d1sc04077d](https://doi.org/10.1039/d1sc04077d) ## License This project is licensed under the **MIT License**.