def setupMetrics(colmap, wholesurvey=False): metricList = [] captionList = [] # Number of filter changes (per slice - either whole survey or X nights) if wholesurvey: metricList.append(metrics.NChangesMetric(col=colmap['filter'], orderBy=colmap['mjd'], metricName='Total Filter Changes')) else: metricList.append(metrics.NChangesMetric(col=colmap['filter'], orderBy=colmap['mjd'], metricName='Filter Changes')) captionList.append('Total filter changes ') # Minimum time between filter changes metricList.append(metrics.MinTimeBetweenStatesMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'])) captionList.append('Minimum time between filter changes ') # Number of filter changes faster than 10 minutes metricList.append(metrics.NStateChangesFasterThanMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'], cutoff=10)) captionList.append('Number of filter changes faster than 10 minutes ') # Number of filter changes faster than 20 minutes metricList.append(metrics.NStateChangesFasterThanMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'], cutoff=20)) captionList.append('Number of filter changes faster than 20 minutes ') # Maximum number of filter changes faster than 10 minutes within slice metricList.append(metrics.MaxStateChangesWithinMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'], timespan=10)) captionList.append('Max number of filter changes within a window of 10 minutes ') # Maximum number of filter changes faster than 20 minutes within slice metricList.append(metrics.MaxStateChangesWithinMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'], timespan=20)) captionList.append('Max number of filter changes within a window of 20 minutes ') return metricList, captionList
def testMaxStateChangesWithinMetric(self): """ Test the MaxStateChangesWithin metric. """ filters = np.array(['u', 'g', 'r', 'u', 'g', 'r']) visitTimes = np.array([0, 1, 1, 4, 6, 7]) # days data = np.core.records.fromarrays( [visitTimes, filters], names=['observationStartMJD', 'filter']) metric = metrics.MaxStateChangesWithinMetric(timespan=1 * 24 * 60) result = metric.run(data) # minutes self.assertEqual(result, 2) filters = np.array(['u', 'g', 'g', 'u', 'g', 'r', 'g', 'r']) visitTimes = np.array([0, 1, 1, 4, 4, 7, 8, 8]) # days data = np.core.records.fromarrays( [visitTimes, filters], names=['observationStartMJD', 'filter']) metric = metrics.MaxStateChangesWithinMetric(timespan=1 * 24 * 60) result = metric.run(data) # minutes self.assertEqual(result, 3) filters = np.array(['u', 'g']) visitTimes = np.array([0, 1]) # days data = np.core.records.fromarrays( [visitTimes, filters], names=['observationStartMJD', 'filter']) metric = metrics.MaxStateChangesWithinMetric(timespan=1 * 24 * 60) result = metric.run(data) # minutes self.assertEqual(result, 1) filters = np.array(['u', 'u']) visitTimes = np.array([0, 1]) # days data = np.core.records.fromarrays( [visitTimes, filters], names=['observationStartMJD', 'filter']) metric = metrics.MaxStateChangesWithinMetric(timespan=1 * 24 * 60) result = metric.run(data) # minutes self.assertEqual(result, 0)