def photRepeat(matchedCatalog, numRandomShuffles=50, randomSeed=None, **filterargs): filteredCat = filterMatches(matchedCatalog, **filterargs) magKey = filteredCat.schema.find('slot_PsfFlux_mag').key # Require at least nMinPhotRepeat objects to calculate the repeatability: nMinPhotRepeat = 50 if filteredCat.count > nMinPhotRepeat: phot_resid_meas = calcPhotRepeat(filteredCat, magKey, numRandomShuffles=50, randomSeed=randomSeed) return phot_resid_meas else: return {'nomeas': np.nan*u.mmag}
def run(self, matchedCatalog, metric_name): self.log.info(f"Measuring {metric_name}") D = self.config.annulus_r * u.arcmin filteredCat = filterMatches(matchedCatalog) nMinTEx = 50 if filteredCat.count <= nMinTEx: return Struct(measurement=Measurement(metric_name, np.nan*u.Unit(''))) radius, xip, xip_err = correlation_function_ellipticity_from_matches(filteredCat) operator = ThresholdSpecification.convert_operator_str(self.config.comparison_operator) corr, corr_err = select_bin_from_corr(radius, xip, xip_err, radius=D, operator=operator) return Struct(measurement=Measurement(metric_name, np.abs(corr)*u.Unit('')))
def astromRms(matchedCatalog, mag_bright_cut, mag_faint_cut, annulus_r, width, **filterargs): filteredCat = filterMatches(matchedCatalog, **filterargs) magRange = np.array([mag_bright_cut, mag_faint_cut]) * u.mag D = annulus_r * u.arcmin width = width * u.arcmin annulus = D + (width/2)*np.array([-1, +1]) # Require at least 2 measurements to calculate the repeatability: nMinMeas = 2 if filteredCat.count > nMinMeas: astrom_resid_rms_meas = calcRmsDistances( filteredCat, annulus, magRange=magRange) return astrom_resid_rms_meas else: return {'nomeas': np.nan*u.marcsec}
def run(self, matchedCatalogMulti, metric_name, in_id, out_id): self.log.info(f"Measuring {metric_name}") if self.config.ref_filter not in filter_dict: raise Exception('Reference filter supplied for AB1 not in dictionary.') filteredCat = filterMatches(matchedCatalogMulti) rmsDistancesAll = [] if len(filteredCat) > 0: filtnum = filter_dict[self.config.ref_filter] refVisits = set() for id in filteredCat.ids: grptmp = filteredCat[id] filtmch = (grptmp['filt'] == filtnum) if len(filtmch) > 0: refVisits.update(set(grptmp[filtmch]['visit'])) refVisits = list(refVisits) magRange = np.array([self.config.bright_mag_cut, self.config.faint_mag_cut]) * u.mag for rv in refVisits: rmsDistances = calcRmsDistancesVsRef( filteredCat, rv, magRange=magRange, band=filter_dict[out_id['band']]) finiteEntries = np.where(np.isfinite(rmsDistances))[0] if len(finiteEntries) > 0: rmsDistancesAll.append(rmsDistances[finiteEntries]) if len(rmsDistancesAll) == 0: return Struct(measurement=Measurement(metric_name, np.nan*u.marcsec)) else: rmsDistancesAll = np.concatenate(rmsDistancesAll) return Struct(measurement=Measurement(metric_name, np.mean(rmsDistancesAll)*u.marcsec)) else: return Struct(measurement=Measurement(metric_name, np.nan*u.marcsec))
def run(self, matchedCatalog, metric_name): self.log.info(f"Measuring {metric_name}") filteredCat = filterMatches(matchedCatalog) magRange = np.array([self.config.bright_mag_cut, self.config.faint_mag_cut]) * u.mag D = self.config.annulus_r * u.arcmin width = self.config.width * u.arcmin annulus = D + (width/2)*np.array([-1, +1]) rmsDistances = calcRmsDistances( filteredCat, annulus, magRange=magRange) values, bins = np.histogram(rmsDistances.to(u.marcsec), bins=self.config.bins*u.marcsec) extras = {'bins': Datum(bins, label='binvalues', description='bins'), 'values': Datum(values*u.count, label='counts', description='icounts in bins')} if len(rmsDistances) == 0: return Struct(measurement=Measurement(metric_name, np.nan*u.marcsec, extras=extras)) return Struct(measurement=Measurement(metric_name, np.median(rmsDistances.to(u.marcsec)), extras=extras))