From be5806f5ad708437ba3d159d88bef809d8ebb8d2 Mon Sep 17 00:00:00 2001 From: Sudarshan Ghonge <sudarshan.ghonge@ligo.org> Date: Tue, 10 Nov 2020 22:01:47 -0800 Subject: [PATCH] Add glitch cleaning functionality for multiple detectors --- .../bayeswave_pipe/bayeswave_pipe_utils.py | 25 ++++---- BayesWaveUtils/scripts/bayeswave_pipe | 57 +++++++++++-------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/BayesWaveUtils/bayeswave_pipe/bayeswave_pipe_utils.py b/BayesWaveUtils/bayeswave_pipe/bayeswave_pipe_utils.py index 61059345..1f8ffffe 100644 --- a/BayesWaveUtils/bayeswave_pipe/bayeswave_pipe_utils.py +++ b/BayesWaveUtils/bayeswave_pipe/bayeswave_pipe_utils.py @@ -1641,20 +1641,8 @@ class bayeswave_clean_frameJob(pipeline.CondorDAGJob, pipeline.AnalysisJob): self.add_condor_cmd('transfer_input_files', transferstring) self.add_condor_cmd('transfer_output_files', '$(macrooutputDir)') - - ifo_clean = ast.literal_eval(cp.get('bayeswave_clean_frame_options', 'ifo')) - self.add_opt('ifo', ifo_clean) - - channel_list = ast.literal_eval(cp.get('datafind', 'channel-list')) - frame_list = ast.literal_eval(cp.get('datafind', 'frtype-list')) - - self.add_opt('channel', channel_list[ifo_clean]) - self.add_opt('frame-type', frame_list[ifo_clean]) - - - for item in cp.items('bayeswave_clean_frame_options'): - # Add any option and value which exists - self.add_opt(item[0], item[1]) + clean_suffix = cp.get('bayeswave_clean_frame_options', 'clean-suffix') + self.add_opt('clean-suffix', clean_suffix) class bayeswave_clean_frameNode(pipeline.CondorDAGNode, pipeline.AnalysisNode): @@ -1691,6 +1679,15 @@ class bayeswave_clean_frameNode(pipeline.CondorDAGNode, pipeline.AnalysisNode): def set_outdir(self, outdir): self.add_var_opt('outdir', outdir) + + def set_ifo(self, ifo): + self.add_var_opt('ifo', ifo) + + def set_channel_name(self, channel): + self.add_var_opt('channel', channel) + + def set_frame_type(self, frame_type): + self.add_var_opt('frame-type', frame_type) diff --git a/BayesWaveUtils/scripts/bayeswave_pipe b/BayesWaveUtils/scripts/bayeswave_pipe index c44f1a43..aa6407a2 100755 --- a/BayesWaveUtils/scripts/bayeswave_pipe +++ b/BayesWaveUtils/scripts/bayeswave_pipe @@ -41,6 +41,7 @@ from glue import pipeline from lalapps import inspiralutils from ligo import segments +import lalframe.frread as fr from bayeswave_pipe import bayeswave_pipe_utils as pipe_utils @@ -271,10 +272,12 @@ if cp.has_option('bayeswave_fpeak_options', 'fpeak-analysis'): if cp.has_option('bayeswave_fpeak_options','fpeak-flow'): fpeak_flow=cp.getfloat('bayeswave_fpeak_options','fpeak-flow') -if cp.has_option('bayeswave_clean_frame_options', 'ifo'): +if cp.has_option('bayeswave_clean_frame_options', 'ifos'): opts.bayeswave_clean_frame=True - clean_frame_ifo=cp.get('bayeswave_clean_frame_options', 'ifo') + clean_frame_ifos=ast.literal_eval(cp.get('bayeswave_clean_frame_options', 'ifos')) + clean_frame_srates = {} + channel_names = ast.literal_eval(cp.get('datafind','channel-list')) if opts.bayeswave_clean_frame: @@ -715,18 +718,14 @@ for ifo in ifo_list: os.chdir(curdiir) # Get the sampling rate of the frame - if opts.bayeswave_clean_frame: + if opts.bayeswave_clean_frame and ifo in clean_frame_ifos: try: - import lalframe.frread as fr - clean_ifo = ast.literal_eval(cp.get('bayeswave_clean_frame_options', 'ifo')) trigtime = int(trigger_list.triggers[0].trigger_time) - channel_names = ast.literal_eval(cp.get('datafind','channel-list')) - example_ts = fr.read_timeseries(cache_files[clean_ifo], channel_names[clean_ifo], trigtime-1,2.0 ) - clean_frame_srate = 1./example_ts.deltaT - print("Getting sampling rate of cleaned frame from input frame: %.2f Hz"%(clean_frame_srate)) + example_ts = fr.read_timeseries(cache_files[ifo], channel_names[ifo], trigtime-1,2.0 ) + clean_frame_srates[ifo] = 1./example_ts.deltaT except Exception as e: - clean_frame_srate = 16384.0 - print("Setting clean frame srate to default: %.2f"%(clean_frame_srate)) + clean_frame_srates[ifo] = 16384.0 + print("Setting %s clean frame srate to default: %.2f"%(ifo, 16384.0)) @@ -1190,21 +1189,29 @@ for t,trigger in enumerate(trigger_list.triggers): clean_frame_outdir = os.path.join(outputDir, 'clean_frame') if not os.path.exists(clean_frame_outdir): os.makedirs(clean_frame_outdir) - bayeswave_clean_frame_node = pipe_utils.bayeswave_clean_frameNode(bayeswave_clean_frame_job) - bayeswave_clean_frame_node.set_trigtime(trigger.trigger_time) - clean_frame_duration = 4.0*trigger.seglen - bayeswave_clean_frame_node.set_frame_start(int(trigger.trigger_time - clean_frame_duration/2.0)) - bayeswave_clean_frame_node.set_frame_srate(clean_frame_srate) - bayeswave_clean_frame_node.set_seglen(trigger.seglen) - + bayeswave_clean_frame_nodes = [] if cp.has_option('bayeswave_options', 'fullOnly'): model_type = 'full' else: model_type = 'glitch' - clean_ifo = ast.literal_eval(cp.get('bayeswave_clean_frame_options', 'ifo')) - glitch_param_file = os.path.join(outputDir, 'chains', '%s_params_%s.dat'%(model_type, clean_ifo)) - bayeswave_clean_frame_node.set_glitch_param_file(glitch_param_file) - bayeswave_clean_frame_node.set_outdir(clean_frame_outdir) + clean_frame_ifos = ast.literal_eval(cp.get('bayeswave_clean_frame_options', 'ifos')) + for ifo in clean_frame_ifos: + clean_frame_node = pipe_utils.bayeswave_clean_frameNode(bayeswave_clean_frame_job) + clean_frame_node.set_trigtime(trigger.trigger_time) + clean_frame_node.set_ifo(ifo) + clean_frame_duration = 4.0*trigger.seglen + clean_frame_node.set_frame_start(int(trigger.trigger_time - clean_frame_duration/2.0)) + clean_frame_node.set_frame_srate(clean_frame_srates[ifo]) + clean_frame_node.set_seglen(trigger.seglen) + + glitch_param_file = os.path.join(outputDir, 'chains', '%s_params_%s.dat'%(model_type, ifo)) + clean_frame_node.set_glitch_param_file(glitch_param_file) + clean_frame_node.set_outdir(clean_frame_outdir) + + clean_frame_node.set_channel_name(channel_names[ifo]) + clean_frame_node.set_frame_type(frtype_list[ifo]) + + bayeswave_clean_frame_nodes.append(clean_frame_node) @@ -1250,7 +1257,8 @@ for t,trigger in enumerate(trigger_list.triggers): if opts.fpeak_analysis: bayeswave_fpeak_node.add_parent(bayeswave_node) if opts.bayeswave_clean_frame: - bayeswave_clean_frame_node.add_parent(bayeswave_node) + for clean_frame_node in bayeswave_clean_frame_nodes: + clean_frame_node.add_parent(bayeswave_node) if not opts.skip_megapy: megasky_node.add_parent(bayeswave_node) megaplot_node.add_parent(bayeswave_post_node) @@ -1265,7 +1273,8 @@ for t,trigger in enumerate(trigger_list.triggers): dag.add_node(bayeswave_node) if opts.bayeswave_clean_frame: - dag.add_node(bayeswave_clean_frame_node) + for clean_frame_node in bayeswave_clean_frame_nodes: + dag.add_node(clean_frame_node) if not opts.skip_post and not opts.separate_post_dag: dag.add_node(bayeswave_post_node) -- GitLab