Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 29 additions & 12 deletions src/contraqctor/qc/harp/sniff_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,20 +115,37 @@ def test_signal_quality(self):
sudden_jumps_ratio = (np.sum(np.abs(derivative) > 3 * np.std(derivative))) / TOTAL_SAMPLES
metrics["sudden_jumps_ratio"] = sudden_jumps_ratio

is_ok = (
metrics["quantization_ratio"] > self.quantization_ratio_thr
and metrics["clustering_ratio"] < self.clustering_thr
and metrics["min_clipping"] < self.clipping_thr
and metrics["max_clipping"] < self.clipping_thr
and metrics["sudden_jumps_ratio"] < self.sudden_jumps_thr
)

if is_ok:
return self.pass_test(True, "Signal quality is good", context=metrics)
tests = {
"quantization_ratio": (
metrics["quantization_ratio"] > self.quantization_ratio_thr,
"Quantization ratio is too low. Expected at least {:.2f}% of the full bit depth".format(
self.quantization_ratio_thr * 100
),
),
"clustering_ratio": (
metrics["clustering_ratio"] < self.clustering_thr,
f"Clustering ratio is too high. Expected less than {self.clustering_thr:.2f}",
),
"min_clipping": (
metrics["min_clipping"] < self.clipping_thr,
f"Too much clipping at the minimum value. Expected less than {self.clipping_thr:.2f}",
),
"max_clipping": (
metrics["max_clipping"] < self.clipping_thr,
f"Too much clipping at the maximum value. Expected less than {self.clipping_thr:.2f}",
),
"sudden_jumps_ratio": (
metrics["sudden_jumps_ratio"] < self.sudden_jumps_thr,
f"Too many sudden jumps in the signal. Expected less than {self.sudden_jumps_thr:.2f} of the samples to have sudden jumps.",
),
}

if all(test[0] for test in tests.values()):
return self.pass_test(metrics, "All quality checks passed.", context=metrics)
else:
return self.fail_test(
False,
"Signal quality is not good",
metrics,
"Some quality checks failed: " + "; ".join([test[1] for test in tests.values() if not test[0]]),
context=metrics,
)

Expand Down
4 changes: 2 additions & 2 deletions tests/test_qc/harp/test_harp_sniff_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,13 +198,13 @@ def test_sniff_detector_signal_quality(self, mock_sniff_device, mock_sniff_devic
suite = HarpSniffDetectorTestSuite(mock_sniff_device)
result = suite.test_signal_quality()
assert result.status == Status.PASSED
assert "Signal quality is good" in result.message
assert "All quality checks passed." in result.message
assert "context" in dir(result)

suite = HarpSniffDetectorTestSuite(mock_sniff_device_bad_quality)
result = suite.test_signal_quality()
assert result.status == Status.FAILED
assert "Signal quality is not good" in result.message
assert "Some quality checks failed" in result.message

metrics = result.context
assert "quantization_ratio" in metrics
Expand Down
Loading