Viewing contents of file '../idllib/astron/contrib/varosi/code/allpro/contour_setup.pro'
;+
; NAME:
;	contour_setup
; PURPOSE:
;	Setup mosaic image arrays for contour display.
; CALLING:
;	contour_setup, mosaic_orig, mosaic_spec, mosaic, mos_ps
; INPUTS:
;	mosaic_orig = original mosaic data image array (floating point).
;	mosaic_spec = structure containing specs. such as coordinate origin,
;		rotation angle, smoothing, zoom on subregion, truncation, etc.
; KEYWORDS:
;	/COLOR_SCALE : causes display of color bar with scale in own window.
; OUTPUTS:
;	mosaic = image array (floating) result of mosaic_spec operations.
;	mos_ps = same image array scaled to bytes for display in window or PS.
; EXTERNAL CALLS:
;	function N_struct
;	function RotMag
;	function zoom_mosaic
;	function filter_mosaic
;	pro color_scale
; HISTORY:
;	Written: Frank Varosi NASA/GSFC 1992.
;	F.V. 1994, added rotation by any angle (RotMag).
;	F.V. 1997, added calibration by factor and offset.
;	F.V. 1998, made rotation pivot around selected origin of coordinates.
;-

pro contour_setup, mosaic_orig, mosaic_spec, mosaic, mos_ps, $
					COLOR_SCALE=cscal, NO_LOG=no_Log

	if N_struct( mosaic_spec ) NE 1 then return

	if (mosaic_spec.rot_ang_deg NE 0) then begin
		print," Rotating by",mosaic_spec.rot_ang_deg," degrees"
		print,"  around origin:",mosaic_spec.origin
	   endif

	mosaic = RotMag( mosaic_orig, INTERP=2, /PIVOT, $
			ANG=mosaic_spec.rot_ang_deg, MISS=mosaic_spec.min, $
			XC=mosaic_spec.origin(0), YC=mosaic_spec.origin(1) )

	mosaic = Rotate( zoom_mosaic( mosaic_spec, $
			filter_mosaic( mosaic, mosaic_spec ) ), $
						mosaic_spec.rotation )
	mosaic_spec.rot_applied = 1

	if (mosaic_spec.factor NE 1) or (mosaic_spec.offset NE 0) then begin
		print," applying calibration factor and offset"
		mosaic = mosaic * mosaic_spec.factor + mosaic_spec.offset
		mosaic_spec.minF = $
			mosaic_spec.minF*mosaic_spec.factor + mosaic_spec.offset
		mosaic_spec.maxF = $
			mosaic_spec.maxF*mosaic_spec.factor + mosaic_spec.offset
	   endif

	if (mosaic_spec.zero_shift NE 0) AND $
	   (mosaic_spec.scaling EQ "Log10") then begin
		print," shifting image values by: ",mosaic_spec.zero_shift
		mosaic = mosaic  + mosaic_spec.zero_shift
	   endif

	if (mosaic_spec.Truncate) then begin
		print," Truncating image values into Range: ",$
			mosaic_spec.minT, mosaic_spec.maxT, FORM="(A,2G10.3)"
		mosaic = (mosaic > mosaic_spec.minT) < mosaic_spec.maxT
	  endif else if (mosaic_spec.zoom_enable) then begin
		mosaic_spec.maxT = max( mosaic, MIN=minmc)
		mosaic_spec.minT = minmc
	   endif else begin
		mosaic_spec.minT = mosaic_spec.minF
		mosaic_spec.maxT = mosaic_spec.maxF
	    endelse

	if keyword_set( no_Log ) then return

	if (mosaic_spec.scaling EQ "Log10") then begin
		print," taking Log of image values >",mosaic_spec.minLog
		mosaic = aLog10( mosaic > mosaic_spec.minLog )
		minmc = aLog10( mosaic_spec.minT > mosaic_spec.minLog )
		maxmc = aLog10( mosaic_spec.maxT )
	  endif else begin
		minmc = mosaic_spec.minT
		maxmc = mosaic_spec.maxT
	   endelse

	if N_params() GE 4 then begin
		mos_ps = bytscl( mosaic, MIN=minmc, MAX=maxmc,$
						    TOP=mosaic_spec.topval )
	   endif else mosaic_spec.options.overlay=0

	if keyword_set( cscal ) then $
		   color_scale, mosaic_spec.minT, mosaic_spec.maxT, $
				mosaic_spec.topval, mosaic_spec.scaling, $
				mosaic_spec.name, LOGMIN=mosaic_spec.minLog, $
						POSITION=[400,100], /LARGE
end