diff -Nru veusz-1.23.1/ChangeLog veusz-1.23.1/ChangeLog --- veusz-1.23.1/ChangeLog 2015-06-18 17:46:38.000000000 +0000 +++ veusz-1.23.1/ChangeLog 2015-07-11 14:16:24.000000000 +0000 @@ -1,3 +1,6 @@ +Changes in : + * Add data clipping dataset plugin + Changes in 1.23.1: * Enable compression in exported files (Benjamin K. Stuhl) * Fix saving histogram datasets diff -Nru veusz-1.23.1/debian/bzr-builder.manifest veusz-1.23.1/debian/bzr-builder.manifest --- veusz-1.23.1/debian/bzr-builder.manifest 2015-06-18 17:46:41.000000000 +0000 +++ veusz-1.23.1/debian/bzr-builder.manifest 2015-07-11 14:16:26.000000000 +0000 @@ -1,3 +1,3 @@ -# bzr-builder format 0.3 deb-version {debupstream}-0~2139~201506181746 -lp:veusz revid:git-v1:b00c508893718f5b3a1dc6e5677feaf6ee92cedc +# bzr-builder format 0.3 deb-version {debupstream}-0~2140~201507111416 +lp:veusz revid:git-v1:f42ebbc7e6cdfac20f9b1addf37b6ef3d9dc18fd nest-part packaging lp:~jeremysanders/veusz/deb-packaging debian debian revid:jeremy@jeremysanders.net-20150618174139-oq49l4gdr0y40gxg diff -Nru veusz-1.23.1/debian/changelog veusz-1.23.1/debian/changelog --- veusz-1.23.1/debian/changelog 2015-06-18 17:46:41.000000000 +0000 +++ veusz-1.23.1/debian/changelog 2015-07-11 14:16:26.000000000 +0000 @@ -1,8 +1,8 @@ -veusz (1.23.1-0~2139~201506181746~ubuntu14.10.1) utopic; urgency=low +veusz (1.23.1-0~2140~201507111416~ubuntu14.10.1) utopic; urgency=low * Auto build. - -- Jeremy Sanders Thu, 18 Jun 2015 17:46:41 +0000 + -- Jeremy Sanders Sat, 11 Jul 2015 14:16:26 +0000 veusz (1.23.1-0) UNRELEASED; urgency=low diff -Nru veusz-1.23.1/veusz/plugins/datasetplugin.py veusz-1.23.1/veusz/plugins/datasetplugin.py --- veusz-1.23.1/veusz/plugins/datasetplugin.py 2015-06-18 17:46:38.000000000 +0000 +++ veusz-1.23.1/veusz/plugins/datasetplugin.py 2015-07-11 14:16:24.000000000 +0000 @@ -20,7 +20,7 @@ """Plugins for creating datasets.""" -from __future__ import division +from __future__ import division, print_function import numpy as N from . import field @@ -212,7 +212,7 @@ # class to pass to plugin to give parameters class DatasetPluginHelper(object): """Helpers to get existing datasets for plugins.""" - + def __init__(self, doc): """Construct helper object to pass to DatasetPlugins.""" self._doc = doc @@ -287,7 +287,7 @@ if isinstance(ds, document.DatasetDateTime): return DatasetDateTime(name, data=ds.data) elif ds.dimensions == 1: - return Dataset1D(name, data=ds.data, serr=ds.serr, + return Dataset1D(name, data=ds.data, serr=ds.serr, perr=ds.perr, nerr=ds.nerr) elif ds.dimensions == 2: return Dataset2D(name, ds.data, @@ -327,7 +327,7 @@ doc - document instance fields - fields to pass to plugin """ - + self.plugin = plugin self.document = doc self.helper = DatasetPluginHelper(doc) @@ -487,7 +487,7 @@ f = N.isfinite(d.data) if errortype == 'symmetric' and d.serr is not None: - serr[f] += d.serr[f]**2 + serr[f] += d.serr[f]**2 elif errortype == 'asymmetric': if d.serr is not None: v = (d.serr[f])**2 @@ -521,7 +521,7 @@ f = f[:length] if errortype == 'symmetric' and d.serr is not None: - serr[f] += (d.serr[f]/d.data[f])**2 + serr[f] += (d.serr[f]/d.data[f])**2 elif errortype == 'asymmetric': if d.serr is not None: v = (d.serr[f]/d.data[f])**2 @@ -548,7 +548,7 @@ description_short = _('Multiply dataset by a constant') description_full = _('Multiply a dataset by a factor. ' 'Error bars are also scaled.') - + def __init__(self): """Define fields.""" self.fields = [ @@ -579,7 +579,7 @@ description_short = _('Add a constant to a dataset') description_full = _('Add a dataset by adding a value. ' 'Error bars remain the same.') - + def __init__(self): """Define fields.""" self.fields = [ @@ -948,7 +948,7 @@ description_short = _('Subtract two datasets') description_full = _('Subtract two datasets. ' 'Combined error bars are also calculated.') - + def __init__(self): """Define fields.""" self.fields = [ @@ -1063,7 +1063,7 @@ description_short = _('Multiply two or more datasets') description_full = _('Multiply two or more datasets. ' 'Combined error bars are also calculated.') - + def __init__(self): """Define fields.""" self.fields = [ @@ -1103,7 +1103,7 @@ ' between two datasets') description_full = _('Divide or compute fractional difference' ' between two datasets') - + def __init__(self): """Define fields.""" self.fields = [ @@ -1427,7 +1427,7 @@ description_short = _('Filter a dataset using an expression') description_full = _('Filter a dataset using an expression, ' 'e.g. "x>10" or "(x>1) & (y<2)"') - + def __init__(self): """Define fields.""" self.fields = [ @@ -1482,7 +1482,7 @@ description_full = _('Compute moving average for regularly spaced data.' 'Average is computed either\nside of each data point ' 'by number of points given.') - + def __init__(self): """Define fields.""" self.fields = [ @@ -1493,7 +1493,7 @@ default=True), field.FieldDataset('ds_out', _('Output dataset')), ] - + def updateDatasets(self, fields, helper): """Do shifting of dataset.""" ds_in = helper.getDataset(fields['ds_in']) @@ -1873,6 +1873,68 @@ self.dsout.update(data=data) +class ClipPlugin(_OneOutputDatasetPlugin): + """Compute moving average for dataset.""" + + menu = (_('Compute'), _('Clipped dataset'),) + name = 'Clip' + description_short = _('Clip data between a minimum and maximum') + description_full = _('Clip data points to minimum and/or maximum values') + + def __init__(self): + """Define fields.""" + self.fields = [ + field.FieldDataset('ds_in', _('Input dataset')), + field.FieldFloat('minimum', _('Minimum'), default=0.), + field.FieldBool('disablemin', _('Disable minimum')), + field.FieldFloat('maximum', _('Maximum'), default=1.), + field.FieldBool('disablemax', _('Disable maximum')), + field.FieldBool('cliperrs', _('Clip error bars'), default=True), + field.FieldDataset('ds_out', _('Output dataset')), + ] + + def updateDatasets(self, fields, helper): + """Do shifting of dataset.""" + ds_in = helper.getDataset(fields['ds_in']) + data = N.array(ds_in.data) + perr = getattr(ds_in, 'perr') + nerr = getattr(ds_in, 'nerr') + serr = getattr(ds_in, 'serr') + + cliperrs = fields['cliperrs'] + # force asymmetric errors if clipping error bars + if cliperrs and serr is not None and (nerr is None or perr is None): + perr = serr + nerr = -serr + serr = None + + # we have to clip the ranges, so calculate these first + upper = (data+perr) if (cliperrs and perr is not None) else None + lower = (data+nerr) if (cliperrs and nerr is not None) else None + + # note: this preserves nan values + if not fields['disablemin']: + minv = fields['minimum'] + data[datamaxv] = maxv + if upper is not None: + upper[upper>maxv] = maxv + if lower is not None: + lower[lower>maxv] = maxv + + if upper is not None: + perr = upper-data + if lower is not None: + nerr = lower-data + + self.dsout.update(data=data, serr=serr, perr=perr, nerr=nerr) + datasetpluginregistry += [ AddDatasetPlugin, AddDatasetsPlugin, @@ -1887,6 +1949,7 @@ MeanDatasetPlugin, ExtremesDatasetPlugin, CumulativePlugin, + ClipPlugin, ConcatenateDatasetPlugin, InterleaveDatasetPlugin, diff -Nru veusz-1.23.1/veusz/utils/version.py veusz-1.23.1/veusz/utils/version.py --- veusz-1.23.1/veusz/utils/version.py 2015-06-18 17:46:38.000000000 +0000 +++ veusz-1.23.1/veusz/utils/version.py 2015-07-11 14:16:24.000000000 +0000 @@ -29,21 +29,22 @@ from . import utilfuncs -def version(): - """Return the version number as a string.""" - - try: - f = open( os.path.join(utilfuncs.resourceDirectory, 'VERSION') ) - except EnvironmentError: - sys.stderr.write(''' -Failed to find VERSION file. +_errmsg = """Failed to find VERSION file. This is probably because the resource files are not installed in the python module directory. You may need to set the environment variable VEUSZ_RESOURCE_DIR or add a "resources" symlink in the main veusz module directory pointing to the directory where resources are located. See INSTALL for details. -'''.lstrip()) - sys.exit(1) +""" - return f.readline().strip() +def version(): + """Return the version number as a string.""" + + filename = os.path.join(utilfuncs.resourceDirectory, "VERSION") + try: + with open(filename) as f: + return f.readline().strip() + except EnvironmentError: + sys.stderr.write(_errmsg) + sys.exit(1)