⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cr_reject.pro

📁 basic median filter simulation
💻 PRO
📖 第 1 页 / 共 3 页
字号:
FOR i=0, nimg-1 DO BEGIN    skyarray = fltarr(xdim, ydim)    IF xmed THEN BEGIN          FOR jl = 0,ydim-1 DO skyarray[0,jl] = skyvals[*,i]    ENDIF ELSE BEGIN         skyarray[*] = skyvals[i]    ENDELSE     model_image = $      (temporary(skyarray) + (combined_image + dark_dn)*exptime[i])>0        IF supplied THEN BEGIN        current_var = noise_cube[*,*,i]^2 $          + ((mult_noise*temporary(model_image))/exptime[i])^2    ENDIF ELSE BEGIN        current_var = (rd_noise_dn^2 + model_image/gain $                       + (mult_noise*temporary(model_image))^2) $                       / (exptime[i]^2)    ENDELSE     IF track THEN BEGIN        print,'CR_REJECT:  Tracking.  Iter = ',strtrim(iter,2), $          ' Image = ',strtrim(i,2)        print,'           Current_var:  '        print,current_var[tracking_set]    ENDIF    testnoise = sig_limit[iter-1] * sqrt(temporary(current_var))     IF track THEN BEGIN        print,'           Testnoise:  '        print,testnoise[tracking_set]    ENDIF;;  Absolute value used so that if you remove too much, at least you;  won't introduce a new bias.;    cr_subs[0] = $      where(abs(input_cube[*,*,i] - combined_image) $            GT testnoise, count)    IF count GT 0 THEN BEGIN        mask_cube[i*npix + cr_subs[0:count-1]] $          = replicate(0b,count)    ENDIF    IF verbose THEN print,'CR_REJECT:  ',strtrim(count,2), $      ' pixels flagged in image ',strtrim(i,2)    ;;  Dilation of mask;    count2 = 0    IF do_dilation THEN BEGIN        tempw = where(dilate(1b-mask_cube[*,*,i], kernel),dct)        IF dct GT 0 THEN BEGIN            ic1 = input_cube[npix*i + tempw]            tn1 = testnoise[tempw]            cmi = combined_image[tempw]            tewsub = where(abs(temporary(ic1) $                               - temporary(cmi)) $                           GT (dfactor*temporary(tn1)), count2)            cr_subs[0] = (temporary(tempw))[temporary(tewsub)>0]            IF count2 GT 0 THEN BEGIN                mask_cube[i*npix + cr_subs[0:count2-1]] $                  = replicate(0b,count2)            ENDIF        ENDIF        IF verbose THEN print,'CR_REJECT:  Mask dilation performed.  ', $          strtrim(count2,2), ' pixels flagged in image ',strtrim(i,2)    ENDIFENDFORFOR i=0, nimg-1 DO BEGIN    cr_subs[0] = where(1b-mask_cube[*,*,i],count);   IF verbose THEN print,'CR_REJECT:  ',strtrim(count,2), $;     ' accumulated flags in image ',strtrim(i,2);    IF count GT 0 THEN BEGIN;        input_cube(i*npix + cr_subs(0:count-1)) $;          = combined_image(cr_subs(0:count-1));        noise_cube(i*npix + cr_subs(0:count-1)) $;          = sqrt(current_var(cr_subs(0:count-1)));    ENDIFENDFORIF use_input_mask THEN BEGIN    combined_npix[0,0] = total((mask_cube AND input_mask),3)ENDIF ELSE BEGIN    combined_npix[0,0] = total(mask_cube,3)ENDELSE;;  Loop termination condition.;IF (iter GE maxiter) THEN GOTO,end_main_loopIF usemedian THEN BEGIN    IF verbose THEN print,'CR_REJECT:  Taking median.'    IF use_input_mask THEN BEGIN        medarr,input_cube,combined_image,mask_cube AND input_mask    ENDIF ELSE BEGIN        medarr,input_cube,combined_image,mask_cube    ENDELSEENDIF ELSE IF usemean THEN BEGIN    IF verbose THEN print,'CR_REJECT:  Taking mean.'    IF use_input_mask THEN BEGIN        maskprod = input_mask[*,*,0] AND mask_cube[*,*,0]        combined_image = input_cube[*,*,0]*maskprod*exptime[0]        combined_expt  = temporary(maskprod)*exptime[0]        IF nimg GT 1 THEN BEGIN            FOR i=1,nimg-1 DO BEGIN                maskprod = input_mask[*,*,i] AND mask_cube[*,*,i]                combined_image = combined_image $                  + input_cube[*,*,i]*maskprod*exptime[i]                combined_expt = combined_expt $                  + temporary(maskprod)*exptime[i]            ENDFOR        ENDIF        wexpt0 = where(combined_expt LE 0,cexpt0)        combined_image = combined_image / (combined_expt>1e-6)        IF cexpt0 GT 0 THEN combined_image[wexpt0] = 0    ENDIF ELSE BEGIN        combined_image = input_cube[*,*,0]*mask_cube[*,*,0]*exptime[0]        combined_expt  = mask_cube[*,*,0]*exptime[0]        IF nimg GT 1 THEN BEGIN            FOR i=1,nimg-1 DO BEGIN                combined_image = combined_image $                  + input_cube[*,*,i]*mask_cube[*,*,i]*exptime[i]                combined_expt = combined_expt $                  + mask_cube[*,*,i]*exptime[i]            ENDFOR        ENDIF        wexpt0 = where(combined_expt LE 0,cexpt0)        combined_image = combined_image / (combined_expt>1e-6)        IF cexpt0 GT 0 THEN combined_image[wexpt0] = 0    ENDELSEENDIF ELSE IF usemin THEN BEGIN    IF verbose THEN print,'CR_REJECT:  Taking minimum.'    IF use_input_mask THEN BEGIN        combined_image[*] = flagval        FOR i=0, nimg-1 DO BEGIN            indx = where((input_mask[*,*,i] $                          AND mask_cube[*,*,i]) gt 0, cindx)            IF cindx GT 0 THEN $                combined_image[indx] = $                    (combined_image < input_cube[*,*,i])[indx]        ENDFOR        wf = where(combined_image EQ flagval, cf)        IF cf GT 0 THEN combined_image[wf] = null_value    ENDIF ELSE BEGIN        combined_image = input_cube[*,*,0]        FOR i=1, nimg-1 DO BEGIN            combined_image = (combined_image < input_cube[*,*,i])        ENDFOR    ENDELSE    IF use_input_mask THEN BEGIn        combined_image = input_cube[*,*,0]*input_mask[*,*,0]        FOR i=1, nimg-1 DO BEGIN            combined_image = (combined_image < input_cube[*,*,i] $                             *input_mask[*,*,i])        ENDFOR    ENDIF ELSE BEGIN        combined_image = input_cube[*,*,0]        FOR i=1, nimg-1 DO BEGIN            combined_image = (combined_image < input_cube[*,*,i])        ENDFOR    ENDELSEENDIF ELSE BEGIN    print,'CR_REJECT:  Logic error in program recomputing check image.'    returnENDELSEGOTO,main_loopEND_main_loop:;;  End of CR rejection loop.;IF verbose THEN BEGIN    FOR i=0,nimg-1 DO BEGIN        wdummy = where(1b-mask_cube[*,*,i],count)         ncut_tot[i] = count    ENDFOR    print,'CR_REJECT:  Total pixels changed:  '    print,ncut_totENDIFIF track THEN BEGIN    print,'CR_REJECT:  Tracking.  After loop exit.'    print,'   Combined_image:  '    print,combined_image[tracking_set];    print,'   Current_var:  ';    print,current_var[tracking_set]    FOR i = 0, nimg-1 DO BEGIN        print,'   Image ', strtrim(i,2), ':'        print,(input_cube[*,*,i])[tracking_set]        print,'   Noise ', strtrim(i,2), ':'        print,(noise_cube[*,*,i])[tracking_set]        print,'   Mask  ', strtrim(i,2), ':'        print,(mask_cube[*,*,i])[tracking_set]    ENDFORENDIF  ;;   Compute weights according to scheme chosen;xrepl = make_array(dim=xdim,value=1)yrepl = make_array(dim=ydim,value=1)IF wgt EQ 0 THEN BEGIN    wgts = xrepl # exptimeENDIF ELSE BEGIN    IF xmed THEN skytmp = skyvals>1e-6 ELSE skytmp = xrepl # (skyvals>1e-6)    exp2tmp = xrepl # (exptime^2)    sky_rate_var = temporary(skytmp)/gain/exp2tmp    ron_rate_var = rd_noise_dn^2/temporary(exp2tmp)    wgts = 1.0/(temporary(sky_rate_var) + temporary(ron_rate_var))ENDELSE;;   Do the final co-addition;    wgt_coeff = fltarr(xdim, ydim)FOR i=0,nimg-1 DO BEGIN    plane_wgts = wgts[*,i] # yrepl    input_cube[0,0,i] = input_cube[*,*,i]*plane_wgts    noise_cube[0,0,i] = noise_cube[*,*,i]*plane_wgts    IF use_input_mask THEN BEGIN        mcim = (mask_cube[*,*,i] AND input_mask[*,*,i])    ENDIF ELSE BEGIN        mcim = mask_cube[*,*,i]    ENDELSE    wgt_coeff[0,0] = wgt_coeff + temporary(mcim) * temporary(plane_wgts)ENDFORwh0 = where(combined_npix EQ 0,c0)wgt_coeff = etot/(wgt_coeff > 1.0e-8)IF c0 GT 0 THEN wgt_coeff[wh0] = 0.0IF verbose THEN BEGIN    IF c0 GT 0 THEN $      print,'CR_REJECT:  ',strtrim(c0,2),' pixels rejected on all inputs.'ENDIFIF use_input_mask THEN BEGIN    IF xmed THEN BEGIN        combined_image = wgt_coeff * total(input_cube $                                 * (mask_cube AND input_mask),3) $                         + totsky#yrepl    ENDIF ELSE BEGIN        combined_image = wgt_coeff * total(input_cube $                                 * (mask_cube AND input_mask),3) $                         + totsky    ENDELSE    combined_noise =  wgt_coeff * sqrt(total((noise_cube $                              * (mask_cube AND input_mask))^2,3))ENDIF ELSE BEGIN    IF xmed THEN BEGIN        combined_image = wgt_coeff * total(input_cube*mask_cube,3) $                                 + totsky#yrepl    ENDIF ELSE BEGIN        combined_image = wgt_coeff * total(input_cube*mask_cube,3) $                                 + totsky    ENDELSE    combined_noise = wgt_coeff * sqrt(total((noise_cube*mask_cube)^2,3))ENDELSEIF keyword_set(bias) THEN BEGIN    print,'CR_REJECT:  Bias flag set -- returning mean instead of total.'    combined_image = combined_image/nimg    combined_noise = combined_noise/nimgENDIFIF c0 GT 0 THEN combined_image[wh0] = null_valueIF keyword_set(restore_sky) THEN BEGIN    IF wgt EQ 0 THEN BEGIN        IF verbose THEN print,'CR_REJECT:  Adding sky back into data cube'        IF xmed THEN BEGIN            FOR i=0,nimg-1 DO BEGIN                FOR j=0, ydim-1 DO input_cube[0,j,i] = input_cube[*,j,i] $                                                       + skyvals[*,i]            ENDFOR        ENDIF ELSE BEGIN            FOR i=0,nimg-1 DO $                input_cube[0,0,i] = input_cube[*,*,i] + skyvals[i]        ENDELSE    ENDIF ELSE BEGIN        print, 'CR_REJECT:  /RESTORE_SKY ignored because weighting spec ' $            + 'not zero.'    ENDELSEENDIFIF zexp THEN exptime = save_exptreturnEND

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -