예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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])
예제 #4
0
    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)
예제 #5
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)
예제 #6
0
    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)
예제 #7
0
 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)