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
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)
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)
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