module-qc-tools 2.3.0__tar.gz → 2.4.0__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.
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/PKG-INFO +6 -6
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/README.md +1 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/config.md +28 -21
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/history.md +46 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/install.md +2 -2
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/measurements.md +14 -12
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/pyproject.toml +5 -4
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/_version.py +9 -4
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/ADC_CALIBRATION.py +8 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/ANALOG_READBACK.py +23 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/DATA_TRANSMISSION.py +37 -7
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/LP_MODE.py +8 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/SLDO.py +8 -1
- module_qc_tools-2.4.0/src/module_qc_tools/cli/get_nominal_current.py +46 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/globals.py +38 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/hardware_emulator.py +182 -85
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/main.py +2 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/configs/hw_config_emulator_merged_vmux.json +7 -6
- module_qc_tools-2.4.0/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_itkpixv2.json +62 -0
- module_qc_tools-2.4.0/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_v1.json +62 -0
- module_qc_tools-2.4.0/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_itkpixv2.json +65 -0
- module_qc_tools-2.4.0/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_v1.json +65 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_itkpixv2.json +3 -2
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_v1.json +3 -2
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_itkpixv2.json +3 -2
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_v1.json +3 -2
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/configs/meas_config.json +19 -16
- module_qc_tools-2.4.0/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_info.json +7 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/schema/common.json +91 -6
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/schema/meas_config.json +4 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/adc_calibration.py +2 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/analog_readback.py +47 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/data_transmission.py +100 -16
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/iv_measure.py +7 -2
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/lp_mode.py +2 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/sldo.py +2 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/yarr.py +73 -13
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/tbump.toml +2 -2
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/tests/test_measurements.py +3 -1
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/.gitignore +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/.gitlab-ci.yml +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/.gitmodules +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/.linkcheckerrc +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/.pre-commit-config.yaml +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/LICENSE +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/.gitkeep +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/.overrides/main.html +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/.snippets/abbrs.txt +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/.snippets/links.txt +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/assets/css/custom.css +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/development.md +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/index.md +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/meta/authors.md +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/reference/cli.md +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/reference/gen_ref_nav.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xIIzI.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBBc4.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBBc4.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4mxK.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu72xKOzY.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSV0mf0h.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSZ0mf0h.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSd0mf0h.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSh0mQ.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSt0mf0h.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSx0mf0h.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtElOUlYIw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEleUlYIw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEluUlYIw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEm-Ul.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEmOUlYIw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEn-UlYIw.woff2 +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/fonts.css +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/docs/stylesheets/readme.txt +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/emulator/README.md +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/mkdocs.yml +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/__init__.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/INJECTION_CAPACITANCE.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/IV_MEASURE.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/LONG_TERM_STABILITY_DCS.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/OVERVOLTAGE_PROTECTION.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/UNDERSHUNT_PROTECTION.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/VCAL_CALIBRATION.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/__init__.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/__main__.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/split_old_config.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/upload_localdb.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/console.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy_disabledchip.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip1.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip2.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip3.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip4.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/configs/controller/specCfg-rd53b.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/emulator/module_state_template.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/data/schema/hw_config.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/__init__.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/injection_capacitance.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/long_term_stability_dcs.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/overvoltage_protection.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/undershunt_protection.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/measurements/vcal_calibration.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/__init__.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/hardware_control_base.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/misc.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/multimeter.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/ntc.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/power_supply.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/utils/subprocess_emulator.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/tests/conftest.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/tests/test_emulator.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/tests/test_package.py +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/tests/test_schema/cutter_pcb_tab.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/tests/test_schema/cutter_pcb_tab_BAD.json +0 -0
- {module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/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
|
+
Version: 2.4.0
|
|
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.
|
|
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.
|
|
38
|
-
Requires-Dist: module-qc-database-tools>=2.
|
|
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.
|
|
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.
|
|
48
|
+
# module-qc-tools v2.4.0
|
|
49
49
|
|
|
50
50
|
A general python tool for running ITkPixV1.1 and ITkPixV2 module QC tests
|
|
51
51
|
|
|
@@ -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
|
-
|
|
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
|
-
##
|
|
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
|
|
52
|
-
|
|
|
53
|
-
| `run_dir`
|
|
54
|
-
| `controller`
|
|
55
|
-
| `scanConsole_exe`
|
|
56
|
-
| `write_register_exe`
|
|
57
|
-
| `read_register_exe`
|
|
58
|
-
| `read_adc_exe`
|
|
59
|
-
| `switchLPM_exe`
|
|
60
|
-
| `lpm_digitalscan`
|
|
61
|
-
| `read_ringosc_exe`
|
|
62
|
-
| `eyeDiagram_exe`
|
|
63
|
-
| `
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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,52 @@ and this project adheres to
|
|
|
16
16
|
|
|
17
17
|
**_Fixed:_**
|
|
18
18
|
|
|
19
|
+
## [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 }
|
|
20
|
+
|
|
21
|
+
**_Changed:_**
|
|
22
|
+
|
|
23
|
+
- reduce number of steps in VCAL calibration (!215)
|
|
24
|
+
- increase voltage compliance during SLDO scan (!219)
|
|
25
|
+
- improve compatibility of mqt with Felix (!186)
|
|
26
|
+
|
|
27
|
+
**_Added:_**
|
|
28
|
+
|
|
29
|
+
- add BOM information to output of SLDO, LP and ADC calibration (!220)
|
|
30
|
+
- add ability to enable/disable LPM on targeted TX channels (!207)
|
|
31
|
+
- add data merging substest to data transmission test (!218)
|
|
32
|
+
- add Iref trim information to output of the AR test (!221)
|
|
33
|
+
- add protection when ramping HV down (!211)
|
|
34
|
+
- CLI to retrieve input current based on chip version (!210)
|
|
35
|
+
|
|
36
|
+
**_Fixed:_**
|
|
37
|
+
|
|
38
|
+
- fix write register issue when running with separate vmux (!208)
|
|
39
|
+
- fixed number of points in SLDO (!213)
|
|
40
|
+
|
|
41
|
+
## [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 }
|
|
42
|
+
|
|
43
|
+
**_Changed:_**
|
|
44
|
+
|
|
45
|
+
**_Added:_**
|
|
46
|
+
|
|
47
|
+
**_Fixed:_**
|
|
48
|
+
|
|
49
|
+
## [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 }
|
|
50
|
+
|
|
51
|
+
**_Changed:_**
|
|
52
|
+
|
|
53
|
+
**_Added:_**
|
|
54
|
+
|
|
55
|
+
**_Fixed:_**
|
|
56
|
+
|
|
57
|
+
## [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 }
|
|
58
|
+
|
|
59
|
+
**_Changed:_**
|
|
60
|
+
|
|
61
|
+
**_Added:_**
|
|
62
|
+
|
|
63
|
+
**_Fixed:_**
|
|
64
|
+
|
|
19
65
|
## [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
66
|
|
|
21
67
|
**_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.
|
|
95
|
+
$ python -m pip install -U pip module-qc-tools==2.4.0
|
|
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.
|
|
104
|
+
$ uv pip install module-qc-tools==2.4.0
|
|
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
|
|
22
|
-
|
|
|
23
|
-
| ADC calib
|
|
24
|
-
| Analog Readback
|
|
25
|
-
| SLDO VI
|
|
26
|
-
| Vcal calib
|
|
27
|
-
| Injection Cap.
|
|
28
|
-
| LP Mode
|
|
29
|
-
| OVP
|
|
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
|
|
414
|
-
|
|
|
415
|
-
| `MonitorV`
|
|
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.
|
|
24
|
-
"module-qc-database-tools >= 2.
|
|
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.
|
|
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.
|
|
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"
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
# file generated by
|
|
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
|
|
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.
|
|
16
|
-
__version_tuple__ = version_tuple = (2,
|
|
20
|
+
__version__ = version = '2.4.0'
|
|
21
|
+
__version_tuple__ = version_tuple = (2, 4, 0)
|
|
@@ -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:
|
{module_qc_tools-2.3.0 → module_qc_tools-2.4.0}/src/module_qc_tools/cli/DATA_TRANSMISSION.py
RENAMED
|
@@ -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
|
|
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 =
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
+
)
|