Esempio n. 1
0
    def __init__(self,
                 metric,
                 matchedDataset,
                 pa1,
                 filter_name,
                 spec_name,
                 linkedBlobs=None,
                 job=None,
                 verbose=False):
        MeasurementBase.__init__(self)
        self.filter_name = filter_name
        self.spec_name = spec_name  # spec-dependent measure because of PF1 dep
        self.metric = metric

        pa2spec = self.metric.get_spec(spec_name, filter_name=self.filter_name).\
            PA2.get_spec(spec_name, filter_name=self.filter_name)
        self.register_parameter('pa2', datum=pa2spec.datum)

        self.matchedDataset = matchedDataset

        # Add external blob so that links will be persisted with
        # the measurement
        if linkedBlobs is not None:
            for name, blob in linkedBlobs.items():
                setattr(self, name, blob)

        # Use first random sample from original PA1 measurement
        magDiffs = pa1.magDiff[0, :]

        self.quantity = 100 * np.mean(np.abs(magDiffs) > self.pa2) * u.Unit('')

        if job:
            job.register_measurement(self)
    def __init__(self):
        MeasurementBase.__init__(self)
        self.metric = Metric('Test', 'Test metric', '<')
        self.quantity = 5. * u.mag

        # link a blob
        self.ablob = DemoBlob()

        # datum-based parameters
        self.register_parameter('datum_param',
                                datum=Datum(10. * u.arcsec),
                                description='A datum')
        # set this parameter later
        self.register_parameter('deferred_datum_param', description='A datum')

        # quantity-based parameter
        self.register_parameter('q_param',
                                quantity=10. * u.arcsec,
                                description='A quantity')
        # set this parameter later
        self.register_parameter('deferred_q_param', description='A quantity')

        # string-based parameters
        self.register_parameter('str_param',
                                'test_string',
                                description='A string')
        # set this parameter later
        self.register_parameter('deferred_str_param', description='A string')

        # boolean parameters
        self.register_parameter('bool_param', False, description='A boolean')
        # set this parameter later
        self.register_parameter('deferred_bool_param', description='A boolean')

        # int-type parameter
        self.register_parameter('int_param',
                                42,
                                description='An integer parameter')
        # set this parameter later
        self.register_parameter('deferred_int_param', description='An integer')

        # quantity-based extras
        self.register_extra('q_extra',
                            quantity=1000. * u.microJansky,
                            description='Quantity extra')

        # none-type extra
        self.register_extra('none_extra',
                            label='none type',
                            description='None type Extra')
        self.none_extra = None
Esempio n. 3
0
    def __init__(self,
                 metric,
                 matchedDataset,
                 amx,
                 filter_name,
                 spec_name,
                 job=None,
                 linkedBlobs=None,
                 verbose=False):
        MeasurementBase.__init__(self)

        self.metric = metric
        self.filter_name = filter_name
        self.spec_name = spec_name

        # register input parameters for serialization
        # note that matchedDataset is treated as a blob, separately
        self.register_parameter('D', datum=amx.parameters['D'])
        self.register_parameter('annulus', datum=amx.parameters['annulus'])
        self.register_parameter('magRange', datum=amx.parameters['magRange'])
        self.register_parameter('AMx', datum=amx.datum)

        self.matchedDataset = matchedDataset

        # Add external blobs so that links will be persisted with
        # the measurement
        if linkedBlobs is not None:
            for name, blob in linkedBlobs.items():
                setattr(self, name, blob)

        # AFx's value at this spec level and filter must be known to measure
        self.register_parameter('AFx',
                                datum=self.metric.get_spec_dependency(
                                    self.spec_name,
                                    'AF{0:d}'.format(self.metric.x.quantity),
                                    filter_name=self.filter_name))

        if amx.quantity is not None:
            # No more than AFx of values will deviate by more than the
            # AMx (50th) + AFx percentiles
            # To compute ADx, use measured AMx and spec for AFx.
            afxAtPercentile = np.percentile(amx.rmsDistMas.to(u.marcsec),
                                            100. - self.AFx) * u.marcsec
            self.quantity = afxAtPercentile - amx.quantity
        else:
            # FIXME previously would raise ValidateErrorNoStars
            self.quantity = None

        if job:
            job.register_measurement(self)
Esempio n. 4
0
    def __init__(self, metric, matchedDataset, amx, filter_name, spec_name,
                 job=None, linkedBlobs=None, verbose=False):
        MeasurementBase.__init__(self)

        self.metric = metric
        self.spec_name = spec_name
        self.filter_name = filter_name

        # register input parameters for serialization
        # note that matchedDataset is treated as a blob, separately
        self.register_parameter('D', datum=amx.parameters['D'])
        self.register_parameter('annulus', datum=amx.parameters['annulus'])
        self.register_parameter('magRange', datum=amx.parameters['magRange'])
        self.register_parameter('AMx', datum=amx.datum)

        self.matchedDataset = matchedDataset

        # Add external blob so that links will be persisted with
        # the measurement
        if linkedBlobs is not None:
            for name, blob in linkedBlobs.items():
                setattr(self, name, blob)

        self.register_parameter(
            'ADx',
            datum=self.metric.get_spec_dependency(
                self.spec_name,
                'AD{0:d}'.format(self.metric.x.quantity),
                filter_name=self.filter_name))

        if amx.quantity:
            v = 100. * np.mean(amx.rmsDistMas > amx.quantity + self.ADx) * u.Unit('')
            self.quantity = v
        else:
            # FIXME previously would raise ValidateErrorNoStars
            self.quantity = None

        if job:
            job.register_measurement(self)
Esempio n. 5
0
    def __init__(self,
                 metric,
                 matchedDataset,
                 filter_name,
                 width=2.,
                 magRange=None,
                 linkedBlobs=None,
                 job=None,
                 verbose=False):
        MeasurementBase.__init__(self)

        self.metric = metric
        self.filter_name = filter_name

        # Register blob
        self.matchedDataset = matchedDataset

        # Measurement Parameters
        self.register_parameter('D', datum=self.metric.D)

        if not isinstance(width, u.Quantity):
            width = width * u.arcmin
        self.register_parameter('width',
                                quantity=width,
                                label='Width',
                                description='Width of annulus')
        if magRange is None:
            magRange = np.array([17.0, 21.5]) * u.mag
        else:
            assert len(magRange) == 2
            if not isinstance(magRange, u.Quantity):
                magRange = np.array(magRange) * u.mag
        self.register_parameter('magRange',
                                quantity=magRange,
                                description='Stellar magnitude selection '
                                'range.')

        annulus = self.D + (self.width / 2) * np.array([-1, +1])
        self.register_parameter('annulus',
                                quantity=annulus,
                                label='annulus radii',
                                description='Inner and outer radii of '
                                'selection annulus.')

        # Register measurement extras
        self.register_extra('rmsDistMas', label='RMS')

        # Add external blob so that links will be persisted with
        # the measurement
        if linkedBlobs is not None:
            for name, blob in linkedBlobs.items():
                setattr(self, name, blob)

        matches = matchedDataset.safeMatches
        rmsDistances = calcRmsDistances(matches,
                                        self.annulus,
                                        magRange=self.magRange,
                                        verbose=verbose)

        if len(rmsDistances) == 0:
            # raise ValidateErrorNoStars(
            #     'No stars found that are %.1f--%.1f arcmin apart.' %
            #     (annulus[0], annulus[1]))
            # FIXME should we still report that this measurement was
            # attempted instead of just crashing.
            print('No stars found that are {0:.1f}--{1:.1f} apart.'.format(
                self.annulus[0], self.annulus[1]))
            self.rmsDistMas = None
            self.quantity = None
        else:
            self.rmsDistMas = rmsDistances.to(u.marcsec)
            self.quantity = np.median(self.rmsDistMas)

        if job:
            job.register_measurement(self)
 def __init__(self):
     MeasurementBase.__init__(self)
     self.metric = Metric('Test', 'Test metric', '<')
     self.quantity = None