diff --git a/python/calibration_parts.py b/python/calibration_parts.py index c635c29d14de7e9149c90ce9ff18ed1ae34f58b8..a237d7f38cd8c2508a7dcd7aa7ed86489358d8ea 100644 --- a/python/calibration_parts.py +++ b/python/calibration_parts.py @@ -521,10 +521,11 @@ def remove_lines_with_witnesses(pipeline, signal, witnesses, freqs, freq_vars, f signal = pipeparts.mktee(pipeline, signal) function_inst_num = int(signal.name[3:]) # Check whether the signal exists, and use this to gate the TF - signal_exists = pipeparts.mkbitvectorgen(pipeline, signal, threshold = 1e-50, bit_vector = 1) - signal_exists = pipeparts.mkcapsfilter(pipeline, signal_exists, "audio/x-raw, format=U32LE, rate=%d, channel-mask=(bitmask)0x0" % rate_out) - signal_exists = pipeparts.mkgeneric(pipeline, signal_exists, "lal_logicalundersample", required_on = 1, status_out = 1) - signal_exists = pipeparts.mktee(pipeline, pipeparts.mkcapsfilter(pipeline, signal_exists, "audio/x-raw, format=U32LE, rate=%d, channel-mask=(bitmask)0x0" % compute_rate)) + if filter_latency == 0: + signal_exists = pipeparts.mkbitvectorgen(pipeline, signal, threshold = 1e-50, bit_vector = 1) + signal_exists = pipeparts.mkcapsfilter(pipeline, signal_exists, "audio/x-raw, format=U32LE, rate=%d, channel-mask=(bitmask)0x0" % rate_out) + signal_exists = pipeparts.mkgeneric(pipeline, signal_exists, "lal_logicalundersample", required_on = 1, status_out = 1) + signal_exists = pipeparts.mktee(pipeline, pipeparts.mkcapsfilter(pipeline, signal_exists, "audio/x-raw, format=U32LE, rate=%d, channel-mask=(bitmask)0x0" % compute_rate)) signal_minus_lines = [signal] @@ -620,7 +621,11 @@ def remove_lines_with_witnesses(pipeline, signal, witnesses, freqs, freq_vars, f tf_at_f = mkinsertgap(pipeline, tf_at_f, replace_value = 0) # Remove worthless data from computation of transfer function if we can tf_at_f = mkgate(pipeline, tf_at_f, witness_downsampled[i], 1.0001 * witness_absent_value, attack_length = -((1.0 - filter_latency) * (filter_samples + resample_shift)), name = "linesub_witness_downsampled_gate_%d_%d_%d_%d" % (m, n, i, function_inst_num), queue_length = queue_length) - tf_at_f = mkgate(pipeline, tf_at_f, signal_exists, 1, attack_length = -((1.0 - filter_latency) * filter_samples), name = "linesub_signal_exists_gate_%d_%d_%d_%d" % (m, n, i, function_inst_num), queue_length = queue_length) + if filter_latency == 0: + # When filter_latency is 1, the queues before the gate below sometimes + # store data unnecessarily, refusing to release the data at EOS. This may + # be due to a race condition. + tf_at_f = mkgate(pipeline, tf_at_f, signal_exists, 1, attack_length = -((1.0 - filter_latency) * filter_samples), name = "linesub_signal_exists_gate_%d_%d_%d_%d" % (m, n, i, function_inst_num), queue_length = queue_length) if noisesub_gate_bit is not None: tf_at_f = mkgate(pipeline, tf_at_f, noisesub_gate_bit, 1, attack_length = -((1.0 - filter_latency) * filter_samples), name = "linesub_gate_%d_%d_%d_%d" % (m, n, i, function_inst_num), queue_length = queue_length) if any(amp_channels):