From 234ff4cd7c4ef5acd7353ea4d1aabcd0574e83e3 Mon Sep 17 00:00:00 2001 From: Gregory Ashton <gregory.ashton@ligo.org> Date: Mon, 2 Jul 2018 14:21:05 +1000 Subject: [PATCH] Update from using alpha to a time of roll off --- tupak/gw/detector.py | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/tupak/gw/detector.py b/tupak/gw/detector.py index 7a3d1abc2..b6fec6528 100644 --- a/tupak/gw/detector.py +++ b/tupak/gw/detector.py @@ -320,12 +320,18 @@ class InterferometerStrainData(object): strain = strain.filter(bp, filtfilt=True) self._time_domain_strain = strain.value - def apply_tukey_window(self, alpha): + def get_tukey_window(self, N, roll_off): + alpha = 2 * roll_off / self.duration + window = signal.windows.tukey(N, alpha=alpha) + return window + + def apply_tukey_window(self, roll_off): N = len(self.time_domain_strain) - self._time_domain_strain *= signal.windows.tukey(N, alpha=alpha) + window = self.get_tukey_window(N, roll_off=roll_off) + self._time_domain_strain *= window def create_power_spectral_density( - self, name, analysis_segment_duration, alpha, outdir='outdir'): + self, name, analysis_segment_duration, roll_off, outdir='outdir'): """ Use the time domain strain to generate a power spectral density This create a Tukey-windowed power spectral density and writes it to a @@ -337,8 +343,8 @@ class InterferometerStrainData(object): The name of the detector, used in storing the PSD analysis_segment_duration: float Duration of the analysis segment. - alpha: float - The tukey window shape parameter passed to `scipy.signal.tukey`. + roll_off: float + The roll-off (in seconds) used in the Tukey window. outdir: str The output directory to write the PSD file too @@ -349,7 +355,7 @@ class InterferometerStrainData(object): """ NFFT = int(self.sampling_frequency * analysis_segment_duration) - window = signal.windows.tukey(NFFT, alpha=alpha) + window = self.get_tukey_window(N=NFFT, roll_off=roll_off) strain = gwpy.timeseries.TimeSeries( self.time_domain_strain, sample_rate=self.sampling_frequency) psd = strain.psd(fftlength=analysis_segment_duration, window=window) @@ -674,8 +680,8 @@ class Interferometer(object): buffer_time: float Read in data with `start_time-buffer_time` and `start_time+duration+buffer_time` - alpha: float - The tukey window shape parameter passed to `scipy.signal.tukey`. + roll_off: float + The roll-off (in seconds) used in the Tukey window. filter_freq: float Low pass filter frequency. If None, defaults to the maximum frequency given to InterferometerStrainData. @@ -1234,8 +1240,8 @@ class PowerSpectralDensity(object): Offset of data from beginning of analysed segment. channel_name: str, optional Name of channel to use to generate PSD. - alpha: float, optional - Parameter for Tukey window. + roll_off: float + The roll-off (in seconds) used in the Tukey window. fft_length: float, optional Number of seconds in a single fft. @@ -1442,7 +1448,7 @@ def load_interferometer(filename): def get_interferometer_with_open_data( - name, trigger_time, time_duration=4, start_time=None, alpha=0.25, psd_offset=-1024, + name, trigger_time, time_duration=4, start_time=None, roll_off=0.4, psd_offset=-1024, psd_duration=100, cache=True, outdir='outdir', label=None, plot=True, filter_freq=1024, raw_data_file=None, **kwargs): """ @@ -1461,8 +1467,8 @@ def get_interferometer_with_open_data( start_time: float, optional Beginning of the segment, if None, the trigger is placed 2s before the end of the segment. - alpha: float, optional - The tukey window shape parameter passed to `scipy.signal.tukey`. + roll_off: float + The roll-off (in seconds) used in the Tukey window. psd_offset, psd_duration: float The power spectral density (psd) is estimated using data from `center_time+psd_offset` to `center_time+psd_offset + psd_duration`. @@ -1514,10 +1520,10 @@ def get_interferometer_with_open_data( # Create and save PSDs psd_file = strain_psd.create_power_spectral_density( - name=name, alpha=alpha, outdir=outdir, + name=name, roll_off=roll_off, outdir=outdir, analysis_segment_duration=strain.duration) - strain.apply_tukey_window(alpha=alpha) + strain.apply_tukey_window(roll_off=roll_off) interferometer = get_empty_interferometer(name) interferometer.power_spectral_density = PowerSpectralDensity( @@ -1610,7 +1616,7 @@ def get_interferometer_with_fake_noise_and_injection( def get_event_data( - event, interferometer_names=None, time_duration=4, alpha=0.25, + event, interferometer_names=None, time_duration=4, roll_off=0.4, psd_offset=-1024, psd_duration=100, cache=True, outdir='outdir', label=None, plot=True, filter_freq=1024, raw_data_file=None, **kwargs): """ @@ -1626,8 +1632,8 @@ def get_event_data( If None will look for data in 'H1', 'V1', 'L1' time_duration: float Time duration to search for. - alpha: float - The tukey window shape parameter passed to `scipy.signal.tukey`. + roll_off: float + The roll-off (in seconds) used in the Tukey window. psd_offset, psd_duration: float The power spectral density (psd) is estimated using data from `center_time+psd_offset` to `center_time+psd_offset + psd_duration`. @@ -1664,7 +1670,7 @@ def get_event_data( for name in interferometer_names: try: interferometers.append(get_interferometer_with_open_data( - name, trigger_time=event_time, time_duration=time_duration, alpha=alpha, + name, trigger_time=event_time, time_duration=time_duration, roll_off=roll_off, psd_offset=psd_offset, psd_duration=psd_duration, cache=cache, outdir=outdir, label=label, plot=plot, filter_freq=filter_freq, raw_data_file=raw_data_file, **kwargs)) -- GitLab