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

📄 cr_reject.pro

📁 basic median filter simulation
💻 PRO
📖 第 1 页 / 共 3 页
字号:
    print,'   tracking_set, median_loop, mean_loop, minimum_loop, '    print,'   init_med, init_mean, init_min,'    print,'   mask_cube, noise_cube, dilation, dfactor, noclearmask, '    print,'   noskyadjust, xmedsky, restore_sky, skyvals, null_value'    print,'   input_mask, weighting, skybox'    returnENDIFverbose = keyword_set(verbose)xmed = keyword_set(xmedsky)track = n_elements(tracking_set) GT 0sz = size(input_cube)IF sz[0] NE 3 THEN BEGIN    print,'CR_REJECT:  Input cube must have 3 dimensions.'    returnENDIFIF n_elements(input_mask) GT 0 THEN BEGIN    szinpm = size(input_mask)    wsz = where(szinpm[0:3] NE sz[0:3], cwsz)    IF cwsz GT 0 THEN BEGIN        print,'CR_REJECT:  INPUT_MASK must be same size as IMAGE_CUBE.'        return    ENDIF ELSE BEGIN        IF verbose THEN print,'CR_REJECT:  Using INPUT_MASK.'    ENDELSE    use_input_mask = 1bENDIF ELSE BEGIN    use_input_mask = 0bENDELSE    xdim = sz[1]ydim = sz[2]nimg = sz[3]npix = xdim*ydimusemedian = keyword_set(median_loop)usemean   = keyword_set(mean_loop)usemin    = keyword_set(minimum_loop)IF (usemean + usemedian + usemin) GT 1  THEN BEGIN    print,'CR_REJECT:  Specify only one of MEDIAN_LOOP, MEAN_LOOP' $      + ', or MINIMUM_LOOP'    returnENDIFIF (usemean + usemedian + usemin) EQ 0  THEN BEGIN    usemean = 1ENDIFinimed  = keyword_set(init_med)inimean = keyword_set(init_mean)inimin  = keyword_set(init_min)IF (inimean + inimed + inimin) GT 1  THEN BEGIN    print,'CR_REJECT:  Specify only one of INIT_MED, INIT_MEAN,' $      + ' or INIT_MIN.'    returnENDIFIF (inimean + inimed + inimin) EQ 0  THEN BEGIN    inimin = 1ENDIFIF nimg LT 3 AND inimed THEN BEGIN    inimed = 0    inimin = 1    IF verbose THEN BEGIN        print,'CR_REJECT:  INIT_MED only permitted for 3 or more ' $            + 'images.'        print,'            Forcing INIT_MIN.'    ENDIFENDIF;;  Accumulation mode for bad pixels.;IF keyword_set(noclearmask) THEN BEGIN    clearmask = 0b    IF verbose THEN print,'CR_REJECT:  CR flags accumulate strictly.'ENDIF ELSE BEGIN    clearmask = 1b    IF verbose THEN print,'CR_REJECT:  CR flags cleared between iterations.'ENDELSE ;;  Default iterations.;IF (n_elements(nsig) LT 1) THEN BEGIN    nsig = [8, 6, 4]ENDIFsig_limit = nsigmaxiter = n_elements(nsig)IF n_elements(null_value) LT 1 THEN null_value=0IF verbose THEN BEGIN    print,'CR_REJECT: Iteration spec:  '    print,'           nsig = ',nsig    print,'           maxiter = ',maxiter    print,'           null_value = ',null_valueENDIF;IF n_elements(exptime) NE 0 THEN BEGIN    IF n_elements(exptime) NE nimg THEN BEGIN        print,'CR_REJECT:  EXPTIME must have one element per input image.'        return    ENDIF    zexp = 0b    FOR i=0,nimg-1 DO zexp = zexp OR (exptime[i] LE 0.0)    IF zexp THEN BEGIN        save_expt = exptime        exptime = make_array(nimg, value=1.0)        IF verbose THEN print, $          'CR_REJECT:  All exposure times <= 0.'    ENDIFENDIF ELSE BEGIN    zexp = 1b    save_expt = make_array(nimg, value=0.0)    exptime = make_array(nimg, value=1.0)ENDELSEetot = total(exptime)IF n_elements(weighting) GT 0 THEN BEGIN    wgt = weighting    wgt = round(wgt)    IF wgt ne 0 and wgt ne 1 THEN BEGIN        print, 'CR_REJECT:  Weighting must be 0 or 1'        print,'             Executing return'        return    ENDIFENDIF ELSE BEGIN    wgt = 0ENDELSEIF verbose THEN BEGIN    print,'CR_REJECT:  gain = ',gain    IF n_elements(dark_dn) EQ 1 THEN BEGIN        print,'           dark rate = ',dark_dn    ENDIF ELSE BEGIN        print,'           dark image supplied '    ENDELSE    print,'           read noise = ',rd_noise_dn    print,'           multiplicative noise coefficient = ',mult_noise    print,'           number of images = ',nimg    print,'           exposure times: '    print,exptime    print,'           total exposure time = ',etot    CASE wgt OF        0:  print,'           flux to be co-added'        1:  print,'           weighting of rate by sky and read noise'    ENDCASEENDIF;;  Process dilation specs;IF keyword_set(dilation) OR keyword_set(dfactor) THEN BEGIN    do_dilation = 1b    IF n_elements(dilation) LT 1 THEN dilation = 1    IF n_elements(dfactor) LT 1 THEN dfactor = 0.5    IF (dilation LE 0) OR (dfactor LE 0) THEN BEGIN        print,'CR_REJECT:  Dilation specs not valid: '        print,'           dilation = ',dilation        print,'           dfactor  = ',dfactor        return    ENDIF    kdim = 1 + 2*floor(dilation+1.e-4)    kernel = make_array(kdim, kdim, value=1b)    half_kern = fix(kdim/2)    wkz = where(shift(dist(kdim),half_kern,half_kern) $        GT (dilation+0.0001), ckz)    IF ckz GT 0 THEN kernel[wkz] = 0b    IF verbose THEN BEGIN        print,'CR_REJECT:  Dilation will be done.  Specs:'        print,'           dilation = ',dilation        print,'           dfactor  = ',dfactor        print,'           kernel = '        print,kernel    ENDIF      ENDIF ELSE BEGIN    do_dilation = 0b    IF verbose THEN print,'CR_REJECT:  Mask dilation will not be done.' ENDELSEIF verbose THEN print,'CR_REJECT:  Initializing noise and mask cube.'IF rd_noise_dn GE 0 THEN BEGIN    IF verbose THEN print,'CR_REJECT:  Noise cube computed.'    supplied = 0b    noise_cube = 0.0*input_cube    FOR i=0, nimg-1 DO BEGIN        noise_cube[0,0,i] = sqrt((rd_noise_dn^2 $                                  + ((input_cube[*,*,i] $                                      + dark_dn*exptime[i])>0)/gain) > 0.0)    ENDFORENDIF ELSE BEGIN    IF verbose THEN print,'CR_REJECT:  Noise cube supplied.'    supplied = 1b    IF wgt EQ 1 THEN BEGIN        print, 'CR_REJECT:  WEIGHTING=1 incompatible with supplying ', $            'noise cube.'        print, '            Executing return.'        return    ENDIFENDELSE;;  Mask flags CR with zeroes;mask_cube = make_array(xdim, ydim, nimg, value=1B)IF nimg LE 255 THEN ivalue=byte(nimg) ELSE ivalue=fix(nimg)combined_npix = make_array(xdim, ydim, value=ivalue)IF keyword_set(noskyadjust) THEN BEGIN    skyvals = fltarr(nimg)    totsky = 0ENDIF ELSE BEGIN    IF verbose THEN print,'CR_REJECT:  Sky adjustment being made.'    skyadj_cube, input_cube, skyvals, totsky, $      verbose=verbose, xmedsky=xmed, input_mask=input_mask, $      region=skyboxENDELSEIF verbose THEN print,'CR_REJECT:  Scaling by exposure time.'FOR i=0,nimg-1 DO BEGIN    input_cube[0,0,i] = input_cube[*,*,i]/exptime[i]    noise_cube[0,0,i] = noise_cube[*,*,i]/exptime[i]ENDFOR;;  Initialization of main loop.;ncut_tot = lonarr(nimg)cr_subs  = lonarr(npix)IF inimin OR usemin THEN flagval = max(input_cube)+1IF inimed THEN BEGIN    IF verbose THEN print,'CR_REJECT:  Initializing with median.'    IF use_input_mask THEN BEGIN        medarr,input_cube,combined_image,input_mask    ENDIF ELSE BEGIN        medarr,input_cube,combined_image    ENDELSEENDIF ELSE IF inimean THEN BEGIN    IF verbose THEN print,'CR_REJECT:  Initializing with mean.'    IF use_input_mask THEN BEGIN        tm = total(input_mask,3) > 1e-6        combined_image = total(input_cube*input_mask,3)/tm        wz = where(temporary(tm) le 0.001, cwz)        IF cwz GT 0 THEN $            combined_image[temporary(wz)] = 0    ENDIF ELSE BEGIN        combined_image = total(input_cube,3)/nimg    ENDELSEENDIF ELSE IF inimin THEN BEGIN    IF verbose THEN print,'CR_REJECT:  Initializing with minimum.'    IF use_input_mask THEN BEGIN        combined_image = make_array(xdim,ydim,value=flagval)        FOR i=0, nimg-1 DO BEGIN            indx = where(input_mask[*,*,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    ENDELSEENDIF ELSE BEGIN    print,'CR_REJECT:  Logic error in program initializing check image.'    returnENDELSE;; ---------------- MAIN CR REJECTION LOOP. ------------------;iter=0main_loop:iter=iter+1IF clearmask THEN mask_cube[*]=1bIF track THEN BEGIN    print,'CR_REJECT:  Tracking.  Iter = ',strtrim(iter,2)    print,'   Combined_image:  '    print,combined_image[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]    ENDFORENDIFIF verbose THEN BEGIN    print,'CR_REJECT:  Beginning iteration number ',strtrim(iter,2)    print,'           Sigma limit = ',sig_limit[iter-1]ENDIF

⌨️ 快捷键说明

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