Coverage for python/lsst/sims/maf/metrics/phaseGapMetric.py : 24%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
""" Measure the maximum gap in phase coverage for observations of periodic variables. """ metricName='Phase Gap', **kwargs): """ Construct an instance of a PhaseGapMetric class
:param col: Name of the column to use for the observation times, commonly 'observationStartMJD' :param nPeriods: Number of periods to test :param periodMin: Minimum period to test (days) :param periodMax: Maximimum period to test (days) :param nVistisMin: minimum number of visits necessary before looking for the phase gap """ self.periodMin = periodMin self.periodMax = periodMax self.nPeriods = nPeriods self.nVisitsMin = nVisitsMin super(PhaseGapMetric, self).__init__(col, metricName=metricName, units='Fraction, 0-1', **kwargs)
""" Run the PhaseGapMetric. :param dataSlice: Data for this slice. :param slicePoint: Metadata for the slice (Optional as not used here). :return: a dictionary of the periods used here and the corresponding largest gaps. """ if len(dataSlice) < self.nVisitsMin: return self.badval # Create 'nPeriods' evenly spaced periods within range of min to max. step = (self.periodMax-self.periodMin)/self.nPeriods if step == 0: periods = np.array([self.periodMin]) else: periods = np.arange(self.nPeriods) periods = periods/np.max(periods)*(self.periodMax-self.periodMin)+self.periodMin maxGap = np.zeros(self.nPeriods, float)
for i, period in enumerate(periods): # For each period, calculate the phases. phases = (dataSlice[self.colname] % period)/period phases = np.sort(phases) # Find the largest gap in coverage. gaps = np.diff(phases) start_to_end = np.array([1.0 - phases[-1] + phases[0]], float) gaps = np.concatenate([gaps, start_to_end]) maxGap[i] = np.max(gaps)
return {'periods':periods, 'maxGaps':maxGap}
""" At each slicepoint, return the mean gap value. """ return np.mean(metricVal['maxGaps'])
""" At each slicepoint, return the median gap value. """ return np.median(metricVal['maxGaps'])
""" At each slicepoint, return the period with the largest phase gap. """ worstP = metricVal['periods'][np.where(metricVal['maxGaps'] == metricVal['maxGaps'].max())] return worstP
""" At each slicepoint, return the largest phase gap value. """ return np.max(metricVal['maxGaps']) |