function merge_all,images, bboxes,bbox=bbox, add=add, brightest=brightest, median_pix=median_pix, $ dimmest=dimmest, max_flags=max_flags, average=average,nozero=nozero,first=first,last=last, $ quality_flags=quality_flags qf_type = SIZE( quality_flags[0], /TYPE ) IF qf_type EQ 1 THEN array_size = size( quality_flags, /DIMENSIONS ) IF qf_type EQ 10 THEN array_size = size( *quality_flags[0], /DIMENSIONS ) q_flags = BYTARR( array_size[0],array_size[1] ) q_flags[*,*] = -1 index = WHERE( PTR_VALID( images ) EQ 1 ) frames = n_elements(index); This DOES NOT include the null images if frames eq 0 then return,0 if n_elements(first) eq 0 then first=0 if n_elements(last) eq 0 then last=frames-1 daisy_size = size((*(images[0])), /dimensions) daisy_images = FLTARR(frames, daisy_size[0], daisy_size[1]) * !values.f_nan daisy_flags = INTARR(frames, daisy_size[0], daisy_size[1]) FOR i = first, last do begin if ptr_valid(images[i]) then begin daisy_images[i, *, *]=(*(images[i])) daisy_flags[i, *, *]=(*(quality_flags[i])) index = WHERE( daisy_images[i, *, *] LT 0.0D AND FINITE(daisy_images[i, *, *]) ) if index[0] NE -1 then begin daisy_images[index] = !values.f_nan endif ENDIF ENDFOR IF keyword_set(median_pix) THEN BEGIN full_daisy = MEDIAN(daisy_images, DIMENSION=1) ; Result = REBIN( full_daisy, 1276, 1276 ) ; tv, Result, /NAN return, full_daisy ENDIF IF keyword_set(average) THEN BEGIN processed_pixels = 0L full_daisy = MAX(daisy_images, DIMENSION=1, /NAN) albedo_index = WHERE( full_daisy GT 0.0 AND FINITE( full_daisy) ) num_pixels = N_ELEMENTS( albedo_index ) ixy_index = ARRAY_INDICES(full_daisy, albedo_index) FOR I = 0L, LONG(num_pixels -1) DO BEGIN x = ixy_index[0,i] y = ixy_index[1,i] index = WHERE( FINITE(daisy_images[ *, x, y ]) ) IF index[0] NE -1 THEN BEGIN full_daisy[x,y] = TOTAL( daisy_images[ index, x, y ], /NAN ) / FLOAT(N_ELEMENTS( index )) processed_pixels += 1 ENDIF ENDFOR PRINT, "Processed ", processed_pixels, " pixels" return, full_daisy ; overlaop_data = REBIN( average_index, daisy_size[0]/2, daisy_size[0]/2 ) ; tvscl,overlaop_data, /NAN ; full_daisy = TOTAL(daisy_images, 1, /DOUBLE, /NAN) ; avg_index = WHERE( average_index GT 0 ) ; if avg_index[0] NE -1 THEN BEGIN ; full_daisy[avg_index] /= average_index[avg_index] ; ENDIF ; ; Result = REBIN( full_daisy, 1276, 1276 ) ; ; tv, Result, /NAN ; return, full_daisy ENDIF IF keyword_set(brightest) THEN BEGIN full_daisy = MAX(daisy_images, DIMENSION=1, /NAN) ; tvscl, full_daisy, /NAN return, full_daisy ENDIF IF keyword_set( max_flags ) THEN BEGIN full_daisy = MAX(daisy_images, DIMENSION=1, /NAN) albedo_index = WHERE( FINITE( full_daisy), num_pixels ) IF num_pixels GT 1 THEN full_daisy[ albedo_index ] = 0.0 max_albedo = MAX( full_daisy, /NAN ) albedo_index = WHERE( full_daisy GE 0.0 AND FINITE( full_daisy), num_pixels ) ; added change below to deal with artifacts in the daisy. ; 12 Dec 2014 JVC ; Changes again 11 June 2015 to ; account for artifacts in the ; definitive daisy (JVC) p_flag = get_production_flag( ) if (p_flag eq 1) then begin qf_max = 0 ; Changed 11 June 2015 endif else begin qf_max = 0 endelse IF num_pixels GT 1 THEN BEGIN ixy_index = ARRAY_INDICES(full_daisy, albedo_index) FOR I = 0L, LONG(num_pixels -1) DO BEGIN ; Loop over all valid albedo pixels x = ixy_index[0,i] ; The X location of the pixel y = ixy_index[1,i] ; The Y location of the pixel index = WHERE( daisy_flags[ *, x, y ] LE qf_max AND FINITE(daisy_images[ *, x, y ]), num_good_pixels ) IF num_good_pixels GE 1 THEN BEGIN full_daisy[x,y] = MAX( daisy_images[ index, x, y ], max_loc, /NAN ) q_flags[x,y] = daisy_flags[ index[max_loc], x, y ] ; full_daisy[x,y] = MEDIAN( daisy_images[ index, x, y ], /EVEN ) ENDIF ENDFOR ENDIF quality_flags = q_flags return, full_daisy ENDIF IF keyword_set(add) THEN BEGIN full_daisy = TOTAL(daisy_images, 1, /DOUBLE, /NAN) ; tvscl, full_daisy, /NAN return, full_daisy ENDIF print, "No valid keywords found in merge_all" return, 0 end