module-qc-tools 2.7.1__tar.gz → 2.8.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.7.1 → module_qc_tools-2.8.0}/.pre-commit-config.yaml +4 -3
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/.zenodo.json +3 -3
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/CITATION.cff +2 -2
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/PKG-INFO +5 -5
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/README.md +1 -1
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/config.md +44 -13
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/history.md +32 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/install.md +2 -2
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/measurements.md +33 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/pyproject.toml +10 -3
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/_version.py +2 -2
- module_qc_tools-2.8.0/src/module_qc_tools/cli/THERMAL_PERFORMANCE.py +226 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/globals.py +4 -3
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/hardware_emulator.py +54 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/main.py +2 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_emulator_merged_vmux.json +28 -0
- module_qc_tools-2.8.0/src/module_qc_tools/data/configs/hw_config_example_lls_qc_itkpixv2.json +74 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_itkpixv2.json +14 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_merged_vmux_v1.json +14 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/meas_config.json +8 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/schema/meas_config.json +32 -1
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/iv_measure.py +36 -24
- module_qc_tools-2.8.0/src/module_qc_tools/measurements/thermal_performance.py +218 -0
- module_qc_tools-2.8.0/src/module_qc_tools/utils/cellqc_box.py +70 -0
- module_qc_tools-2.8.0/src/module_qc_tools/utils/lls_interlock.py +30 -0
- module_qc_tools-2.8.0/src/module_qc_tools/utils/mops.py +51 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/power_supply.py +38 -15
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/yarr.py +2 -2
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tbump.toml +2 -2
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tests/test_emulator.py +3 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/.gitattributes +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/.gitignore +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/.gitlab-ci.yml +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/.gitmodules +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/.linkcheckerrc +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/LICENSE +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/.gitkeep +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/.overrides/main.html +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/.snippets/abbrs.txt +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/.snippets/links.txt +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/assets/css/custom.css +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/development.md +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/emulator.md +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/index.md +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/meta/authors.md +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/reference/cli.md +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/reference/gen_ref_nav.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xIIzI.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBBc4.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBBc4.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4mxK.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu72xKOzY.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSV0mf0h.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSZ0mf0h.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSd0mf0h.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSh0mQ.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSt0mf0h.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSx0mf0h.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtElOUlYIw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEleUlYIw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEluUlYIw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEm-Ul.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEmOUlYIw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEn-UlYIw.woff2 +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/fonts.css +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/docs/stylesheets/readme.txt +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/mkdocs.yml +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/__init__.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/ADC_CALIBRATION.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/ANALOG_READBACK.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/DATA_TRANSMISSION.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/INJECTION_CAPACITANCE.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/IV_MEASURE.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/LONG_TERM_STABILITY_DCS.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/LP_MODE.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/OVERVOLTAGE_PROTECTION.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/SLDO.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/UNDERSHUNT_PROTECTION.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/VCAL_CALIBRATION.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/__init__.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/__main__.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/get_nominal_current.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/split_old_config.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/upload_localdb.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/cli/yarr.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/console.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_itkpixv2.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_felix_merged_vmux_v1.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_itkpixv2.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_felix_separate_vmux_v1.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_itkpixv2.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/configs/hw_config_example_separate_vmux_v1.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_Lx_dummy_disabledchip.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/connectivity/20UPGXM1234567_info.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip1.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip2.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip3.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/connectivity/chip/dummy_chip4.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/configs/controller/specCfg-rd53b.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/data/emulator/module_state_template.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/__init__.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/adc_calibration.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/analog_readback.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/data_transmission.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/injection_capacitance.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/long_term_stability_dcs.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/lp_mode.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/overvoltage_protection.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/sldo.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/undershunt_protection.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/measurements/vcal_calibration.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/typing_compat.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/__init__.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/hardware_control_base.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/hrc.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/misc.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/multimeter.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/ntc.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/src/module_qc_tools/utils/subprocess_emulator.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tests/conftest.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tests/test_measurements.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tests/test_package.py +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tests/test_schema/cutter_pcb_tab.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tests/test_schema/cutter_pcb_tab_BAD.json +0 -0
- {module_qc_tools-2.7.1 → module_qc_tools-2.8.0}/tests/test_schema.py +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
ci:
|
|
2
2
|
autoupdate_commit_msg: "chore: update pre-commit hooks"
|
|
3
3
|
autofix_commit_msg: "style: pre-commit fixes"
|
|
4
|
+
autoupdate_schedule: "monthly"
|
|
4
5
|
|
|
5
6
|
repos:
|
|
6
7
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
@@ -43,7 +44,7 @@ repos:
|
|
|
43
44
|
additional_dependencies: [black==22.3.0]
|
|
44
45
|
|
|
45
46
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
46
|
-
rev: v0.14.
|
|
47
|
+
rev: v0.14.13
|
|
47
48
|
hooks:
|
|
48
49
|
- id: ruff-check
|
|
49
50
|
args: ["--fix", "--show-fixes"]
|
|
@@ -57,7 +58,7 @@ repos:
|
|
|
57
58
|
- id: rst-inline-touching-normal
|
|
58
59
|
|
|
59
60
|
- repo: https://github.com/rbubley/mirrors-prettier
|
|
60
|
-
rev: "v3.
|
|
61
|
+
rev: "v3.8.0"
|
|
61
62
|
hooks:
|
|
62
63
|
- id: prettier
|
|
63
64
|
types_or: [yaml, markdown, html, css, scss, javascript] #, json]
|
|
@@ -96,7 +97,7 @@ repos:
|
|
|
96
97
|
# additional_dependencies: ["repo-review[cli]"]
|
|
97
98
|
|
|
98
99
|
- repo: https://github.com/asottile/pyupgrade
|
|
99
|
-
rev: v3.21.
|
|
100
|
+
rev: v3.21.2
|
|
100
101
|
hooks:
|
|
101
102
|
- id: pyupgrade
|
|
102
103
|
args: ["--py38-plus"]
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": " general python tool for running ITkPixV1.1 and ITkPixV2 module QC tests for the ATLAS ITk project",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"title": "atlas-itk-pixel-modules/mqt: v2.
|
|
5
|
-
"version": "v2.
|
|
4
|
+
"title": "atlas-itk-pixel-modules/mqt: v2.8.0",
|
|
5
|
+
"version": "v2.8.0",
|
|
6
6
|
"upload_type": "software",
|
|
7
7
|
"creators": [
|
|
8
8
|
{
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
"related_identifiers": [
|
|
121
121
|
{
|
|
122
122
|
"scheme": "url",
|
|
123
|
-
"identifier": "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tree/v2.
|
|
123
|
+
"identifier": "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tree/v2.8.0",
|
|
124
124
|
"relation": "isSupplementTo"
|
|
125
125
|
}
|
|
126
126
|
]
|
|
@@ -77,6 +77,6 @@ keywords:
|
|
|
77
77
|
license:
|
|
78
78
|
- mit
|
|
79
79
|
message: If you use this software, please cite it using the metadata from this file.
|
|
80
|
-
title: 'atlas-itk-pixel-modules/mqt: v2.
|
|
80
|
+
title: 'atlas-itk-pixel-modules/mqt: v2.8.0'
|
|
81
81
|
type: software
|
|
82
|
-
version: v2.
|
|
82
|
+
version: v2.8.0
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: module_qc_tools
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.8.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.8/
|
|
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
|
|
@@ -33,8 +33,8 @@ Classifier: Operating System :: OS Independent
|
|
|
33
33
|
Classifier: Programming Language :: Python :: 3
|
|
34
34
|
Requires-Python: >=3.9
|
|
35
35
|
Requires-Dist: check-jsonschema
|
|
36
|
-
Requires-Dist: module-qc-data-tools>=1.
|
|
37
|
-
Requires-Dist: module-qc-database-tools>=2.
|
|
36
|
+
Requires-Dist: module-qc-data-tools>=1.5.0
|
|
37
|
+
Requires-Dist: module-qc-database-tools>=2.10.0
|
|
38
38
|
Requires-Dist: numpy
|
|
39
39
|
Requires-Dist: packaging
|
|
40
40
|
Requires-Dist: pre-commit
|
|
@@ -45,7 +45,7 @@ Requires-Dist: typer>=0.18.0
|
|
|
45
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.8.0
|
|
49
49
|
|
|
50
50
|
A general python tool for running ITkPixV1.1 and ITkPixV2 module QC tests
|
|
51
51
|
|
|
@@ -74,19 +74,20 @@ low voltage power supply
|
|
|
74
74
|
|
|
75
75
|
**Configuration settings**
|
|
76
76
|
|
|
77
|
-
| Name | Description
|
|
78
|
-
| --------------------- |
|
|
79
|
-
| `run_dir` | path (relative or absolute) to the directory where `power_supply` commands should be run
|
|
80
|
-
| `on_cmd` | command to turn on the power supply with specified voltage and current. Use the syntax `{v}` and `{i}` to represent the voltage and current that are to be given as input arguments
|
|
81
|
-
| `off_cmd` | command to turn off the power supply
|
|
82
|
-
| `set_cmd` | command to set voltage and current for power supply. Use the syntax `{v}` and `{i}` to represent the voltage and current that are to be given as input arguments
|
|
83
|
-
| `getI_cmd` | command to inquire the set current of the power supply. This command shall return a std output which represents the value of the current (float in the unit of [A]). For example, when I = 5.2A, `getI_cmd` returns std output = `5.2`.
|
|
84
|
-
| `getV_cmd` | command to inquire the set voltage of the power supply. This command shall return a std output which represents the value of the voltage (float in the unit of [V]). For example, when V = 1.8V, `getV_cmd` returns std output = `1.8`.
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
77
|
+
| Name | Description |
|
|
78
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
79
|
+
| `run_dir` | path (relative or absolute) to the directory where `power_supply` commands should be run |
|
|
80
|
+
| `on_cmd` | command to turn on the power supply with specified voltage and current. Use the syntax `{v}` and `{i}` to represent the voltage and current that are to be given as input arguments |
|
|
81
|
+
| `off_cmd` | command to turn off the power supply |
|
|
82
|
+
| `set_cmd` | command to set voltage and current for power supply. Use the syntax `{v}` and `{i}` to represent the voltage and current that are to be given as input arguments |
|
|
83
|
+
| `getI_cmd` | command to inquire the set current of the power supply. This command shall return a std output which represents the value of the current (float in the unit of [A]). For example, when I = 5.2A, `getI_cmd` returns std output = `5.2`. |
|
|
84
|
+
| `getV_cmd` | command to inquire the set voltage of the power supply. This command shall return a std output which represents the value of the voltage (float in the unit of [V]). For example, when V = 1.8V, `getV_cmd` returns std output = `1.8`. |
|
|
85
|
+
| `getState_cmd` | command to inquire the state of the output channel. This command shall return a std output which represents the state of the channel. When the output is turned on, `getState_cmd` shall return `ON`. When the output is off, `getState_cmd` shall return `OFF`. |
|
|
86
|
+
| `measI_cmd` | command to measure the output current of the power supply. This command shall return a std output which represents the value of the current (float in the unit of [A]). For example, when I = 5.2A, `measI_cmd` returns std output = `5.2`. |
|
|
87
|
+
| `measV_cmd` | command to measure the output voltage of the power supply. This command shall return a std output which represents the value of the voltage (float in the unit of [V]). For example, when V = 1.8V, `measV_cmd` returns std output = `1.8`. |
|
|
88
|
+
| `n_try` | number of re-tries in case the script fails to read from the power supply |
|
|
89
|
+
| `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 |
|
|
90
|
+
| `success_code` | exit status that indicates success. The default is 0. |
|
|
90
91
|
|
|
91
92
|
### high_voltage
|
|
92
93
|
|
|
@@ -179,6 +180,36 @@ the following:
|
|
|
179
180
|
sys.exit(1)
|
|
180
181
|
```
|
|
181
182
|
|
|
183
|
+
### LLS interlock
|
|
184
|
+
|
|
185
|
+
The `lls_interlock` block specifies the path and the commands for reading
|
|
186
|
+
information from the interlock system in a LLS setup. Always one module in a
|
|
187
|
+
serial powering chain is connected directly to the interlock system to read the
|
|
188
|
+
module NTC.
|
|
189
|
+
|
|
190
|
+
**Configuration settings**
|
|
191
|
+
|
|
192
|
+
| Name | Description |
|
|
193
|
+
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
194
|
+
| `run_dir` | path (relative or absolute) to the directory where `lls_interlock` commands should be run |
|
|
195
|
+
| `get_interlock_temperature_cmd` | command to read a temperature that is used as an input into the interlock system. This can be e.g. a module NTC from the interlock module of a serial powering chain. The command returns a std output which represents the value of measured temperature (float in the unit of [C]). For example: when T = 36.2C, `get_interlock_temperature_cmd` returns std output = `36.2`. |
|
|
196
|
+
| `n_try` | number of re-tries in case the script fails to read from the interlock system |
|
|
197
|
+
| `success_code` | exit status that indicates success. The default is 0. |
|
|
198
|
+
|
|
199
|
+
### MOPS
|
|
200
|
+
|
|
201
|
+
The `mops_monitoring` block specifies the path and the commands for reading
|
|
202
|
+
monitoring information from a MOPS chip
|
|
203
|
+
|
|
204
|
+
**Configuration settings**
|
|
205
|
+
|
|
206
|
+
| Name | Description |
|
|
207
|
+
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
208
|
+
| `run_dir` | path (relative or absolute) to the directory where `mops_monitoring` commands should be run |
|
|
209
|
+
| `get_converted_adc_measurement_cmd` | command to measure temperature or voltage from the MOPS. Since several MOPS chips can be available in the setup, `{mops-id}` can be passed to the command, identifying the MOPS chip. The `{ch-id}` parameter is used to specify the ADC channel that is read. The command returns a std output which represents the ADC value for the specified channel converted into the measured temperature (float in the unit of [C]) or voltage (float in the unit of [V]). For example: when T = 36.2C, `get_converted_adc_measurement_cmd` returns std output = `36.2`. Note: When using an emulator, one can provide a `-C` flag for the temperature measurement or a `-V` flag for the voltage measurement (passed as the `{unit}` parameter). |
|
|
210
|
+
| `n_try` | number of re-tries in case the script fails to read from the MOPS |
|
|
211
|
+
| `success_code` | exit status that indicates success. The default is 0. |
|
|
212
|
+
|
|
182
213
|
## Measurement Configuration
|
|
183
214
|
|
|
184
215
|
### tasks
|
|
@@ -16,6 +16,36 @@ and this project adheres to
|
|
|
16
16
|
|
|
17
17
|
**_Fixed:_**
|
|
18
18
|
|
|
19
|
+
## [2.8.0](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.8.0) - 2006-03-06 ## {: #mqt-v2.8.0 }
|
|
20
|
+
|
|
21
|
+
**_Added:_**
|
|
22
|
+
|
|
23
|
+
- add checks into `IV_MEASURE` (!282)
|
|
24
|
+
- warning if measured points less than expected
|
|
25
|
+
- progress lock to protect from mixing progress output and measured values
|
|
26
|
+
- read current when HV not reached to trigger Keithley autorange - closes #177
|
|
27
|
+
- Power supply emulator update (!283)
|
|
28
|
+
- Add MOPS hardware class (!280)
|
|
29
|
+
- Add LLS interlock hardware class (!281)
|
|
30
|
+
- Allow sending channel identifier to power supply for fine-grained channel
|
|
31
|
+
selection (!275)
|
|
32
|
+
- OB Cell Thermal performance measurement (!227)
|
|
33
|
+
|
|
34
|
+
!!! important
|
|
35
|
+
|
|
36
|
+
Requires module-qc-data-tools >= v1.5.0rc0,
|
|
37
|
+
|
|
38
|
+
**_Fixed:_**
|
|
39
|
+
|
|
40
|
+
- Upgrade versions of pre-commit hooks (!279)
|
|
41
|
+
- fix CI (PC903 and PP304) (!273)
|
|
42
|
+
|
|
43
|
+
## [2.7.1](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.7.1) - 2025-10-30 ## {: #mqt-v2.7.1 }
|
|
44
|
+
|
|
45
|
+
**_Changed:_**
|
|
46
|
+
|
|
47
|
+
- reverted file lock related changes in !265 and !270 (!271)
|
|
48
|
+
|
|
19
49
|
## [2.7.0](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-tools/-/tags/v2.7.0) - 2025-10-29 ## {: #mqt-v2.7.0 }
|
|
20
50
|
|
|
21
51
|
**_Changed:_**
|
|
@@ -36,6 +66,8 @@ and this project adheres to
|
|
|
36
66
|
`mqt measurement sldo -c <hw config> -o <output dir> --npoints <int>`
|
|
37
67
|
- a pipeline test `test_measurement_one_point_SLDO` was also added in
|
|
38
68
|
`test_emulator.py` to check the implementation
|
|
69
|
+
- add fcntl capability to lock before calling yarr commands simultaneously
|
|
70
|
+
(!265)
|
|
39
71
|
|
|
40
72
|
**_Fixed:_**
|
|
41
73
|
|
|
@@ -94,7 +94,7 @@ package.
|
|
|
94
94
|
$ python -m venv venv
|
|
95
95
|
$ source venv/bin/activate
|
|
96
96
|
$ python -m pip install -U pip
|
|
97
|
-
$ python -m pip install -U pip module-qc-tools==2.
|
|
97
|
+
$ python -m pip install -U pip module-qc-tools==2.8.0
|
|
98
98
|
```
|
|
99
99
|
|
|
100
100
|
### via uv
|
|
@@ -103,7 +103,7 @@ $ python -m pip install -U pip module-qc-tools==2.7.1
|
|
|
103
103
|
$ python -m venv venv
|
|
104
104
|
$ source venv/bin/activate
|
|
105
105
|
$ python -m pip install uv
|
|
106
|
-
$ uv pip install module-qc-tools==2.
|
|
106
|
+
$ uv pip install module-qc-tools==2.8.0
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
# Usage
|
|
@@ -487,3 +487,36 @@ file (i.e. '$(module-qc-tools --prefix)/configs/meas_config.json').
|
|
|
487
487
|
```
|
|
488
488
|
measurement-LONG-TERM-STABILITY-DCS -c $(module-qc-tools --prefix)/configs/hw_config_emulator_merged_vmux.json -o emulator/outputs/
|
|
489
489
|
```
|
|
490
|
+
|
|
491
|
+
## Thermal Performance
|
|
492
|
+
|
|
493
|
+
- [`mqt measurement thermal-performance`](reference/cli.md#mqt-measurement-thermal-performance)
|
|
494
|
+
- [`module-qc-tools measurement thermal-performance`](reference/cli.md#mqt-measurement-thermal-performance)
|
|
495
|
+
- [`measurement-THERMAL-PERFORMANCE`](reference/cli.md#mqt-measurement-thermal-performance)
|
|
496
|
+
|
|
497
|
+
This adds the ability to run the thermal performance measurement
|
|
498
|
+
(`task = THERMAL_PERFORMANCE`) as specified in the input configuration json file
|
|
499
|
+
(i.e. '$(module-qc-tools --prefix)/configs/meas_config.json').
|
|
500
|
+
|
|
501
|
+
**Configuration settings**
|
|
502
|
+
|
|
503
|
+
| Name | Description |
|
|
504
|
+
| ----------- | -------------------------------------------------------- |
|
|
505
|
+
| `v_mux_ntc` | list of Vmux channels to be measured for ntc temperature |
|
|
506
|
+
| `i_mux_ntc` | list of Imux channels to be measured for ntc temperature |
|
|
507
|
+
| `v_mux_gnd` | list of Vmux channels to be measured for GND temperature |
|
|
508
|
+
| `i_mux_gnd` | list of Imux channels to be measured for GND temperature |
|
|
509
|
+
| `v_mux` | list of Vmux channels to be measured |
|
|
510
|
+
| `i_mux` | list of Imux channels to be measured |
|
|
511
|
+
|
|
512
|
+
??? example
|
|
513
|
+
|
|
514
|
+
```
|
|
515
|
+
measurement-THERMAL-PERFORMANCE -c $(module-qc-tools --prefix)/configs/hw_config_example_merged_vmux_itkpixv2.json -m 20UPGM23xxxxxx_L2_warm.json
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
??? example "emulator"
|
|
519
|
+
|
|
520
|
+
```
|
|
521
|
+
measurement-THERMAL-PERFORMANCE -c $(module-qc-tools --prefix)/configs/hw_config_emulator_merged_vmux.json -o emulator/outputs/
|
|
522
|
+
```
|
|
@@ -20,8 +20,8 @@ dependencies = [
|
|
|
20
20
|
"tabulate",
|
|
21
21
|
"pre-commit",
|
|
22
22
|
"check-jsonschema",
|
|
23
|
-
"module-qc-data-tools >= 1.
|
|
24
|
-
"module-qc-database-tools >= 2.
|
|
23
|
+
"module-qc-data-tools >= 1.5.0",
|
|
24
|
+
"module-qc-database-tools >= 2.10.0",
|
|
25
25
|
"requests",
|
|
26
26
|
'urllib3>=1.26.20,<2; "el7.x86_64" in platform_release',
|
|
27
27
|
"typer>=0.18.0",
|
|
@@ -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.8/"
|
|
42
42
|
|
|
43
43
|
[project.scripts]
|
|
44
44
|
module-qc-tools = "module_qc_tools.cli:app"
|
|
@@ -55,6 +55,11 @@ measurement-IV-MEASURE = "module_qc_tools.cli.IV_MEASURE:app"
|
|
|
55
55
|
module-qc-tools-upload = "module_qc_tools.cli.upload_localdb:app"
|
|
56
56
|
measurement-UNDERSHUNT-PROTECTION = "module_qc_tools.cli.UNDERSHUNT_PROTECTION:app"
|
|
57
57
|
measurement-LONG-TERM-STABILITY-DCS = "module_qc_tools.cli.LONG_TERM_STABILITY_DCS:app"
|
|
58
|
+
measurement-THERMAL-PERFORMANCE = "module_qc_tools.cli.THERMAL_PERFORMANCE:app"
|
|
59
|
+
|
|
60
|
+
[dependency-groups]
|
|
61
|
+
dev = [ { include-group = "test" } ]
|
|
62
|
+
test = [ "pytest" ]
|
|
58
63
|
|
|
59
64
|
[tool.hatch.version]
|
|
60
65
|
source = "vcs"
|
|
@@ -207,6 +212,7 @@ messages_control.disable = [
|
|
|
207
212
|
"design",
|
|
208
213
|
"fixme",
|
|
209
214
|
"line-too-long",
|
|
215
|
+
"too-many-lines",
|
|
210
216
|
"wrong-import-position",
|
|
211
217
|
# below are additional warnings to fix later
|
|
212
218
|
"duplicate-code",
|
|
@@ -221,6 +227,7 @@ messages_control.disable = [
|
|
|
221
227
|
]
|
|
222
228
|
|
|
223
229
|
[tool.pytest.ini_options]
|
|
230
|
+
log_level = "INFO"
|
|
224
231
|
minversion = "6.0"
|
|
225
232
|
addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"]
|
|
226
233
|
xfail_strict = true
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.
|
|
32
|
-
__version_tuple__ = version_tuple = (2,
|
|
31
|
+
__version__ = version = '2.8.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 8, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from tempfile import TemporaryDirectory
|
|
5
|
+
|
|
6
|
+
import typer
|
|
7
|
+
from module_qc_data_tools.qcDataFrame import (
|
|
8
|
+
outputDataFrame,
|
|
9
|
+
)
|
|
10
|
+
from module_qc_data_tools.utils import (
|
|
11
|
+
get_chip_type_from_serial_number,
|
|
12
|
+
get_layer_from_sn,
|
|
13
|
+
get_sn_from_connectivity,
|
|
14
|
+
load_hw_config,
|
|
15
|
+
save_dict_list,
|
|
16
|
+
)
|
|
17
|
+
from module_qc_database_tools.utils import (
|
|
18
|
+
get_BOMCode_from_file,
|
|
19
|
+
get_cutFile_suffix,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
from module_qc_tools.cli.globals import (
|
|
23
|
+
CONTEXT_SETTINGS,
|
|
24
|
+
LogLevel,
|
|
25
|
+
OPTION_config_hw,
|
|
26
|
+
OPTION_config_meas,
|
|
27
|
+
OPTION_module_connectivity,
|
|
28
|
+
OPTION_nchips,
|
|
29
|
+
OPTION_output_dir,
|
|
30
|
+
OPTION_save_local,
|
|
31
|
+
OPTION_site,
|
|
32
|
+
OPTION_use_calib_ADC,
|
|
33
|
+
OPTION_use_pixel_config,
|
|
34
|
+
OPTION_verbosity,
|
|
35
|
+
check_module_connectivity,
|
|
36
|
+
)
|
|
37
|
+
from module_qc_tools.measurements.thermal_performance import (
|
|
38
|
+
run_emeas,
|
|
39
|
+
run_tpmeas,
|
|
40
|
+
)
|
|
41
|
+
from module_qc_tools.utils import datapath as mqt_data
|
|
42
|
+
from module_qc_tools.utils.misc import (
|
|
43
|
+
add_identifiers_metadata,
|
|
44
|
+
copytree,
|
|
45
|
+
load_meas_config,
|
|
46
|
+
)
|
|
47
|
+
from module_qc_tools.utils.power_supply import power_supply
|
|
48
|
+
from module_qc_tools.utils.yarr import yarr
|
|
49
|
+
|
|
50
|
+
logger = logging.getLogger("measurement")
|
|
51
|
+
|
|
52
|
+
app = typer.Typer(context_settings=CONTEXT_SETTINGS)
|
|
53
|
+
|
|
54
|
+
# Taking the test-type from the script name which is the test-code in ProdDB.
|
|
55
|
+
TEST_TYPE = Path(__file__).stem
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@app.command()
|
|
59
|
+
def main(
|
|
60
|
+
hw_config_path: OPTION_config_hw = ...,
|
|
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
|
+
use_pixel_config: OPTION_use_pixel_config = False,
|
|
66
|
+
institution: OPTION_site = "",
|
|
67
|
+
use_calib_adc: OPTION_use_calib_ADC = True,
|
|
68
|
+
save_local: OPTION_save_local = True,
|
|
69
|
+
nchips: OPTION_nchips = None,
|
|
70
|
+
):
|
|
71
|
+
"""
|
|
72
|
+
Records temperatures from NTC thermistors on the module PCB and from the cooling system.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
check_module_connectivity(
|
|
76
|
+
hw_config_path=hw_config_path, module_connectivity=module_connectivity
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
timestart = datetime.now().strftime("%Y-%m-%d_%H%M%S")
|
|
80
|
+
|
|
81
|
+
# if -o option used, overwrite the default output directory
|
|
82
|
+
output_dir = module_connectivity.parent if module_connectivity else base_output_dir
|
|
83
|
+
|
|
84
|
+
if base_output_dir != Path("outputs"):
|
|
85
|
+
output_dir = base_output_dir
|
|
86
|
+
|
|
87
|
+
output_dir = output_dir.joinpath("Measurements", TEST_TYPE, timestart)
|
|
88
|
+
# Make output directory and start log file
|
|
89
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
90
|
+
|
|
91
|
+
logger.info(f"Start {TEST_TYPE.replace('_', ' ')}!")
|
|
92
|
+
logger.info(f"TimeStart: {timestart}")
|
|
93
|
+
|
|
94
|
+
logger.addHandler(logging.FileHandler(output_dir.joinpath("output.log")))
|
|
95
|
+
|
|
96
|
+
config_hw = load_hw_config(hw_config_path)
|
|
97
|
+
|
|
98
|
+
if module_connectivity:
|
|
99
|
+
config_hw["yarr"]["connectivity"] = module_connectivity
|
|
100
|
+
|
|
101
|
+
# Taking the module SN from YARR path to config in the connectivity file.
|
|
102
|
+
module_serial = get_sn_from_connectivity(config_hw["yarr"]["connectivity"])
|
|
103
|
+
layer = get_layer_from_sn(module_serial)
|
|
104
|
+
chip_type = get_chip_type_from_serial_number(module_serial)
|
|
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
|
+
bom_suffix = get_cutFile_suffix(bom)
|
|
112
|
+
|
|
113
|
+
# Load the measurement config and combine it with the hardware config
|
|
114
|
+
config = load_meas_config(
|
|
115
|
+
meas_config_path,
|
|
116
|
+
test_type=TEST_TYPE,
|
|
117
|
+
chip_type=chip_type,
|
|
118
|
+
bom_type=bom_suffix,
|
|
119
|
+
layer=layer,
|
|
120
|
+
nchips=nchips,
|
|
121
|
+
)
|
|
122
|
+
config.update(config_hw)
|
|
123
|
+
|
|
124
|
+
# initialize hardware
|
|
125
|
+
ps = power_supply(config["power_supply"])
|
|
126
|
+
yr = yarr(config["yarr"])
|
|
127
|
+
|
|
128
|
+
if not use_pixel_config:
|
|
129
|
+
yr.omit_pixel_config()
|
|
130
|
+
|
|
131
|
+
ps.set(v=config["v_max"], i=config["i_config"])
|
|
132
|
+
yr.configure()
|
|
133
|
+
|
|
134
|
+
# Measure temperature at the end of the measurement to ensure temperature stability
|
|
135
|
+
try:
|
|
136
|
+
data = run_emeas(config, ps)
|
|
137
|
+
except KeyboardInterrupt:
|
|
138
|
+
logger.info("KeyboardInterrupt")
|
|
139
|
+
yr.remove_tmp_connectivity()
|
|
140
|
+
except Exception as err:
|
|
141
|
+
logger.info("Error in measuring environmental conditions.")
|
|
142
|
+
logger.exception(err)
|
|
143
|
+
yr.remove_tmp_connectivity()
|
|
144
|
+
raise typer.Exit(1) from err
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
data_tempmeas = run_tpmeas(config, ps, yr, use_calib_adc)
|
|
148
|
+
except KeyboardInterrupt:
|
|
149
|
+
logger.info("KeyboardInterrupt")
|
|
150
|
+
yr.remove_tmp_connectivity()
|
|
151
|
+
except Exception as err:
|
|
152
|
+
logger.info("Error in measuring temperature.")
|
|
153
|
+
logger.exception(err)
|
|
154
|
+
yr.remove_tmp_connectivity()
|
|
155
|
+
raise typer.Exit(1) from err
|
|
156
|
+
|
|
157
|
+
add_identifiers_metadata(data, module_serial, institution)
|
|
158
|
+
add_identifiers_metadata(data_tempmeas, module_serial, institution)
|
|
159
|
+
|
|
160
|
+
# save results in json
|
|
161
|
+
logger.info(
|
|
162
|
+
"==================================Summary=================================="
|
|
163
|
+
)
|
|
164
|
+
alloutput = {}
|
|
165
|
+
alloutput_chip = []
|
|
166
|
+
chipnames = []
|
|
167
|
+
|
|
168
|
+
# Save to an output json file
|
|
169
|
+
outputDF_tempmeas = outputDataFrame()
|
|
170
|
+
outputDF_tempmeas.set_serial_num(module_serial)
|
|
171
|
+
outputDF_tempmeas.set_test_type(TEST_TYPE)
|
|
172
|
+
outputDF_tempmeas.set_subtest_type("TP_TEMP")
|
|
173
|
+
outputDF_tempmeas.set_results(data)
|
|
174
|
+
alloutput = outputDF_tempmeas.to_dict()
|
|
175
|
+
|
|
176
|
+
for chip in yr._enabled_chip_positions:
|
|
177
|
+
logger.info(f"Chip-{chip + 1}")
|
|
178
|
+
logger.info(data_tempmeas[chip], extra={"markup": False})
|
|
179
|
+
chip_name = data_tempmeas[chip]._meta_data["Name"]
|
|
180
|
+
|
|
181
|
+
# Save to an output json file
|
|
182
|
+
outputDF_tempmeas_chip = outputDataFrame()
|
|
183
|
+
outputDF_tempmeas_chip.set_test_type(TEST_TYPE)
|
|
184
|
+
outputDF_tempmeas_chip.set_subtest_type("TP_TEMP")
|
|
185
|
+
outputDF_tempmeas_chip.set_results(data_tempmeas[chip])
|
|
186
|
+
|
|
187
|
+
alloutput_chip += [outputDF_tempmeas_chip.to_dict()]
|
|
188
|
+
chipnames += [chip_name]
|
|
189
|
+
|
|
190
|
+
with TemporaryDirectory() as tmpdirname:
|
|
191
|
+
alloutput["results"]["property"]["FE"] = []
|
|
192
|
+
alloutput["results"]["property"]["FE"].extend(alloutput_chip)
|
|
193
|
+
alloutput_list = [alloutput]
|
|
194
|
+
save_dict_list(
|
|
195
|
+
Path(tmpdirname).joinpath(f"{module_serial}.json"),
|
|
196
|
+
alloutput_list,
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# for now, set to false until localDB upload functionality implemented
|
|
200
|
+
upload_failed = True
|
|
201
|
+
upload_implemented = False
|
|
202
|
+
|
|
203
|
+
if not save_local:
|
|
204
|
+
# add in logic here to upload to localDB
|
|
205
|
+
msg = "Not implemented yet"
|
|
206
|
+
raise RuntimeError(msg)
|
|
207
|
+
|
|
208
|
+
if upload_failed or save_local:
|
|
209
|
+
copytree(tmpdirname, output_dir)
|
|
210
|
+
if upload_failed and upload_implemented:
|
|
211
|
+
logger.warning(
|
|
212
|
+
"The upload to localDB failed. Please fix and retry uploading the measurement output again."
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
logger.info(f"Writing output measurements in {output_dir}")
|
|
216
|
+
|
|
217
|
+
logger.info("Done!")
|
|
218
|
+
logger.info(f"TimeEnd: {datetime.now().strftime('%Y-%m-%d_%H%M%S')}")
|
|
219
|
+
|
|
220
|
+
# Delete temporary files
|
|
221
|
+
if not use_pixel_config:
|
|
222
|
+
yr.remove_tmp_connectivity()
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
if __name__ == "__main__":
|
|
226
|
+
typer.run(main)
|
|
@@ -40,6 +40,7 @@ OPTION_config_meas = Annotated[
|
|
|
40
40
|
Optional[Path],
|
|
41
41
|
typer.Option(
|
|
42
42
|
"-cm",
|
|
43
|
+
"--cm",
|
|
43
44
|
"--config-meas",
|
|
44
45
|
help="Measurement config file path",
|
|
45
46
|
exists=True,
|
|
@@ -242,7 +243,7 @@ OPTION_test_size = Annotated[
|
|
|
242
243
|
OPTION_mode = Annotated[
|
|
243
244
|
str,
|
|
244
245
|
typer.Option(
|
|
245
|
-
"-m",
|
|
246
|
+
"-m", ## short option required to match the YARR executable, see `def dataMergingCheck` in `yarr.py`
|
|
246
247
|
"--mode",
|
|
247
248
|
help="Mode of data merging check: '4-to-1' or '2-to-1'",
|
|
248
249
|
),
|
|
@@ -301,9 +302,9 @@ def sn_callback(value: str):
|
|
|
301
302
|
OPTION_serial_number = Annotated[
|
|
302
303
|
str,
|
|
303
304
|
typer.Option(
|
|
304
|
-
"
|
|
305
|
+
"--sn",
|
|
305
306
|
"--serial-number",
|
|
306
|
-
help="
|
|
307
|
+
help="Serial number of the component to be measured, must be in the format of '20UGXXYYNNNNNNN'.",
|
|
307
308
|
callback=sn_callback,
|
|
308
309
|
),
|
|
309
310
|
]
|