Automation-first framework for quantum optics experiments
Project description
⚡ PhoQuPy
Automation-first framework for quantum optics experiments
🔬 Used in active quantum optics experiments at IIT Bombay
Control your experiment. Not just your equations.
🚀 What is PhoQuPy?
PhoQuPy is a Python framework for automating quantum optics experiments.
It connects:
- motion stages
- spectrometers
- detectors (SPADs, EMCCDs, etc.)
- interferometers
- data acquisition pipelines
into a single programmable workflow.
🧠 Why this exists
Quantum optics experiments are:
- repetitive
- timing-sensitive
- hardware-fragmented
- difficult to reproduce
Manual operation doesn’t scale.
PhoQuPy enables:
- fully automated measurement pipelines
- synchronized multi-device control
- reproducible experimental protocols
⚡ Core Idea
Treat experiments like programs.
Instead of:
turn knob → wait → click → save → repeat
You write:
scan = RasterScan(x_range, y_range, resolution=200)
for point in scan:
move_stage(point)
spectrum = acquire_spectrum()
save(spectrum)
🧩 Architecture
flowchart LR
A[User Script / Experiment Logic] --> B[PhoQuPy Core]
B --> C[Device Abstraction Layer]
B --> D[Automation Engine]
B --> E[Data Acquisition]
B --> F[Processing & Visualization]
C --> G[Motion Stages]
C --> H[Detectors]
C --> I[Spectrometers]
C --> J[DAQ Systems]
G --> K[Hardware]
H --> K
I --> K
J --> K
E --> L[Raw Data]
F --> M[Processed Data]
🎥 Automated Scan Demo
🧪 From Manual → Automated Experiments
❌ Manual Workflow
- Align optics manually
- Move stage → measure → save → repeat
- Copy-paste scripts
- High chance of human error
- Poor reproducibility
✅ PhoQuPy Workflow
scan = ConfocalScan(x_range=(0, 50), y_range=(0, 50), step=0.5)
data = scan.run()
scan.plot_map(data)
⚡ Result
| Manual | PhoQuPy | |
|---|---|---|
| Speed | Slow | Fast |
| Reproducibility | Low | High |
| Scalability | Poor | Excellent |
| Human error | High | Minimal |
| Automation | ❌ | ✅ |
🔬 Used in Real Experiments
PhoQuPy is actively used in the Laboratory of Optics of Quantum Materials (LOQM), IIT Bombay.
Note: Parts of this repo cannot be used directly in another facility, as various configuration files, DLLs, and other non-public support files have not been included.
🧠 System Architecture
🔴 Confocal Photoluminescence Mapping
- Automated raster scanning of quantum emitters
- Real-time PL map generation
🟡 Fiber Alignment Scan
- Automated alignment optimization
- Gaussian peak detection
🔵 Cryogenic PL Mapping (Galvo)
- High-speed scanning
- Cryostat-compatible workflows
🟣 Hyperspectral Imaging
- Full spectral cube acquisition
- Wavelength-resolved imaging
⚡ What this demonstrates
- Multi-instrument synchronization
- Fully automated pipelines
- Real-time visualization
- High-throughput measurements
🧰 Supported Hardware (Extensible)
| Category | Supported Devices |
|---|---|
| Motion Stages | Thorlabs, Newport |
| Detectors | SPADs, APDs |
| Cameras | EMCCD (Andor), sCMOS |
| Spectrometers | Princeton Instruments, Ocean Optics |
| Timing Electronics | TCSPC modules |
| DAQ | NI DAQ |
📦 Installation
pip install phoqupy
or
git clone https://github.com/loqm/phoqupy
cd phoqupy
pip install -e .
📚 Documentation
👉 https://loqm.github.io/phoqupy
Includes:
- Getting Started
- Example Experiments
- Hardware Integration
- API Reference
📄 Use in a Paper
If you use PhoQuPy in your research, please cite:
S. Murali, A. Kumar, PhoQuPy: A Python Framework for Automating Quantum Optics Experiments, arXiv:2602.04505 (2026)
BibTeX
@article{phoqupy2026,
title = {PhoQuPy: A Python Framework for Automating Quantum Optics Experiments},
author = {Murali, Srivatsa and Kumar, Anshuman},
year = {2026},
journal = {arXiv preprint},
eprint = {2602.04505},
archivePrefix = {arXiv},
primaryClass = {quant-ph}
}
🤝 Contributing
If you have ever:
- struggled to integrate lab hardware
- rewritten experiment scripts
- lost reproducibility
You should contribute.
👤 Authors
Srivatsa Murali
Anshuman Kumar
Laboratory of Optics of Quantum Materials (LOQM)
IIT Bombay
🌌 Vision
To make quantum optics experiments programmable, scalable, and reproducible.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file phoqupy-0.1.0.tar.gz.
File metadata
- Download URL: phoqupy-0.1.0.tar.gz
- Upload date:
- Size: 59.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f764f22306016ddc3a6e77e55e20f8b6cf3580a6ee2d064960fb29242756b0b
|
|
| MD5 |
08d990ff7a48dc5662f1b414829b5c73
|
|
| BLAKE2b-256 |
cdad616982b5148e3fb739bf51b09b21f39101350385f03441940112b5b6bd5e
|
Provenance
The following attestation bundles were made for phoqupy-0.1.0.tar.gz:
Publisher:
publish.yml on loqm/phoqupy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
phoqupy-0.1.0.tar.gz -
Subject digest:
6f764f22306016ddc3a6e77e55e20f8b6cf3580a6ee2d064960fb29242756b0b - Sigstore transparency entry: 2182477256
- Sigstore integration time:
-
Permalink:
loqm/phoqupy@fb5800b2fd84edaf3cc4d716d836c0608f42d0cd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/loqm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fb5800b2fd84edaf3cc4d716d836c0608f42d0cd -
Trigger Event:
release
-
Statement type:
File details
Details for the file phoqupy-0.1.0-py3-none-any.whl.
File metadata
- Download URL: phoqupy-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87bb7f28e0a60a78c9f3f1ad891370828e8b7f48813350a4017ea457c057087b
|
|
| MD5 |
e788e3229b3aab92f3c323f7e288ebec
|
|
| BLAKE2b-256 |
24ecd7286691406365dc5da23b4f24cd26d0c58e6d63a8ebaf6da07a776f0d97
|
Provenance
The following attestation bundles were made for phoqupy-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on loqm/phoqupy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
phoqupy-0.1.0-py3-none-any.whl -
Subject digest:
87bb7f28e0a60a78c9f3f1ad891370828e8b7f48813350a4017ea457c057087b - Sigstore transparency entry: 2182477464
- Sigstore integration time:
-
Permalink:
loqm/phoqupy@fb5800b2fd84edaf3cc4d716d836c0608f42d0cd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/loqm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fb5800b2fd84edaf3cc4d716d836c0608f42d0cd -
Trigger Event:
release
-
Statement type: