[![DOI](https://zenodo.org/badge/288670453.svg)](https://zenodo.org/badge/latestdoi/288670453)
[![PyPi version](https://img.shields.io/pypi/v/qudi-hira-analysis)](https://pypi.python.org/pypi/qudi-hira-analysis/)
[![Python 3.10](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/release/python-3100/)
[![Downloads](https://static.pepy.tech/badge/qudi-hira-analysis)](https://pepy.tech/project/qudi-hira-analysis)
[![codecov](https://codecov.io/gh/dineshpinto/qudi-hira-analysis/branch/main/graph/badge.svg?token=FMXDAYW8DW)](https://codecov.io/gh/dineshpinto/qudi-hira-analysis)
[![unittest](https://github.com/dineshpinto/qudi-hira-analysis/actions/workflows/unittest.yml/badge.svg)](https://github.com/dineshpinto/qudi-hira-analysis/actions/workflows/unittest.yml)
# Qudi Hira Analysis
Analytics suite for qubit SPM using FPGA timetaggers
## Installation
```bash
pip install qudi-hira-analysis
```
### Update to latest version
```bash
pip install --upgrade qudi-hira-analysis
```
## Citation
If you are publishing scientific results that use this code, as good scientific practice you
should cite [this work](https://doi.org/10.5281/zenodo.7604670).
## Features
- Automated data import and handling
- Works natively with data from [Qudi](https://github.com/Ulm-IQO/qudi) and [Qudi-Hira](https://github.com/projecthira/qudi-hira)
- Fast and robust curve fitting for NV-ODMR 2D maps, Autocorrelation, Rabi, Ramsey, T1, T2 and more...
- Supports all file formats used in NV magnetometry, AFM, MFM and NV-SPM
- Uses a Dataclass-centered design for easy access to data and metadata
## Usage
```python
from pathlib import Path
import seaborn as sns
from qudi_hira_analysis import DataHandler
dh = DataHandler(
data_folder=Path("C:/Data"), # Path to data folder
figure_folder=Path("C:/QudiHiraAnalysis"), # Path to figure folder
measurement_folder=Path("20230101_NV1") # Measurement folder name (optional)
)
# Lazy-load all pulsed measurements with "odmr" in the path into a Dataclass
odmr_measurements = dh.load_measurements("odmr", pulsed=True)
# Fit ODMR data with a double Lorentzian
odmr = odmr_measurements["20230101-0420-00"]
x_fit, y_fit, result = dh.fit(x="Controlled variable(Hz)", y="Signal",
fit_function=dh.fit_function.lorentziandouble, data=odmr.data)
# Plot the data and the fit
ax = sns.scatterplot(x="Controlled variable(Hz)", y="Signal", data=odmr.data, label="Data")
sns.lineplot(x=x_fit, y=y_fit, ax=ax, label="Fit")
# Calculate the ODMR splitting
ax.axvline(result.best_values["l0_center"], ls="--", color="C1")
ax.axvline(result.best_values["l1_center"], ls="--", color="C1")
splitting = result.best_values["l1_center"] - result.best_values["l0_center"]
ax.set_title(f"ODMR splitting = {splitting / 1e6:.1f} MHz")
# Generate fit report
print(result.fit_report())
# Save figure
dh.save_figures(filepath=Path("odmr_fit"), fig=ax.get_figure())
```
![ODMR](https://github.com/dineshpinto/qudi-hira-analysis/blob/fb86a5321a15a6851803daa9af60abe52436b54d/docs/images/odmr.jpg)
## Documentation
The full documentation is available [here](https://dineshpinto.github.io/qudi-hira-analysis/).
## Schema
### Overall
```mermaid
flowchart TD
IOHandler <-- Handle IO operations --> DataLoader;
DataLoader <-- Map IO callables --> DataHandler;
Qudi[Qudi FitLogic] --> AnalysisLogic;
AnalysisLogic -- Inject fit functions --> DataHandler;
DataHandler -- Fit data --> Plot;
DataHandler -- Structure data --> MeasurementDataclass;
MeasurementDataclass -- Plot data --> Plot[JupyterLab Notebook];
Plot -- Save plotted data --> DataHandler;
style MeasurementDataclass fill: #bbf, stroke: #f66, stroke-width: 2px, color: #fff, stroke-dasharray: 5 5
```
### Dataclass
```mermaid
flowchart LR
subgraph Standard Data
MeasurementDataclass --o filepath1[filepath: Path];
MeasurementDataclass --o data1[data: DataFrame];
MeasurementDataclass --o params1[params: dict];
MeasurementDataclass --o timestamp1[timestamp: datetime.datetime];
MeasurementDataclass --o methods1[get_param_from_filename: Callable];
MeasurementDataclass --o methods2[set_datetime_index: Callable];
end
subgraph Pulsed Data
MeasurementDataclass -- pulsed --> PulsedMeasurementDataclass;
PulsedMeasurementDataclass -- measurement --> PulsedMeasurement;
PulsedMeasurement --o filepath2[filepath: Path];
PulsedMeasurement --o data2[data: DataFrame];
PulsedMeasurement --o params2[params: dict];
PulsedMeasurementDataclass -- laser_pulses --> LaserPulses;
LaserPulses --o filepath3[filepath: Path];
LaserPulses --o data3[data: DataFrame];
LaserPulses --o params3[params: dict];
PulsedMeasurementDataclass -- timetrace --> RawTimetrace;
RawTimetrace --o filepath4[filepath: Path];
RawTimetrace --o data4[data: DataFrame];
RawTimetrace --o params4[params: dict];
end
```
## License
This license of this project is located in the top level folder under `LICENSE`. Some specific files contain their
individual licenses in the file header docstring.
## Build
### Prerequisites
- [Poetry](https://python-poetry.org)
- [git](https://git-scm.com/downloads)
### Clone repo, install deps and add environment to Jupyter
```shell
git clone https://github.com/dineshpinto/qudi-hira-analysis.git
cd qudi-hira-analysis
poetry install
poetry run python -m ipykernel install --user --name=qudi-hira-analysis
poetry run jupyter lab
```
## Makefile
The Makefile located in `notebooks/` is configured to generate a variety of outputs:
+ `make pdf` : Converts all notebooks to PDF (requires LaTeX backend)
+ `make html`: Converts all notebooks to HTML
+ `make py` : Converts all notebooks to Python (can be useful for VCS)
+ `make all` : Sequentially runs all the notebooks in folder
To use the `make` command on Windows you can install [Chocolatey](https://chocolatey.org/install), then
install make with `choco install make`
Raw data
{
"_id": null,
"home_page": "https://github.com/dineshpinto/qudi-hira-analysis",
"name": "qudi-hira-analysis",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.13,>=3.10",
"maintainer_email": null,
"keywords": "python, qubit, analysis, nv centers, photon timetrace",
"author": "dineshpinto",
"author_email": "annual.fallout_0z@icloud.com",
"download_url": "https://files.pythonhosted.org/packages/99/33/97740e6251c904cb6d554b6a036d0342f33e10c0bb067bc65dd549906a81/qudi_hira_analysis-1.6.3.tar.gz",
"platform": null,
"description": "[![DOI](https://zenodo.org/badge/288670453.svg)](https://zenodo.org/badge/latestdoi/288670453)\n[![PyPi version](https://img.shields.io/pypi/v/qudi-hira-analysis)](https://pypi.python.org/pypi/qudi-hira-analysis/)\n[![Python 3.10](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/release/python-3100/)\n[![Downloads](https://static.pepy.tech/badge/qudi-hira-analysis)](https://pepy.tech/project/qudi-hira-analysis)\n[![codecov](https://codecov.io/gh/dineshpinto/qudi-hira-analysis/branch/main/graph/badge.svg?token=FMXDAYW8DW)](https://codecov.io/gh/dineshpinto/qudi-hira-analysis)\n[![unittest](https://github.com/dineshpinto/qudi-hira-analysis/actions/workflows/unittest.yml/badge.svg)](https://github.com/dineshpinto/qudi-hira-analysis/actions/workflows/unittest.yml)\n\n# Qudi Hira Analysis\n\nAnalytics suite for qubit SPM using FPGA timetaggers\n\n## Installation\n\n```bash\npip install qudi-hira-analysis\n```\n\n### Update to latest version\n\n```bash\npip install --upgrade qudi-hira-analysis\n```\n\n## Citation\n\nIf you are publishing scientific results that use this code, as good scientific practice you\nshould cite [this work](https://doi.org/10.5281/zenodo.7604670).\n\n## Features\n\n- Automated data import and handling\n- Works natively with data from [Qudi](https://github.com/Ulm-IQO/qudi) and [Qudi-Hira](https://github.com/projecthira/qudi-hira)\n- Fast and robust curve fitting for NV-ODMR 2D maps, Autocorrelation, Rabi, Ramsey, T1, T2 and more...\n- Supports all file formats used in NV magnetometry, AFM, MFM and NV-SPM\n- Uses a Dataclass-centered design for easy access to data and metadata\n\n## Usage\n\n```python\nfrom pathlib import Path\nimport seaborn as sns\n\nfrom qudi_hira_analysis import DataHandler\n\ndh = DataHandler(\n data_folder=Path(\"C:/Data\"), # Path to data folder\n figure_folder=Path(\"C:/QudiHiraAnalysis\"), # Path to figure folder\n measurement_folder=Path(\"20230101_NV1\") # Measurement folder name (optional)\n)\n\n# Lazy-load all pulsed measurements with \"odmr\" in the path into a Dataclass\nodmr_measurements = dh.load_measurements(\"odmr\", pulsed=True)\n\n# Fit ODMR data with a double Lorentzian\nodmr = odmr_measurements[\"20230101-0420-00\"]\nx_fit, y_fit, result = dh.fit(x=\"Controlled variable(Hz)\", y=\"Signal\",\n fit_function=dh.fit_function.lorentziandouble, data=odmr.data)\n\n# Plot the data and the fit\nax = sns.scatterplot(x=\"Controlled variable(Hz)\", y=\"Signal\", data=odmr.data, label=\"Data\")\nsns.lineplot(x=x_fit, y=y_fit, ax=ax, label=\"Fit\")\n\n# Calculate the ODMR splitting\nax.axvline(result.best_values[\"l0_center\"], ls=\"--\", color=\"C1\")\nax.axvline(result.best_values[\"l1_center\"], ls=\"--\", color=\"C1\")\nsplitting = result.best_values[\"l1_center\"] - result.best_values[\"l0_center\"]\nax.set_title(f\"ODMR splitting = {splitting / 1e6:.1f} MHz\")\n\n# Generate fit report\nprint(result.fit_report())\n\n# Save figure\ndh.save_figures(filepath=Path(\"odmr_fit\"), fig=ax.get_figure())\n```\n![ODMR](https://github.com/dineshpinto/qudi-hira-analysis/blob/fb86a5321a15a6851803daa9af60abe52436b54d/docs/images/odmr.jpg)\n\n## Documentation\n\nThe full documentation is available [here](https://dineshpinto.github.io/qudi-hira-analysis/).\n\n## Schema\n\n### Overall\n\n```mermaid\nflowchart TD\n IOHandler <-- Handle IO operations --> DataLoader;\n DataLoader <-- Map IO callables --> DataHandler;\n Qudi[Qudi FitLogic] --> AnalysisLogic;\n AnalysisLogic -- Inject fit functions --> DataHandler;\n DataHandler -- Fit data --> Plot;\n DataHandler -- Structure data --> MeasurementDataclass;\n MeasurementDataclass -- Plot data --> Plot[JupyterLab Notebook];\n Plot -- Save plotted data --> DataHandler;\n style MeasurementDataclass fill: #bbf, stroke: #f66, stroke-width: 2px, color: #fff, stroke-dasharray: 5 5\n```\n\n### Dataclass\n\n```mermaid\nflowchart LR\n subgraph Standard Data\n MeasurementDataclass --o filepath1[filepath: Path];\n MeasurementDataclass --o data1[data: DataFrame];\n MeasurementDataclass --o params1[params: dict];\n MeasurementDataclass --o timestamp1[timestamp: datetime.datetime];\n MeasurementDataclass --o methods1[get_param_from_filename: Callable];\n MeasurementDataclass --o methods2[set_datetime_index: Callable];\n end\n subgraph Pulsed Data\n MeasurementDataclass -- pulsed --> PulsedMeasurementDataclass;\n PulsedMeasurementDataclass -- measurement --> PulsedMeasurement;\n PulsedMeasurement --o filepath2[filepath: Path];\n PulsedMeasurement --o data2[data: DataFrame];\n PulsedMeasurement --o params2[params: dict];\n PulsedMeasurementDataclass -- laser_pulses --> LaserPulses;\n LaserPulses --o filepath3[filepath: Path];\n LaserPulses --o data3[data: DataFrame];\n LaserPulses --o params3[params: dict];\n PulsedMeasurementDataclass -- timetrace --> RawTimetrace;\n RawTimetrace --o filepath4[filepath: Path];\n RawTimetrace --o data4[data: DataFrame];\n RawTimetrace --o params4[params: dict];\n end\n```\n\n## License\n\nThis license of this project is located in the top level folder under `LICENSE`. Some specific files contain their\nindividual licenses in the file header docstring.\n\n## Build\n\n### Prerequisites\n\n- [Poetry](https://python-poetry.org)\n- [git](https://git-scm.com/downloads)\n\n### Clone repo, install deps and add environment to Jupyter\n\n```shell\ngit clone https://github.com/dineshpinto/qudi-hira-analysis.git\ncd qudi-hira-analysis\npoetry install\npoetry run python -m ipykernel install --user --name=qudi-hira-analysis\npoetry run jupyter lab\n```\n\n## Makefile\n\nThe Makefile located in `notebooks/` is configured to generate a variety of outputs:\n\n+ `make pdf` : Converts all notebooks to PDF (requires LaTeX backend)\n+ `make html`: Converts all notebooks to HTML\n+ `make py` : Converts all notebooks to Python (can be useful for VCS)\n+ `make all` : Sequentially runs all the notebooks in folder\n\nTo use the `make` command on Windows you can install [Chocolatey](https://chocolatey.org/install), then\ninstall make with `choco install make`\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "A Python toolkit to analzye photon timetrace data from qubit sensors",
"version": "1.6.3",
"project_urls": {
"Documentation": "https://dineshpinto.github.io/qudi-hira-analysis/qudi_hira_analysis/",
"Homepage": "https://github.com/dineshpinto/qudi-hira-analysis",
"Repository": "https://github.com/dineshpinto/qudi-hira-analysis"
},
"split_keywords": [
"python",
" qubit",
" analysis",
" nv centers",
" photon timetrace"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "260602b303ba5dee51bd02a1508edef80837a0e8b0df4d20028481ae9a2b5793",
"md5": "097120725906cf4fb5515f01c4a52554",
"sha256": "456b5018aaccc5e941bf9dbb7da4c29c8ede99700047f6f3b04b9cc511c8f501"
},
"downloads": -1,
"filename": "qudi_hira_analysis-1.6.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "097120725906cf4fb5515f01c4a52554",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.10",
"size": 82831,
"upload_time": "2024-03-31T18:05:24",
"upload_time_iso_8601": "2024-03-31T18:05:24.319487Z",
"url": "https://files.pythonhosted.org/packages/26/06/02b303ba5dee51bd02a1508edef80837a0e8b0df4d20028481ae9a2b5793/qudi_hira_analysis-1.6.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "993397740e6251c904cb6d554b6a036d0342f33e10c0bb067bc65dd549906a81",
"md5": "764c9d9fafea082f0bdb5688f24b8183",
"sha256": "28ec338825be21020d8dc8ac31773d5284c6e2c39c8f1a932f38208b5f33aa54"
},
"downloads": -1,
"filename": "qudi_hira_analysis-1.6.3.tar.gz",
"has_sig": false,
"md5_digest": "764c9d9fafea082f0bdb5688f24b8183",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.13,>=3.10",
"size": 69196,
"upload_time": "2024-03-31T18:05:27",
"upload_time_iso_8601": "2024-03-31T18:05:27.314272Z",
"url": "https://files.pythonhosted.org/packages/99/33/97740e6251c904cb6d554b6a036d0342f33e10c0bb067bc65dd549906a81/qudi_hira_analysis-1.6.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-31 18:05:27",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dineshpinto",
"github_project": "qudi-hira-analysis",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "qudi-hira-analysis"
}