def position(self, bounds=None, background=None, hkle=True):
        r"""Returns the position of a peak within the given bounds

        Parameters
        ----------
        bounds : bool, optional
            A boolean expression representing the bounds inside which the
            calculation will be performed

        background : float or dict, optional
            Default: None

        hkle : bool, optional
            If True, integrates only over h, k, l, e dimensions, otherwise
            integrates over all dimensions in :py:attr:`.Data.data`

        Returns
        -------
        result : tup
            The result is a tuple with position in each dimension of Q,
            (h, k, l, e)

        """
        result = ()
        for key in self.get_keys(hkle):
            _result = 0
            for key_integrate in self.get_keys(hkle):
                _result += np.trapz(self.data[key][self.get_bounds(bounds)] *
                                    (self.intensity[self.get_bounds(bounds)] - self.estimate_background(background)),
                                    self.data[key_integrate][self.get_bounds(bounds)]) / self.integrate(bounds, background)

            result += (np.squeeze(_result),)

        if hkle:
            return result
        else:
            return dict((key, value) for key, value in zip(self.get_keys(hkle), result))