def __init__(self):
        BlobBase.__init__(self)

        self.register_datum('mag', quantity=5 * u.mag, description='Magnitude')

        self.register_datum('updateable_mag',
                            quantity=5 * u.mag,
                            description='Magnitude')
    def __init__(self,
                 repo,
                 dataIds,
                 matchRadius=None,
                 safeSnr=50.,
                 useJointCal=False,
                 verbose=False):
        BlobBase.__init__(self)

        self.verbose = verbose
        if not matchRadius:
            matchRadius = afwGeom.Angle(1, afwGeom.arcseconds)

        # Extract single filter
        self.register_datum('filterName',
                            quantity=set([dId['filter']
                                          for dId in dataIds]).pop(),
                            description='Filter name')

        # Record important configuration
        self.register_datum(
            'useJointCal',
            quantity=useJointCal,
            description='Whether jointcal/meas_mosaic calibrations were used')

        # Register datums stored by this blob; will be set later
        self.register_datum(
            'mag',
            label='{band}'.format(band=self.filterName),
            description='Mean PSF magnitudes of stars over multiple visits')
        self.register_datum(
            'magrms',
            label='RMS({band})'.format(band=self.filterName),
            description='RMS of PSF magnitudes over multiple visits')
        self.register_datum(
            'magerr',
            label='sigma({band})'.format(band=self.filterName),
            description='Median 1-sigma uncertainty of PSF magnitudes over '
            'multiple visits')
        self.register_datum(
            'snr',
            label='SNR({band})'.format(band=self.filterName),
            description='Median signal-to-noise ratio of PSF magnitudes over '
            'multiple visits')
        self.register_datum(
            'dist',
            label='d',
            description='RMS of sky coordinates of stars over multiple visits')

        # Match catalogs across visits
        self._matchedCatalog = self._loadAndMatchCatalogs(
            repo, dataIds, matchRadius, useJointCal=useJointCal)
        self.magKey = self._matchedCatalog.schema.find("base_PsfFlux_mag").key
        # Reduce catalogs into summary statistics.
        # These are the serialiable attributes of this class.
        self._reduceStars(self._matchedCatalog, safeSnr)
Example #3
0
    def __init__(self,
                 matchedMultiVisitDataset,
                 brightSnr=100,
                 medianRef=100,
                 matchRef=500):
        BlobBase.__init__(self)

        self.register_datum(
            'brightSnr',
            label='Bright SNR',
            description='Threshold in SNR for bright sources used in this '
            'model')
        self.register_datum('sigmaSys',
                            label='sigma(sys)',
                            description='Systematic error floor')
        self.register_datum(
            'gamma',
            label='gamma',
            description='Proxy for sky brightness and read noise')
        self.register_datum('m5', label='m5', description='5-sigma depth')
        self.register_datum(
            'photScatter',
            label='RMS',
            description='RMS photometric scatter for good stars')

        # FIXME add a description field to blobs?
        # self._doc['doc'] \
        #     = "Photometric uncertainty model from " \
        #       "http://arxiv.org/abs/0805.2366v4 (Eq 4, 5): " \
        #       "sigma_1^2 = sigma_sys^2 + sigma_rand^2, " \
        #       "sigma_rand^2 = (0.04 - gamma) * x + gamma * x^2 [mag^2] " \
        #       "where x = 10**(0.4*(m-m_5))"

        if not isinstance(medianRef, u.Quantity):
            medianRef = medianRef * u.mmag
        if not isinstance(brightSnr, u.Quantity):
            brightSnr = brightSnr * u.Unit('')
        self._compute(matchedMultiVisitDataset.snr,
                      matchedMultiVisitDataset.mag,
                      matchedMultiVisitDataset.magerr,
                      matchedMultiVisitDataset.magrms,
                      matchedMultiVisitDataset.dist,
                      len(matchedMultiVisitDataset.goodMatches), brightSnr,
                      medianRef, matchRef)
Example #4
0
    def __init__(self,
                 matchedMultiVisitDataset,
                 brightSnr=100,
                 medianRef=100,
                 matchRef=500):
        BlobBase.__init__(self)

        # FIXME add description field to blobs
        # self._doc['doc'] \
        #     = "Astrometric astrometry model: mas = C*theta/SNR + sigmaSys"

        if not isinstance(brightSnr, u.Quantity):
            brightSnr = brightSnr * u.Unit('')
        if not isinstance(medianRef, u.Quantity):
            medianRef = medianRef * u.marcsec

        self._compute(matchedMultiVisitDataset.snr,
                      matchedMultiVisitDataset.dist,
                      len(matchedMultiVisitDataset.goodMatches), brightSnr,
                      medianRef, matchRef)