Coverage for python/lsst/sims/maf/metrics/vectorMetrics.py : 26%

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
'HistogramM5Metric', 'AccumulateM5Metric', 'AccumulateUniformityMetric']
""" Base for metrics that return a vector """ super(VectorMetric,self).__init__(col=[col,binCol],units=units,metricDtype=metricDtype,**kwargs) self.bins = bins self.binCol = binCol self.shape = np.size(bins)-1
""" A wrapper to stats.binned_statistic """ metricDtype=float, **kwargs): self.statistic = statistic self.col=col super(HistogramMetric,self).__init__(col=col, bins=bins, binCol=binCol, units=units, metricDtype=metricDtype,**kwargs)
dataSlice.sort(order=self.binCol) result, binEdges,binNumber = stats.binned_statistic(dataSlice[self.binCol], dataSlice[self.col], bins=self.bins, statistic=self.statistic) return result
""" Calculate the accumulated stat """ metricDtype=float, **kwargs): self.function = function super(AccumulateMetric,self).__init__(col=col,binCol=binCol, bins=bins, metricDtype=metricDtype,**kwargs) self.col=col
dataSlice.sort(order=self.binCol)
result = self.function.accumulate(dataSlice[self.col]) indices = np.searchsorted(dataSlice[self.binCol], self.bins[1:], side='right') indices[np.where(indices >= np.size(result))] = np.size(result)-1 result = result[indices] result[np.where(indices == 0)] = self.badval return result
dataSlice.sort(order=self.binCol) toCount = np.ones(dataSlice.size, dtype=int) result = self.function.accumulate(toCount) indices = np.searchsorted(dataSlice[self.binCol], self.bins[1:], side='right') indices[np.where(indices >= np.size(result))] = np.size(result)-1 result = result[indices] result[np.where(indices == 0)] = self.badval return result
""" Calculate the coadded depth for each bin (e.g., per night). """ metricName='HistogramM5Metric',**kwargs):
super(HistogramM5Metric,self).__init__(col=m5Col,binCol=binCol, bins=bins, metricName=metricName, units=units,**kwargs) self.m5Col=m5Col
dataSlice.sort(order=self.binCol) flux = 10.**(.8*dataSlice[self.m5Col]) result, binEdges,binNumber = stats.binned_statistic(dataSlice[self.binCol], flux, bins=self.bins, statistic='sum') noFlux = np.where(result == 0.) result = 1.25*np.log10(result) result[noFlux] = self.badval return result
metricName='AccumulateM5Metric',**kwargs): self.m5Col = m5Col super(AccumulateM5Metric,self).__init__(bins=bins, binCol=binCol,col=m5Col, metricName=metricName,**kwargs)
dataSlice.sort(order=self.binCol) flux = 10.**(.8*dataSlice[self.m5Col])
result = np.add.accumulate(flux) indices = np.searchsorted(dataSlice[self.binCol], self.bins[1:], side='right') indices[np.where(indices >= np.size(result))] = np.size(result)-1 result = result[indices] result = 1.25*np.log10(result) result[np.where(indices == 0)] = self.badval return result
""" Make a 2D version of UniformityMetric """ metricName='AccumulateUniformityMetric',surveyLength=10., units='Fraction', **kwargs): self.expMJDCol = expMJDCol if bins is None: bins = np.arange(0,np.ceil(surveyLength*365.25))-.5 super(AccumulateUniformityMetric,self).__init__(bins=bins, binCol=binCol,col=expMJDCol, metricName=metricName,units=units,**kwargs) self.surveyLength = surveyLength
dataSlice.sort(order=self.binCol) if dataSlice.size == 1: return np.ones(self.bins.size-1, dtype=float)
visitsPerNight, blah = np.histogram(dataSlice[self.binCol], bins=self.bins) visitsPerNight = np.add.accumulate(visitsPerNight) expectedPerNight = np.arange(0.,self.bins.size-1)/(self.bins.size-2) * dataSlice.size
D_max = np.abs(visitsPerNight-expectedPerNight) D_max = np.maximum.accumulate(D_max) result = D_max/expectedPerNight.max() return result |