From 2fe4e7f2015aa5d4b7275967775d45ee4b541898 Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Thu, 10 Aug 2023 15:48:23 +0200
Subject: [PATCH] TMSS-2647: Support duplicate subbands in the same SAP (for
 debugging, and holography)

---
 .../backend/src/tmss/tmssapp/adapters/parset.py     |  7 +++++--
 .../{visibilities-8.json => visibilities-9.json}    | 13 ++++++++++---
 SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py       |  2 +-
 3 files changed, 16 insertions(+), 6 deletions(-)
 rename SAS/TMSS/backend/src/tmss/tmssapp/schemas/dataproduct_specifications_template/{visibilities-8.json => visibilities-9.json} (77%)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/parset.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/parset.py
index 3fbe0cf941a..2eaad1fcb24 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/parset.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/parset.py
@@ -115,10 +115,13 @@ def _convert_correlator_settings_to_parset_dict(subtask: models.Subtask, spec: d
 
         # marshall dataproducts, but only if they're supplied. in some use cases, we want a parset before the subtask is scheduled.
         for digi_beam in digi_beams:
-            for subband in digi_beam["subbands"]:
+            for subband_index, subband in enumerate(digi_beam["subbands"]):
                 dataproduct = [dp for dp in dataproducts
                                if  dp.specifications_doc.get("sap") == digi_beam['name']
-                               and dp.specifications_doc.get("subband") == subband]
+                               and dp.specifications_doc.get("subband") == subband
+                               # In some cases, a subband can appear twice in the same SAP,
+                               # so also match by its index.
+                               and dp.specifications_doc.get("subband_index", subband_index) == subband_index]
 
                 correlator_dataproducts.append(dataproduct[0] if dataproduct else None)
 
diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/schemas/dataproduct_specifications_template/visibilities-8.json b/SAS/TMSS/backend/src/tmss/tmssapp/schemas/dataproduct_specifications_template/visibilities-9.json
similarity index 77%
rename from SAS/TMSS/backend/src/tmss/tmssapp/schemas/dataproduct_specifications_template/visibilities-8.json
rename to SAS/TMSS/backend/src/tmss/tmssapp/schemas/dataproduct_specifications_template/visibilities-9.json
index c351a571ba4..a5bb864afa6 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/schemas/dataproduct_specifications_template/visibilities-8.json
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/schemas/dataproduct_specifications_template/visibilities-9.json
@@ -3,7 +3,7 @@
   "name": "visibilities",
   "purpose": "technical_commissioning",
   "schema": {
-    "$id": "https://tmss.lofar.eu/api/schemas/dataproductspecificationstemplate/visibilities/8#",
+    "$id": "https://tmss.lofar.eu/api/schemas/dataproductspecificationstemplate/visibilities/9#",
     "$schema": "http://json-schema.org/draft-06/schema#",
     "additionalProperties": false,
     "default": {},
@@ -24,6 +24,13 @@
         "minimum": 0,
         "title": "subband number",
         "type": "integer"
+      },
+      "subband_index": {
+        "default": 0,
+        "maximum": 487,
+        "minimum": 0,
+        "title": "subband index with in the SAP",
+        "type": "integer"
       }
     },
     "required": [
@@ -32,8 +39,8 @@
     ],
     "title": "visibilities",
     "type": "object",
-    "version": 8
+    "version": 9
   },
   "state": "active",
-  "version": 8
+  "version": 9
 }
diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
index 3ac53416a75..1a7c367f73b 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
@@ -1578,7 +1578,7 @@ def schedule_observation_subtask(observation_subtask: Subtask, misc_unavailable_
                                                          dataformat=dataformat,
                                                          datatype=datatype,
                                                          producer=output,
-                                                         specifications_doc={"sap": pointing["name"], "subband": subband},
+                                                         specifications_doc={"sap": pointing["name"], "subband": subband, "subband_index": sb_nr - sb_nr_offset},
                                                          specifications_template=dataproduct_specifications_template,
                                                          feedback_doc=dataproduct_feedback_doc,
                                                          feedback_template=dataproduct_feedback_template,
-- 
GitLab