def testWholeSourceMasked(self): """ Source in masked region """ self.image = accessors.sourcefinder_image_from_accessor( accessors.FitsImage(GRB120422A)) self.image.data[250:280, 250:280] = np.ma.masked results = self.image.extract(det=5, anl=3) self.assertFalse(results)
def testWholeSourceMasked(self): """ Part of source masked Tip of major axis is around 267, 264 """ self.image = accessors.sourcefinder_image_from_accessor( accessors.FitsImage(GRB120422A)) self.image.data[266:269, 263:266] = np.ma.masked results = self.image.extract(det=5, anl=3) self.assertFalse(results)
def testForceSourceShape(self): """ Force source shape to beam This image contains a single source (with parameters as listed under testSingleSourceExtraction(), above). Here we force the lengths of the major/minor axes to be held constant when fitting. """ self.image = accessors.sourcefinder_image_from_accessor( accessors.FitsImage(GRB120422A)) results = self.image.extract(det=5, anl=3, force_beam=True) self.assertEqual(results[0].smaj.value, self.image.beam[0]) self.assertEqual(results[0].smin.value, self.image.beam[1])
def testNoLabelledIslandsCase(self): """ If an image is in fact very boring and flat/empty, then we may not even locate any labelled islands, if the analysis threshold is set high enough. (We reproduce this test case, even though GRB120422A-120429 has a source in the image, just by setting the thresholds very high - this avoids requiring additional data). """ self.image = accessors.sourcefinder_image_from_accessor( accessors.FitsImage(GRB120422A)) results = self.image.extract(det=5e10, anl=5e10) results = [result.serialize() for result in results] self.assertEqual(len(results), 0)
def testSingleSourceExtraction(self): """ Single source extaction From visual inspection we only expect a single source in the image, at around 5 or 6 sigma detection level.""" ew_sys_err, ns_sys_err = 0.0, 0.0 known_result = ( 136.89603241069054, 14.022184792492785, # RA, DEC 0.0005341819139061954, 0.0013428186757078464, # Err, Err 0.0007226590529214518, 0.00010918184742211533, # Peak flux, err 0.0006067963179204716, 0.00017037685531724465, # Integrated flux, err 6.192259965962862, 25.516190123153514, # Significance level, Beam semimajor-axis width (arcsec) 10.718798843620489, 178.62899212789304, # Beam semiminor-axis width (arcsec), Beam parallactic angle ew_sys_err, ns_sys_err, 5.181697175052841, # error_radius 1, # fit_type 0.59184643302, #chisq 0.67199741142, #reduced chisq ) self.image = accessors.sourcefinder_image_from_accessor( accessors.FitsImage(GRB120422A)) results = self.image.extract(det=5, anl=3) results = [ result.serialize(ew_sys_err, ns_sys_err) for result in results ] self.assertEqual(len(results), 1) r = results[0] self.assertEqual(len(r), len(known_result)) for i in range(len(r)): self.assertAlmostEqual(r[i], known_result[i], places=5)
def testWcsConversionConsistency(self): """ Check that extracting a source from FITS and CASA versions of the same dataset gives the same results (especially, RA and Dec). """ fits_image = accessors.sourcefinder_image_from_accessor( accessors.FitsImage( os.path.join( DATAPATH, 'sourcefinder/GRB130828A/SWIFT_554620-130504.fits'))) # Abuse the KAT7 CasaImage class here, since we just want to access # the pixel data and the WCS: casa_image = accessors.sourcefinder_image_from_accessor( accessors.kat7casaimage.Kat7CasaImage( os.path.join( DATAPATH, 'sourcefinder/GRB130828A/SWIFT_554620-130504.image'))) ew_sys_err, ns_sys_err = 0.0, 0.0 fits_results = fits_image.extract(det=5, anl=3) fits_results = [ result.serialize(ew_sys_err, ns_sys_err) for result in fits_results ] casa_results = casa_image.extract(det=5, anl=3) casa_results = [ result.serialize(ew_sys_err, ns_sys_err) for result in casa_results ] self.assertEqual(len(fits_results), 1) self.assertEqual(len(casa_results), 1) fits_src = fits_results[0] casa_src = casa_results[0] self.assertEqual(len(fits_src), len(casa_src)) for idx, _ in enumerate(fits_src): self.assertAlmostEqual(fits_src[idx], casa_src[idx], places=5)
def testmaps_array_type(self): self.image = accessors.sourcefinder_image_from_accessor( accessors.FitsImage(GRB120422A), margin=10) self.assertIsInstance(self.image.rmsmap, np.ma.MaskedArray) self.assertIsInstance(self.image.backmap, np.ma.MaskedArray)