module-qc-tools 2.3.0__tar.gz → 2.4.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 (153) hide show
  1. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/PKG-INFO +6 -6
  2. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/README.md +1 -1
  3. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/config.md +28 -21
  4. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/history.md +62 -0
  5. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/install.md +2 -2
  6. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/measurements.md +14 -12
  7. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/pyproject.toml +10 -4
  8. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/_version.py +9 -4
  9. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/ADC_CALIBRATION.py +8 -1
  10. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/ANALOG_READBACK.py +23 -0
  11. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/DATA_TRANSMISSION.py +37 -7
  12. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/LP_MODE.py +8 -1
  13. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/SLDO.py +8 -1
  14. module_qc_tools-2.4.1/src/module_qc_tools/cli/get_nominal_current.py +46 -0
  15. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/globals.py +38 -1
  16. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/hardware_emulator.py +190 -87
  17. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/main.py +2 -0
  18. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/configs/hw_config_emulator_merged_vmux.json +7 -6
  19. module_qc_tools-2.4.1/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_itkpixv2.json +62 -0
  20. module_qc_tools-2.4.1/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_v1.json +62 -0
  21. module_qc_tools-2.4.1/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_itkpixv2.json +65 -0
  22. module_qc_tools-2.4.1/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_v1.json +65 -0
  23. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_itkpixv2.json +3 -2
  24. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_v1.json +3 -2
  25. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_itkpixv2.json +3 -2
  26. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_v1.json +3 -2
  27. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/configs/meas_config.json +19 -16
  28. module_qc_tools-2.4.1/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_info.json +7 -0
  29. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/schema/common.json +91 -6
  30. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/schema/meas_config.json +4 -0
  31. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/adc_calibration.py +2 -1
  32. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/analog_readback.py +47 -0
  33. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/data_transmission.py +117 -20
  34. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/iv_measure.py +7 -2
  35. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/lp_mode.py +2 -1
  36. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/sldo.py +2 -1
  37. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/yarr.py +73 -13
  38. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tbump.toml +2 -2
  39. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tests/test_measurements.py +3 -1
  40. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/.gitignore +0 -0
  41. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/.gitlab-ci.yml +0 -0
  42. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/.gitmodules +0 -0
  43. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/.linkcheckerrc +0 -0
  44. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/.pre-commit-config.yaml +0 -0
  45. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/LICENSE +0 -0
  46. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/.gitkeep +0 -0
  47. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/.overrides/main.html +0 -0
  48. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/.snippets/abbrs.txt +0 -0
  49. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/.snippets/links.txt +0 -0
  50. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/assets/css/custom.css +0 -0
  51. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/development.md +0 -0
  52. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/index.md +0 -0
  53. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/meta/authors.md +0 -0
  54. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/reference/cli.md +0 -0
  55. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/reference/gen_ref_nav.py +0 -0
  56. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2 +0 -0
  57. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2 +0 -0
  58. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2 +0 -0
  59. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2 +0 -0
  60. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2 +0 -0
  61. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2 +0 -0
  62. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2 +0 -0
  63. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2 +0 -0
  64. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2 +0 -0
  65. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2 +0 -0
  66. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2 +0 -0
  67. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2 +0 -0
  68. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2 +0 -0
  69. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2 +0 -0
  70. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2 +0 -0
  71. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2 +0 -0
  72. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2 +0 -0
  73. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2 +0 -0
  74. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xIIzI.woff2 +0 -0
  75. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2 +0 -0
  76. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2 +0 -0
  77. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2 +0 -0
  78. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBBc4.woff2 +0 -0
  79. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2 +0 -0
  80. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2 +0 -0
  81. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2 +0 -0
  82. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2 +0 -0
  83. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2 +0 -0
  84. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2 +0 -0
  85. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBBc4.woff2 +0 -0
  86. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2 +0 -0
  87. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2 +0 -0
  88. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2 +0 -0
  89. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2 +0 -0
  90. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2 +0 -0
  91. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 +0 -0
  92. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4mxK.woff2 +0 -0
  93. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 +0 -0
  94. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu72xKOzY.woff2 +0 -0
  95. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 +0 -0
  96. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 +0 -0
  97. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 +0 -0
  98. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSV0mf0h.woff2 +0 -0
  99. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSZ0mf0h.woff2 +0 -0
  100. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSd0mf0h.woff2 +0 -0
  101. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSh0mQ.woff2 +0 -0
  102. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSt0mf0h.woff2 +0 -0
  103. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSx0mf0h.woff2 +0 -0
  104. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtElOUlYIw.woff2 +0 -0
  105. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEleUlYIw.woff2 +0 -0
  106. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEluUlYIw.woff2 +0 -0
  107. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEm-Ul.woff2 +0 -0
  108. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEmOUlYIw.woff2 +0 -0
  109. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEn-UlYIw.woff2 +0 -0
  110. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/fonts.css +0 -0
  111. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/docs/stylesheets/readme.txt +0 -0
  112. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/emulator/README.md +0 -0
  113. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/mkdocs.yml +0 -0
  114. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/__init__.py +0 -0
  115. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/INJECTION_CAPACITANCE.py +0 -0
  116. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/IV_MEASURE.py +0 -0
  117. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/LONG_TERM_STABILITY_DCS.py +0 -0
  118. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/OVERVOLTAGE_PROTECTION.py +0 -0
  119. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/UNDERSHUNT_PROTECTION.py +0 -0
  120. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/VCAL_CALIBRATION.py +0 -0
  121. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/__init__.py +0 -0
  122. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/__main__.py +0 -0
  123. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/split_old_config.py +0 -0
  124. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/cli/upload_localdb.py +0 -0
  125. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/console.py +0 -0
  126. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy.json +0 -0
  127. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy_disabledchip.json +0 -0
  128. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip1.json +0 -0
  129. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip2.json +0 -0
  130. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip3.json +0 -0
  131. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip4.json +0 -0
  132. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/configs/controller/specCfg-rd53b.json +0 -0
  133. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/emulator/module_state_template.json +0 -0
  134. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/data/schema/hw_config.json +0 -0
  135. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/__init__.py +0 -0
  136. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/injection_capacitance.py +0 -0
  137. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/long_term_stability_dcs.py +0 -0
  138. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/overvoltage_protection.py +0 -0
  139. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/undershunt_protection.py +0 -0
  140. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/measurements/vcal_calibration.py +0 -0
  141. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/__init__.py +0 -0
  142. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/hardware_control_base.py +0 -0
  143. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/misc.py +0 -0
  144. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/multimeter.py +0 -0
  145. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/ntc.py +0 -0
  146. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/power_supply.py +0 -0
  147. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/src/module_qc_tools/utils/subprocess_emulator.py +0 -0
  148. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tests/conftest.py +0 -0
  149. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tests/test_emulator.py +0 -0
  150. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tests/test_package.py +0 -0
  151. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tests/test_schema/cutter_pcb_tab.json +0 -0
  152. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tests/test_schema/cutter_pcb_tab_BAD.json +0 -0
  153. {module_qc_tools-2.3.0 → module_qc_tools-2.4.1}/tests/test_schema.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: module_qc_tools
3
- Version: 2.3.0
3
+ Version: 2.4.1
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
7
7
  Project-URL: Source, https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools
8
- Project-URL: Documentation, https://atlas-itk-pixel-mqt.docs.cern.ch/2.3/
8
+ Project-URL: Documentation, https://atlas-itk-pixel-mqt.docs.cern.ch/2.4/
9
9
  Author-email: Jay Chan <jay.chan@cern.ch>
10
10
  Maintainer-email: Giordon Stark <gstark@cern.ch>
11
11
  License: Copyright (c) 2018 ATLAS ITk Pixel Modules
@@ -34,18 +34,18 @@ Classifier: Programming Language :: Python :: 3
34
34
  Requires-Python: >=3.7
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.22
38
- Requires-Dist: module-qc-database-tools>=2.4.8
37
+ Requires-Dist: module-qc-data-tools>=1.0.23
38
+ Requires-Dist: module-qc-database-tools>=2.5.0rc0
39
39
  Requires-Dist: numpy
40
40
  Requires-Dist: pre-commit
41
41
  Requires-Dist: requests
42
42
  Requires-Dist: rich
43
43
  Requires-Dist: tabulate
44
44
  Requires-Dist: typer>=0.9.0
45
- Requires-Dist: urllib3<2,>=1.26.11; 'el7.x86_64' in platform_release
45
+ Requires-Dist: urllib3<2,>=1.26.20; 'el7.x86_64' in platform_release
46
46
  Description-Content-Type: text/markdown
47
47
 
48
- # module-qc-tools v2.3.0
48
+ # module-qc-tools v2.4.1
49
49
 
50
50
  A general python tool for running ITkPixV1.1 and ITkPixV2 module QC tests
51
51
 
@@ -1,4 +1,4 @@
1
- # module-qc-tools v2.3.0
1
+ # module-qc-tools v2.4.1
2
2
 
3
3
  A general python tool for running ITkPixV1.1 and ITkPixV2 module QC tests
4
4
 
@@ -19,6 +19,7 @@ modified when running standard module QC. Examples are provided in
19
19
  !!! note
20
20
 
21
21
  There are 4 example hardware configs for the different combinations of V1 or V2 modules and a merged or separate VMUX:
22
+
22
23
  - `hw_config_example_merged_vmux_itkpixv2.json`
23
24
  - `hw_config_example_merged_vmux_v1.json`
24
25
  - `hw_config_example_separate_vmux_itkpixv2.json`
@@ -30,7 +31,8 @@ modified when running standard module QC. Examples are provided in
30
31
 
31
32
  ```json title="$(module-qc-tools --prefix)/configs/hw_config_example_merged_vmux_itkpixv2.json"
32
33
  --8<-- "hw_config_example_merged_vmux_itkpixv2.json"
33
- json title="$(module-qc-tools --prefix)/configs/meas_config.json"
34
+ ```
35
+ ```json title="$(module-qc-tools --prefix)/configs/meas_config.json"
34
36
  --8<-- "meas_config.json"
35
37
  ```
36
38
 
@@ -41,28 +43,31 @@ following sections. The `task` block specifies the settings of each scan
41
43
  performed by the scripts, and will be explained in
42
44
  [measurements](measurements.md).
43
45
 
44
- ## yarr
46
+ ## Hardware Configuration
47
+
48
+ ### yarr
45
49
 
46
50
  The `yarr` block specifies the path to the `YARR` repository as well as the
47
51
  corresponding YARR configuration files.
48
52
 
49
53
  **Configuration settings**
50
54
 
51
- | Name | Description |
52
- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
53
- | `run_dir` | path (relative or absolute) to the directory where `YARR` commands should be run |
54
- | `controller` | path (relative to `run_dir` or absolute) to the controller file |
55
- | `scanConsole_exe` | path (relative to `run_dir` or absolute) to the `scanConsole` executable |
56
- | `write_register_exe` | path (relative to `run_dir` or absolute) to the `write_register` executable |
57
- | `read_register_exe` | path (relative to `run_dir` or absolute) to the `read_register` executable |
58
- | `read_adc_exe` | path (relative to `run_dir` or absolute) to the `read_adc` executable |
59
- | `switchLPM_exe` | path (relative to `run_dir` or absolute) to the `switchLPM` executable |
60
- | `lpm_digitalscan` | path (relative to `run_dir` or absolute) to the low-power mode digital scan in YARR; for ITkPix v2, make sure that the path points to the correct scan config directory, e.g. `"configs/scans/itkpixv2/lpm_digitalscan.json"` |
61
- | `read_ringosc_exe` | path (relative to `run_dir` or absolute) to the `Rd53bReadRingosc` or `Itkpixv2ReadRingosc` executable in YARR; for ITkPix v2, make sure the path points to the executable for the correct chip, e.g. `"./bin/Itkpixv2ReadRingosc"` |
62
- | `eyeDiagram_exe` | path (relative to `run_dir` or absolute) to the `eyeDiagram` executable in YARR |
63
- | `success_code` | exit status that indicates success. The default is 0 besides `configure`, which has exit status 1 for success. The user do not need to set the `success_code` as the default in QC software is synchronized with YARR. |
64
-
65
- ## power_supply
55
+ | Name | Description |
56
+ | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
57
+ | `run_dir` | path (relative or absolute) to the directory where `YARR` commands should be run |
58
+ | `controller` | path (relative to `run_dir` or absolute) to the controller file |
59
+ | `scanConsole_exe` | path (relative to `run_dir` or absolute) to the `scanConsole` executable |
60
+ | `write_register_exe` | path (relative to `run_dir` or absolute) to the `write_register` executable |
61
+ | `read_register_exe` | path (relative to `run_dir` or absolute) to the `read_register` executable |
62
+ | `read_adc_exe` | path (relative to `run_dir` or absolute) to the `read_adc` executable |
63
+ | `switchLPM_exe` | path (relative to `run_dir` or absolute) to the `switchLPM` executable |
64
+ | `lpm_digitalscan` | path (relative to `run_dir` or absolute) to the low-power mode digital scan in YARR; for ITkPix v2, make sure that the path points to the correct scan config directory, e.g. `"configs/scans/itkpixv2/lpm_digitalscan.json"` |
65
+ | `read_ringosc_exe` | path (relative to `run_dir` or absolute) to the `Rd53bReadRingosc` or `Itkpixv2ReadRingosc` executable in YARR; for ITkPix v2, make sure the path points to the executable for the correct chip, e.g. `"./bin/Itkpixv2ReadRingosc"` |
66
+ | `eyeDiagram_exe` | path (relative to `run_dir` or absolute) to the `eyeDiagram` executable in YARR |
67
+ | `dataMergingCheck_exe` | path (relative to `run_dir` or absolute) to the `dataMergingCheck` executable in YARR |
68
+ | `success_code` | exit status that indicates success. The default is 0 besides `configure`, which has exit status 1 for success. The user do not need to set the `success_code` as the default in QC software is synchronized with YARR. |
69
+
70
+ ### power_supply
66
71
 
67
72
  The `power_supply` block specifies the path and the commands for handling the
68
73
  low voltage power supply
@@ -83,7 +88,7 @@ low voltage power supply
83
88
  | `checkTarget_timeout` | after each `set_cmd` call, `measI_cmd` is called to check if the target is reached, if not after `checkTarget_timeout` (in sec.), an exception is raised |
84
89
  | `success_code` | exit status that indicates success. The default is 0. |
85
90
 
86
- ## high_voltage
91
+ ### high_voltage
87
92
 
88
93
  Similar to the `power_supply` block, the `high_voltage` block specifies the path
89
94
  and the commands for handling the high voltage power supply needed for leakage
@@ -98,7 +103,7 @@ current vs. bias voltage (IV) measurements.
98
103
  | `polarity` | indicator if normal polarity (default 1) or reverse polarity (-1) is used. Can also take a command that returns a value, e.g. `"polarity": "echo 1"`. For power supplies that accept and output both positive and negative values of the bias voltage, the polarity is `1`. For power supplies that only accept and output a single polarity, this setting is `-1` and the wiring should be adapted accordingly. |
99
104
  | `checkTarget_timeout` | after each `set_cmd` call, `measV_cmd` is called to check if the target is reached, if not after `checkTarget_timeout` (in sec.), an exception is raised |
100
105
 
101
- ## multimeter
106
+ ### multimeter
102
107
 
103
108
  The `multimeter` block specifies the path and the commands for handling the
104
109
  multimeter
@@ -112,7 +117,7 @@ multimeter
112
117
  | `n_try` | number of re-tries in case the script fails to read from the multimeter |
113
118
  | `success_code` | exit status that indicates success. The default is 0. |
114
119
 
115
- ## ntc
120
+ ### ntc
116
121
 
117
122
  The `ntc` block specifies the path and the commands for handling the NTC
118
123
 
@@ -125,7 +130,9 @@ The `ntc` block specifies the path and the commands for handling the NTC
125
130
  | `n_try` | number of re-tries in case the script fails to read from the ntc |
126
131
  | `success_code` | exit status that indicates success. The default is 0. |
127
132
 
128
- ## tasks
133
+ ## Measurement Configuration
134
+
135
+ ### tasks
129
136
 
130
137
  The `tasks` block starts with the `GENERAL` section that specifies the
131
138
  layer-dependent power settings:
@@ -16,6 +16,68 @@ and this project adheres to
16
16
 
17
17
  **_Fixed:_**
18
18
 
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 }
20
+
21
+ **_Changed:_**
22
+
23
+ **_Added:_**
24
+
25
+ **_Fixed:_**
26
+
27
+ - eye diagram parsing (!228)
28
+
29
+ ## [2.4.0](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.4.0) - 2025-03-11 ## {: #mqt-v2.4.0 }
30
+
31
+ **_Changed:_**
32
+
33
+ - reduce number of steps in VCAL calibration (!215)
34
+ - increase voltage compliance during SLDO scan (!219)
35
+ - improve compatibility of mqt with Felix (!186)
36
+
37
+ **_Added:_**
38
+
39
+ - add BOM information to output of SLDO, LP and ADC calibration (!220)
40
+ - add ability to enable/disable LPM on targeted TX channels (!207)
41
+ - add data merging substest to data transmission test (!218)
42
+
43
+ <!-- prettier-ignore -->
44
+ > [!IMPORTANT]
45
+ > Requires update of the `yarr` section in the hardware config file:
46
+ > `"dataMergingCheck_exe": "./bin/dataMergingCheck",`
47
+
48
+ - add Iref trim information to output of the AR test (!221)
49
+ - add protection when ramping HV down (!211)
50
+ - CLI to retrieve input current based on chip version (!210)
51
+
52
+ **_Fixed:_**
53
+
54
+ - fix write register issue when running with separate vmux (!208)
55
+ - fixed number of points in SLDO (!213)
56
+
57
+ ## [2.3.0](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.3.0) - 2024-07-12 ## {: #mqt-v2.3.0 }
58
+
59
+ **_Changed:_**
60
+
61
+ **_Added:_**
62
+
63
+ **_Fixed:_**
64
+
65
+ ## [2.2.8](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.2.8) - 2024-12-17 ## {: #mqt-v2.2.8 }
66
+
67
+ **_Changed:_**
68
+
69
+ **_Added:_**
70
+
71
+ **_Fixed:_**
72
+
73
+ ## [2.2.7](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.2.7) - 2024-10-03 ## {: #mqt-v2.2.7 }
74
+
75
+ **_Changed:_**
76
+
77
+ **_Added:_**
78
+
79
+ **_Fixed:_**
80
+
19
81
  ## [2.2.6](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.2.6) - 2024-07-12 ## {: #mqt-v2.2.6 }
20
82
 
21
83
  **_Changed:_**
@@ -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.3.0
95
+ $ python -m pip install -U pip module-qc-tools==2.4.1
96
96
  ```
97
97
 
98
98
  ### via uv
@@ -101,7 +101,7 @@ $ python -m pip install -U pip module-qc-tools==2.3.0
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.3.0
104
+ $ uv pip install module-qc-tools==2.4.1
105
105
  ```
106
106
 
107
107
  # Usage
@@ -18,15 +18,16 @@ modules to be tested are already powered on.
18
18
 
19
19
  ### Time Estimates
20
20
 
21
- | Measurement | Duration |
22
- | --------------- | -------- |
23
- | ADC calib | 00:02:12 |
24
- | Analog Readback | 00:18:27 |
25
- | SLDO VI | 00:08:45 |
26
- | Vcal calib | 00:04:50 |
27
- | Injection Cap. | 00:00:50 |
28
- | LP Mode | 00:00:53 |
29
- | OVP | 00:00:27 |
21
+ | Measurement | Duration |
22
+ | ----------------- | -------- |
23
+ | ADC calib | 00:02:12 |
24
+ | Analog Readback | 00:18:27 |
25
+ | SLDO VI | 00:08:45 |
26
+ | Vcal calib | 00:04:50 |
27
+ | Injection Cap. | 00:00:50 |
28
+ | LP Mode | 00:00:53 |
29
+ | OVP | 00:00:27 |
30
+ | DATA_TRANSMISSION | 00:00:26 |
30
31
 
31
32
  ### Local Filesystem
32
33
 
@@ -410,9 +411,10 @@ specified in the input configuration json file (i.e. '$(module-qc-tools
410
411
 
411
412
  **Configuration settings**
412
413
 
413
- | Name | Description |
414
- | ---------- | ------------------------------- |
415
- | `MonitorV` | list of VMUX channels to be set |
414
+ | Name | Description |
415
+ | ------------- | --------------------------------------- |
416
+ | `MonitorV` | list of VMUX channels to be set |
417
+ | `DataMerging` | list of data merging modes to be tested |
416
418
 
417
419
  ??? example
418
420
 
@@ -20,11 +20,11 @@ dependencies = [
20
20
  "tabulate",
21
21
  "pre-commit",
22
22
  "check-jsonschema",
23
- "module-qc-data-tools >= 1.0.22",
24
- "module-qc-database-tools >= 2.4.8",
23
+ "module-qc-data-tools >= 1.0.23",
24
+ "module-qc-database-tools >= 2.5.0rc0",
25
25
  'importlib_resources; python_version < "3.9"',
26
26
  "requests",
27
- 'urllib3>=1.26.11,<2; "el7.x86_64" in platform_release',
27
+ 'urllib3>=1.26.20,<2; "el7.x86_64" in platform_release',
28
28
  "typer>=0.9.0",
29
29
  "rich",
30
30
  ]
@@ -38,7 +38,7 @@ classifiers = [
38
38
  "Homepage" = "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools"
39
39
  "Bug Tracker" = "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/issues"
40
40
  "Source" = "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools"
41
- "Documentation" = "https://atlas-itk-pixel-mqt.docs.cern.ch/2.3/"
41
+ "Documentation" = "https://atlas-itk-pixel-mqt.docs.cern.ch/2.4/"
42
42
 
43
43
  [project.scripts]
44
44
  module-qc-tools = "module_qc_tools.cli:app"
@@ -48,6 +48,7 @@ emulator-write-register = "module_qc_tools.cli.hardware_emulator:run_write_regis
48
48
  emulator-read-register = "module_qc_tools.cli.hardware_emulator:run_read_register"
49
49
  emulator-read-adc = "module_qc_tools.cli.hardware_emulator:run_read_adc"
50
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"
51
52
  emulator-eye-diagram = "module_qc_tools.cli.hardware_emulator:run_eyeDiagram"
52
53
  emulator-switch-lpm = "module_qc_tools.cli.hardware_emulator:run_switchLPM"
53
54
  emulator-control-ps = "module_qc_tools.cli.hardware_emulator:run_control_PS"
@@ -87,6 +88,11 @@ dependencies = [
87
88
  ]
88
89
  installer = "uv"
89
90
 
91
+ [tool.hatch.envs.hatch-uv]
92
+ dependencies = [
93
+ "uv!=0.6.7", # https://github.com/astral-sh/uv/issues/12260
94
+ ]
95
+
90
96
  [tool.hatch.envs.default.scripts]
91
97
  tag = "tbump {args}"
92
98
  lint = "pylint src"
@@ -1,8 +1,13 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
3
6
  TYPE_CHECKING = False
4
7
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
8
+ from typing import Tuple
9
+ from typing import Union
10
+
6
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
7
12
  else:
8
13
  VERSION_TUPLE = object
@@ -12,5 +17,5 @@ __version__: str
12
17
  __version_tuple__: VERSION_TUPLE
13
18
  version_tuple: VERSION_TUPLE
14
19
 
15
- __version__ = version = '2.3.0'
16
- __version_tuple__ = version_tuple = (2, 3, 0)
20
+ __version__ = version = '2.4.1'
21
+ __version_tuple__ = version_tuple = (2, 4, 1)
@@ -12,6 +12,7 @@ from module_qc_data_tools import (
12
12
  save_dict_list,
13
13
  )
14
14
  from module_qc_database_tools.utils import (
15
+ get_BOMCode_from_file,
15
16
  get_chip_type_from_serial_number,
16
17
  )
17
18
 
@@ -102,8 +103,14 @@ def main(
102
103
 
103
104
  ps.set(v=config["v_max"], i=config["i_config"][layer])
104
105
 
106
+ # try to retrieve the BOM information from the config files
107
+ BOM_file = (
108
+ Path(config_hw["yarr"]["connectivity"]).parent / f"{module_serial}_info.json"
109
+ )
110
+ bom = get_BOMCode_from_file(BOM_file, layer)
111
+
105
112
  try:
106
- data = run(config, ps, yr, layer, debug_gnd)
113
+ data = run(config, ps, yr, layer, bom, debug_gnd)
107
114
  except KeyboardInterrupt:
108
115
  logger.info("KeyboardInterrupt")
109
116
  yr.remove_tmp_connectivity()
@@ -22,6 +22,7 @@ from module_qc_tools.cli.globals import (
22
22
  )
23
23
  from module_qc_tools.console import console
24
24
  from module_qc_tools.measurements.analog_readback import (
25
+ run_readregister,
25
26
  run_tmeas,
26
27
  run_vdda_vddd_vs_trim,
27
28
  run_vmeas,
@@ -137,6 +138,20 @@ def main(
137
138
  raise typer.Exit(1) from err
138
139
  add_identifiers_metadata(data_vdda_vddd_vs_trim, module_serial, institution)
139
140
 
141
+ # Read register values
142
+ if "itkpixv2" in chip_type.lower():
143
+ try:
144
+ data_register = run_readregister(config, ps, yr, layer)
145
+ except KeyboardInterrupt:
146
+ logger.info("KeyboardInterrupt")
147
+ yr.remove_tmp_connectivity()
148
+ except Exception as err:
149
+ logger.info("Error in reading registers.")
150
+ logger.exception(err)
151
+ yr.remove_tmp_connectivity()
152
+ raise typer.Exit(1) from err
153
+ add_identifiers_metadata(data_register, module_serial, institution)
154
+
140
155
  # Measure temperature at the end of the measurement to ensure temperature stability
141
156
  try:
142
157
  data_tempmeas = run_tmeas(config, ps, yr, layer, use_calib_adc)
@@ -183,6 +198,14 @@ def main(
183
198
  outputDF_tempmeas.to_dict(),
184
199
  outputDF_vdda_vddd_vs_trim.to_dict(),
185
200
  ]
201
+
202
+ if "itkpixv2" in chip_type.lower():
203
+ outputDF_register = outputDataFrame()
204
+ outputDF_register.set_test_type(TEST_TYPE)
205
+ outputDF_register.set_subtest_type("AR_REGISTER")
206
+ outputDF_register.set_results(data_register[chip])
207
+ alloutput += [outputDF_register.to_dict()]
208
+
186
209
  chipnames += [chip_name]
187
210
 
188
211
  with TemporaryDirectory() as tmpdirname:
@@ -22,7 +22,10 @@ from module_qc_tools.cli.globals import (
22
22
  LogLevel,
23
23
  )
24
24
  from module_qc_tools.console import console
25
- from module_qc_tools.measurements.data_transmission import run
25
+ from module_qc_tools.measurements.data_transmission import (
26
+ run_datamerging,
27
+ run_eyediagram,
28
+ )
26
29
  from module_qc_tools.utils.misc import (
27
30
  add_identifiers_metadata,
28
31
  copytree,
@@ -103,7 +106,7 @@ def main(
103
106
  ps.set(v=config["v_max"], i=config["i_config"][layer])
104
107
 
105
108
  try:
106
- data = run(
109
+ data = run_eyediagram(
107
110
  config,
108
111
  ps,
109
112
  yr,
@@ -118,19 +121,46 @@ def main(
118
121
  logger.exception(err)
119
122
  yr.remove_tmp_connectivity()
120
123
  raise typer.Exit(1) from err
121
-
122
124
  add_identifiers_metadata(data, module_serial, institution)
123
125
 
126
+ if layer in ["L1", "L2"]:
127
+ try:
128
+ data_merging = run_datamerging(
129
+ config,
130
+ ps,
131
+ yr,
132
+ layer,
133
+ )
134
+ except KeyboardInterrupt:
135
+ logger.info("KeyboardInterrupt")
136
+ yr.remove_tmp_connectivity()
137
+ except Exception as err:
138
+ logger.exception(err)
139
+ yr.remove_tmp_connectivity()
140
+ raise typer.Exit(1) from err
141
+ add_identifiers_metadata(data_merging, module_serial, institution)
142
+
124
143
  alloutput = []
125
144
  chipnames = []
126
145
 
127
146
  for chip in yr._enabled_chip_positions:
128
147
  chip_name = data[chip]._meta_data["Name"]
148
+
129
149
  console.print(data[chip])
130
- outputDF = outputDataFrame()
131
- outputDF.set_test_type(TEST_TYPE)
132
- outputDF.set_results(data[chip])
133
- alloutput += [outputDF.to_dict()]
150
+ outputDF_eye = outputDataFrame()
151
+ outputDF_eye.set_test_type(TEST_TYPE)
152
+ outputDF_eye.set_subtest_type("DT_EYE")
153
+ outputDF_eye.set_results(data[chip])
154
+ alloutput += [outputDF_eye.to_dict()]
155
+
156
+ if layer in ["L1", "L2"]:
157
+ console.print(data_merging[chip])
158
+ outputDF_merge = outputDataFrame()
159
+ outputDF_merge.set_test_type(TEST_TYPE)
160
+ outputDF_merge.set_subtest_type("DT_MERGE")
161
+ outputDF_merge.set_results(data_merging[chip])
162
+ alloutput += [outputDF_merge.to_dict()]
163
+
134
164
  chipnames += [chip_name]
135
165
 
136
166
  with TemporaryDirectory() as tmpdirname:
@@ -12,6 +12,7 @@ from module_qc_data_tools import (
12
12
  save_dict_list,
13
13
  )
14
14
  from module_qc_database_tools.utils import (
15
+ get_BOMCode_from_file,
15
16
  get_chip_type_from_serial_number,
16
17
  )
17
18
 
@@ -99,8 +100,14 @@ def main(
99
100
  if not use_pixel_config:
100
101
  yr.omit_pixel_config()
101
102
 
103
+ # try to retrieve the BOM information from the config files
104
+ BOM_file = (
105
+ Path(config_hw["yarr"]["connectivity"]).parent / f"{module_serial}_info.json"
106
+ )
107
+ bom = get_BOMCode_from_file(BOM_file, layer)
108
+
102
109
  try:
103
- data = run(config, ps, yr, layer, use_calib_adc)
110
+ data = run(config, ps, yr, layer, bom, use_calib_adc)
104
111
  except KeyboardInterrupt:
105
112
  logger.info("KeyboardInterrupt")
106
113
  yr.switchLPM("off")
@@ -12,6 +12,7 @@ from module_qc_data_tools import (
12
12
  save_dict_list,
13
13
  )
14
14
  from module_qc_database_tools.utils import (
15
+ get_BOMCode_from_file,
15
16
  get_chip_type_from_serial_number,
16
17
  )
17
18
 
@@ -94,8 +95,14 @@ def main(
94
95
  if not use_pixel_config:
95
96
  yr.omit_pixel_config()
96
97
 
98
+ # try to retrieve the BOM information from the config files
99
+ BOM_file = (
100
+ Path(config_hw["yarr"]["connectivity"]).parent / f"{module_serial}_info.json"
101
+ )
102
+ bomcode = get_BOMCode_from_file(BOM_file, layer)
103
+
97
104
  try:
98
- data = run(config, ps, yr, layer, use_calib_adc)
105
+ data = run(config, ps, yr, layer, bomcode, use_calib_adc)
99
106
  except KeyboardInterrupt:
100
107
  logger.info("KeyboardInterrupt")
101
108
  yr.remove_tmp_connectivity()
@@ -0,0 +1,46 @@
1
+ import json
2
+ import logging
3
+ from pathlib import Path
4
+
5
+ import typer
6
+ from module_qc_data_tools import (
7
+ get_layer_from_sn,
8
+ get_nominal_current,
9
+ )
10
+ from module_qc_database_tools.utils import (
11
+ get_chip_type_from_serial_number, # TODO move to data tools?
12
+ )
13
+
14
+ from module_qc_tools.cli.globals import (
15
+ CONTEXT_SETTINGS,
16
+ OPTIONS,
17
+ )
18
+
19
+ app = typer.Typer(context_settings=CONTEXT_SETTINGS)
20
+
21
+ logger = logging.getLogger("measurement")
22
+
23
+
24
+ @app.command()
25
+ def main(
26
+ meas_config_path: Path = OPTIONS["config_meas"],
27
+ serial_number: str = OPTIONS["serial_number"],
28
+ n_chips_input: int = OPTIONS["nchips"],
29
+ ):
30
+ """Print the nominal current value required for the given module."""
31
+
32
+ # Taking the module SN from YARR path to config in the connectivity file.
33
+ layer = get_layer_from_sn(serial_number)
34
+ chip_type = get_chip_type_from_serial_number(serial_number)
35
+
36
+ # Load the measurement config just to retrieve general info
37
+ # could be improved, need to see the requirements
38
+ meas_config = json.loads(meas_config_path.read_text())
39
+
40
+ nom_current = get_nominal_current(meas_config, layer, chip_type, n_chips_input)
41
+
42
+ typer.echo(f"{nom_current:.2f}")
43
+
44
+
45
+ if __name__ == "__main__":
46
+ typer.run(main)
@@ -5,6 +5,7 @@ from typing import Optional
5
5
 
6
6
  import typer
7
7
  from click.exceptions import MissingParameter
8
+ from module_qc_data_tools import check_sn_format
8
9
 
9
10
  from module_qc_tools import data
10
11
  from module_qc_tools.utils.misc import get_institution
@@ -198,7 +199,19 @@ OPTIONS["test_size"]: int = typer.Option(
198
199
  None,
199
200
  "-t",
200
201
  "--test-size",
201
- help="Test size for eye diagram.",
202
+ help="Test size for eye diagram or data merging check.",
203
+ )
204
+ OPTIONS["mode"]: str = typer.Option(
205
+ "4-to-1",
206
+ "-m",
207
+ "--mode",
208
+ help="Mode of data merging check: '4-to-1' or '2-to-1'",
209
+ )
210
+ OPTIONS["quiet"]: bool = typer.Option(
211
+ False,
212
+ "-q",
213
+ "--quiet",
214
+ help="Quiet mode, no logger in data merging check.",
202
215
  )
203
216
  OPTIONS["debug_gnd"]: bool = typer.Option(
204
217
  False,
@@ -213,3 +226,27 @@ OPTIONS["poweroff"]: bool = typer.Option(
213
226
  False,
214
227
  help="Whether to turn off power supplies (low-voltage, high-voltage) after measurement is done",
215
228
  )
229
+ OPTIONS["nchips"]: int = typer.Option(
230
+ 0,
231
+ "-n",
232
+ "--nChips",
233
+ help="Number of chips powered in parallel (e.g. 4 for a quad module, 3 for a triplet, 1 for an SCC.) If no argument is provided, the number of chips is assumed from the layer.",
234
+ )
235
+
236
+
237
+ def sn_callback(value: str):
238
+ try:
239
+ check_sn_format(value)
240
+ except SystemExit as e:
241
+ msg = f"Invalid serial number format: {value}"
242
+ raise typer.BadParameter(msg) from e
243
+ return value
244
+
245
+
246
+ OPTIONS["serial_number"]: str = typer.Option(
247
+ "",
248
+ "-sn",
249
+ "--serial-number",
250
+ help="Module serial number",
251
+ callback=sn_callback,
252
+ )