;+
pro awbinchk, fn
; 
; Checks Arbitrarily weighted binned data
;
;-

; Read in the data
read_mdi, fn, 0, rawimg, hdr
read_mdi, fn, 1, awimg, hdr
read_mdi, fn, 2, awbin, hdr

rawimg = long (rawimg and '0000ffff'x)
awimg = long (awimg and '0000ffff'x)
lawbin = long (awbin and '0000ffff'x)

nerr = 0
row_len = lawbin(1)
n_entries = lawbin(3)
nxt = 0

for i = 0, n_entries - 1 do begin
    p = (i*8) + 16  

    wtbl_adr = lawbin(p) + lawbin(p+1) * '10000'xl
    nx = lawbin(p+2)
    ny = lawbin(p+3)
    wtsize = nx * ny
    wtbl = awbin(wtbl_adr:(wtbl_adr + wtsize - 1))
    wtbl = reform (wtbl, nx, ny)

    pixarr = lonarr(nx * ny)
    adrlistptr = lawbin(p+4) + lawbin(p+5) * '10000'x
    shift_flag = lawbin(p+7) and '8000'x
    shift_count = lawbin(p+7) and '7fff'x

    for j = 0, lawbin(p+6)-1 do begin
        addr = adrlistptr + (2 * j)
        start_adr = lawbin(addr) + lawbin(addr+1) * '10000'xl
        for k = 0, ny - 1 do begin
            adr =  start_adr + (k * row_len)
            pixarr(k*nx) = long(rawimg(adr:adr+nx-1)) 
        endfor
        pixarr = pixarr * wtbl
        sum = 0l
        for k = 0, wtsize - 1 do begin
            sum = sum + pixarr(k)
        endfor
        if (shift_flag eq 0) then sum = ishft (sum, -16)
        sum = ishft (sum, shift_count)
        sum = ishft (sum, -16)
        if (sum ne awimg(nxt)) then nerr = nerr + 1
        nxt = nxt + 1
        ;stop
    endfor
    print, sum, awimg(nxt-1), adrlistptr, addr, start_adr, i, j, nerr
    ;stop
endfor
print, ' '
print, '----------------------------------'
print, nerr, ' Errors in AWBINned Image
print, '----------------------------------'
return
end
 
