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.
Files changed (267) hide show
  1. {pyccapt-0.2.0/pyccapt.egg-info → pyccapt-0.2.1}/PKG-INFO +15 -2
  2. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/__init__.py +1 -1
  3. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/ato_tools.py +2 -0
  4. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/apt_exp_control.py +37 -26
  5. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/hdf5_creator.py +40 -1
  6. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/initialize_devices.py +14 -13
  7. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC.py +41 -4
  8. {pyccapt-0.2.0 → pyccapt-0.2.1/pyccapt.egg-info}/PKG-INFO +15 -2
  9. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/SOURCES.txt +1 -70
  10. pyccapt-0.2.0/.eggs/pytest_runner-6.0.1-py3.12.egg/ptr/__init__.py +0 -216
  11. pyccapt-0.2.0/.eggs/pytest_runner-6.0.1-py3.9.egg/ptr/__init__.py +0 -216
  12. pyccapt-0.2.0/docs/conf.py +0 -134
  13. pyccapt-0.2.0/pyccapt/calibration/tutorials/__init__.py +0 -1
  14. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/__init__.py +0 -1
  15. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_3d_reconstruction.py +0 -131
  16. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_calibration.py +0 -532
  17. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_data_loader.py +0 -141
  18. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_ion_list.py +0 -258
  19. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_ion_selection.py +0 -403
  20. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_mc_plot.py +0 -97
  21. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_special_crop.py +0 -99
  22. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_t_0_tune.py +0 -100
  23. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_temporal_crop.py +0 -115
  24. pyccapt-0.2.0/pyccapt/calibration/tutorials/tutorials_helpers/helper_visualization.py +0 -1186
  25. pyccapt-0.2.0/pyccapt/control/devices_test/camera_1.py +0 -122
  26. pyccapt-0.2.0/pyccapt/control/devices_test/camera_2.py +0 -129
  27. pyccapt-0.2.0/pyccapt/control/devices_test/counter.py +0 -29
  28. pyccapt-0.2.0/pyccapt/control/devices_test/daqami.py +0 -43
  29. pyccapt-0.2.0/pyccapt/control/devices_test/drs.py +0 -79
  30. pyccapt-0.2.0/pyccapt/control/devices_test/gates.py +0 -25
  31. pyccapt-0.2.0/pyccapt/control/devices_test/lamp_usb_switch.py +0 -66
  32. pyccapt-0.2.0/pyccapt/control/devices_test/laser_nkt_origami.py +0 -82
  33. pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_cryovac.py +0 -78
  34. pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_edwards.py +0 -68
  35. pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_pfeiffer.py +0 -14
  36. pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_v_dc.py +0 -80
  37. pyccapt-0.2.0/pyccapt/control/devices_test/serial_com_v_p.py +0 -60
  38. pyccapt-0.2.0/pyccapt/control/devices_test/serial_ports_list.py +0 -7
  39. pyccapt-0.2.0/pyccapt/control/devices_test/siglent_signal_generator.py +0 -58
  40. pyccapt-0.2.0/pyccapt/control/devices_test/tdc_roentec_t.py +0 -74
  41. pyccapt-0.2.0/pyccapt/control/devices_test/tdc_surface_concept_t_1.py +0 -140
  42. pyccapt-0.2.0/pyccapt/control/devices_test/tdc_surface_concept_t_2.py +0 -120
  43. pyccapt-0.2.0/pyccapt/control/devices_test/tdc_surface_concept_t_3.py +0 -126
  44. pyccapt-0.2.0/pyccapt/control/devices_test/thorlabs_controller.py +0 -31
  45. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/DRS.h +0 -957
  46. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/averager.h +0 -28
  47. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/drs_exam.h +0 -18
  48. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/libusb.h +0 -2113
  49. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/musbstd.h +0 -98
  50. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/mxml.h +0 -159
  51. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/include/strlcpy.h +0 -58
  52. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/DRS.cpp +0 -7738
  53. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/averager.cpp +0 -214
  54. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/drs_exam.cpp +0 -152
  55. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/drs_ox.cpp +0 -185
  56. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/musbstd.c +0 -698
  57. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/mxml.c +0 -2371
  58. pyccapt-0.2.0/pyccapt/control/drs/source/drs5_lib/src/strlcpy.c +0 -104
  59. pyccapt-0.2.0/pyccapt/control/drs/src/DRS.obj +0 -0
  60. pyccapt-0.2.0/pyccapt/control/drs/src/averager.obj +0 -0
  61. pyccapt-0.2.0/pyccapt/control/drs/src/drs_exam.obj +0 -0
  62. pyccapt-0.2.0/pyccapt/control/drs/src/drs_ox.obj +0 -0
  63. pyccapt-0.2.0/pyccapt/control/drs/src/musbstd.obj +0 -0
  64. pyccapt-0.2.0/pyccapt/control/drs/src/mxml.obj +0 -0
  65. pyccapt-0.2.0/pyccapt/control/drs/src/strlcpy.obj +0 -0
  66. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/LMF_IO.cpp +0 -6726
  67. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/LMF_IO.h +0 -966
  68. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.sln +0 -43
  69. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj +0 -581
  70. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj.filters +0 -36
  71. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP.vcxproj.user +0 -3
  72. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/simple_read_TDC8HP_grouped_LMF.zip +0 -0
  73. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/tdcmanager.h +0 -241
  74. pyccapt-0.2.0/pyccapt/control/tdc_roentdek/source/wrapper_read_TDC8HP.cpp +0 -435
  75. pyccapt-0.2.0/pyccapt/control/tdc_surface_concept/__init__.py +0 -1
  76. pyccapt-0.2.0/pyccapt/control/thorlabs_apt/APTAPI.h +0 -475
  77. pyccapt-0.2.0/pyccapt/files/IonenlisteAPT.xlsx +0 -0
  78. pyccapt-0.2.0/tests/__init__.py +0 -0
  79. {pyccapt-0.2.0 → pyccapt-0.2.1}/CHANGELOG.txt +0 -0
  80. {pyccapt-0.2.0 → pyccapt-0.2.1}/LICENSE +0 -0
  81. {pyccapt-0.2.0 → pyccapt-0.2.1}/MANIFEST.in +0 -0
  82. {pyccapt-0.2.0 → pyccapt-0.2.1}/README.md +0 -0
  83. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/CALIBRATION.md +0 -0
  84. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/DATA_STRUCTURE.md +0 -0
  85. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/__init__.py +0 -0
  86. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/clustering/__init__.py +0 -0
  87. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/clustering/clustering.py +0 -0
  88. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/clustering/isosurface.py +0 -0
  89. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/__init__.py +0 -0
  90. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/background.py +0 -0
  91. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/calibration.py +0 -0
  92. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/correction_models.py +0 -0
  93. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/diagnostics.py +0 -0
  94. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/exceptions.py +0 -0
  95. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/gui_ion_select.py +0 -0
  96. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/hist_bin_optimizer.py +0 -0
  97. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/interactive_point_identification.py +0 -0
  98. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/ion_selection.py +0 -0
  99. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/logging_library.py +0 -0
  100. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot.py +0 -0
  101. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_api.py +0 -0
  102. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_background_helpers.py +0 -0
  103. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_peak_helpers.py +0 -0
  104. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/mc_plot_selector_helpers.py +0 -0
  105. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/share_variables.py +0 -0
  106. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/tools.py +0 -0
  107. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/validation.py +0 -0
  108. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/core/widgets.py +0 -0
  109. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/__init__.py +0 -0
  110. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/data_loadcrop.py +0 -0
  111. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/data_tools.py +0 -0
  112. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/dataset_path_qt.py +0 -0
  113. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/merge_range.py +0 -0
  114. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/plot_vline_draw.py +0 -0
  115. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/raw_data_surface_concept.py +0 -0
  116. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/run_dataset_path_qt.py +0 -0
  117. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/data_tools/selectors_data.py +0 -0
  118. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/__init__.py +0 -0
  119. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/ccapt_tools.py +0 -0
  120. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/cloud_plotter.py +0 -0
  121. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/leap_tools/leap_tools.py +0 -0
  122. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/mc/__init__.py +0 -0
  123. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/mc/mc_tools.py +0 -0
  124. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/mc/tof_tools.py +0 -0
  125. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/path_utils.py +0 -0
  126. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/__init__.py +0 -0
  127. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/crystal_helper.py +0 -0
  128. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/density_map.py +0 -0
  129. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/fft.py +0 -0
  130. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/io_utils.py +0 -0
  131. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/iso_surface.py +0 -0
  132. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/rdf.py +0 -0
  133. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/reconstruction.py +0 -0
  134. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/rotation_tools.py +0 -0
  135. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/calibration/reconstructions/sdm.py +0 -0
  136. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/config.toml +0 -0
  137. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/CONTROL.md +0 -0
  138. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/DATA_STRUCTURE.md +0 -0
  139. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/__init__.py +0 -0
  140. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/__main__.py +0 -0
  141. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/__init__.py +0 -0
  142. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/apt_exp_control_func.py +0 -0
  143. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/detector_runtime.py +0 -0
  144. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/apt/experiment_state.py +0 -0
  145. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/__init__.py +0 -0
  146. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/baking_loging.py +0 -0
  147. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/com_ports.py +0 -0
  148. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/control_data_tool.py +0 -0
  149. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/device_checks.py +0 -0
  150. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/experiment_statistics.py +0 -0
  151. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/loggi.py +0 -0
  152. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/read_files.py +0 -0
  153. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/runtime.py +0 -0
  154. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/share_variables.py +0 -0
  155. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/core/tof2mc_simple.py +0 -0
  156. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/__init__.py +0 -0
  157. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/camera.py +0 -0
  158. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/edwards_tic.py +0 -0
  159. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/email_send.py +0 -0
  160. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/pfeiffer_gauges.py +0 -0
  161. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/devices/signal_generator.py +0 -0
  162. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/README.md +0 -0
  163. {pyccapt-0.2.0/pyccapt/control/devices_test → pyccapt-0.2.1/pyccapt/control/drs}/__init__.py +0 -0
  164. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs.py +0 -0
  165. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs_lib.dll +0 -0
  166. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs_lib.exp +0 -0
  167. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/drs/drs_lib.lib +0 -0
  168. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/electrode.toml +0 -0
  169. {pyccapt-0.2.0/pyccapt/control/drs → pyccapt-0.2.1/pyccapt/control/gui}/__init__.py +0 -0
  170. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_baking.py +0 -0
  171. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_cameras.py +0 -0
  172. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_gates.py +0 -0
  173. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_laser_control.py +0 -0
  174. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_main.py +0 -0
  175. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_pumps_vacuum.py +0 -0
  176. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_stage_control.py +0 -0
  177. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/gui_visualization.py +0 -0
  178. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/main_parameters.py +0 -0
  179. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/gui/process_coordinator.py +0 -0
  180. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/nkt_photonics/__init__.py +0 -0
  181. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/nkt_photonics/nktpbus_activate.py +0 -0
  182. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/nkt_photonics/origamiClassCLI.py +0 -0
  183. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/CoboldPC2011R5-2_Header-Template_1TDC8HP.lmf +0 -0
  184. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/README.md +0 -0
  185. {pyccapt-0.2.0/pyccapt/control/gui → pyccapt-0.2.1/pyccapt/control/tdc_roentdek}/__init__.py +0 -0
  186. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/cobold_tool.py +0 -0
  187. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/global.cfg +0 -0
  188. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/CoboldPC2011R5-2_Header-Template_1TDC8HP.lmf +0 -0
  189. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/global.cfg +0 -0
  190. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/hptdc_driver_3.5.2_x64.lib +0 -0
  191. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/hptdc_driver_3.5.2_x86.lib +0 -0
  192. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/source/lmf2txt.exe +0 -0
  193. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/tdc_roentdek.py +0 -0
  194. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_roentdek/wrapper_read_TDC8HP_x64.dll +0 -0
  195. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/README.md +0 -0
  196. {pyccapt-0.2.0/pyccapt/control/tdc_roentdek → pyccapt-0.2.1/pyccapt/control/tdc_surface_concept}/__init__.py +0 -0
  197. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/okFrontPanel.dll +0 -0
  198. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/pthreadVC2.dll +0 -0
  199. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/sc2ddld304_1b_tagrst.bit +0 -0
  200. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scDeviceClass60.dll +0 -0
  201. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC1.dll +0 -0
  202. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC1.lib +0 -0
  203. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/scTDC_hdf50.dll +0 -0
  204. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/tdc_gpx3.ini +0 -0
  205. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/tdc_surface_concept/tdc_surface_concept.py +0 -0
  206. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APT Server.chm +0 -0
  207. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APT.dll +0 -0
  208. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APT.lib +0 -0
  209. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTChopper.ocx +0 -0
  210. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTLaser.ocx +0 -0
  211. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTPZMotor.ocx +0 -0
  212. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTQuad.ocx +0 -0
  213. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/APTTEC.ocx +0 -0
  214. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/GdiPlus.dll +0 -0
  215. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Comms.dll +0 -0
  216. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Core.dll +0 -0
  217. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Logger.ocx +0 -0
  218. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Motor.ocx +0 -0
  219. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17NanoTrak.ocx +0 -0
  220. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Piezo.ocx +0 -0
  221. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17System.ocx +0 -0
  222. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17UIThread.dll +0 -0
  223. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/MG17Utils.dll +0 -0
  224. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/README.md +0 -0
  225. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/_APTAPI.py +0 -0
  226. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/__init__.py +0 -0
  227. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/_error_codes.py +0 -0
  228. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/core.py +0 -0
  229. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/ftd2xx.dll +0 -0
  230. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/thorlabs_apt/thorlab_motor.py +0 -0
  231. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/usb_switch/USBaccessX64.dll +0 -0
  232. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/usb_switch/__init__.py +0 -0
  233. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/control/usb_switch/usb_switch.py +0 -0
  234. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/README.md +0 -0
  235. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_baking.ui +0 -0
  236. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_cameras.ui +0 -0
  237. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_gates.ui +0 -0
  238. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_laser_control.ui +0 -0
  239. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_laser_control_special.ui +0 -0
  240. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_main.ui +0 -0
  241. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_pumps_vacuum.ui +0 -0
  242. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_stage_control.ui +0 -0
  243. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/PyQt6_UI/gui_visualization.ui +0 -0
  244. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/arrow.png +0 -0
  245. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/close_all.png +0 -0
  246. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/color_scheme.h5 +0 -0
  247. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/counter_experiments.txt +0 -0
  248. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/cryo_load_main_open.png +0 -0
  249. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/cryo_load_open.png +0 -0
  250. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/cryo_open.png +0 -0
  251. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/field_density_table.h5 +0 -0
  252. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/green-led-on.png +0 -0
  253. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/isotopeTable.h5 +0 -0
  254. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/led-orange.png +0 -0
  255. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/led-red-on.png +0 -0
  256. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/load_main_open.png +0 -0
  257. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/load_open.png +0 -0
  258. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/logo.png +0 -0
  259. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/logo2.png +0 -0
  260. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt/files/main_open.png +0 -0
  261. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/dependency_links.txt +0 -0
  262. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/entry_points.txt +0 -0
  263. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/requires.txt +0 -0
  264. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyccapt.egg-info/top_level.txt +0 -0
  265. {pyccapt-0.2.0 → pyccapt-0.2.1}/pyproject.toml +0 -0
  266. {pyccapt-0.2.0 → pyccapt-0.2.1}/setup.cfg +0 -0
  267. {pyccapt-0.2.0 → pyccapt-0.2.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pyccapt
3
- Version: 0.2.0
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
 
@@ -1,3 +1,3 @@
1
1
  """Top-level package for PyCCAPT."""
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.2.1"
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import struct
2
4
  from pathlib import Path
3
5
 
@@ -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
- self.variables.end_time = datetime.datetime.now().strftime("%d/%m/%Y %H:%M")
604
- # save data in hdf5 file
605
- hdf5_creator.hdf_creator(self.variables, self.conf, time_counter, time_ex)
606
- # Adding results of the experiment to the log file
607
- self.log_apt.info('Total number of Ions is: %s' % self.variables.total_ions)
608
- self.log_apt.info('HDF5 file is created')
609
-
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
-
624
- self.experiment_finished_event.set()
625
- # Clear up all the variables and deinitialize devices
626
- self.clear_up()
627
- self.log_apt.info('Variables and devices are cleared and deinitialized')
628
- self.variables.flag_end_experiment = True
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
- hdf_file.create_dataset(dataset_name, data=np.asarray(data), dtype=dtype)
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 = '{}'.format(value)
211
+ variables.vacuum_main = float(value)
212
212
  value, _ = tpg.pressure_gauge(1)
213
- variables.vacuum_buffer = '{}'.format(value)
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 = 'N/A'
307
- vacuum_buffer = 'N/A'
308
- vacuum_buffer_backing = 'N/A'
309
- vacuum_load_lock = 'N/A'
310
- vacuum_load_lock_backing = 'N/A'
311
- vacuum_cryo_load_lock = 'N/A'
312
- vacuum_cryo_load_lock_backing = 'N/A'
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 = '{}'.format(value)
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 = '{}'.format(value)
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
- self.lib = ctypes.WinDLL(str(self._module_dir / "scTDC1.dll"))
317
- self.lib.sc_tdc_init_inifile.argtypes = [ctypes.c_char_p]
318
- self.lib.sc_get_err_msg.argtypes = [ctypes.c_int, ctypes.c_char_p]
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
- self.lib = ctypes.WinDLL(str(self._module_dir / "scTDC_hdf50.dll"))
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
1
+ Metadata-Version: 2.4
2
2
  Name: pyccapt
3
- Version: 0.2.0
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)