pro ssmem_clean, uv, vis, inp, vsl, cmap, cln, flux = flux, ferr = ferr
    f = vsl.f_all
    nf = n_elements(f)
    nf1 = nf - 1l
    m = inp.imsiz
    m2 = m / 2l
    cmap = fltarr(m, m, nf)
    dmap = fltarr(m, m, nf)

    tvlct, r0, g0, b0, /get
    multi0 = !p.multi
    ch0 = !p.charsize
    f0 = !p.font
    xm0 = !x.margin
    ym0 = !y.margin
    win0 = !d.window

    xyintcln = fltarr(nf)
    for k = 0l, nf1 do begin
        vslk = vsl
        vslk.f_ghz = f[k]
        clean, uv[*, *, k], vis[*, *, k], inp, vslk, cmapk, cln, dmap = dmapk
        cmap[*, *, k] = cmapk * cln.tbmax
        dmap[*, *, k] = dmapk / (!pi * cln.bmaj * cln.bmin / cln.xyint^2)
        xyintcln[k] = cln.xyint
    endfor
    TB2flux = 3.6E-5 * (xyintcln * f)^2

    cflx = total(total(cmap, 1), 1)
    rflx = -total(total(cmap < 0., 1), 1)
    dflx = total(total(dmap > 0., 1), 1)
    tflux = cflx * (1. + 0. * rflx / (dflx - rflx))

    flux = tflux * TB2flux
    ferr = 0.1 * flux

    xyint = cln.xyint * f[nf1] / f
    for k = 0l, nf1 do begin
        x = (indgen(m) - m2) * (xyint[k] / xyintcln[k]) + m2
        cmap[*, *, k] = interpolate(cmap[*, *, k], x, x, /grid)
    endfor

    tvlct, r0, g0, b0
    !p.multi = multi0
    !p.charsize = ch0
    !p.font = f0
    !x.margin = xm0
    !y.margin = ym0
    wset, win0
end