diff --git a/gstlal-ugly/bin/gstlal_feature_extractor b/gstlal-ugly/bin/gstlal_feature_extractor index a09fce6f52b98831ed10b3d86324aaeb9a51e475..4c0c9e1f81b04d72990b70850da7f36f2b099024 100755 --- a/gstlal-ugly/bin/gstlal_feature_extractor +++ b/gstlal-ugly/bin/gstlal_feature_extractor @@ -237,6 +237,8 @@ class MultiChannelHandler(simplehandler.Handler): self.last_persist_time = None self.cadence = options.cadence self.persist_cadence = options.persist_cadence + self.feature_start_time = options.feature_start_time + self.feature_end_time = options.feature_end_time # set whether data source is live self.is_live = data_source_info.data_source in data_source_info.live_sources @@ -256,11 +258,11 @@ class MultiChannelHandler(simplehandler.Handler): self.fdata = idq_utils.HDF5FeatureData(columns, keys = self.keys, cadence = self.cadence) if self.is_live: - duration = idq_utils.floor_div(int(options.gps_start_time) + self.persist_cadence, self.persist_cadence) - int(options.gps_start_time) + duration = idq_utils.floor_div(self.feature_start_time + self.persist_cadence, self.persist_cadence) - self.feature_start_time else: - duration = int(options.gps_end_time) - int(options.gps_start_time) + duration = self.feature_end_time - self.feature_start_time - self.set_hdf_file_properties(int(options.gps_start_time), duration) + self.set_hdf_file_properties(self.feature_start_time, duration) elif options.save_format == 'ascii': # create header for trigger file @@ -344,7 +346,7 @@ class MultiChannelHandler(simplehandler.Handler): self.last_persist_time = buftime # Save triggers once per cadence - if idq_utils.in_new_epoch(buftime, self.last_save_time, self.cadence) or (options.trigger_end_time and buftime == int(options.trigger_end_time)): + if idq_utils.in_new_epoch(buftime, self.last_save_time, self.cadence) or (buftime == self.feature_end_time): logger.info("saving features to disk at timestamp = %d" % buftime) if options.save_format == 'hdf5': self.to_hdf_file() @@ -377,7 +379,7 @@ class MultiChannelHandler(simplehandler.Handler): # declaration then terrible terrible things # will happen if mapinfo.data: - if not options.trigger_end_time or (buftime >= int(options.trigger_start_time) and buftime < int(options.trigger_end_time)): + if (buftime >= self.feature_start_time and buftime <= self.feature_end_time): for row in sngltriggertable.GSTLALSnglTrigger.from_buffer(mapinfo.data): self.process_row(channel, rate, buftime, row) memory.unmap(mapinfo) @@ -635,7 +637,7 @@ def parse_command_line(): group = OptionGroup(parser, "Saving Options", "Adjust parameters used for saving/persisting features to disk as well as directories specified") group.add_option("--out-path", metavar = "path", default = ".", help = "Write to this path. Default = .") - group.add_option("--description", metavar = "string", default = "GSTLAL_IDQ_TRIGGERS", help = "Set the filename description in which to save the output.") + group.add_option("--description", metavar = "string", default = "GSTLAL_IDQ_FEATURES", help = "Set the filename description in which to save the output.") group.add_option("--save-format", metavar = "string", default = "hdf5", help = "Specifies the save format (ascii or hdf5) of features written to disk. Default = hdf5") group.add_option("--cadence", type = "int", default = 32, help = "Rate at which to write trigger files to disk. Default = 32 seconds.") group.add_option("--persist-cadence", type = "int", default = 320, help = "Rate at which to persist trigger files to disk, used with hdf5 files. Only used for live data, and needs to be a multiple of save cadence. Default = 320 seconds.") @@ -654,8 +656,8 @@ def parse_command_line(): group.add_option("--disable-web-service", action = "store_true", help = "If set, disables web service that allows monitoring of PSDS of aux channels.") group.add_option("-v", "--verbose", action = "store_true", help = "Be verbose.") group.add_option("--nxydump-segment", metavar = "start:stop", help = "Set the time interval to dump from nxydump elements (optional).") - group.add_option("--trigger-start-time", type = "int", metavar = "seconds", help = "Set the start time of the segment to output triggers in GPS seconds. Required unless --data-source=lvshm") - group.add_option("--trigger-end-time", type = "int", metavar = "seconds", help = "Set the end time of the segment to output triggers in GPS seconds. Required unless --data-source=lvshm") + group.add_option("--feature-start-time", type = "int", metavar = "seconds", help = "Set the start time of the segment to output features in GPS seconds. Required unless --data-source=lvshm") + group.add_option("--feature-end-time", type = "int", metavar = "seconds", help = "Set the end time of the segment to output features in GPS seconds. Required unless --data-source=lvshm") parser.add_option_group(group) # @@ -667,16 +669,16 @@ def parse_command_line(): # Sanity check the options # set gps ranges for live and offline sources - if options.data_source not in ("lvshm", "framexmit"): - if options.trigger_start_time is None: - options.trigger_start_time = options.gps_start_time - if options.trigger_end_time is None: - options.trigger_end_time = options.gps_end_time - else: + if options.data_source in ("lvshm", "framexmit"): options.gps_start_time = int(aggregator.now()) # NOTE: set the gps end time to be "infinite" options.gps_end_time = 2000000000 + if options.feature_start_time is None: + options.feature_start_time = int(options.gps_start_time) + if options.feature_end_time is None: + options.feature_end_time = int(options.gps_end_time) + # check if persist and save cadence times are sensible assert options.persist_cadence >= options.cadence assert (options.persist_cadence % options.cadence) == 0 @@ -713,11 +715,11 @@ if options.use_kafka: # set up logging # -duration = int(options.gps_end_time) - int(options.gps_start_time) +duration = options.feature_end_time - options.feature_start_time logdir = os.path.join(options.out_path, 'logs', options.job_id) aggregator.makedir(logdir) -logger = idq_utils.get_logger('gstlal-feature-extractor_%d-%d' % (options.gps_start_time, duration), rootdir=logdir, verbose=options.verbose) +logger = idq_utils.get_logger('gstlal-feature-extractor_%d-%d' % (options.feature_start_time, duration), rootdir=logdir, verbose=options.verbose) logger.info("writing log to %s" % logdir) # @@ -763,9 +765,9 @@ for subset_id, channel_subset in enumerate(data_source_info.channel_subsets, 1): if options.data_source not in ("lvshm", "framexmit") and options.save_format == 'hdf5': try: # get path where triggers are located - duration = int(options.gps_end_time) - int(options.gps_start_time) - fname = idq_utils.to_trigger_filename(basename, options.gps_start_time, duration, 'h5') - fpath = idq_utils.to_trigger_path(os.path.abspath(options.out_path), basename, options.gps_start_time, options.job_id, str(subset_id).zfill(4)) + duration = options.feature_end_time - options.feature_start_time + fname = idq_utils.to_trigger_filename(basename, options.feature_start_time, duration, 'h5') + fpath = idq_utils.to_trigger_path(os.path.abspath(options.out_path), basename, options.feature_start_time, options.job_id, str(subset_id).zfill(4)) trg_file = os.path.join(fpath, fname) # visit groups within a given hdf5 file diff --git a/gstlal-ugly/bin/gstlal_feature_extractor_pipe b/gstlal-ugly/bin/gstlal_feature_extractor_pipe index f98fd7e9ce10c3c711bf54e0392fc43b5403556a..d7212522c64a0324d77d5f7b6f63e810bd2e140b 100755 --- a/gstlal-ugly/bin/gstlal_feature_extractor_pipe +++ b/gstlal-ugly/bin/gstlal_feature_extractor_pipe @@ -142,8 +142,8 @@ def feature_extractor_node_gen(gstlalFeatureExtractorJob, dag, parent_nodes, seg inspiral_pipe.generic_node(gstlalFeatureExtractorJob, dag, parent_nodes = dep_nodes, opts = {"gps-start-time":int(seg[0]), "gps-end-time":int(seg[1]), - "trigger-start-time":int(trig_start), - "trigger-end-time":int(seg[1]), + "feature-start-time":int(trig_start), + "feature-end-time":int(seg[1]), "data-source":"frames", "mismatch":options.mismatch, "waveform":options.waveform,