FUNCTION mk_mask,indmp,logic ;+ ;An sswhere_event subroutine, to make the bit masks given the menu vectors ;the unique modes, and the roadmap or index. ; ; 28-Oct-1993 (SLF) Added /original switch to gt_res call ; 4-Jun-2009 (Aki Takeda) modified to use gt_percentd and gt_percentover, ; which accept FITS headers. ;- COMMON wdgtind,unq_modes,unq_dpmodes,unq_res,unq_comp,unq_filta,unq_filtb,unq_dpes COMMON wdgtvecs,mode_vec,dpmode_vec,res_vec,comp_vec,filta_vec,filtb_vec,dpe_vec,cmplt,satrtn mdsz=size(unq_modes) dmsz=size(unq_dpmodes) rssz=size(unq_res) cpsz=size(unq_comp) fasz=size(unq_filta) fbsz=size(unq_filtb) dpsz=size(unq_dpes) ;initialize mask vectors rdsz=size(indmp) zero=replicate(0,rdsz(1)) one=replicate(1,rdsz(1)) prcntmsk=zero satrtnmsk=zero mdmsk=zero dpmdmsk=zero resmsk=zero compmsk=zero afiltmsk=zero bfiltmsk=zero dpemsk=zero msk=zero ;create the individual masks ;check to see if 'indmp' is roadmap or index ; tags= tag_names(indmp) ; if (tags(0) eq 'GEN') then begin ; prcntd=where(indmp.sxt.percentd GE (fix(cmplt)*255)/100) ; prcnto=where(indmp.sxt.percentover LE satrtn) ; endif else begin ; prcntd=where(indmp.percentd GE (fix(cmplt)*255)/100) ; prcnto=where(indmp.percentover LE satrtn) ; endelse prcntd=where(gt_percentd(indmp) GE cmplt) ;4-Jun-2009 prcnto=where(gt_percentover(indmp) LE satrtn) ;4-Jun-2009 if prcntd(0) ne -1 then prcntmsk(prcntd) = 1 if prcnto(0) ne -1 then satrtnmsk(prcnto) = 1 if n_elements(unq_modes) gt 1 then begin for i=0,mdsz(1)-1 do $ mdmsk(where(gt_expmode(indmp) eq unq_modes(i))) = mode_vec(i) endif else begin mdmsk=one endelse if n_elements(unq_dpmodes) gt 1 then begin for i=0,dmsz(1)-1 do $ dpmdmsk(where(gt_dp_mode(indmp) eq unq_dpmodes(i))) = dpmode_vec(i) endif else begin dpmdmsk=one endelse if n_elements(unq_res) gt 1 then begin for i=0,rssz(1)-1 do $ resmsk(where(gt_res(indmp,/original) eq unq_res(i))) = res_vec(i) endif else begin resmsk=one endelse if n_elements(unq_comp) gt 1 then begin for i=0,cpsz(1)-1 do $ compmsk(where(gt_comp(indmp) eq unq_comp(i))) = comp_vec(i) endif else begin compmsk=one endelse if n_elements(unq_filta) gt 1 then begin for i=0,fasz(1)-1 do $ afiltmsk(where(gt_filta(indmp) eq unq_filta(i))) = filta_vec(i) endif else begin afiltmsk=one endelse if n_elements(unq_filtb) gt 1 then begin for i=0,fbsz(1)-1 do $ bfiltmsk(where(gt_filtb(indmp) eq unq_filtb(i))) = filtb_vec(i) endif else begin bfiltmsk=one endelse if n_elements(unq_dpes) gt 1 then begin for i=0,dpsz(1)-1 do $ dpemsk(where(gt_dpe(indmp) eq unq_dpes(i))) = dpe_vec(i) endif else begin dpemsk=one endelse ;put it together CASE logic OF 'OR': msk= prcntmsk AND satrtnmsk AND mdmsk AND dpmdmsk AND resmsk $ AND compmsk AND (afiltmsk OR bfiltmsk) AND dpemsk 'AND': msk= prcntmsk AND satrtnmsk AND mdmsk AND dpmdmsk AND resmsk AND $ compmsk AND afiltmsk AND bfiltmsk AND dpemsk ENDCASE ;logic return,msk end