diff options
Diffstat (limited to 'silx/gui/plot/stats/stats.py')
-rw-r--r-- | silx/gui/plot/stats/stats.py | 52 |
1 files changed, 17 insertions, 35 deletions
diff --git a/silx/gui/plot/stats/stats.py b/silx/gui/plot/stats/stats.py index 755b185..a81f7bb 100644 --- a/silx/gui/plot/stats/stats.py +++ b/silx/gui/plot/stats/stats.py @@ -1,7 +1,7 @@ # coding: utf-8 # /*########################################################################## # -# Copyright (c) 2017-2020 European Synchrotron Radiation Facility +# Copyright (c) 2017-2021 European Synchrotron Radiation Facility # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -193,19 +193,6 @@ class _StatsContext(object): self.clipData(item, plot, onlimits, roi=roi) - def clipData(self, item, plot, onlimits, roi): - """ - Clip the data to the current mask to have accurate statistics - - :param item: item for whiwh we want to clip data - :param plot: plot containing the item - :param onlimits: do we want to apply statistic only on - visible data. - :param roi: Region of interest for computing the statistics. - :type roi: Union[None,:class:`_RegionOfInterestBase`] - """ - raise NotImplementedError() - def clear_mask(self): """ Remove the mask to force recomputation of it on next iteration @@ -232,7 +219,8 @@ class _StatsContext(object): raise NotImplementedError("Base class") def clipData(self, item, plot, onlimits, roi): - """ + """Clip the data to the current mask to have accurate statistics + Function called before computing each statistics associated to this context. It will insure the context for the (item, plot, onlimits, roi) is created. @@ -340,9 +328,8 @@ class _CurveContext(_ScatterCurveHistoMixInContext): mask = self.mask else: mask = (minX <= xData) & (xData <= maxX) - yData = yData[mask] - xData = xData[mask] - mask = numpy.zeros_like(yData) + mask = mask == 0 + self._set_mask_validity(onlimits=onlimits, from_=minX, to_=maxX) elif roi: minX, maxX = roi.getFrom(), roi.getTo() if self.is_mask_valid(onlimits=onlimits, from_=minX, to_=maxX): @@ -350,10 +337,11 @@ class _CurveContext(_ScatterCurveHistoMixInContext): else: mask = (minX <= xData) & (xData <= maxX) mask = mask == 0 - mask = mask.astype(numpy.int32) + self._set_mask_validity(onlimits=onlimits, from_=minX, to_=maxX) else: mask = numpy.zeros_like(yData) + mask = mask.astype(numpy.uint32) self.xData = xData self.yData = yData self.values = numpy.ma.array(yData, mask=mask) @@ -363,7 +351,6 @@ class _CurveContext(_ScatterCurveHistoMixInContext): else: self.min, self.max = None, None self.data = (xData, yData) - self.axes = (xData,) def _checkContextInputs(self, item, plot, onlimits, roi): @@ -399,38 +386,33 @@ class _HistogramContext(_ScatterCurveHistoMixInContext): if onlimits: minX, maxX = plot.getXAxis().getLimits() - if self.is_mask_valid(onlimits, from_=minX, to_=maxX): + if self.is_mask_valid(onlimits=onlimits, from_=minX, to_=maxX): mask = self.mask else: mask = (minX <= xData) & (xData <= maxX) - self._set_mask_validity(onlimits=True, from_=minX, to_=maxX) + mask = mask == 0 + self._set_mask_validity(onlimits=onlimits, from_=minX, to_=maxX) elif roi: - if self.is_mask_valid(onlimits, from_=roi._fromdata, to_=roi._todata): + if self.is_mask_valid(onlimits=onlimits, from_=roi._fromdata, to_=roi._todata): mask = self.mask else: mask = (roi._fromdata <= xData) & (xData <= roi._todata) mask = mask == 0 - self._set_mask_validity(onlimits=True, from_=roi._fromdata, + self._set_mask_validity(onlimits=onlimits, from_=roi._fromdata, to_=roi._todata) else: - mask = numpy.zeros_like(self.data) - - if onlimits: - yData = yData[mask] - xData = xData[mask] - - self.data = (xData, yData) - self.values = numpy.ma.array(yData, mask=mask) - self.axes = (xData,) - + mask = numpy.zeros_like(yData) + mask = mask.astype(numpy.uint32) self.xData = xData self.yData = yData - + self.values = numpy.ma.array(yData, mask=(mask)) unmasked_data = self.values.compressed() if len(unmasked_data) > 0: self.min, self.max = min_max(unmasked_data) else: self.min, self.max = None, None + self.data = (self.xData, self.yData) + self.axes = (self.xData,) def _checkContextInputs(self, item, plot, onlimits, roi): _StatsContext._checkContextInputs(self, item=item, plot=plot, |