pyccapt 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyccapt-0.2.0/pyccapt.egg-info → pyccapt-0.2.1}/PKG-INFO +15 -2
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/__init__.py +1 -1
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/ato_tools.py +2 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/apt_exp_control.py +37 -26
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/hdf5_creator.py +40 -1
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/initialize_devices.py +14 -13
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC.py +41 -4
- {pyccapt-0.2.0 → pyccapt-0.2.1/pyccapt.egg-info}/PKG-INFO +15 -2
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/SOURCES.txt +1 -70
- pyccapt-0.2.0/.eggs/pytest_runner-6.0.1-py3.12.egg/ptr/__init__.py +0 -216
- pyccapt-0.2.0/.eggs/pytest_runner-6.0.1-py3.9.egg/ptr/__init__.py +0 -216
- pyccapt-0.2.0/docs/conf.py +0 -134
- pyccapt-0.2.0/pyccapt/calibration/tutorials/__init__.py +0 -1
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/__init__.py +0 -1
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_3d_reconstruction.py +0 -131
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_calibration.py +0 -532
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_data_loader.py +0 -141
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_ion_list.py +0 -258
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_ion_selection.py +0 -403
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_mc_plot.py +0 -97
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_special_crop.py +0 -99
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_t_0_tune.py +0 -100
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_temporal_crop.py +0 -115
- pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_visualization.py +0 -1186
- pyccapt-0.2.0/pyccapt/control/devices_test/camera_1.py +0 -122
- pyccapt-0.2.0/pyccapt/control/devices_test/camera_2.py +0 -129
- pyccapt-0.2.0/pyccapt/control/devices_test/counter.py +0 -29
- pyccapt-0.2.0/pyccapt/control/devices_test/daqami.py +0 -43
- pyccapt-0.2.0/pyccapt/control/devices_test/drs.py +0 -79
- pyccapt-0.2.0/pyccapt/control/devices_test/gates.py +0 -25
- pyccapt-0.2.0/pyccapt/control/devices_test/lamp_usb_switch.py +0 -66
- pyccapt-0.2.0/pyccapt/control/devices_test/laser_nkt_origami.py +0 -82
- pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_cryovac.py +0 -78
- pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_edwards.py +0 -68
- pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_pfeiffer.py +0 -14
- pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_v_dc.py +0 -80
- pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_v_p.py +0 -60
- pyccapt-0.2.0/pyccapt/control/devices_test/serial_ports_list.py +0 -7
- pyccapt-0.2.0/pyccapt/control/devices_test/siglent_signal_generator.py +0 -58
- pyccapt-0.2.0/pyccapt/control/devices_test/tdc_roentec_t.py +0 -74
- pyccapt-0.2.0/pyccapt/control/devices_test/tdc_surface_concept_t_1.py +0 -140
- pyccapt-0.2.0/pyccapt/control/devices_test/tdc_surface_concept_t_2.py +0 -120
- pyccapt-0.2.0/pyccapt/control/devices_test/tdc_surface_concept_t_3.py +0 -126
- pyccapt-0.2.0/pyccapt/control/devices_test/thorlabs_controller.py +0 -31
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/DRS.h +0 -957
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/averager.h +0 -28
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/drs_exam.h +0 -18
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/libusb.h +0 -2113
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/musbstd.h +0 -98
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/mxml.h +0 -159
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/strlcpy.h +0 -58
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/DRS.cpp +0 -7738
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/averager.cpp +0 -214
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/drs_exam.cpp +0 -152
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/drs_ox.cpp +0 -185
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/musbstd.c +0 -698
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/mxml.c +0 -2371
- pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/strlcpy.c +0 -104
- pyccapt-0.2.0/pyccapt/control/drs/src/DRS.obj +0 -0
- pyccapt-0.2.0/pyccapt/control/drs/src/averager.obj +0 -0
- pyccapt-0.2.0/pyccapt/control/drs/src/drs_exam.obj +0 -0
- pyccapt-0.2.0/pyccapt/control/drs/src/drs_ox.obj +0 -0
- pyccapt-0.2.0/pyccapt/control/drs/src/musbstd.obj +0 -0
- pyccapt-0.2.0/pyccapt/control/drs/src/mxml.obj +0 -0
- pyccapt-0.2.0/pyccapt/control/drs/src/strlcpy.obj +0 -0
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/LMF_IO.cpp +0 -6726
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/LMF_IO.h +0 -966
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.sln +0 -43
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj +0 -581
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj.filters +0 -36
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj.user +0 -3
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP_grouped_LMF.zip +0 -0
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/tdcmanager.h +0 -241
- pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/wrapper_read_TDC8HP.cpp +0 -435
- pyccapt-0.2.0/pyccapt/control/tdc_surface_concept/__init__.py +0 -1
- pyccapt-0.2.0/pyccapt/control/thorlabs_apt/APTAPI.h +0 -475
- pyccapt-0.2.0/pyccapt/files/IonenlisteAPT.xlsx +0 -0
- pyccapt-0.2.0/tests/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/CHANGELOG.txt +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/LICENSE +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/MANIFEST.in +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/README.md +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/CALIBRATION.md +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/DATA_STRUCTURE.md +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/clustering/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/clustering/clustering.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/clustering/isosurface.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/background.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/calibration.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/correction_models.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/diagnostics.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/exceptions.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/gui_ion_select.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/hist_bin_optimizer.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/interactive_point_identification.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/ion_selection.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/logging_library.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_api.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_background_helpers.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_peak_helpers.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_selector_helpers.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/share_variables.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/tools.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/validation.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/widgets.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/data_loadcrop.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/data_tools.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/dataset_path_qt.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/merge_range.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/plot_vline_draw.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/raw_data_surface_concept.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/run_dataset_path_qt.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/selectors_data.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/ccapt_tools.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/cloud_plotter.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/leap_tools.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/mc/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/mc/mc_tools.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/mc/tof_tools.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/path_utils.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/crystal_helper.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/density_map.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/fft.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/io_utils.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/iso_surface.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/rdf.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/reconstruction.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/rotation_tools.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/sdm.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/config.toml +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/CONTROL.md +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/DATA_STRUCTURE.md +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/__main__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/apt_exp_control_func.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/detector_runtime.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/experiment_state.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/baking_loging.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/com_ports.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/control_data_tool.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/device_checks.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/experiment_statistics.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/loggi.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/read_files.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/runtime.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/share_variables.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/tof2mc_simple.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/camera.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/edwards_tic.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/email_send.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/pfeiffer_gauges.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/signal_generator.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/README.md +0 -0
- {pyccapt-0.2.0/pyccapt/control/devices_test → pyccapt-0.2.1/pyccapt/control/drs}/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs_lib.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs_lib.exp +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs_lib.lib +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/electrode.toml +0 -0
- {pyccapt-0.2.0/pyccapt/control/drs → pyccapt-0.2.1/pyccapt/control/gui}/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_baking.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_cameras.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_gates.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_laser_control.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_main.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_pumps_vacuum.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_stage_control.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_visualization.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/main_parameters.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/process_coordinator.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/nkt_photonics/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/nkt_photonics/nktpbus_activate.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/nkt_photonics/origamiClassCLI.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/CoboldPC2011R5-2_Header-Template_1TDC8HP.lmf +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/README.md +0 -0
- {pyccapt-0.2.0/pyccapt/control/gui → pyccapt-0.2.1/pyccapt/control/tdc_roentdek}/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/cobold_tool.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/global.cfg +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/CoboldPC2011R5-2_Header-Template_1TDC8HP.lmf +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/global.cfg +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/hptdc_driver_3.5.2_x64.lib +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/hptdc_driver_3.5.2_x86.lib +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/lmf2txt.exe +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/tdc_roentdek.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/wrapper_read_TDC8HP_x64.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/README.md +0 -0
- {pyccapt-0.2.0/pyccapt/control/tdc_roentdek → pyccapt-0.2.1/pyccapt/control/tdc_surface_concept}/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/okFrontPanel.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/pthreadVC2.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/sc2ddld304_1b_tagrst.bit +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scDeviceClass60.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC1.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC1.lib +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC_hdf50.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/tdc_gpx3.ini +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/tdc_surface_concept.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APT Server.chm +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APT.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APT.lib +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTChopper.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTLaser.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTPZMotor.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTQuad.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTTEC.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/GdiPlus.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Comms.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Core.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Logger.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Motor.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17NanoTrak.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Piezo.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17System.ocx +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17UIThread.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Utils.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/README.md +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/_APTAPI.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/_error_codes.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/core.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/ftd2xx.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/thorlab_motor.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/usb_switch/USBaccessX64.dll +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/usb_switch/__init__.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/usb_switch/usb_switch.py +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/README.md +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_baking.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_cameras.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_gates.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_laser_control.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_laser_control_special.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_main.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_pumps_vacuum.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_stage_control.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_visualization.ui +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/arrow.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/close_all.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/color_scheme.h5 +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/counter_experiments.txt +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/cryo_load_main_open.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/cryo_load_open.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/cryo_open.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/field_density_table.h5 +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/green-led-on.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/isotopeTable.h5 +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/led-orange.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/led-red-on.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/load_main_open.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/load_open.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/logo.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/logo2.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/main_open.png +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/dependency_links.txt +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/entry_points.txt +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/requires.txt +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/top_level.txt +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/pyproject.toml +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/setup.cfg +0 -0
- {pyccapt-0.2.0 → pyccapt-0.2.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pyccapt
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A Python package for atom probe control and data calibration.
|
|
5
5
|
Home-page: https://github.com/mmonajem/pyccapt
|
|
6
6
|
Author: Mehrpad Monajem
|
|
@@ -117,6 +117,19 @@ Requires-Dist: build; extra == "dev"
|
|
|
117
117
|
Requires-Dist: pytest; extra == "dev"
|
|
118
118
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
119
119
|
Requires-Dist: twine; extra == "dev"
|
|
120
|
+
Dynamic: author
|
|
121
|
+
Dynamic: author-email
|
|
122
|
+
Dynamic: classifier
|
|
123
|
+
Dynamic: description
|
|
124
|
+
Dynamic: description-content-type
|
|
125
|
+
Dynamic: home-page
|
|
126
|
+
Dynamic: keywords
|
|
127
|
+
Dynamic: license
|
|
128
|
+
Dynamic: license-file
|
|
129
|
+
Dynamic: provides-extra
|
|
130
|
+
Dynamic: requires-dist
|
|
131
|
+
Dynamic: requires-python
|
|
132
|
+
Dynamic: summary
|
|
120
133
|
|
|
121
134
|
# PyCCAPT
|
|
122
135
|
|
|
@@ -600,32 +600,43 @@ class APT_Exp_Control:
|
|
|
600
600
|
self.variables.last_screen_shot = True
|
|
601
601
|
validate_detector_data_lengths(self.variables, self.conf, self.log_apt)
|
|
602
602
|
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
603
|
+
try:
|
|
604
|
+
self.variables.end_time = datetime.datetime.now().strftime("%d/%m/%Y %H:%M")
|
|
605
|
+
# save data in hdf5 file
|
|
606
|
+
hdf5_creator.hdf_creator(self.variables, self.conf, time_counter, time_ex)
|
|
607
|
+
# Adding results of the experiment to the log file
|
|
608
|
+
self.log_apt.info('Total number of Ions is: %s' % self.variables.total_ions)
|
|
609
|
+
self.log_apt.info('HDF5 file is created')
|
|
610
|
+
|
|
611
|
+
# save setup parameters and run statistics in a txt file
|
|
612
|
+
experiment_statistics.save_statistics_apt(self.variables, self.conf)
|
|
613
|
+
|
|
614
|
+
# send an email
|
|
615
|
+
if len(self.variables.email) > 3:
|
|
616
|
+
apt_exp_control_func.send_info_email(self.log_apt, self.variables)
|
|
617
|
+
|
|
618
|
+
# Save new value of experiment counter
|
|
619
|
+
counter_path = runtime.ensure_counter_file()
|
|
620
|
+
self.variables.counter += 1
|
|
621
|
+
counter_path.write_text(str(self.variables.counter), encoding="utf-8")
|
|
622
|
+
self.log_apt.info('Experiment counter is increased')
|
|
623
|
+
except Exception as exc:
|
|
624
|
+
message = f'Experiment finalization failed: {exc.__class__.__name__}: {exc}'
|
|
625
|
+
print(message)
|
|
626
|
+
if self.log_apt is not None:
|
|
627
|
+
self.log_apt.exception(message)
|
|
628
|
+
finally:
|
|
629
|
+
try:
|
|
630
|
+
# Clear up all the variables and deinitialize devices
|
|
631
|
+
self.clear_up()
|
|
632
|
+
if self.log_apt is not None:
|
|
633
|
+
self.log_apt.info('Variables and devices are cleared and deinitialized')
|
|
634
|
+
except Exception as exc:
|
|
635
|
+
print(f'Experiment cleanup failed: {exc.__class__.__name__}: {exc}')
|
|
636
|
+
if self.log_apt is not None:
|
|
637
|
+
self.log_apt.exception('Experiment cleanup failed')
|
|
638
|
+
self.experiment_finished_event.set()
|
|
639
|
+
self.variables.flag_end_experiment = True
|
|
629
640
|
|
|
630
641
|
def clear_up(self):
|
|
631
642
|
"""
|
|
@@ -32,8 +32,47 @@ def _write_chunked_dataset(hdf_file, dataset_name: str, chunk_files: list[Path],
|
|
|
32
32
|
offset += chunk_size
|
|
33
33
|
|
|
34
34
|
|
|
35
|
+
def _coerce_numeric_array(data, dtype):
|
|
36
|
+
target_dtype = np.dtype(dtype)
|
|
37
|
+
values = np.asarray(data)
|
|
38
|
+
needs_string_conversion = (
|
|
39
|
+
values.dtype.kind in {"U", "S", "O"}
|
|
40
|
+
and (
|
|
41
|
+
np.issubdtype(target_dtype, np.floating)
|
|
42
|
+
or np.issubdtype(target_dtype, np.integer)
|
|
43
|
+
)
|
|
44
|
+
)
|
|
45
|
+
if not needs_string_conversion:
|
|
46
|
+
return values.astype(target_dtype, copy=False)
|
|
47
|
+
|
|
48
|
+
def _normalize_string(value):
|
|
49
|
+
if isinstance(value, bytes):
|
|
50
|
+
value = value.decode("utf-8", errors="ignore")
|
|
51
|
+
text = str(value).strip()
|
|
52
|
+
return text
|
|
53
|
+
|
|
54
|
+
def _convert_value(value):
|
|
55
|
+
text = _normalize_string(value)
|
|
56
|
+
if not text or text.lower() in {"n/a", "nan", "none"}:
|
|
57
|
+
return np.nan if np.issubdtype(target_dtype, np.floating) else 0
|
|
58
|
+
try:
|
|
59
|
+
numeric_value = float(text)
|
|
60
|
+
except (TypeError, ValueError):
|
|
61
|
+
return np.nan if np.issubdtype(target_dtype, np.floating) else 0
|
|
62
|
+
if np.issubdtype(target_dtype, np.integer):
|
|
63
|
+
return int(numeric_value)
|
|
64
|
+
return numeric_value
|
|
65
|
+
|
|
66
|
+
if values.ndim == 0:
|
|
67
|
+
return np.asarray(_convert_value(values.item()), dtype=target_dtype)
|
|
68
|
+
|
|
69
|
+
flat_values = [_convert_value(value) for value in values.reshape(-1)]
|
|
70
|
+
return np.asarray(flat_values, dtype=target_dtype).reshape(values.shape)
|
|
71
|
+
|
|
72
|
+
|
|
35
73
|
def _create_dataset(hdf_file, dataset_name: str, data, dtype) -> None:
|
|
36
|
-
|
|
74
|
+
dataset_data = _coerce_numeric_array(data, dtype)
|
|
75
|
+
hdf_file.create_dataset(dataset_name, data=dataset_data, dtype=dtype)
|
|
37
76
|
|
|
38
77
|
|
|
39
78
|
def _write_surface_concept_detector_data(hdf_file, variables) -> None:
|
|
@@ -208,9 +208,9 @@ def initialize_pfeiffer_gauges(variables):
|
|
|
208
208
|
"""
|
|
209
209
|
tpg = TPG362(port=variables.COM_PORT_gauge_mc)
|
|
210
210
|
value, _ = tpg.pressure_gauge(2)
|
|
211
|
-
variables.vacuum_main =
|
|
211
|
+
variables.vacuum_main = float(value)
|
|
212
212
|
value, _ = tpg.pressure_gauge(1)
|
|
213
|
-
variables.vacuum_buffer =
|
|
213
|
+
variables.vacuum_buffer = float(value)
|
|
214
214
|
|
|
215
215
|
|
|
216
216
|
def state_update(conf, variables, emitter):
|
|
@@ -303,13 +303,13 @@ def state_update(conf, variables, emitter):
|
|
|
303
303
|
|
|
304
304
|
start_time = time.time()
|
|
305
305
|
log_time_time_interval = conf['log_time_time_interval']
|
|
306
|
-
vacuum_main =
|
|
307
|
-
vacuum_buffer =
|
|
308
|
-
vacuum_buffer_backing =
|
|
309
|
-
vacuum_load_lock =
|
|
310
|
-
vacuum_load_lock_backing =
|
|
311
|
-
vacuum_cryo_load_lock =
|
|
312
|
-
vacuum_cryo_load_lock_backing =
|
|
306
|
+
vacuum_main = -1.0
|
|
307
|
+
vacuum_buffer = -1.0
|
|
308
|
+
vacuum_buffer_backing = -1.0
|
|
309
|
+
vacuum_load_lock = -1.0
|
|
310
|
+
vacuum_load_lock_backing = -1.0
|
|
311
|
+
vacuum_cryo_load_lock = -1.0
|
|
312
|
+
vacuum_cryo_load_lock_backing = -1.0
|
|
313
313
|
set_temperature_tmp_cryo = 0
|
|
314
314
|
set_temperature_tmp_ll = 0
|
|
315
315
|
while emitter.bool_flag_while_loop:
|
|
@@ -369,23 +369,24 @@ def state_update(conf, variables, emitter):
|
|
|
369
369
|
if conf['COM_PORT_gauge_mc'] != "off" and tpg is not None:
|
|
370
370
|
value, _ = tpg.pressure_gauge(2)
|
|
371
371
|
try:
|
|
372
|
-
vacuum_main =
|
|
372
|
+
vacuum_main = float(value)
|
|
373
373
|
clear_issue("vacuum_main")
|
|
374
374
|
except Exception as e:
|
|
375
375
|
report_once("vacuum_main", f"Error reading Temperature:{e}")
|
|
376
376
|
# Handle the case where response is not a valid float
|
|
377
|
-
vacuum_main = -1
|
|
377
|
+
vacuum_main = -1.0
|
|
378
378
|
variables.vacuum_main = vacuum_main
|
|
379
379
|
emitter.vacuum_main.emit(float(vacuum_main))
|
|
380
380
|
value, _ = tpg.pressure_gauge(1)
|
|
381
381
|
try:
|
|
382
|
-
vacuum_buffer =
|
|
382
|
+
vacuum_buffer = float(value)
|
|
383
383
|
clear_issue("vacuum_buffer")
|
|
384
384
|
except Exception as e:
|
|
385
385
|
report_once("vacuum_buffer", f"Error reading BC:{e}")
|
|
386
386
|
tpg = None
|
|
387
387
|
# Handle the case where response is not a valid float
|
|
388
|
-
vacuum_buffer = -1
|
|
388
|
+
vacuum_buffer = -1.0
|
|
389
|
+
variables.vacuum_buffer = vacuum_buffer
|
|
389
390
|
emitter.vacuum_buffer.emit(float(vacuum_buffer))
|
|
390
391
|
if conf['pump_ll'] != "off" and E_AGC_ll is not None:
|
|
391
392
|
response = command_edwards(conf, variables, 'pressure', E_AGC=E_AGC_ll, status='load_lock')
|
|
@@ -79,6 +79,7 @@ import os
|
|
|
79
79
|
from pathlib import Path
|
|
80
80
|
import time
|
|
81
81
|
import traceback
|
|
82
|
+
from contextlib import contextmanager
|
|
82
83
|
|
|
83
84
|
try: # most stuff works without numpy
|
|
84
85
|
import numpy as np
|
|
@@ -304,6 +305,37 @@ def copy_statistics(s):
|
|
|
304
305
|
return r
|
|
305
306
|
|
|
306
307
|
|
|
308
|
+
@contextmanager
|
|
309
|
+
def _vendor_runtime_environment(module_dir: Path):
|
|
310
|
+
old_cwd = Path.cwd()
|
|
311
|
+
dll_directory = None
|
|
312
|
+
set_dll_directory = None
|
|
313
|
+
if os.name == 'nt':
|
|
314
|
+
if hasattr(os, "add_dll_directory"):
|
|
315
|
+
dll_directory = os.add_dll_directory(str(module_dir))
|
|
316
|
+
try:
|
|
317
|
+
kernel32 = ctypes.windll.kernel32
|
|
318
|
+
kernel32.SetDllDirectoryW.argtypes = [ctypes.c_wchar_p]
|
|
319
|
+
kernel32.SetDllDirectoryW.restype = ctypes.c_bool
|
|
320
|
+
set_dll_directory = kernel32.SetDllDirectoryW
|
|
321
|
+
set_dll_directory(str(module_dir))
|
|
322
|
+
except Exception:
|
|
323
|
+
set_dll_directory = None
|
|
324
|
+
|
|
325
|
+
try:
|
|
326
|
+
os.chdir(module_dir)
|
|
327
|
+
yield
|
|
328
|
+
finally:
|
|
329
|
+
os.chdir(old_cwd)
|
|
330
|
+
if set_dll_directory is not None:
|
|
331
|
+
try:
|
|
332
|
+
set_dll_directory(None)
|
|
333
|
+
except Exception:
|
|
334
|
+
pass
|
|
335
|
+
if dll_directory is not None:
|
|
336
|
+
dll_directory.close()
|
|
337
|
+
|
|
338
|
+
|
|
307
339
|
class scTDClib:
|
|
308
340
|
|
|
309
341
|
def __init__(self):
|
|
@@ -313,9 +345,10 @@ class scTDClib:
|
|
|
313
345
|
self._module_dir = Path(__file__).resolve().parent
|
|
314
346
|
|
|
315
347
|
if os.name == 'nt':
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
348
|
+
with _vendor_runtime_environment(self._module_dir):
|
|
349
|
+
self.lib = ctypes.WinDLL(str(self._module_dir / "scTDC1.dll"))
|
|
350
|
+
self.lib.sc_tdc_init_inifile.argtypes = [ctypes.c_char_p]
|
|
351
|
+
self.lib.sc_get_err_msg.argtypes = [ctypes.c_int, ctypes.c_char_p]
|
|
319
352
|
else:
|
|
320
353
|
self.lib = ctypes.CDLL("libscTDC.so.1")
|
|
321
354
|
self.lib.sc_tdc_init_inifile.argtypes = [ctypes.c_char_p]
|
|
@@ -361,6 +394,9 @@ class scTDClib:
|
|
|
361
394
|
candidate = self._module_dir / ini_path
|
|
362
395
|
if candidate.exists():
|
|
363
396
|
ini_path = candidate
|
|
397
|
+
if os.name == 'nt':
|
|
398
|
+
with _vendor_runtime_environment(self._module_dir):
|
|
399
|
+
return self.lib.sc_tdc_init_inifile(str(ini_path).encode('utf-8'))
|
|
364
400
|
return self.lib.sc_tdc_init_inifile(str(ini_path).encode('utf-8'))
|
|
365
401
|
|
|
366
402
|
def sc_get_err_msg(self, errcode):
|
|
@@ -500,7 +536,8 @@ class scTDC_hdf5lib:
|
|
|
500
536
|
"""
|
|
501
537
|
self._module_dir = Path(__file__).resolve().parent
|
|
502
538
|
if os.name == 'nt':
|
|
503
|
-
|
|
539
|
+
with _vendor_runtime_environment(self._module_dir):
|
|
540
|
+
self.lib = ctypes.WinDLL(str(self._module_dir / "scTDC_hdf50.dll"))
|
|
504
541
|
else:
|
|
505
542
|
self.lib = ctypes.CDLL("libscTDC_hdf5.so.0")
|
|
506
543
|
l = self.lib
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pyccapt
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A Python package for atom probe control and data calibration.
|
|
5
5
|
Home-page: https://github.com/mmonajem/pyccapt
|
|
6
6
|
Author: Mehrpad Monajem
|
|
@@ -117,6 +117,19 @@ Requires-Dist: build; extra == "dev"
|
|
|
117
117
|
Requires-Dist: pytest; extra == "dev"
|
|
118
118
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
119
119
|
Requires-Dist: twine; extra == "dev"
|
|
120
|
+
Dynamic: author
|
|
121
|
+
Dynamic: author-email
|
|
122
|
+
Dynamic: classifier
|
|
123
|
+
Dynamic: description
|
|
124
|
+
Dynamic: description-content-type
|
|
125
|
+
Dynamic: home-page
|
|
126
|
+
Dynamic: keywords
|
|
127
|
+
Dynamic: license
|
|
128
|
+
Dynamic: license-file
|
|
129
|
+
Dynamic: provides-extra
|
|
130
|
+
Dynamic: requires-dist
|
|
131
|
+
Dynamic: requires-python
|
|
132
|
+
Dynamic: summary
|
|
120
133
|
|
|
121
134
|
# PyCCAPT
|
|
122
135
|
|
|
@@ -4,9 +4,6 @@ MANIFEST.in
|
|
|
4
4
|
README.md
|
|
5
5
|
pyproject.toml
|
|
6
6
|
setup.py
|
|
7
|
-
.eggs/pytest_runner-6.0.1-py3.12.egg/ptr/__init__.py
|
|
8
|
-
.eggs/pytest_runner-6.0.1-py3.9.egg/ptr/__init__.py
|
|
9
|
-
docs/conf.py
|
|
10
7
|
pyccapt/__init__.py
|
|
11
8
|
pyccapt/config.toml
|
|
12
9
|
pyccapt.egg-info/PKG-INFO
|
|
@@ -69,18 +66,6 @@ pyccapt/calibration/reconstructions/rdf.py
|
|
|
69
66
|
pyccapt/calibration/reconstructions/reconstruction.py
|
|
70
67
|
pyccapt/calibration/reconstructions/rotation_tools.py
|
|
71
68
|
pyccapt/calibration/reconstructions/sdm.py
|
|
72
|
-
pyccapt/calibration/tutorials/__init__.py
|
|
73
|
-
pyccapt/calibration/tutorials/tutorials_helpers/__init__.py
|
|
74
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_3d_reconstruction.py
|
|
75
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_calibration.py
|
|
76
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_data_loader.py
|
|
77
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_ion_list.py
|
|
78
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_ion_selection.py
|
|
79
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_mc_plot.py
|
|
80
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_special_crop.py
|
|
81
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_t_0_tune.py
|
|
82
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_temporal_crop.py
|
|
83
|
-
pyccapt/calibration/tutorials/tutorials_helpers/helper_visualization.py
|
|
84
69
|
pyccapt/control/CONTROL.md
|
|
85
70
|
pyccapt/control/DATA_STRUCTURE.md
|
|
86
71
|
pyccapt/control/__init__.py
|
|
@@ -110,54 +95,12 @@ pyccapt/control/devices/email_send.py
|
|
|
110
95
|
pyccapt/control/devices/initialize_devices.py
|
|
111
96
|
pyccapt/control/devices/pfeiffer_gauges.py
|
|
112
97
|
pyccapt/control/devices/signal_generator.py
|
|
113
|
-
pyccapt/control/devices_test/__init__.py
|
|
114
|
-
pyccapt/control/devices_test/camera_1.py
|
|
115
|
-
pyccapt/control/devices_test/camera_2.py
|
|
116
|
-
pyccapt/control/devices_test/counter.py
|
|
117
|
-
pyccapt/control/devices_test/daqami.py
|
|
118
|
-
pyccapt/control/devices_test/drs.py
|
|
119
|
-
pyccapt/control/devices_test/gates.py
|
|
120
|
-
pyccapt/control/devices_test/lamp_usb_switch.py
|
|
121
|
-
pyccapt/control/devices_test/laser_nkt_origami.py
|
|
122
|
-
pyccapt/control/devices_test/serial_com_cryovac.py
|
|
123
|
-
pyccapt/control/devices_test/serial_com_edwards.py
|
|
124
|
-
pyccapt/control/devices_test/serial_com_pfeiffer.py
|
|
125
|
-
pyccapt/control/devices_test/serial_com_v_dc.py
|
|
126
|
-
pyccapt/control/devices_test/serial_com_v_p.py
|
|
127
|
-
pyccapt/control/devices_test/serial_ports_list.py
|
|
128
|
-
pyccapt/control/devices_test/siglent_signal_generator.py
|
|
129
|
-
pyccapt/control/devices_test/tdc_roentec_t.py
|
|
130
|
-
pyccapt/control/devices_test/tdc_surface_concept_t_1.py
|
|
131
|
-
pyccapt/control/devices_test/tdc_surface_concept_t_2.py
|
|
132
|
-
pyccapt/control/devices_test/tdc_surface_concept_t_3.py
|
|
133
|
-
pyccapt/control/devices_test/thorlabs_controller.py
|
|
134
98
|
pyccapt/control/drs/README.md
|
|
135
99
|
pyccapt/control/drs/__init__.py
|
|
136
100
|
pyccapt/control/drs/drs.py
|
|
137
101
|
pyccapt/control/drs/drs_lib.dll
|
|
138
102
|
pyccapt/control/drs/drs_lib.exp
|
|
139
103
|
pyccapt/control/drs/drs_lib.lib
|
|
140
|
-
pyccapt/control/drs/source/drs5_lib/include/DRS.h
|
|
141
|
-
pyccapt/control/drs/source/drs5_lib/include/averager.h
|
|
142
|
-
pyccapt/control/drs/source/drs5_lib/include/drs_exam.h
|
|
143
|
-
pyccapt/control/drs/source/drs5_lib/include/libusb.h
|
|
144
|
-
pyccapt/control/drs/source/drs5_lib/include/musbstd.h
|
|
145
|
-
pyccapt/control/drs/source/drs5_lib/include/mxml.h
|
|
146
|
-
pyccapt/control/drs/source/drs5_lib/include/strlcpy.h
|
|
147
|
-
pyccapt/control/drs/source/drs5_lib/src/DRS.cpp
|
|
148
|
-
pyccapt/control/drs/source/drs5_lib/src/averager.cpp
|
|
149
|
-
pyccapt/control/drs/source/drs5_lib/src/drs_exam.cpp
|
|
150
|
-
pyccapt/control/drs/source/drs5_lib/src/drs_ox.cpp
|
|
151
|
-
pyccapt/control/drs/source/drs5_lib/src/musbstd.c
|
|
152
|
-
pyccapt/control/drs/source/drs5_lib/src/mxml.c
|
|
153
|
-
pyccapt/control/drs/source/drs5_lib/src/strlcpy.c
|
|
154
|
-
pyccapt/control/drs/src/DRS.obj
|
|
155
|
-
pyccapt/control/drs/src/averager.obj
|
|
156
|
-
pyccapt/control/drs/src/drs_exam.obj
|
|
157
|
-
pyccapt/control/drs/src/drs_ox.obj
|
|
158
|
-
pyccapt/control/drs/src/musbstd.obj
|
|
159
|
-
pyccapt/control/drs/src/mxml.obj
|
|
160
|
-
pyccapt/control/drs/src/strlcpy.obj
|
|
161
104
|
pyccapt/control/gui/__init__.py
|
|
162
105
|
pyccapt/control/gui/gui_baking.py
|
|
163
106
|
pyccapt/control/gui/gui_cameras.py
|
|
@@ -180,19 +123,10 @@ pyccapt/control/tdc_roentdek/global.cfg
|
|
|
180
123
|
pyccapt/control/tdc_roentdek/tdc_roentdek.py
|
|
181
124
|
pyccapt/control/tdc_roentdek/wrapper_read_TDC8HP_x64.dll
|
|
182
125
|
pyccapt/control/tdc_roentdek/source/CoboldPC2011R5-2_Header-Template_1TDC8HP.lmf
|
|
183
|
-
pyccapt/control/tdc_roentdek/source/LMF_IO.cpp
|
|
184
|
-
pyccapt/control/tdc_roentdek/source/LMF_IO.h
|
|
185
126
|
pyccapt/control/tdc_roentdek/source/global.cfg
|
|
186
127
|
pyccapt/control/tdc_roentdek/source/hptdc_driver_3.5.2_x64.lib
|
|
187
128
|
pyccapt/control/tdc_roentdek/source/hptdc_driver_3.5.2_x86.lib
|
|
188
129
|
pyccapt/control/tdc_roentdek/source/lmf2txt.exe
|
|
189
|
-
pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.sln
|
|
190
|
-
pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj
|
|
191
|
-
pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj.filters
|
|
192
|
-
pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj.user
|
|
193
|
-
pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP_grouped_LMF.zip
|
|
194
|
-
pyccapt/control/tdc_roentdek/source/tdcmanager.h
|
|
195
|
-
pyccapt/control/tdc_roentdek/source/wrapper_read_TDC8HP.cpp
|
|
196
130
|
pyccapt/control/tdc_surface_concept/README.md
|
|
197
131
|
pyccapt/control/tdc_surface_concept/__init__.py
|
|
198
132
|
pyccapt/control/tdc_surface_concept/okFrontPanel.dll
|
|
@@ -208,7 +142,6 @@ pyccapt/control/tdc_surface_concept/tdc_surface_concept.py
|
|
|
208
142
|
pyccapt/control/thorlabs_apt/APT Server.chm
|
|
209
143
|
pyccapt/control/thorlabs_apt/APT.dll
|
|
210
144
|
pyccapt/control/thorlabs_apt/APT.lib
|
|
211
|
-
pyccapt/control/thorlabs_apt/APTAPI.h
|
|
212
145
|
pyccapt/control/thorlabs_apt/APTChopper.ocx
|
|
213
146
|
pyccapt/control/thorlabs_apt/APTLaser.ocx
|
|
214
147
|
pyccapt/control/thorlabs_apt/APTPZMotor.ocx
|
|
@@ -234,7 +167,6 @@ pyccapt/control/thorlabs_apt/thorlab_motor.py
|
|
|
234
167
|
pyccapt/control/usb_switch/USBaccessX64.dll
|
|
235
168
|
pyccapt/control/usb_switch/__init__.py
|
|
236
169
|
pyccapt/control/usb_switch/usb_switch.py
|
|
237
|
-
pyccapt/files/IonenlisteAPT.xlsx
|
|
238
170
|
pyccapt/files/arrow.png
|
|
239
171
|
pyccapt/files/close_all.png
|
|
240
172
|
pyccapt/files/color_scheme.h5
|
|
@@ -261,5 +193,4 @@ pyccapt/files/PyQt6_UI/gui_laser_control_special.ui
|
|
|
261
193
|
pyccapt/files/PyQt6_UI/gui_main.ui
|
|
262
194
|
pyccapt/files/PyQt6_UI/gui_pumps_vacuum.ui
|
|
263
195
|
pyccapt/files/PyQt6_UI/gui_stage_control.ui
|
|
264
|
-
pyccapt/files/PyQt6_UI/gui_visualization.ui
|
|
265
|
-
tests/__init__.py
|
|
196
|
+
pyccapt/files/PyQt6_UI/gui_visualization.ui
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Implementation
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import os as _os
|
|
6
|
-
import shlex as _shlex
|
|
7
|
-
import contextlib as _contextlib
|
|
8
|
-
import sys as _sys
|
|
9
|
-
import operator as _operator
|
|
10
|
-
import itertools as _itertools
|
|
11
|
-
import warnings as _warnings
|
|
12
|
-
|
|
13
|
-
import pkg_resources
|
|
14
|
-
import setuptools.command.test as orig
|
|
15
|
-
from setuptools import Distribution
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@_contextlib.contextmanager
|
|
19
|
-
def _save_argv(repl=None):
|
|
20
|
-
saved = _sys.argv[:]
|
|
21
|
-
if repl is not None:
|
|
22
|
-
_sys.argv[:] = repl
|
|
23
|
-
try:
|
|
24
|
-
yield saved
|
|
25
|
-
finally:
|
|
26
|
-
_sys.argv[:] = saved
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class CustomizedDist(Distribution):
|
|
30
|
-
|
|
31
|
-
allow_hosts = None
|
|
32
|
-
index_url = None
|
|
33
|
-
|
|
34
|
-
def fetch_build_egg(self, req):
|
|
35
|
-
"""Specialized version of Distribution.fetch_build_egg
|
|
36
|
-
that respects respects allow_hosts and index_url."""
|
|
37
|
-
from setuptools.command.easy_install import easy_install
|
|
38
|
-
|
|
39
|
-
dist = Distribution({'script_args': ['easy_install']})
|
|
40
|
-
dist.parse_config_files()
|
|
41
|
-
opts = dist.get_option_dict('easy_install')
|
|
42
|
-
keep = (
|
|
43
|
-
'find_links',
|
|
44
|
-
'site_dirs',
|
|
45
|
-
'index_url',
|
|
46
|
-
'optimize',
|
|
47
|
-
'site_dirs',
|
|
48
|
-
'allow_hosts',
|
|
49
|
-
)
|
|
50
|
-
for key in list(opts):
|
|
51
|
-
if key not in keep:
|
|
52
|
-
del opts[key] # don't use any other settings
|
|
53
|
-
if self.dependency_links:
|
|
54
|
-
links = self.dependency_links[:]
|
|
55
|
-
if 'find_links' in opts:
|
|
56
|
-
links = opts['find_links'][1].split() + links
|
|
57
|
-
opts['find_links'] = ('setup', links)
|
|
58
|
-
if self.allow_hosts:
|
|
59
|
-
opts['allow_hosts'] = ('test', self.allow_hosts)
|
|
60
|
-
if self.index_url:
|
|
61
|
-
opts['index_url'] = ('test', self.index_url)
|
|
62
|
-
install_dir_func = getattr(self, 'get_egg_cache_dir', _os.getcwd)
|
|
63
|
-
install_dir = install_dir_func()
|
|
64
|
-
cmd = easy_install(
|
|
65
|
-
dist,
|
|
66
|
-
args=["x"],
|
|
67
|
-
install_dir=install_dir,
|
|
68
|
-
exclude_scripts=True,
|
|
69
|
-
always_copy=False,
|
|
70
|
-
build_directory=None,
|
|
71
|
-
editable=False,
|
|
72
|
-
upgrade=False,
|
|
73
|
-
multi_version=True,
|
|
74
|
-
no_report=True,
|
|
75
|
-
user=False,
|
|
76
|
-
)
|
|
77
|
-
cmd.ensure_finalized()
|
|
78
|
-
return cmd.easy_install(req)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
class PyTest(orig.test):
|
|
82
|
-
"""
|
|
83
|
-
>>> import setuptools
|
|
84
|
-
>>> dist = setuptools.Distribution()
|
|
85
|
-
>>> cmd = PyTest(dist)
|
|
86
|
-
"""
|
|
87
|
-
|
|
88
|
-
user_options = [
|
|
89
|
-
('extras', None, "Install (all) setuptools extras when running tests"),
|
|
90
|
-
(
|
|
91
|
-
'index-url=',
|
|
92
|
-
None,
|
|
93
|
-
"Specify an index url from which to retrieve dependencies",
|
|
94
|
-
),
|
|
95
|
-
(
|
|
96
|
-
'allow-hosts=',
|
|
97
|
-
None,
|
|
98
|
-
"Whitelist of comma-separated hosts to allow "
|
|
99
|
-
"when retrieving dependencies",
|
|
100
|
-
),
|
|
101
|
-
(
|
|
102
|
-
'addopts=',
|
|
103
|
-
None,
|
|
104
|
-
"Additional options to be passed verbatim to the pytest runner",
|
|
105
|
-
),
|
|
106
|
-
]
|
|
107
|
-
|
|
108
|
-
def initialize_options(self):
|
|
109
|
-
self.extras = False
|
|
110
|
-
self.index_url = None
|
|
111
|
-
self.allow_hosts = None
|
|
112
|
-
self.addopts = []
|
|
113
|
-
self.ensure_setuptools_version()
|
|
114
|
-
|
|
115
|
-
@staticmethod
|
|
116
|
-
def ensure_setuptools_version():
|
|
117
|
-
"""
|
|
118
|
-
Due to the fact that pytest-runner is often required (via
|
|
119
|
-
setup-requires directive) by toolchains that never invoke
|
|
120
|
-
it (i.e. they're only installing the package, not testing it),
|
|
121
|
-
instead of declaring the dependency in the package
|
|
122
|
-
metadata, assert the requirement at run time.
|
|
123
|
-
"""
|
|
124
|
-
pkg_resources.require('setuptools>=27.3')
|
|
125
|
-
|
|
126
|
-
def finalize_options(self):
|
|
127
|
-
if self.addopts:
|
|
128
|
-
self.addopts = _shlex.split(self.addopts)
|
|
129
|
-
|
|
130
|
-
@staticmethod
|
|
131
|
-
def marker_passes(marker):
|
|
132
|
-
"""
|
|
133
|
-
Given an environment marker, return True if the marker is valid
|
|
134
|
-
and matches this environment.
|
|
135
|
-
"""
|
|
136
|
-
return (
|
|
137
|
-
not marker
|
|
138
|
-
or not pkg_resources.invalid_marker(marker)
|
|
139
|
-
and pkg_resources.evaluate_marker(marker)
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
def install_dists(self, dist):
|
|
143
|
-
"""
|
|
144
|
-
Extend install_dists to include extras support
|
|
145
|
-
"""
|
|
146
|
-
return _itertools.chain(
|
|
147
|
-
orig.test.install_dists(dist), self.install_extra_dists(dist)
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
def install_extra_dists(self, dist):
|
|
151
|
-
"""
|
|
152
|
-
Install extras that are indicated by markers or
|
|
153
|
-
install all extras if '--extras' is indicated.
|
|
154
|
-
"""
|
|
155
|
-
extras_require = dist.extras_require or {}
|
|
156
|
-
|
|
157
|
-
spec_extras = (
|
|
158
|
-
(spec.partition(':'), reqs) for spec, reqs in extras_require.items()
|
|
159
|
-
)
|
|
160
|
-
matching_extras = (
|
|
161
|
-
reqs
|
|
162
|
-
for (name, sep, marker), reqs in spec_extras
|
|
163
|
-
# include unnamed extras or all if self.extras indicated
|
|
164
|
-
if (not name or self.extras)
|
|
165
|
-
# never include extras that fail to pass marker eval
|
|
166
|
-
and self.marker_passes(marker)
|
|
167
|
-
)
|
|
168
|
-
results = list(map(dist.fetch_build_eggs, matching_extras))
|
|
169
|
-
return _itertools.chain.from_iterable(results)
|
|
170
|
-
|
|
171
|
-
@staticmethod
|
|
172
|
-
def _warn_old_setuptools():
|
|
173
|
-
msg = (
|
|
174
|
-
"pytest-runner will stop working on this version of setuptools; "
|
|
175
|
-
"please upgrade to setuptools 30.4 or later or pin to "
|
|
176
|
-
"pytest-runner < 5."
|
|
177
|
-
)
|
|
178
|
-
ver_str = pkg_resources.get_distribution('setuptools').version
|
|
179
|
-
ver = pkg_resources.parse_version(ver_str)
|
|
180
|
-
if ver < pkg_resources.parse_version('30.4'):
|
|
181
|
-
_warnings.warn(msg)
|
|
182
|
-
|
|
183
|
-
def run(self):
|
|
184
|
-
"""
|
|
185
|
-
Override run to ensure requirements are available in this session (but
|
|
186
|
-
don't install them anywhere).
|
|
187
|
-
"""
|
|
188
|
-
self._warn_old_setuptools()
|
|
189
|
-
dist = CustomizedDist()
|
|
190
|
-
for attr in 'allow_hosts index_url'.split():
|
|
191
|
-
setattr(dist, attr, getattr(self, attr))
|
|
192
|
-
for attr in (
|
|
193
|
-
'dependency_links install_requires tests_require extras_require '
|
|
194
|
-
).split():
|
|
195
|
-
setattr(dist, attr, getattr(self.distribution, attr))
|
|
196
|
-
installed_dists = self.install_dists(dist)
|
|
197
|
-
if self.dry_run:
|
|
198
|
-
self.announce('skipping tests (dry run)')
|
|
199
|
-
return
|
|
200
|
-
paths = map(_operator.attrgetter('location'), installed_dists)
|
|
201
|
-
with self.paths_on_pythonpath(paths):
|
|
202
|
-
with self.project_on_sys_path():
|
|
203
|
-
return self.run_tests()
|
|
204
|
-
|
|
205
|
-
@property
|
|
206
|
-
def _argv(self):
|
|
207
|
-
return ['pytest'] + self.addopts
|
|
208
|
-
|
|
209
|
-
def run_tests(self):
|
|
210
|
-
"""
|
|
211
|
-
Invoke pytest, replacing argv. Return result code.
|
|
212
|
-
"""
|
|
213
|
-
with _save_argv(_sys.argv[:1] + self.addopts):
|
|
214
|
-
result_code = __import__('pytest').main()
|
|
215
|
-
if result_code:
|
|
216
|
-
raise SystemExit(result_code)
|