def test_fcross_project_strain(self): """ Check consistency of project_strain() against antenna_pattern() """ coords = numpy.array([uniform(0,360), uniform(-90,90)]) psi = math.radians(uniform(0,180)) pt_eq = pb.skymaps.Skypoint(*numpy.radians(coords), COORD_SYS_EQUATORIAL) d = pb.detectors.Detector(random.choice(DETECTORS)) antenna_pat = d.antenna_pattern(pt_eq, time=TIME, psi=psi) hplus = TimeSeries(ZEROS_1_SEC, sample_rate=SAMPLING_RATE).to_lal() hcross = TimeSeries(SIN_1_SEC, sample_rate=SAMPLING_RATE).to_lal() hplus.epoch = lal.LIGOTimeGPS(TIME) hcross.epoch = lal.LIGOTimeGPS(TIME) # Project wave onto detector response = d.project_strain(hplus, hcross, pt_eq, psi) # Generate support timeseries data = TimeSeries(ZEROS_5_SEC, \ sample_rate=SAMPLING_RATE, \ t0=TIME-2, unit=response._unit) # Inject signal into timeseries h = data.inject(response) if antenna_pat[1] > 0: estimated_pat = h.max().to_value() else: estimated_pat = h.min().to_value() print("Exact antenna pattern = {} ; Estimated pattern from amplitude = {}".format(antenna_pat[1], estimated_pat)) self.assertAlmostEqual(antenna_pat[1], estimated_pat, places=2)
def test_delay_project_strain(self): """ Check consistency of project_strain() against time_delay_earth_center() """ coords = numpy.array([uniform(0,360), uniform(-90,90)]) pt_eq = pb.skymaps.Skypoint(*numpy.radians(coords), COORD_SYS_EQUATORIAL) d = pb.detectors.Detector(random.choice(DETECTORS)) delay = d.time_delay_from_earth_center(pt_eq, TIME) hplus = TimeSeries(SIN_1_SEC, sample_rate=SAMPLING_RATE).to_lal() hcross = TimeSeries(ZEROS_1_SEC, sample_rate=SAMPLING_RATE).to_lal() hplus.epoch = lal.LIGOTimeGPS(TIME) hcross.epoch = lal.LIGOTimeGPS(TIME) # Project wave onto detector response = d.project_strain(hplus, hcross, pt_eq, 0) # Generate support timeseries data = TimeSeries(ZEROS_5_SEC, \ sample_rate=SAMPLING_RATE, \ t0=TIME-2, unit=response._unit) # Inject signal into timeseries h = data.inject(response) # Find end of the detector response ix, = numpy.where(numpy.abs(h) > numpy.max(h)/10) time_end = h.t0.value + ix[-1]/SAMPLING_RATE estimated_delay = float(time_end - (TIME+1)) print("Exact delay = {} ; Estimated delay = {}".format(delay, estimated_delay)) # Estimate delay from timeseries self.assertAlmostEqual(delay, estimated_delay, places=3)
def test_coordframe_project_strain(self): """ Check consistency of project_strain() with skypoints in different cooordinate frames """ coords = numpy.array([uniform(0,360), uniform(-90,90)]) pt_eq = pb.skymaps.Skypoint(*numpy.radians(coords), COORD_SYS_EQUATORIAL) pt_geo = pt_eq.transformed_to(COORD_SYS_GEOGRAPHIC) d = pb.detectors.Detector(random.choice(DETECTORS)) hplus = TimeSeries(SIN_1_SEC, sample_rate=SAMPLING_RATE).to_lal() hcross = TimeSeries(ZEROS_1_SEC, sample_rate=SAMPLING_RATE).to_lal() hplus.epoch = lal.LIGOTimeGPS(TIME) hcross.epoch = lal.LIGOTimeGPS(TIME) # Project wave onto detector response_eq = d.project_strain(hplus, hcross, pt_eq, 0) response_geo = d.project_strain(hplus, hcross, pt_geo, 0) err = numpy.abs(response_eq-response_geo) # self.assertEqual(response_eq, response_geo) self.assertTrue(numpy.allclose(numpy.abs(err), 0))