def fit_a_pixel(args):
    if len(args) == 6:
        tline1, etline1, cont1, tline2, etline2, cont2 = args
    elif len(args) == 7:
        tline1, etline1, cont1, tline2, etline2, cont2, pb = args
        pb.update()

    pargrid1 = (cont1*np.exp(-taugrid1) + (1-np.exp(-taugrid1))*texgrid1)
    pargrid2 = (cont2*np.exp(-taugrid2) + (1-np.exp(-taugrid2))*texgrid2)
    #spec = (1.0-np.exp(-np.array(tau_nu_cumul)))*(Tex-Tbackground)

    match, indbest, chi2 = grid_2p_getmatch(tline1+cont1, etline1, pargrid1,
                                            tline2+cont2, etline2, pargrid2)

    likelihood = np.exp(-chi2/2.)
    def lwt(x, mask=match):
        """ Likelihood-weighted mean """
        return (x*likelihood)[mask].sum() / likelihood[mask].sum()
    def lstd(x, mask=match):
        """ Likelihood-weighted stddev """
        return (((x-lwt(x,mask))**2*likelihood)[mask].sum() / likelihood[mask].sum() * (mask.sum()/(mask.sum()-1)))**0.5

    chi2best = chi2.flat[indbest]
    dens_best = densityarr.flat[indbest]
    col_best = columnarr.flat[indbest]
    temp_best = temparr.flat[indbest]
    opr_best = oprarr.flat[indbest]

    best = (dens_best, col_best, temp_best, opr_best, chi2best)

    if np.count_nonzero(match) == 0:
        log.warn(str(args))
        warnings.warn("Found no matches.  Returning NaNs")
        return best, np.nan, np.nan, np.nan, np.nan, np.nan


    chi2_all = chi2[match]
    dens_all = densityarr[match]
    col_all = columnarr[match]
    temp_all = temparr[match]
    opr_all = oprarr[match]

    mins = map(min, (dens_all, col_all, temp_all, opr_all, chi2_all))
    maxs = map(max, (dens_all, col_all, temp_all, opr_all, chi2_all))
    mean = map(np.mean, (dens_all, col_all, temp_all, opr_all, chi2_all))
    std = map(np.std, (dens_all, col_all, temp_all, opr_all, chi2_all))
    lweighted = map(lwt, (densityarr, columnarr, temparr, oprarr))
    lerror = map(lstd, (densityarr, columnarr, temparr, oprarr))

    return best,mins,maxs,mean,std,chi2best,lweighted,lerror
xx,yy,zz = (82-1, 73-1, 107-1)
xx,yy,zz = (111-1, 110-1, 98-1) # lowdens / highstd?  EXTREME degeneracy!
xx,yy,zz = (90-1, 110-1, 110-1) # low dens, high *column* std but low *dens* std

cont1 = cont11[yy,xx]
cont2 = cont22[yy,xx]
tline1 = cube1.cube[zz,yy,xx]
tline2 = cube2.cube[zz,yy,xx]
etline1 = cube1.errorcube[zz,yy,xx]
etline2 = cube2.errorcube[zz,yy,xx]

pargrid1 = (cont1*np.exp(-taugrid1) + (1-np.exp(-taugrid1))*texgrid1)
pargrid2 = (cont2*np.exp(-taugrid2) + (1-np.exp(-taugrid2))*texgrid2)
#spec = (1.0-np.exp(-np.array(tau_nu_cumul)))*(Tex-Tbackground)

match, indbest, chi2 = grid_2p_getmatch(tline1+cont1, etline1, pargrid1,
                                        tline2+cont2, etline2, pargrid2)
match11, indbest11, chi2_11 = grid_getmatch(tline1+cont1, etline1, pargrid1)
match22, indbest22, chi2_22 = grid_getmatch(tline2+cont2, etline2, pargrid2)

bw,bz,by,bx = np.unravel_index(indbest, pargrid1.shape)

pl.jet()

pl.clf()
extent = [densityarr.flat[0],densityarr.flat[-1],
          columnarr.flat[0],columnarr.flat[-1]]
pl.imshow(pargrid1[bw,bz,:,:], alpha=0.5, extent=extent)
pl.contour(densityarr[bw,bz,:,:],columnarr[bw,bz,:,:],
           pargrid2[bw,bz,:,:], levels=np.linspace(tline2-20*etline2+cont2,
                                                   tline2+20*etline2+cont2,
                                                   10))