Package: qudi-hira-analysis
Qudi Hira AnalysisAnalytics suite for qubit SPM using FPGA timetaggersInstallationpipinstallqudi-hira-analysisUpdate to latest versionpipinstall--upgradequdi-hira-analysisCitationIf you are publishing scientific results that use this code, as good scientific practice you
should citethis work.FeaturesAutomated data import and handlingWorks natively with data fromQudiandQudi-HiraFast 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-SPMUses a Dataclass-centered design for easy access to data and metadataUsagefrompathlibimportPathimportseabornassnsfromqudi_hira_analysisimportDataHandlerdh=DataHandler(data_folder=Path("C:/Data"),# Path to data folderfigure_folder=Path("C:/QudiHiraAnalysis"),# Path to figure foldermeasurement_folder=Path("20230101_NV1")# Measurement folder name (optional))# Lazy-load all pulsed measurements with "odmr" in the path into a Dataclassodmr_measurements=dh.load_measurements("odmr",pulsed=True)# Fit ODMR data with a double Lorentzianodmr=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 fitax=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 splittingax.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 reportprint(result.fit_report())# Save figuredh.save_figures(filepath=Path("odmr_fit"),fig=ax.get_figure())DocumentationThe full documentation is availablehere.SchemaOverallflowchart 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 5Dataclassflowchart 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];
    endLicenseThis license of this project is located in the top level folder underLICENSE. Some specific files contain their
individual licenses in the file header docstring.BuildPrerequisitesPoetrygitClone repo, install deps and add environment to Jupytergitclonehttps://github.com/dineshpinto/qudi-hira-analysis.gitcdqudi-hira-analysis
poetryinstall
poetryrunpython-mipykernelinstall--user--name=qudi-hira-analysis
poetryrunjupyterlabMakefileThe Makefile located innotebooks/is configured to generate a variety of outputs:make pdf: Converts all notebooks to PDF (requires LaTeX backend)make html: Converts all notebooks to HTMLmake py: Converts all notebooks to Python (can be useful for VCS)make all: Sequentially runs all the notebooks in folderTo use themakecommand on Windows you can installChocolatey, then
install make withchoco install make