def to_signal(self, mask=None):
        """
            Creates a hyperspy.Signal1D object with the same spectral image.

            The resulting hyperspy.Signal1D contains the full spectral image.

            Returns
            ----------
                s : hyperspy.Signal1D
                    hyperspy object
        """
        (nz, ny, nx, nf) = np.shape(self.spec_im)

        dx = (self.x_array[1] - self.x_array[0])
        dy = (self.y_array[1] - self.y_array[0])
        (units, scale) = self.get_unit_scaling()
        dx *= scale
        dy *= scale

        spec_name = 'index'
        if self.spec_units in ['nm', 'um']:
            spec_name = 'Wavelength'
        elif self.spec_units == 'eV':
            spec_name = 'E'

        dict_y = {'name': 'y', 'units': units, 'scale': dy, 'size': ny}
        dict_x = {'name': 'x', 'units': units, 'scale': dx, 'size': nx}
        dict_f = {
            'name': spec_name,
            'units': self.spec_units,
            'scale': self.spec_x_array[1] - self.spec_x_array[0],
            'size': nf,
            'offset': self.spec_x_array[0]
        }
        dict_z = {'name': 'z', 'units': units, 'size': nz}

        if nz == 1:
            s = Signal1D(np.squeeze(self.spec_im),
                         axes=[dict_y, dict_x, dict_f],
                         mask=mask)
            s.change_dtype('float64')
            return s
        else:
            dz = (self.z_array[1] - self.z_array[0]) * scale
            dict_z['scale'] = dz
            s = BaseSignal(self.spec_im, axes=[dict_z, dict_y, dict_x, dict_f])
            s.change_dtype('float64')
            return s.as_signal1D(0)