@@ -285,7 +285,7 @@ def antenna_response(self, ra, dec, time, psi, mode):
285
285
else :
286
286
return 0
287
287
288
- def get_detector_response (self , waveform_polarizations , parameters ):
288
+ def get_detector_response (self , waveform_polarizations , parameters , frequencies = None ):
289
289
""" Get the detector response for a particular waveform
290
290
291
291
Parameters
@@ -294,11 +294,21 @@ def get_detector_response(self, waveform_polarizations, parameters):
294
294
polarizations of the waveform
295
295
parameters: dict
296
296
parameters describing position and time of arrival of the signal
297
-
297
+ frequencies: array-like, optional
298
+ The frequency values to evaluate the response at. If
299
+ not provided, the response is computed using
300
+ :code:`self.frequency_array`. If the frequencies are
301
+ specified, no frequency masking is performed.
298
302
Returns
299
303
=======
300
304
array_like: A 3x3 array representation of the detector response (signal observed in the interferometer)
301
305
"""
306
+ if frequencies is None :
307
+ frequencies = self .frequency_array [self .frequency_mask ]
308
+ mask = self .frequency_mask
309
+ else :
310
+ mask = np .ones (len (frequencies ), dtype = bool )
311
+
302
312
signal = {}
303
313
for mode in waveform_polarizations .keys ():
304
314
det_response = self .antenna_response (
@@ -308,9 +318,7 @@ def get_detector_response(self, waveform_polarizations, parameters):
308
318
parameters ['psi' ], mode )
309
319
310
320
signal [mode ] = waveform_polarizations [mode ] * det_response
311
- signal_ifo = sum (signal .values ())
312
-
313
- signal_ifo *= self .strain_data .frequency_mask
321
+ signal_ifo = sum (signal .values ()) * mask
314
322
315
323
time_shift = self .time_delay_from_geocenter (
316
324
parameters ['ra' ], parameters ['dec' ], parameters ['geocent_time' ])
@@ -320,12 +328,11 @@ def get_detector_response(self, waveform_polarizations, parameters):
320
328
dt_geocent = parameters ['geocent_time' ] - self .strain_data .start_time
321
329
dt = dt_geocent + time_shift
322
330
323
- signal_ifo [self .strain_data .frequency_mask ] = signal_ifo [self .strain_data .frequency_mask ] * np .exp (
324
- - 1j * 2 * np .pi * dt * self .strain_data .frequency_array [self .strain_data .frequency_mask ])
331
+ signal_ifo [mask ] = signal_ifo [mask ] * np .exp (- 1j * 2 * np .pi * dt * frequencies )
325
332
326
- signal_ifo [self . strain_data . frequency_mask ] *= self .calibration_model .get_calibration_factor (
327
- self . strain_data . frequency_array [ self .strain_data . frequency_mask ],
328
- prefix = 'recalib_{}_' . format ( self . name ), ** parameters )
333
+ signal_ifo [mask ] *= self .calibration_model .get_calibration_factor (
334
+ frequencies , prefix = 'recalib_{}_' . format ( self .name ), ** parameters
335
+ )
329
336
330
337
return signal_ifo
331
338
0 commit comments