undef("Qsave") function Qsave(quality:numeric) local ntime,nxtrack,nx,ii,ic,bit,bstr,nn,mm,xq,xq_tmp,xq_ref,xq_ref1 begin xq_ref1 = "1010101010011111" ; Never allow these flags to be set in the filtering xq_ref = stringtocharacter(xq_ref1) nbits = dimsizes(xq_ref) q_save = new(dimsizes(quality),integer) ntime = dimsizes(quality(:,0)) nxtrack = dimsizes(quality(0,:)) do nt = 0, ntime - 1 do nx = 0, nxtrack - 1 ; looping over the pixels in pqg ii := touint(quality(nt,nx)) bstr := "" ic := ii do nn = 0, nbits-1 bit = (ic % 2) ; pick off the lowest bit ic = ic/2 ; shift right one bit, drop lowest bstr = bit + bstr end do ; nn xq := stringtocharacter(bstr) xq_tmp := new(dimsizes(xq),typeof(xq)) do mm = 0, nbits-1 ; looping over the number of bits if (xq(mm).eq.inttochar(0) .or. xq(mm).ne.xq_ref(mm)) then xq_tmp(mm) = inttochar(0) else if (xq(mm).eq.inttochar(1) .and. xq(mm.eq.xq_ref(mm))) then xq_tmp(mm) = inttochar(1) end if end if end do ; mm if all(xq_tmp.eq.inttochar(0)) then ; Save the index if equal to zero q_save(nt,nx) = 0 else q_save(nt,nx) = 1 end if end do end do return(q_save) end