From 7e94a027a411961b53ed88486b9dd13bc68811a1 Mon Sep 17 00:00:00 2001
From: Thomas Kluyver <thomas@kluyver.me.uk>
Date: Thu, 14 Dec 2023 14:15:48 +0000
Subject: [PATCH] Add test for detector with some modules missing

---
 tests/test_calcat_interface2.py | 39 ++++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 10 deletions(-)

diff --git a/tests/test_calcat_interface2.py b/tests/test_calcat_interface2.py
index fa0acc1c6..8bdf3a2ac 100644
--- a/tests/test_calcat_interface2.py
+++ b/tests/test_calcat_interface2.py
@@ -1,7 +1,10 @@
 import pytest
 
 from cal_tools.calcat_interface2 import (
-    CalibrationData, AGIPDConditions, SingleConstantVersion,
+    CalibrationData,
+    AGIPDConditions,
+    DSSCConditions,
+    SingleConstantVersion,
 )
 
 
@@ -22,11 +25,11 @@ def test_AGIPD_CalibrationData_metadata():
         cond,
         "MID_DET_AGIPD1M-1",
         event_at="2022-09-01 13:26:48.00",
-        calibrations=['Offset', 'SlopesFF'],
+        calibrations=["Offset", "SlopesFF"],
     )
-    assert 'Offset' in agipd_cd
-    assert set(agipd_cd['Offset'].constants) == {f'AGIPD{i:02}' for i in range(16)}
-    assert isinstance(agipd_cd['Offset'].constants['AGIPD00'], SingleConstantVersion)
+    assert "Offset" in agipd_cd
+    assert set(agipd_cd["Offset"].constants) == {f"AGIPD{m:02}" for m in range(16)}
+    assert isinstance(agipd_cd["Offset"].constants["AGIPD00"], SingleConstantVersion)
 
 
 @pytest.mark.requires_gpfs
@@ -47,20 +50,36 @@ def test_AGIPD_CalibrationData_metadata_SPB():
         event_at="2020-01-07 13:26:48.00",
     )
     assert "Offset" in agipd_cd
-    assert set(agipd_cd["Offset"].constants) == {f"AGIPD{i:02}" for i in range(16)}
+    assert set(agipd_cd["Offset"].constants) == {f"AGIPD{m:02}" for m in range(16)}
     assert agipd_cd["Offset"].module_nums == list(range(16))
     assert agipd_cd["Offset"].qm_names == [
-        f"Q{(i // 4) + 1}M{(i % 4) + 1}" for i in range(16)
+        f"Q{(m // 4) + 1}M{(m % 4) + 1}" for m in range(16)
     ]
     assert isinstance(agipd_cd["Offset"].constants["AGIPD00"], SingleConstantVersion)
 
 
+@pytest.mark.requires_gpfs
+def test_DSSC_modules_missing():
+    dssc_cd = CalibrationData.from_condition(
+        DSSCConditions(sensor_bias_voltage=100, memory_cells=600),
+        "SQS_DET_DSSC1M-1",
+        event_at="2023-11-29 00:00:00",
+    )
+    # DSSC was used with only 3 quadrants at this point
+    modnos = list(range(4)) + list(range(8, 16))
+    assert dssc_cd.aggregator_names == ['DSSC{m:02}' for m in modnos]
+    assert dssc_cd.module_nums == modnos
+    assert dssc_cd.qm_names == [
+        f"Q{(m // 4) + 1}M{(m % 4) + 1}" for m in modnos
+    ]
+
+
 @pytest.mark.xfail
 @pytest.mark.requires_gpfs
 def test_AGIPD_CalibrationData_report():
     """Test CalibrationData with data from report"""
     # Report ID: https://in.xfel.eu/calibration/reports/3757
     agipd_cd = CalibrationData.from_report(3757)
-    assert set(agipd_cd) == {'Offset', 'Noise', 'ThresholdsDark', 'BadPixelsDark'}
-    assert agipd_cd.aggregator_names == [f'AGIPD{n:02}' for n in range(16)]
-    assert isinstance(agipd_cd['Offset'].constants['AGIPD00'], SingleConstantVersion)
+    assert set(agipd_cd) == {"Offset", "Noise", "ThresholdsDark", "BadPixelsDark"}
+    assert agipd_cd.aggregator_names == [f"AGIPD{n:02}" for n in range(16)]
+    assert isinstance(agipd_cd["Offset"].constants["AGIPD00"], SingleConstantVersion)
-- 
GitLab