From ea3fcc8398210a18430a31dd8f3189681a78e1ad Mon Sep 17 00:00:00 2001
From: Aaron Viets <aaron.viets@ligo.org>
Date: Thu, 24 May 2018 20:02:22 -0700
Subject: [PATCH] gstlal_compute_strain:  Use creal instead of splitting into
 real and imaginary parts and fakesinking (saves computational cost)

---
 gstlal-calibration/bin/gstlal_compute_strain  | 26 +++++++------------
 .../python/calibration_parts.py               |  8 +++---
 2 files changed, 13 insertions(+), 21 deletions(-)

diff --git a/gstlal-calibration/bin/gstlal_compute_strain b/gstlal-calibration/bin/gstlal_compute_strain
index 0639c1edeb..bfbbf345c6 100755
--- a/gstlal-calibration/bin/gstlal_compute_strain
+++ b/gstlal-calibration/bin/gstlal_compute_strain
@@ -966,11 +966,11 @@ if not options.no_kappac or not options.no_fcc or not options.no_kappapu or not
 		elif options.factors_from_filters_file:
 			Xi = calibration_parts.compute_Xi_from_filters_file(pipeline, pcal_at_src_freq, derr_at_src_freq, src_pcal_line_freq, EP11_real, EP11_imag, EP12_real, EP12_imag, EP13_real, EP13_imag, EP14_real, EP14_imag, ktst, kpu, kc, fcc)
 
-		XiR, XiI = calibration_parts.split_into_real(pipeline, Xi)
-
 		if options.no_srcQ:
-			# the imaginary part is only used to compute Q
-			pipeparts.mkfakesink(pipeline, XiI)
+                        # the imaginary part is only used to compute Q
+			XiR = pipeparts.mkgeneric(pipeline, Xi, "creal")
+		else:
+			XiR, XiI = calibration_parts.split_into_real(pipeline, Xi)
 
 		sqrtXiR = pipeparts.mkpow(pipeline, XiR, exponent = 0.5)
 		if not options.no_fs and not options.no_srcQ:
@@ -1491,8 +1491,7 @@ if options.remove_callines:
 	# Reconstruct a calibrated pcal at only the ~30 Hz pcal line
 	pcaly_line1 = calibration_parts.mkresample(pipeline, pcal_at_darm_act_freq, 3, False, "audio/x-raw, format=Z128LE, rate=%d, channel-mask=(bitmask)0x0" % hoftsr)
 	pcaly_line1 = pipeparts.mkgeneric(pipeline, pcaly_line1, "lal_demodulate", line_frequency = -1.0 * darm_act_line_freq, prefactor_real = 2.0)
-	remove_pcaly_line1, trash = calibration_parts.split_into_real(pipeline, pcaly_line1)
-	pipeparts.mkfakesink(pipeline, trash)
+	remove_pcaly_line1 = pipeparts.mkgeneric(pipeline, pcaly_line1, "creal")
 
 	# Make sure we have demodulated pcal at the ~300 Hz pcal line
 	if options.no_kappac and options.no_fcc and options.no_srcQ and options.no_fs:
@@ -1500,8 +1499,7 @@ if options.remove_callines:
 	# Reconstruct a calibrated pcal at only the ~300 Hz pcal line
 	pcaly_line2 = calibration_parts.mkresample(pipeline, pcal_at_opt_gain_freq, 3, False, "audio/x-raw, format=Z128LE, rate=%d, channel-mask=(bitmask)0x0" % hoftsr)
 	pcaly_line2 = pipeparts.mkgeneric(pipeline, pcaly_line2, "lal_demodulate", line_frequency = -1.0 * opt_gain_fcc_line_freq, prefactor_real = 2.0)
-	remove_pcaly_line2, trash = calibration_parts.split_into_real(pipeline, pcaly_line2)
-	pipeparts.mkfakesink(pipeline, trash)
+	remove_pcaly_line2 = pipeparts.mkgeneric(pipeline, pcaly_line2, "creal")
 
 	# Add the first two components together. We will add this to h(t) to remove these lines
 	calibration_lines = calibration_parts.mkadder(pipeline, calibration_parts.list_srcs(pipeline, remove_pcaly_line1, remove_pcaly_line2))
@@ -1522,8 +1520,7 @@ if options.remove_callines:
 			esd_act_line = calibration_parts.mkmultiplier(pipeline, calibration_parts.list_srcs(pipeline, esd_act_line, pipeparts.mktogglecomplex(pipeline, pipeparts.mkmatrixmixer(pipeline, smooth_ktstRtee, matrix=[[1.0, 0.0]]))))
 		esd_act_line = calibration_parts.mkresample(pipeline, esd_act_line, 3, False, "audio/x-raw, format=Z128LE, rate=%d, channel-mask=(bitmask)0x0" % hoftsr)
 		esd_act_line_remove = pipeparts.mkgeneric(pipeline, esd_act_line, "lal_demodulate", line_frequency = -1.0 * esd_act_line_freq, prefactor_real = 2.0)
-		esd_act_line_remove, trash = calibration_parts.split_into_real(pipeline, esd_act_line_remove)
-		pipeparts.mkfakesink(pipeline, trash)
+		esd_act_line_remove = pipeparts.mkgeneric(pipeline, esd_act_line_remove, "creal")
 		# Add into the total line removal stream
 		calibration_lines = calibration_parts.mkadder(pipeline, calibration_parts.list_srcs(pipeline, calibration_lines, esd_act_line_remove))
 
@@ -1533,8 +1530,7 @@ if options.remove_callines:
 		# Reconstruct a calibrated pcal at only the ~1kHz pcal line
 		pcaly_line3 = calibration_parts.mkresample(pipeline, pcaly_line3, 3, False, "audio/x-raw, format=Z128LE, rate=%d, channel-mask=(bitmask)0x0" % hoftsr)
 		pcaly_line3 = pipeparts.mkgeneric(pipeline, pcaly_line3, "lal_demodulate", line_frequency = -1.0 * high_pcal_line_freq, prefactor_real = 2.0)
-		remove_pcaly_line3, trash = calibration_parts.split_into_real(pipeline, pcaly_line3)
-		pipeparts.mkfakesink(pipeline, trash)
+		remove_pcaly_line3 = pipeparts.mkgeneric(pipeline, pcaly_line3, "creal")
 		# Add into the total line removal stream
 		calibration_lines = calibration_parts.mkadder(pipeline, calibration_parts.list_srcs(pipeline, calibration_lines, remove_pcaly_line3))
 
@@ -1544,8 +1540,7 @@ if options.remove_callines:
 		# Reconstruct a calibrated pcal at only the ~3kHz pcal line
 		pcaly_line4 = calibration_parts.mkresample(pipeline, pcaly_line4, 3, False, "audio/x-raw, format=Z128LE, rate=%d, channel-mask=(bitmask)0x0" % hoftsr)
 		pcaly_line4 = pipeparts.mkgeneric(pipeline, pcaly_line4, "lal_demodulate", line_frequency = -1.0 * roaming_pcal_line_freq, prefactor_real = 2.0)
-		remove_pcaly_line4, trash = calibration_parts.split_into_real(pipeline, pcaly_line4)
-		pipeparts.mkfakesink(pipeline, trash)
+		remove_pcaly_line4 = pipeparts.mkgeneric(pipeline, pcaly_line4, "creal")
 		# Add into the total line removal stream
 		calibration_lines = calibration_parts.mkadder(pipeline, calibration_parts.list_srcs(pipeline, calibration_lines, remove_pcaly_line4))
 
@@ -1556,8 +1551,7 @@ if options.remove_callines:
 		# Reconstruct a calibrated pcal at only the ~3kHz pcal line
 		pcaly_line0 = calibration_parts.mkresample(pipeline, pcal_at_src_freq, 3, False, "audio/x-raw, format=Z128LE, rate=%d, channel-mask=(bitmask)0x0" % hoftsr)
 		pcaly_line0 = pipeparts.mkgeneric(pipeline, pcaly_line0, "lal_demodulate", line_frequency = -1.0 * src_pcal_line_freq, prefactor_real = 2.0)
-		remove_pcaly_line0, trash = calibration_parts.split_into_real(pipeline, pcaly_line0)
-		pipeparts.mkfakesink(pipeline, trash)
+		remove_pcaly_line0 = pipeparts.mkgeneric(pipeline, pcaly_line0, "creal")
 		# Add into the total line removal stream
 		calibration_lines = calibration_parts.mkadder(pipeline, calibration_parts.list_srcs(pipeline, calibration_lines, remove_pcaly_line0))
 
diff --git a/gstlal-calibration/python/calibration_parts.py b/gstlal-calibration/python/calibration_parts.py
index ecafc8b3cc..1b112ed625 100644
--- a/gstlal-calibration/python/calibration_parts.py
+++ b/gstlal-calibration/python/calibration_parts.py
@@ -186,9 +186,8 @@ def remove_harmonics(pipeline, signal, f0, num_harmonics, f0_var, filter_latency
 		line_in_witness = lowpass(pipeline, line_in_witness, compute_rate, length = filter_param / (f0_var * i), fcut = 0, filter_latency = filter_latency)
 		line = mkresample(pipeline, line, 3, filter_latency == 0.0, rate_out)
 		line = pipeparts.mkgeneric(pipeline, line, "lal_demodulate", line_frequency = -1.0 * i * f0, prefactor_real = -2.0)
-		real, imag = split_into_real(pipeline, line)
-		pipeparts.mkfakesink(pipeline, imag)
-		mkqueue(pipeline, real).link(elem)
+		line = pipeparts.mkgeneric(pipeline, line, "creal")
+		mkqueue(pipeline, line).link(elem)
 
 	return elem
 
@@ -262,8 +261,7 @@ def remove_harmonics_with_witness(pipeline, signal, witness, f0, num_harmonics,
 			reconstructed_line_in_signal = mkmultiplier(pipeline, list_srcs(pipeline, tf_at_f, line_in_witness, phase_factor))
 		reconstructed_line_in_signal = mkresample(pipeline, reconstructed_line_in_signal, upsample_quality, zero_latency, rate_out)
 		reconstructed_line_in_signal = pipeparts.mkgeneric(pipeline, reconstructed_line_in_signal, "lal_demodulate", line_frequency = -1.0 * n * f0, prefactor_real = -2.0)
-		reconstructed_line_in_signal, imag = split_into_real(pipeline, reconstructed_line_in_signal)
-		pipeparts.mkfakesink(pipeline, imag)
+		reconstructed_line_in_signal = pipeparts.mkgeneric(pipeline, reconstructed_line_in_signal, "creal")
 
 		signal_minus_lines.append(reconstructed_line_in_signal)
 
-- 
GitLab