Skip to content

Commit 1dbb691

Browse files
committed
conven
1 parent f331f55 commit 1dbb691

2 files changed

Lines changed: 60 additions & 25 deletions

File tree

pycbc/filter/qtransform.py

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,8 @@ def inspiral_qtransform_generator(segments):
5858
seg /= seg.psd
5959

6060
comb_q_dict = {}
61-
for s_num, stilde in enumerate(segments):
61+
for stilde in segments:
6262
# getting q-tiles for segments
63-
del s_num
6463
q_base, q_frange, q_data = inspiral_tiling(stilde)
6564

6665
# getting q-plane for segment
@@ -104,18 +103,13 @@ def inspiral_tiling(seg, frange=(0,np.inf), qrange=(4,64), mismatch=0.2):
104103
whitened strain of analysis chunk
105104
106105
"""
107-
108-
# retrieve segment psd value
109-
seg_psd = seg.psd
110-
111106
# retrieve whitened strain
112-
white_strain = (seg / seg_psd ** 0.5 * seg_psd.delta_f)
113-
data = white_strain
107+
white_strain = (seg / seg.psd ** 0.5 * seg.psd.delta_f)
114108

115109
# perform Q-tiling
116-
q_base, frange = qtiling(data, qrange, frange, mismatch)
110+
q_base, frange = qtiling(white_strain, qrange, frange, mismatch)
117111

118-
return q_base, frange, data
112+
return q_base, frange, white_strain
119113

120114
def plotter(interp, out_dir, now, frange, tres, fres):
121115
"""Plotting mechanism for pycbc spectrograms
@@ -206,30 +200,30 @@ def qplane(qplane_tile_dict, fseries, frange, normalized=True, tres=1., fres=1.,
206200
# check for sampling rate
207201
sampling = fseries.sample_rate
208202

209-
max_energy = []
203+
max_energy, max_key = None, None
210204
for i, key in enumerate(qplane_tile_dict):
211205
energies_lst=[]
212206
for tile in qplane_tile_dict[key]:
213-
energies = qtransform(fseries, tile[1], tile[0])
207+
normed, raw = qtransform(fseries, tile[1], tile[0])
214208
if normalized:
215-
energies = energies[0]
209+
energies = normed
216210
else:
217-
energies = energies[1]
211+
energies = raw
212+
218213
energies_lst.append(energies)
214+
219215
if i == 0:
220-
max_energy.append(max(energies))
221-
max_energy.append(tile)
222-
max_energy.append(key)
223-
elif max(energies) > max_energy[0]:
224-
max_energy[0] = max(energies)
225-
max_energy[1] = tile
226-
max_energy[2] = key
227-
max_energy[3] = energies
216+
max_energy = max(energies)
217+
max_key = key
218+
elif max(energies) > max_energy:
219+
max_energy = max(energies)
220+
max_key = key
221+
228222
qplane_qtrans_dict[key] = energies_lst
229223

230224
# record q-transform output for peak q
231-
result = qplane_qtrans_dict[max_energy[2]]
232-
qtile_max = qplane_tile_dict[max_energy[2]]
225+
result = qplane_qtrans_dict[max_key]
226+
qtile_max = qplane_tile_dict[max_key]
233227

234228
# then interpolate the spectrogram to increase the frequency resolution
235229
if fres is None: # unless user tells us not to
@@ -247,7 +241,7 @@ def qplane(qplane_tile_dict, fseries, frange, normalized=True, tres=1., fres=1.,
247241
# initialize some variables
248242
frequencies = []
249243

250-
for i in qplane_tile_dict[max_energy[2]]:
244+
for i in qtile_max:
251245
frequencies.append(i[0])
252246

253247
# 2-D interpolation

pycbc/types/timeseries.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,47 @@ def psd(self, segment_duration, **kwds):
427427
seg_stride=seg_stride,
428428
**kwds)
429429

430+
def whiten(self, segment_duration, max_filter_duration, trunc_method=None,
431+
remove_corrupted=True, low_frequency_cutoff=None, **kwds):
432+
""" Return a whitened time series
433+
434+
Parameters
435+
----------
436+
segment_duration: float
437+
Duration in seconds to use for each sample of the spectrum.
438+
max_filter_duration : int
439+
Maximum length of the time-domain filter in seconds.
440+
trunc_method : {None, 'hann'}
441+
Function used for truncating the time-domain filter.
442+
None produces a hard truncation at `max_filter_len`.
443+
remove_corrupted : {True, boolean}
444+
If True, the region of the time series corrupted by the whitening
445+
is excised before returning. If false, the corrupted regions
446+
are not excised and the full time series is returned.
447+
kwds : keywords
448+
Additional keyword arguments are passed on to the `pycbc.psd.welch` method.
449+
450+
Returns
451+
-------
452+
whitened_data : TimeSeries
453+
The whitened time series
454+
"""
455+
from pycbc.psd import inverse_spectrum_truncation, interpolate
456+
psd = self.psd(segment_duration, **kwds)
457+
psd = interpolate(psd, self.delta_f)
458+
max_filter_len = int(max_filter_duration * self.sample_rate)
459+
psd = inverse_spectrum_truncation(psd,
460+
max_filter_len=max_filter_len,
461+
low_frequency_cutoff=low_frequency_cutoff,
462+
trunc_method=trunc_method)
463+
white = (self.to_frequencyseries() / psd ** 0.5).to_timeseries()
464+
465+
if remove_corrupted:
466+
white = white[max_filter_len/2:len(self)-max_filter_len/2]
467+
468+
return white
469+
470+
430471
def save(self, path, group = None):
431472
"""
432473
Save time series to a Numpy .npy, hdf, or text file. The first column

0 commit comments

Comments
 (0)