From c3e144359409fc9eae9bf815c4c426733d5f073b Mon Sep 17 00:00:00 2001
From: Zach Yarbrough <zach.yarbrough@ligo.org>
Date: Mon, 19 Feb 2024 12:59:38 -0800
Subject: [PATCH] changes to /config/inspiral.py to handle empty snr_optimizer
 section of config, and to dags/layers/inspiral.py to only use snr_optimizer
 section of config

Added snr_optimizer.ifos
---
 gstlal-inspiral/python/config/inspiral.py     |  6 +++
 .../python/dags/layers/inspiral.py            | 38 +++++++++----------
 2 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/gstlal-inspiral/python/config/inspiral.py b/gstlal-inspiral/python/config/inspiral.py
index caf5fe7961..75e2f19b15 100644
--- a/gstlal-inspiral/python/config/inspiral.py
+++ b/gstlal-inspiral/python/config/inspiral.py
@@ -51,6 +51,12 @@ class Config(BaseConfig):
 			self.summary = dotdict(replace_keys(kwargs["summary"]))
 		if "snr-optimizer" in kwargs:
 			self.snr_optimizer = dotdict(replace_keys(kwargs["snr-optimizer"]))
+
+			# check to see if snr_optimizer.source is empty 
+			if self.snr_optimizer.source is None:
+			    self.snr_optimizer.source = self.source
+
+			self.snr_optimizer.ifos = list(self.snr_optimizer.source.channel_name)
 		else:
 			self.snr_optimizer = False
 
diff --git a/gstlal-inspiral/python/dags/layers/inspiral.py b/gstlal-inspiral/python/dags/layers/inspiral.py
index 24771d192d..d32a39df7b 100644
--- a/gstlal-inspiral/python/dags/layers/inspiral.py
+++ b/gstlal-inspiral/python/dags/layers/inspiral.py
@@ -1988,12 +1988,12 @@ def optimize_snr_layer(config, dag):
 	# set up common options
 	common_opts = [
 		Option("psd-fft-length", config.psd.fft_length),
-		Option("state-channel-name", dagutil.format_ifo_args(config.ifos, config.source.state_channel_name)),
-		Option("dq-channel-name", dagutil.format_ifo_args(config.ifos, config.source.dq_channel_name)),
-		Option("state-vector-on-bits", dagutil.format_ifo_args(config.ifos, config.source.state_vector_on_bits)),
-		Option("state-vector-off-bits", dagutil.format_ifo_args(config.ifos, config.source.state_vector_off_bits)),
-		Option("dq-vector-on-bits", dagutil.format_ifo_args(config.ifos, config.source.dq_vector_on_bits)),
-		Option("dq-vector-off-bits", dagutil.format_ifo_args(config.ifos, config.source.dq_vector_off_bits)),
+		Option("state-channel-name", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.state_channel_name)),
+		Option("dq-channel-name", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.dq_channel_name)),
+		Option("state-vector-on-bits", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.state_vector_on_bits)),
+		Option("state-vector-off-bits", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.state_vector_off_bits)),
+		Option("dq-vector-on-bits", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.dq_vector_on_bits)),
+		Option("dq-vector-off-bits", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.dq_vector_off_bits)),
 		Option("ht-gate-threshold", 15.),
 		Option("kafka-server", config.services.kafka_server),
 		Option("analysis-tag", config.tag),
@@ -2009,34 +2009,34 @@ def optimize_snr_layer(config, dag):
 
 	for input_topic in input_topics:
 		# set up datasource options
-		if config.source.data_source == "framexmit":
+		if config.snr_optimizer.source.data_source == "framexmit":
 			datasource_opts = [
 				Option("data-source", "framexmit"),
-				Option("framexmit-addr", dagutil.format_ifo_args(config.ifos, config.source.framexmit_addr)),
-				Option("framexmit-iface", config.source.framexmit_iface),
+				Option("framexmit-addr", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.snr_optimizersource.framexmit_addr)),
+				Option("framexmit-iface", config.snr_optimizer.source.framexmit_iface),
 			]
-		elif config.source.data_source == "lvshm":
+		elif config.snr_optimizer.source.data_source == "lvshm":
 			datasource_opts = [
 				Option("data-source", "lvshm"),
-				Option("shared-memory-partition", dagutil.format_ifo_args(config.ifos, config.source.shared_memory_partition)),
-				Option("shared-memory-block-size", config.source.shared_memory_block_size),
-				Option("shared-memory-assumed-duration", config.source.shared_memory_assumed_duration),
+				Option("shared-memory-partition", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.shared_memory_partition)),
+				Option("shared-memory-block-size", config.snr_optimizer.source.shared_memory_block_size),
+				Option("shared-memory-assumed-duration", config.snr_optimizer.source.shared_memory_assumed_duration),
 			]
-		elif config.source.data_source == "devshm":
+		elif config.snr_optimizer.source.data_source == "devshm":
 			datasource_opts = [
 				Option("data-source", "devshm"),
-				Option("shared-memory-dir", dagutil.format_ifo_args(config.ifos, config.source.inj_shared_memory_dir if input_topic == "inj_uploads" else config.source.shared_memory_dir)),
-				Option("shared-memory-block-size", config.source.shared_memory_block_size),
-				Option("shared-memory-assumed-duration", config.source.shared_memory_assumed_duration),
+				Option("shared-memory-dir", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.inj_shared_memory_dir if input_topic == "inj_uploads" else config.snr_optimizer.source.shared_memory_dir)),
+				Option("shared-memory-block-size", config.snr_optimizer.source.shared_memory_block_size),
+				Option("shared-memory-assumed-duration", config.snr_optimizer.source.shared_memory_assumed_duration),
 			]
 		else:
-			raise ValueError(f"data source = {config.source.data_source} not valid for online jobs")
+			raise ValueError(f"data source = {config.snr_optimizer.source.data_source} not valid for online jobs")
 
 		for jobnum in range(config.snr_optimizer.num_jobs):
 			arguments = datasource_opts + common_opts
 			arguments.extend([Option("input-topic", input_topic)])
 			arguments.extend([Option("job-tag", f"{format(jobnum, '04')}_inj_snropt" if input_topic == "inj_uploads" else f"{format(jobnum, '04')}_noninj_snropt")])
-			arguments.extend([Option("channel-name", dagutil.format_ifo_args(config.ifos, config.source.inj_channel_name) if input_topic == "inj_uploads" else dagutil.format_ifo_args(config.ifos, config.source.channel_name))])
+			arguments.extend([Option("channel-name", dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.inj_channel_name) if input_topic == "inj_uploads" else dagutil.format_ifo_args(config.snr_optimizer.ifos, config.snr_optimizer.source.channel_name))])
 			layer += Node(
 				arguments = arguments,
 				inputs = [
-- 
GitLab