module-qc-tools 2.4.1__tar.gz → 2.4.2rc0__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 (160) hide show
  1. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/.pre-commit-config.yaml +6 -0
  2. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/PKG-INFO +5 -4
  3. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/README.md +1 -1
  4. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/config.md +53 -6
  5. module_qc_tools-2.4.2rc0/docs/emulator.md +8 -0
  6. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/history.md +43 -8
  7. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/install.md +2 -2
  8. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/measurements.md +2 -3
  9. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/mkdocs.yml +7 -0
  10. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/pyproject.toml +10 -16
  11. module_qc_tools-2.4.2rc0/src/module_qc_tools/__init__.py +9 -0
  12. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/_version.py +2 -2
  13. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/ADC_CALIBRATION.py +43 -17
  14. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/ANALOG_READBACK.py +45 -20
  15. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/DATA_TRANSMISSION.py +48 -18
  16. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/INJECTION_CAPACITANCE.py +43 -19
  17. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/IV_MEASURE.py +30 -16
  18. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/LONG_TERM_STABILITY_DCS.py +28 -15
  19. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/LP_MODE.py +42 -16
  20. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/OVERVOLTAGE_PROTECTION.py +42 -18
  21. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/SLDO.py +43 -17
  22. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/UNDERSHUNT_PROTECTION.py +42 -18
  23. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/VCAL_CALIBRATION.py +44 -19
  24. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/__init__.py +0 -2
  25. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/__main__.py +0 -2
  26. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/get_nominal_current.py +9 -9
  27. module_qc_tools-2.4.2rc0/src/module_qc_tools/cli/globals.py +334 -0
  28. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/hardware_emulator.py +234 -207
  29. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/main.py +14 -8
  30. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/split_old_config.py +19 -21
  31. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/cli/upload_localdb.py +14 -10
  32. module_qc_tools-2.4.2rc0/src/module_qc_tools/cli/yarr.py +360 -0
  33. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/console.py +2 -0
  34. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_emulator_merged_vmux.json +4 -0
  35. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_itkpixv2.json +6 -0
  36. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_v1.json +6 -0
  37. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_itkpixv2.json +6 -0
  38. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_v1.json +6 -0
  39. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/module_state_template.json +1 -0
  40. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/adc_calibration.py +32 -3
  41. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/analog_readback.py +66 -7
  42. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/data_transmission.py +45 -7
  43. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/injection_capacitance.py +25 -2
  44. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/iv_measure.py +31 -13
  45. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/long_term_stability_dcs.py +33 -9
  46. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/lp_mode.py +24 -4
  47. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/overvoltage_protection.py +25 -4
  48. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/sldo.py +25 -5
  49. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/undershunt_protection.py +24 -4
  50. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/vcal_calibration.py +25 -2
  51. module_qc_tools-2.4.2rc0/src/module_qc_tools/typing_compat.py +23 -0
  52. {module_qc_tools-2.4.1/src/module_qc_tools → module_qc_tools-2.4.2rc0/src/module_qc_tools/utils}/__init__.py +3 -8
  53. module_qc_tools-2.4.2rc0/src/module_qc_tools/utils/hrc.py +26 -0
  54. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/utils/misc.py +1 -4
  55. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/utils/subprocess_emulator.py +2 -0
  56. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/utils/yarr.py +5 -5
  57. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/tbump.toml +2 -2
  58. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/tests/conftest.py +2 -0
  59. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/tests/test_emulator.py +2 -1
  60. module_qc_tools-2.4.2rc0/tests/test_measurements.py +131 -0
  61. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/tests/test_schema.py +2 -2
  62. module_qc_tools-2.4.1/emulator/README.md +0 -113
  63. module_qc_tools-2.4.1/src/module_qc_tools/cli/globals.py +0 -252
  64. module_qc_tools-2.4.1/src/module_qc_tools/data/schema/common.json +0 -1928
  65. module_qc_tools-2.4.1/src/module_qc_tools/utils/__init__.py +0 -1
  66. module_qc_tools-2.4.1/tests/test_measurements.py +0 -54
  67. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/.gitignore +0 -0
  68. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/.gitlab-ci.yml +0 -0
  69. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/.gitmodules +0 -0
  70. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/.linkcheckerrc +0 -0
  71. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/LICENSE +0 -0
  72. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/.gitkeep +0 -0
  73. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/.overrides/main.html +0 -0
  74. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/.snippets/abbrs.txt +0 -0
  75. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/.snippets/links.txt +0 -0
  76. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/assets/css/custom.css +0 -0
  77. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/development.md +0 -0
  78. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/index.md +0 -0
  79. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/meta/authors.md +0 -0
  80. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/reference/cli.md +0 -0
  81. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/reference/gen_ref_nav.py +0 -0
  82. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2 +0 -0
  83. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2 +0 -0
  84. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2 +0 -0
  85. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2 +0 -0
  86. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2 +0 -0
  87. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2 +0 -0
  88. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2 +0 -0
  89. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2 +0 -0
  90. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2 +0 -0
  91. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2 +0 -0
  92. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2 +0 -0
  93. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2 +0 -0
  94. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2 +0 -0
  95. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2 +0 -0
  96. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2 +0 -0
  97. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2 +0 -0
  98. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2 +0 -0
  99. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2 +0 -0
  100. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xIIzI.woff2 +0 -0
  101. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2 +0 -0
  102. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2 +0 -0
  103. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2 +0 -0
  104. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBBc4.woff2 +0 -0
  105. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2 +0 -0
  106. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2 +0 -0
  107. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2 +0 -0
  108. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2 +0 -0
  109. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2 +0 -0
  110. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2 +0 -0
  111. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBBc4.woff2 +0 -0
  112. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2 +0 -0
  113. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2 +0 -0
  114. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2 +0 -0
  115. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2 +0 -0
  116. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2 +0 -0
  117. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 +0 -0
  118. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4mxK.woff2 +0 -0
  119. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 +0 -0
  120. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu72xKOzY.woff2 +0 -0
  121. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 +0 -0
  122. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 +0 -0
  123. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 +0 -0
  124. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSV0mf0h.woff2 +0 -0
  125. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSZ0mf0h.woff2 +0 -0
  126. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSd0mf0h.woff2 +0 -0
  127. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSh0mQ.woff2 +0 -0
  128. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSt0mf0h.woff2 +0 -0
  129. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSx0mf0h.woff2 +0 -0
  130. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtElOUlYIw.woff2 +0 -0
  131. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEleUlYIw.woff2 +0 -0
  132. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEluUlYIw.woff2 +0 -0
  133. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEm-Ul.woff2 +0 -0
  134. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEmOUlYIw.woff2 +0 -0
  135. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEn-UlYIw.woff2 +0 -0
  136. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/fonts.css +0 -0
  137. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/docs/stylesheets/readme.txt +0 -0
  138. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_itkpixv2.json +0 -0
  139. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_v1.json +0 -0
  140. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_itkpixv2.json +0 -0
  141. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_v1.json +0 -0
  142. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/configs/meas_config.json +0 -0
  143. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy.json +0 -0
  144. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy_disabledchip.json +0 -0
  145. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_info.json +0 -0
  146. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip1.json +0 -0
  147. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip2.json +0 -0
  148. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip3.json +0 -0
  149. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip4.json +0 -0
  150. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/emulator/configs/controller/specCfg-rd53b.json +0 -0
  151. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/schema/hw_config.json +0 -0
  152. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/data/schema/meas_config.json +0 -0
  153. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/measurements/__init__.py +0 -0
  154. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/utils/hardware_control_base.py +0 -0
  155. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/utils/multimeter.py +0 -0
  156. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/utils/ntc.py +0 -0
  157. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/src/module_qc_tools/utils/power_supply.py +0 -0
  158. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/tests/test_package.py +0 -0
  159. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/tests/test_schema/cutter_pcb_tab.json +0 -0
  160. {module_qc_tools-2.4.1 → module_qc_tools-2.4.2rc0}/tests/test_schema/cutter_pcb_tab_BAD.json +0 -0
@@ -94,3 +94,9 @@ repos:
94
94
  # hooks:
95
95
  # - id: sp-repo-review
96
96
  # additional_dependencies: ["repo-review[cli]"]
97
+
98
+ - repo: https://github.com/asottile/pyupgrade
99
+ rev: v3.19.1
100
+ hooks:
101
+ - id: pyupgrade
102
+ args: ["--py38-plus"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: module_qc_tools
3
- Version: 2.4.1
3
+ Version: 2.4.2rc0
4
4
  Summary: Module qc tools
5
5
  Project-URL: Homepage, https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools
6
6
  Project-URL: Bug Tracker, https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/issues
@@ -31,12 +31,13 @@ License-File: LICENSE
31
31
  Classifier: License :: OSI Approved :: MIT License
32
32
  Classifier: Operating System :: OS Independent
33
33
  Classifier: Programming Language :: Python :: 3
34
- Requires-Python: >=3.7
34
+ Requires-Python: >=3.8
35
35
  Requires-Dist: check-jsonschema
36
36
  Requires-Dist: importlib-resources; python_version < '3.9'
37
- Requires-Dist: module-qc-data-tools>=1.0.23
37
+ Requires-Dist: module-qc-data-tools>=1.1.4rc2
38
38
  Requires-Dist: module-qc-database-tools>=2.5.0rc0
39
39
  Requires-Dist: numpy
40
+ Requires-Dist: packaging
40
41
  Requires-Dist: pre-commit
41
42
  Requires-Dist: requests
42
43
  Requires-Dist: rich
@@ -45,7 +46,7 @@ Requires-Dist: typer>=0.9.0
45
46
  Requires-Dist: urllib3<2,>=1.26.20; 'el7.x86_64' in platform_release
46
47
  Description-Content-Type: text/markdown
47
48
 
48
- # module-qc-tools v2.4.1
49
+ # module-qc-tools v2.4.2rc0
49
50
 
50
51
  A general python tool for running ITkPixV1.1 and ITkPixV2 module QC tests
51
52
 
@@ -1,4 +1,4 @@
1
- # module-qc-tools v2.4.1
1
+ # module-qc-tools v2.4.2rc0
2
2
 
3
3
  A general python tool for running ITkPixV1.1 and ITkPixV2 module QC tests
4
4
 
@@ -130,6 +130,55 @@ The `ntc` block specifies the path and the commands for handling the NTC
130
130
  | `n_try` | number of re-tries in case the script fails to read from the ntc |
131
131
  | `success_code` | exit status that indicates success. The default is 0. |
132
132
 
133
+ ### Humidity Reading
134
+
135
+ The `hrc` block specifies the path and the commands for handling the humidity
136
+ reading
137
+
138
+ **Configuration settings**
139
+
140
+ | Name | Description |
141
+ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
142
+ | `run_dir` | path (relative or absolute) to the directory where the script for humidity reading `ReadHR` should be run |
143
+ | `cmd` | command to read the humidity (relative humidity, RH) from InfluxDB. The command returns a std output which represents the value of measured humidity (float rrepresenting the percentage realitive humidity). For example: when RH = 2.15%, `cmd` returns std output = `2.15`. |
144
+ | `share_vmux` | whether Vmux channels are shorted on the data adapter card or not |
145
+ | `v_mux_channels` | multimeter channel to measure the Vmux for each chip (correspond to each element in the dcv_cmd in the multimeter block) |
146
+ | `n_try` | number of re-tries in case the script fails to read from the ntc |
147
+ | `success_code` | exit status that indicates success. The default is 0. |
148
+
149
+ The script to read the humidity data from InfluxDB can have a format similar to
150
+ the following:
151
+
152
+ ```python title="ReadHR.py"
153
+ from influxdb import InfluxDBClient
154
+ import re
155
+ import sys
156
+
157
+ client = InfluxDBClient(
158
+ host="your.host.number",
159
+ port=8086,
160
+ username="your_username",
161
+ password="your_password",
162
+ ssl=False,
163
+ )
164
+ client.switch_database("DB1")
165
+
166
+ query = 'select mean("HR_variable_name_mqtt") from "autogen"."mqtt_consumer" where "your_topic_tag" = \'/your_mqtt_topic_name\' and time > now() -1m ORDER BY time DESC LIMIT 1'
167
+
168
+ result = client.query(query)
169
+
170
+ if not result.error:
171
+ if str(result) != "ResultSet({})":
172
+ mystring = str(result.raw)
173
+ if len(mystring) > 0:
174
+ chunks = re.split(",", mystring)
175
+ hum = re.split("]", chunks[len(chunks) - 1])
176
+ print(hum[0])
177
+ sys.exit(0)
178
+
179
+ sys.exit(1)
180
+ ```
181
+
133
182
  ## Measurement Configuration
134
183
 
135
184
  ### tasks
@@ -139,12 +188,10 @@ layer-dependent power settings:
139
188
 
140
189
  **Configuration settings**
141
190
 
142
- | Name | Description |
143
- | ---------------- | -------------------------------------------------------------------------------------------------------------------------- |
144
- | `v_max` | the voltage to be set to the power supply (i.e. the max voltage since the power supply should operate in constant current) |
145
- | `i_config` | the current at which the module should be configured |
146
- | `share_vmux` | whether to merge the Vmux channels or not |
147
- | `v_mux_channels` | multimeter channel to measure the Vmux for each chip (correspond to each element in the dcv_cmd in the multimeter block) |
191
+ | Name | Description |
192
+ | ---------- | -------------------------------------------------------------------------------------------------------------------------- |
193
+ | `v_max` | the voltage to be set to the power supply (i.e. the max voltage since the power supply should operate in constant current) |
194
+ | `i_config` | the current at which the module should be configured |
148
195
 
149
196
  The main part of the `tasks` block is to specify all
150
197
  [measurements](measurements.md).
@@ -0,0 +1,8 @@
1
+ # Toy emulator for module-qc-tool
2
+
3
+ The emulator uses `module_state.json` to store the current state of the module.
4
+ The initial state (when the module is powered off) is copied from the template
5
+ file `module_state_template.json`.
6
+
7
+ For details on what can be run, view the command line interface documentation
8
+ for [`mqt emulator`][mqt-emulator].
@@ -12,15 +12,47 @@ and this project adheres to
12
12
 
13
13
  **_Changed:_**
14
14
 
15
+ - Update current (sigma) units in IV progress display (!229)
16
+ - Dropped `emulator-XYZ` executables in favor of `mqt emulator` (!232)
17
+ - Increased minimum supported python version to 3.8 (dropping 3.7) (!237)
18
+ - IV emulator with more realistic values than previous fit (!238)
19
+
15
20
  **_Added:_**
16
21
 
17
- **_Fixed:_**
22
+ - Check for module type when recording HV; add option if no HV is intended;
23
+ error if HV not measurable for non-digital modules (!235)
24
+ - Record bias voltage, leakage current and module temperature during measurement
25
+ (!214); requires `module-qc-data-tools`
26
+ [v1.1.3](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-data-tools/-/tags/v1.1.3)
27
+ - Humidity measurement (!226)
18
28
 
19
- ## [2.4.1](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.4.1) - 2025-xx-yy ## {: #mqt-v2.4.1 }
29
+ !!! important
20
30
 
21
- **_Changed:_**
31
+ Requires adding a `hrc` block in the hardware config file:
22
32
 
23
- **_Added:_**
33
+ ```json
34
+ "hrc": {
35
+
36
+ "run_dir": "../Instruments",
37
+ "cmd": "./ReadHR.py",
38
+ "n_try": 0,
39
+ "success_code": 0
40
+ }
41
+ ```
42
+
43
+ **_Fixed:_**
44
+
45
+ - Add protection against humidity measurements if the `hrc` block is not
46
+ included in the config (!230)
47
+ - added support for `tags` in `yarr.run_scan`
48
+ - add `yarr` scan utilities for generic yarr scans as well as for MHT, TUN, PFA
49
+ (!225)
50
+ - Added protection in long-term stability dcs test to check the L1/L2 power
51
+ before running (!212)
52
+ - Refactored CLI to improve python-only interactions using [typing.Annotated][]
53
+ (!232)
54
+
55
+ ## [2.4.1](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.4.1) - 2025-03-25 ## {: #mqt-v2.4.1 }
24
56
 
25
57
  **_Fixed:_**
26
58
 
@@ -40,10 +72,13 @@ and this project adheres to
40
72
  - add ability to enable/disable LPM on targeted TX channels (!207)
41
73
  - add data merging substest to data transmission test (!218)
42
74
 
43
- <!-- prettier-ignore -->
44
- > [!IMPORTANT]
45
- > Requires update of the `yarr` section in the hardware config file:
46
- > `"dataMergingCheck_exe": "./bin/dataMergingCheck",`
75
+ !!! important
76
+
77
+ Requires update of the `yarr` section in the hardware config file:
78
+
79
+ ```
80
+ "dataMergingCheck_exe": "./bin/dataMergingCheck",
81
+ ```
47
82
 
48
83
  - add Iref trim information to output of the AR test (!221)
49
84
  - add protection when ramping HV down (!211)
@@ -92,7 +92,7 @@ package.
92
92
  $ python -m venv venv
93
93
  $ source venv/bin/activate
94
94
  $ python -m pip install -U pip
95
- $ python -m pip install -U pip module-qc-tools==2.4.1
95
+ $ python -m pip install -U pip module-qc-tools==2.4.2rc0
96
96
  ```
97
97
 
98
98
  ### via uv
@@ -101,7 +101,7 @@ $ python -m pip install -U pip module-qc-tools==2.4.1
101
101
  $ python -m venv venv
102
102
  $ source venv/bin/activate
103
103
  $ python -m pip install uv
104
- $ uv pip install module-qc-tools==2.4.1
104
+ $ uv pip install module-qc-tools==2.4.2rc0
105
105
  ```
106
106
 
107
107
  # Usage
@@ -63,8 +63,7 @@ specified in the folder `schema`. To run the common schema check for all test
63
63
  outputs, do:
64
64
 
65
65
  ```
66
- check-jsonschema [path to output json files] --schemafile $(module-qc-tools
67
- --prefix)/schema/common.json
66
+ check-jsonschema [path to output json files] --schemafile $(mqdt --prefix)/schema_measurement.json
68
67
 
69
68
  ```
70
69
 
@@ -79,7 +78,7 @@ check-jsonschema [path to output json files] --schemafile $(module-qc-tools
79
78
 
80
79
  ```
81
80
  check-jsonschema emulator/outputs/SLDO_reference/<timestamp>/chip1.json
82
- --schemafile $(module-qc-tools --prefix)/schema/common.json check-jsonschema
81
+ --schemafile $(mqdt --prefix)/schema_measurement.json check-jsonschema
83
82
  emulator/outputs/SLDO_reference/<timestamp>/chip1.json --schemafile $(module-qc-tools
84
83
  --prefix)/schema/SLDO.json
85
84
  ```
@@ -50,6 +50,7 @@ nav:
50
50
  - About: index.md
51
51
  - Installation: install.md
52
52
  - Configuration: config.md
53
+ - Emulation: emulator.md
53
54
  - Measurements: measurements.md
54
55
  - API: reference/api/
55
56
  - CLI: reference/cli.md
@@ -100,11 +101,17 @@ plugins:
100
101
  merge_init_into_class: true
101
102
  separate_signature: true
102
103
  show_signature_annotations: true
104
+ docstring_section_style: spacy
105
+ signature_crossrefs: true
106
+ show_symbol_type_heading: true
107
+ show_symbol_type_toc: true
103
108
  show_source: true
104
109
  # Other
105
110
  filters:
106
111
  - "!__all__"
107
112
  - "!^_[^_]"
113
+ inventories:
114
+ - https://docs.python.org/3/objects.inv
108
115
  # to add redirects
109
116
  #redirects:
110
117
  # redirect_maps:
@@ -14,19 +14,20 @@ maintainers = [
14
14
  description = "Module qc tools"
15
15
  readme = "README.md"
16
16
  license = { file="LICENSE" }
17
- requires-python = ">=3.7"
17
+ requires-python = ">=3.8"
18
18
  dependencies = [
19
19
  "numpy",
20
20
  "tabulate",
21
21
  "pre-commit",
22
22
  "check-jsonschema",
23
- "module-qc-data-tools >= 1.0.23",
23
+ "module-qc-data-tools >= 1.1.4rc2",
24
24
  "module-qc-database-tools >= 2.5.0rc0",
25
25
  'importlib_resources; python_version < "3.9"',
26
26
  "requests",
27
27
  'urllib3>=1.26.20,<2; "el7.x86_64" in platform_release',
28
28
  "typer>=0.9.0",
29
29
  "rich",
30
+ "packaging",
30
31
  ]
31
32
  classifiers = [
32
33
  "Programming Language :: Python :: 3",
@@ -43,18 +44,6 @@ classifiers = [
43
44
  [project.scripts]
44
45
  module-qc-tools = "module_qc_tools.cli:app"
45
46
  "mqt" = "module_qc_tools.cli:app"
46
- emulator-scanConsole = "module_qc_tools.cli.hardware_emulator:run_scanConsole"
47
- emulator-write-register = "module_qc_tools.cli.hardware_emulator:run_write_register"
48
- emulator-read-register = "module_qc_tools.cli.hardware_emulator:run_read_register"
49
- emulator-read-adc = "module_qc_tools.cli.hardware_emulator:run_read_adc"
50
- emulator-read-ringosc = "module_qc_tools.cli.hardware_emulator:run_read_ringosc"
51
- emulator-data-merging-check = "module_qc_tools.cli.hardware_emulator:run_dataMergingCheck"
52
- emulator-eye-diagram = "module_qc_tools.cli.hardware_emulator:run_eyeDiagram"
53
- emulator-switch-lpm = "module_qc_tools.cli.hardware_emulator:run_switchLPM"
54
- emulator-control-ps = "module_qc_tools.cli.hardware_emulator:run_control_PS"
55
- emulator-control-hv = "module_qc_tools.cli.hardware_emulator:run_control_HV"
56
- emulator-measureV = "module_qc_tools.cli.hardware_emulator:run_measureV"
57
- emulator-measureT = "module_qc_tools.cli.hardware_emulator:run_measureT"
58
47
  measurement-ADC-CALIBRATION = "module_qc_tools.cli.ADC_CALIBRATION:app"
59
48
  measurement-ANALOG-READBACK = "module_qc_tools.cli.ANALOG_READBACK:app"
60
49
  measurement-DATA-TRANSMISSION = "module_qc_tools.cli.DATA_TRANSMISSION:app"
@@ -117,7 +106,7 @@ dependencies = [
117
106
  test = "pytest -ra {args}"
118
107
 
119
108
  [[tool.hatch.envs.dev.matrix]]
120
- python = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "pypy3.8"]
109
+ python = ["3.8", "3.9", "3.10", "3.11", "3.12", "pypy3.8"]
121
110
 
122
111
  [tool.hatch.envs.docs]
123
112
  template = "docs"
@@ -146,6 +135,8 @@ dependencies = [
146
135
  "mdx-truly-sane-lists", # for 2-space indented lists (https://github.com/mkdocs/mkdocs/issues/545)
147
136
  # formatting signatures
148
137
  "black>23",
138
+ # https://github.com/mkdocs/mkdocs-click/issues/78
139
+ "mkdocs-autorefs",
149
140
  ]
150
141
 
151
142
  [tool.hatch.envs.docs.env-vars]
@@ -191,6 +182,9 @@ ignore = [
191
182
  "PT004", # Incorrect check, usefixtures is the correct way to do this
192
183
  "RUF012", # Would require a lot of ClassVar's
193
184
  ]
185
+ # enable below when we hit python 3.10 minimum: https://github.com/fastapi/typer/discussions/802#discussioncomment-12759260
186
+ #isort.required-imports = ["from __future__ import annotations"]
187
+ typing-modules = ["module_qc_tools.typing_compat"]
194
188
 
195
189
  [tool.ruff.lint.flake8-tidy-imports.banned-api]
196
190
  "typing.Callable".msg = "Use collections.abc.Callable instead."
@@ -206,7 +200,7 @@ ignore = [
206
200
  "src/module_qc_tools/cli/hardware_emulator.py" = ["B008"]
207
201
 
208
202
  [tool.pylint]
209
- master.py-version = "3.7"
203
+ master.py-version = "3.8"
210
204
  master.ignore-paths= ["src/module_qc_tools/_version.py"]
211
205
  reports.output-format = "colorized"
212
206
  similarities.ignore-imports = "yes"
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from module_qc_tools._version import __version__
4
+ from module_qc_tools.utils import datapath as data
5
+
6
+ __all__ = (
7
+ "__version__",
8
+ "data",
9
+ )
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '2.4.1'
21
- __version_tuple__ = version_tuple = (2, 4, 1)
20
+ __version__ = version = '2.4.2rc0'
21
+ __version_tuple__ = version_tuple = (2, 4, 2, 'rc0')
@@ -2,27 +2,42 @@ import logging
2
2
  from datetime import datetime
3
3
  from pathlib import Path
4
4
  from tempfile import TemporaryDirectory
5
- from typing import Optional
6
5
 
6
+ import itksn
7
7
  import typer
8
- from module_qc_data_tools import (
8
+ from module_qc_data_tools.qcDataFrame import (
9
+ outputDataFrame,
10
+ )
11
+ from module_qc_data_tools.utils import (
12
+ get_chip_type_from_serial_number,
9
13
  get_layer_from_sn,
10
14
  get_sn_from_connectivity,
11
- outputDataFrame,
12
15
  save_dict_list,
13
16
  )
14
17
  from module_qc_database_tools.utils import (
15
18
  get_BOMCode_from_file,
16
- get_chip_type_from_serial_number,
17
19
  )
18
20
 
19
21
  from module_qc_tools.cli.globals import (
20
22
  CONTEXT_SETTINGS,
21
- OPTIONS,
22
23
  LogLevel,
24
+ OPTION_bias,
25
+ OPTION_config_hw,
26
+ OPTION_config_meas,
27
+ OPTION_debug_gnd,
28
+ OPTION_module_connectivity,
29
+ OPTION_output_dir,
30
+ OPTION_perchip,
31
+ OPTION_save_local,
32
+ OPTION_site,
33
+ OPTION_use_calib_ADC,
34
+ OPTION_use_pixel_config,
35
+ OPTION_verbosity,
36
+ check_module_connectivity,
23
37
  )
24
38
  from module_qc_tools.console import console
25
39
  from module_qc_tools.measurements.adc_calibration import run
40
+ from module_qc_tools.utils import datapath as mqt_data
26
41
  from module_qc_tools.utils.misc import (
27
42
  add_identifiers_metadata,
28
43
  copytree,
@@ -42,19 +57,23 @@ logger = logging.getLogger("measurement")
42
57
 
43
58
  @app.command()
44
59
  def main(
45
- hw_config_path: Path = OPTIONS["config_hw"],
46
- meas_config_path: Path = OPTIONS["config_meas"],
47
- base_output_dir: Path = OPTIONS["output_dir"],
48
- module_connectivity: Optional[Path] = OPTIONS["module_connectivity"],
49
- _verbosity: LogLevel = OPTIONS["verbosity"],
50
- perchip: bool = OPTIONS["perchip"],
51
- use_pixel_config: bool = OPTIONS["use_pixel_config"],
52
- institution: str = OPTIONS["site"],
53
- debug_gnd: bool = OPTIONS["debug_gnd"],
54
- save_local: bool = OPTIONS["save_local"],
55
- use_calib_adc: bool = OPTIONS["use_calib_ADC"],
60
+ hw_config_path: OPTION_config_hw = None,
61
+ meas_config_path: OPTION_config_meas = mqt_data / "configs" / "meas_config.json",
62
+ base_output_dir: OPTION_output_dir = Path("outputs"),
63
+ module_connectivity: OPTION_module_connectivity = None,
64
+ _verbosity: OPTION_verbosity = LogLevel.info,
65
+ perchip: OPTION_perchip = False,
66
+ use_pixel_config: OPTION_use_pixel_config = False,
67
+ institution: OPTION_site = "",
68
+ debug_gnd: OPTION_debug_gnd = False,
69
+ save_local: OPTION_save_local = True,
70
+ use_calib_adc: OPTION_use_calib_ADC = False,
71
+ bias: OPTION_bias = True,
56
72
  ):
57
73
  """run() creates the qcDataFrame where the measurements are stored in the qcDataFrame."""
74
+ check_module_connectivity(
75
+ hw_config_path=hw_config_path, module_connectivity=module_connectivity
76
+ )
58
77
 
59
78
  timestart = datetime.now().strftime("%Y-%m-%d_%H%M%S")
60
79
 
@@ -96,8 +115,15 @@ def main(
96
115
 
97
116
  # initialize hardware
98
117
  ps = power_supply(config["power_supply"])
118
+ hv = power_supply(config["high_voltage"], name="high_voltage", is_hv=True)
99
119
  yr = yarr(config["yarr"])
100
120
 
121
+ if not bias or any(
122
+ item in itksn.parse(module_serial.encode("utf-8")).component_code.lower()
123
+ for item in ["digital", "dummy"]
124
+ ):
125
+ hv = None
126
+
101
127
  if not use_pixel_config:
102
128
  yr.omit_pixel_config()
103
129
 
@@ -110,7 +136,7 @@ def main(
110
136
  bom = get_BOMCode_from_file(BOM_file, layer)
111
137
 
112
138
  try:
113
- data = run(config, ps, yr, layer, bom, debug_gnd)
139
+ data = run(config, ps, hv, yr, layer, bom, debug_gnd)
114
140
  except KeyboardInterrupt:
115
141
  logger.info("KeyboardInterrupt")
116
142
  yr.remove_tmp_connectivity()
@@ -2,23 +2,35 @@ import logging
2
2
  from datetime import datetime
3
3
  from pathlib import Path
4
4
  from tempfile import TemporaryDirectory
5
- from typing import Optional
6
5
 
6
+ import itksn
7
7
  import typer
8
- from module_qc_data_tools import (
9
- get_layer_from_sn,
10
- get_sn_from_connectivity,
8
+ from module_qc_data_tools.qcDataFrame import (
11
9
  outputDataFrame,
12
- save_dict_list,
13
10
  )
14
- from module_qc_database_tools.utils import (
11
+ from module_qc_data_tools.utils import (
15
12
  get_chip_type_from_serial_number,
13
+ get_layer_from_sn,
14
+ get_sn_from_connectivity,
15
+ save_dict_list,
16
16
  )
17
17
 
18
18
  from module_qc_tools.cli.globals import (
19
19
  CONTEXT_SETTINGS,
20
- OPTIONS,
21
20
  LogLevel,
21
+ OPTION_bias,
22
+ OPTION_config_hw,
23
+ OPTION_config_meas,
24
+ OPTION_debug_gnd,
25
+ OPTION_module_connectivity,
26
+ OPTION_output_dir,
27
+ OPTION_perchip,
28
+ OPTION_save_local,
29
+ OPTION_site,
30
+ OPTION_use_calib_ADC,
31
+ OPTION_use_pixel_config,
32
+ OPTION_verbosity,
33
+ check_module_connectivity,
22
34
  )
23
35
  from module_qc_tools.console import console
24
36
  from module_qc_tools.measurements.analog_readback import (
@@ -27,6 +39,7 @@ from module_qc_tools.measurements.analog_readback import (
27
39
  run_vdda_vddd_vs_trim,
28
40
  run_vmeas,
29
41
  )
42
+ from module_qc_tools.utils import datapath as mqt_data
30
43
  from module_qc_tools.utils.misc import (
31
44
  add_identifiers_metadata,
32
45
  copytree,
@@ -46,21 +59,25 @@ TEST_TYPE = Path(__file__).stem
46
59
 
47
60
  @app.command()
48
61
  def main(
49
- hw_config_path: Path = OPTIONS["config_hw"],
50
- meas_config_path: Path = OPTIONS["config_meas"],
51
- base_output_dir: Path = OPTIONS["output_dir"],
52
- module_connectivity: Optional[Path] = OPTIONS["module_connectivity"],
53
- _verbosity: LogLevel = OPTIONS["verbosity"],
54
- perchip: bool = OPTIONS["perchip"],
55
- use_pixel_config: bool = OPTIONS["use_pixel_config"],
56
- institution: str = OPTIONS["site"],
57
- use_calib_adc: bool = OPTIONS["use_calib_ADC"],
58
- save_local: bool = OPTIONS["save_local"],
59
- debug_gnd: bool = OPTIONS["debug_gnd"],
62
+ hw_config_path: OPTION_config_hw = ...,
63
+ meas_config_path: OPTION_config_meas = mqt_data / "configs" / "meas_config.json",
64
+ base_output_dir: OPTION_output_dir = Path("outputs"),
65
+ module_connectivity: OPTION_module_connectivity = None,
66
+ _verbosity: OPTION_verbosity = LogLevel.info,
67
+ perchip: OPTION_perchip = False,
68
+ use_pixel_config: OPTION_use_pixel_config = False,
69
+ institution: OPTION_site = "",
70
+ use_calib_adc: OPTION_use_calib_ADC = False,
71
+ save_local: OPTION_save_local = True,
72
+ debug_gnd: OPTION_debug_gnd = False,
73
+ bias: OPTION_bias = True,
60
74
  ):
61
75
  """
62
76
  run_xyz() creates the qcDataFrame where the measurements are stored in the qcDataFrame.
63
77
  """
78
+ check_module_connectivity(
79
+ hw_config_path=hw_config_path, module_connectivity=module_connectivity
80
+ )
64
81
 
65
82
  timestart = datetime.now().strftime("%Y-%m-%d_%H%M%S")
66
83
 
@@ -97,8 +114,15 @@ def main(
97
114
 
98
115
  # initialize hardware
99
116
  ps = power_supply(config["power_supply"])
117
+ hv = power_supply(config["high_voltage"], name="high_voltage", is_hv=True)
100
118
  yr = yarr(config["yarr"])
101
119
 
120
+ if not bias or any(
121
+ item in itksn.parse(module_serial.encode("utf-8")).component_code.lower()
122
+ for item in ["digital", "dummy"]
123
+ ):
124
+ hv = None
125
+
102
126
  if not use_pixel_config:
103
127
  yr.omit_pixel_config()
104
128
 
@@ -107,7 +131,7 @@ def main(
107
131
 
108
132
  # Measure internal vmux
109
133
  try:
110
- data = run_vmeas(config, ps, yr, layer, use_calib_adc)
134
+ data = run_vmeas(config, ps, hv, yr, layer, use_calib_adc)
111
135
  except KeyboardInterrupt:
112
136
  logger.info("KeyboardInterrupt")
113
137
  yr.remove_tmp_connectivity()
@@ -123,6 +147,7 @@ def main(
123
147
  data_vdda_vddd_vs_trim = run_vdda_vddd_vs_trim(
124
148
  config,
125
149
  ps,
150
+ hv,
126
151
  yr,
127
152
  layer,
128
153
  debug_gnd,
@@ -154,7 +179,7 @@ def main(
154
179
 
155
180
  # Measure temperature at the end of the measurement to ensure temperature stability
156
181
  try:
157
- data_tempmeas = run_tmeas(config, ps, yr, layer, use_calib_adc)
182
+ data_tempmeas = run_tmeas(config, ps, hv, yr, layer, use_calib_adc)
158
183
  except KeyboardInterrupt:
159
184
  logger.info("KeyboardInterrupt")
160
185
  yr.remove_tmp_connectivity()