def gradient(f, *varargs): '''Gradient of array f -- array *varargs -- 0, 1, N scalars for sample distance, or (1 or N-d) datasets for sample points ''' if varargs is None or len(varargs) == 0: g = _maths.gradient(f) else: # check for scalars, etc from jycore import arange as _ar vl = len(varargs) nd = f.getRank() if vl == 1: varargs = [varargs[0]]*nd vl = nd if vl != nd: raise ValueError, "Number of arguments must be 0, 1 or rank of f" xlist = [] for i in range(vl): x = varargs[i] xlist.append(x if isinstance(x, _ds) else (_ar(f.shape[i])*x)._jdataset()) g = _maths.gradient(f, xlist) if len(g) == 1: return g[0] return g
def getPolarDataset(self, datasetX, datasetY): datasetRho = DatasetMaths.sqrt( DatasetMaths.power(datasetX, 2) + DatasetMaths.power(datasetY, 2) ); datasetTheta=DatasetMaths.arctan2(datasetY, datasetX); datasetThetaInDegree = DatasetMaths.toDegrees(datasetTheta); return [datasetRho, datasetThetaInDegree];
def gradient(f, *varargs): '''Gradient of array f -- array *varargs -- 0, 1, N scalars for sample distance, or (1 or N-d) datasets for sample points ''' if varargs is None or len(varargs) == 0: g = _maths.gradient(f) else: # check for scalars, etc from .jycore import arange as _ar vl = len(varargs) nd = f.getRank() if vl == 1: varargs = [varargs[0]] * nd vl = nd if vl != nd: raise ValueError("Number of arguments must be 0, 1 or rank of f") xlist = [] for i in range(vl): x = varargs[i] xlist.append(x if isinstance(x, _ds) else (_ar(f.shape[i]) * x)._jdataset()) g = _maths.gradient(f, xlist) if len(g) == 1: return g[0] return g
def renderShapesOntoDataset(self, targetDataset): if self.shapesToPaint == {}: return targetDataset.clone() a = targetDataset.max() b = targetDataset.min() image = self.renderShapes(targetDataset) image.imultiply(b - (a - b)) return Maths.add(targetDataset, image)
def _process(self,xDataSet, yDataSet): dyDataSet = Maths.derivative(xDataSet._jdataset(), yDataSet._jdataset(), self.smoothwidth) minVal, maxVal = dyDataSet.min(), dyDataSet.max() if maxVal - minVal == 0: raise ValueError("There is no edge") labels = [label if label != 'slope' else 'top' for label in self.labelList] return GaussianPeak(self.name, labels, self.formatString, self.plotPanel)._process(xDataSet, dyDataSet)
def _process(self, xDataSet, yDataSet): dyDataSet = dnp.array(Maths.derivative(xDataSet._jdataset(), yDataSet._jdataset(), self.smoothwidth)) uposC, ufwhmC, uareaC, dposC, dfwhmC, dareaC = self.coarseProcess(xDataSet, dyDataSet) gaussian = dnp.fit.function.gaussian if abs(dareaC) < 0.2 * uareaC: r = dnp.fit.fit([gaussian], xDataSet, dyDataSet, [uposC, ufwhmC, uareaC], bounds=[ (uposC - 2 * ufwhmC, uposC + 2 * ufwhmC), (0, 2 * ufwhmC), (0, 2 * uareaC)], ptol=1e-10, optimizer=self.optimizer) upos, ufwhm, _uarea = r.parameters results = {'upos': upos, 'ufwhm': ufwhm, 'area': _uarea, 'uarea': _uarea, 'fwhm': ufwhm} elif uareaC < 0.2 * abs(dareaC): r = dnp.fit.fit([gaussian], xDataSet, dyDataSet, [dposC, dfwhmC, dareaC], bounds=[ (dposC - 2 * dfwhmC, dposC + 2 * dfwhmC), (0, 2 * dfwhmC), (2 * dareaC, 0)], ptol=1e-10, optimizer=self.optimizer) dpos, dfwhm, _darea = r.parameters results = {'dpos': dpos, 'dfwhm': dfwhm, 'area': abs(_darea), 'darea': _darea, 'fwhm': dfwhm} else: r = dnp.fit.fit([gaussian, gaussian], xDataSet, dyDataSet, [uposC, ufwhmC, uareaC,dposC, dfwhmC, dareaC], bounds=[ (uposC - 2 * ufwhmC, uposC + 2 * ufwhmC), (0, 2 * ufwhmC), (0, 2 * uareaC), (dposC - 2 * dfwhmC, dposC + 2 * dfwhmC), (0, 2 * dfwhmC), (2 * dareaC, 0)], ptol=1e-10, optimizer=self.optimizer) upos, ufwhm, _uarea, dpos, dfwhm, _darea = r.parameters results = {'upos': upos, 'dpos': dpos, 'ufwhm': ufwhm, 'dfwhm': dfwhm, 'uarea': _uarea, 'darea': _darea, 'centre': (upos + dpos) / 2.0, 'width': abs(upos - dpos), 'area': (_uarea + abs(_darea)) / 2.0, 'fwhm': (ufwhm + dfwhm) / 2.0} self.plotResult(r) results['residual'] = r.residual return [results.get(label, float('NaN')) for label in self.labelList]
def interp(x, xp, fp, left=None, right=None): '''Linearly interpolate''' x = _asarray(x) xp = _asarray(xp) fp = _asarray(fp) if left is None: left = fp[0] if right is None: right = fp[-1] r = _asarray(_maths.interpolate(xp._jdataset(), fp._jdataset(), x._jdataset(), left, right)) if x.ndim == 0: return r.item() return r
def square(a, out=None): '''Square of input''' return _maths.square(a, out)
def floor(a, out=None): '''Largest integer smaller or equal to input''' return _maths.floor(a, out)
def log1p(x, out=None): '''Natural logarithm of (x+1)''' return _maths.log1p(x, out)
def expm1(x, out=None): '''Exponential of (x-1)''' return _maths.expm1(x, out)
def diff(a, order=1, axis=-1): '''Difference of input''' return _maths.difference(a, order, axis)
def log10(a, out=None): '''Logarithm of input to base 10''' return _maths.log10(a, out)
def power(a, p, out=None): '''Input raised to given power''' return _maths.power(a, p, out)
def sign(a, out=None): '''Sign of input, indicated by -1 for negative, +1 for positive and 0 for zero''' return _maths.signum(a, out)
def sqrt(a, out=None): '''Square root of input''' return _maths.sqrt(a, out)
def exp(a, out=None): '''Exponential of input''' return _maths.exp(a, out)
def rint(a, out=None): '''Round elements of input to nearest integers''' return _maths.rint(a, out)
def rad2deg(a, out=None): '''Convert from radian to degree''' return _maths.toDegrees(a, out)
def phase(a, keepzeros=False): '''Calculate phase of input by dividing by amplitude keepzeros -- if True, pass zeros through, else return complex NaNs ''' return _maths.phaseAsComplexNumber(a, keepzeros)
def clip(a, a_min, a_max, out=None): '''Clip input to given bounds (replace NaNs with midpoint of bounds)''' return _maths.clip(a, a_min, a_max, out)
def log(a, out=None): '''Natural logarithm of input''' return _maths.log(a, out)
def ceil(a, out=None): '''Smallest integer greater or equal to input''' return _maths.ceil(a, out)
def arctanh(a, out=None): '''Inverse hyperbolic tangent of input''' return _maths.arctanh(a, out)
def trunc(a, out=None): '''Truncate elements of input to nearest integers''' return _maths.truncate(a, out)
def deg2rad(a, out=None): '''Convert from degree to radian''' return _maths.toRadians(a, out)
def negative(a, out=None): '''Negate input''' return _maths.negative(a, out)
def minimum(a, b, out=None): '''Item-wise minimum''' return _maths.minimum(a, b)
def cbrt(a): '''Cube root of input''' return _maths.cbrt(a)
def dividez(a, b): '''Divide one array-like object by another with items that are zero divisors set to zero''' return _maths.dividez(a, b)
def tanh(a, out=None): '''Hyperbolic tangent of input''' return _maths.tanh(a, out)
def abs(a, out=None): #@ReservedAssignment '''Absolute value of input''' return _maths.abs(a, out)
def arccosh(a, out=None): '''Inverse hyperbolic cosine of input''' return _maths.arccosh(a, out)