Source code for lsst.sims.maf.metrics.tgaps

import numpy as np
from .baseMetric import BaseMetric

__all__ = ['TgapsMetric', 'NightgapsMetric', 'NVisitsPerNightMetric', 'MaxGapMetric']


[docs]class TgapsMetric(BaseMetric): """Histogram the times of the gaps between observations. Measure the gaps between observations. By default, only gaps between neighboring visits are computed. If allGaps is set to true, all gaps are computed (i.e., if there are observations at 10, 20, 30 and 40 the default will return a histogram of [10,10,10] while allGaps returns a histogram of [10,10,10,20,20,30]) Parameters ---------- timesCol : str, opt The column name for the exposure times. Values assumed to be in days. Default observationStartMJD. allGaps : bool, opt Histogram the gaps between all observations (True) or just successive observations (False)? Default is False. If all gaps are used, this metric can become significantly slower. bins : np.ndarray, opt The bins to use for the histogram of time gaps (in days, or same units as timesCol). Default values are bins from 0 to 2 hours, in 5 minute intervals. Returns a histogram at each slice point; these histograms can be combined and plotted using the 'SummaryHistogram plotter'. """ def __init__(self, timesCol='observationStartMJD', allGaps=False, bins=np.arange(0, 120.0, 5.0)/60./24., units='days', **kwargs): # Pass the same bins to the plotter. self.bins = bins self.timesCol = timesCol super(TgapsMetric, self).__init__(col=[self.timesCol], metricDtype='object', units=units, **kwargs) self.allGaps = allGaps
[docs] def run(self, dataSlice, slicePoint=None): if dataSlice.size < 2: return self.badval times = np.sort(dataSlice[self.timesCol]) if self.allGaps: allDiffs = [] for i in np.arange(1,times.size,1): allDiffs.append((times-np.roll(times,i))[i:]) dts = np.concatenate(allDiffs) else: dts = np.diff(times) result, bins = np.histogram(dts, self.bins) return result
[docs]class NightgapsMetric(BaseMetric): """Histogram the number of nights between observations. Measure the gaps between observations. By default, only gaps between neighboring visits are computed. If allGaps is set to true, all gaps are computed (i.e., if there are observations at 10, 20, 30 and 40 the default will histogram [10,10,10] while allGaps histograms [10,10,10,20,20,30]) Parameters ---------- nightCol : str, opt The column name for the night of each observation. Default 'night'. allGaps : bool, opt Histogram the gaps between all observations (True) or just successive observations (False)? Default is False. If all gaps are used, this metric can become significantly slower. bins : np.ndarray, opt The bins to use for the histogram of time gaps (in days, or same units as timesCol). Default values are bins from 0 to 10 days, in 1 day intervals. Returns a histogram at each slice point; these histograms can be combined and plotted using the 'SummaryHistogram plotter'. """ def __init__(self, nightCol='night', allGaps=False, bins=np.arange(0, 10, 1), units='nights', **kwargs): # Pass the same bins to the plotter. self.bins = bins self.nightCol = nightCol super(NightgapsMetric, self).__init__(col=[self.nightCol], metricDtype='object', units=units, **kwargs) self.allGaps = allGaps
[docs] def run(self, dataSlice, slicePoint=None): if dataSlice.size < 2: return self.badval nights = np.sort(np.unique(dataSlice[self.nightCol])) if self.allGaps: allDiffs = [] for i in np.arange(1, nights.size,1): allDiffs.append((nights-np.roll(nights,i))[i:]) dnights = np.concatenate(allDiffs) else: dnights = np.diff(nights) result, bins = np.histogram(dnights, self.bins) return result
[docs]class NVisitsPerNightMetric(BaseMetric): """Histogram the number of visits in each night. Splits the visits by night, then histograms how many visits occur in each night. Parameters ---------- nightCol : str, opt The column name for the night of each observation. Default 'night'. bins : np.ndarray, opt The bins to use for the histogram of time gaps (in days, or same units as timesCol). Default values are bins from 0 to 5 visits, in steps of 1. Returns a histogram at each slice point; these histograms can be combined and plotted using the 'SummaryHistogram plotter'. """ def __init__(self, nightCol='night', bins=np.arange(0, 10, 1), units='#', **kwargs): # Pass the same bins to the plotter. self.bins = bins self.nightCol = nightCol super(NVisitsPerNightMetric, self).__init__(col=[self.nightCol], metricDtype='object', units=units, **kwargs)
[docs] def run(self, dataSlice, slicePoint=None): n, counts = np.unique(dataSlice[self.nightCol], return_counts=True) result, bins = np.histogram(counts, self.bins) return result
[docs]class MaxGapMetric(BaseMetric): """Find the maximum gap in observations. Useful for making sure there is an image within the last year that would make a good template image. """ def __init__(self, mjdCol='observationStartMJD', **kwargs): self.mjdCol = mjdCol units = 'Days' super(MaxGapMetric, self).__init__(col=[self.mjdCol], units=units, **kwargs)
[docs] def run(self, dataSlice, slicePoint=None): gaps = np.diff(np.sort(dataSlice[self.mjdCol])) if np.size(gaps) > 0: result = np.max(gaps) else: result = self.badval return result