pro mem_map,visin,vis_out,u_out,v_out,image_struct,circles,pixel_size,svis,$
	imsize=imsize,show=show,help=help
;
; INPUTS: visin (visibility Structure)
;         circles (array, zero offset, starting and ending uv circles)
;         pixel_size (pixel size in arcsec, double float)
;         imsize (default: 128, dimension of the square map)
;         show (default: no, /show to show map progress and uv dist.)
;
; OUTPUTS: vis (visibilities, float array)
;         u,v (coordinates in Fourier plane, float arrays)
;         image (MEM NJIT results, structure)
;                structure includes:
;                 map (128 x 128 map array generated from visibilities)
;                 misc (structure with frequency, iterations, '
;                 normalized flux, normalized chi^2, and 
;                 Lagrange Multipliers)
;         svis (uncertainties in visibilities, float array)
;
; VERSION HISTORY:
; Aug 2006: Author R. Pernak, GSFC
; DEC 06, 2006: EJS; Revised flux calculation per discussion with gh
;                    Revised header docs and changed variable name hsi to visin

if keyword_set(help) then begin
	print,'PURPOSE:'
	print,'	Create a map using RHESSI Visibilities and MEM NJIT'
	print,'HELP:'
	print,'	pro mem_map,visin,vis,u,v,image,circles,pixel_size,svis,imsize=imsize,'
	print,' 	/show'
	print,'	inputs:	visin (RHESSI Structure)'
	print,'		circles (array, zero offset, starting and ending uv circles)'
	print,'		pixel_size (pixel size in arcsec, double float)'
	print,'		imsize (default: 128, dimension of the square map)'
	print,'		show (default: no, /show to show map progress and uv dist.)'
	print,'	outputs: vis (visibilities, float array)'
	print,'		u,v (coordinates in Fourier plane, float arrays)'
	print,'		image (MEM NJIT results, structure)'
	print,'			structure includes:'
	print,'			 map (128 x 128 map array generated from visibilities)'
	print,'			 misc (structure with frequency, iterations, '
	print,'			 normalized flux, normalized chi^2, and '
	print,'			 Lagrange Multipliers)'
	print,'		svis (uncertainties in visibilities, float array)'
	print,'AUTHOR:'
	print,'	Rick Pernak, Goddard Space Flight Center'
	return
endif

;isc: index of subcollimator
isc_start = circles[0]
isc_end = circles[1]

;make u,v, and vis arrays
for isc_ctr = isc_start,isc_end do begin
	good = where((visin.isc) eq isc_ctr,n)
	if (isc_ctr eq isc_start) then begin	
		u_out = visin(good).u * 206265. ;convert to inverse radians
		v_out = visin(good).v * 206265.	;for use with MEM_NJIT
		vis_out = visin(good).obsvis
		svis = visin(good).sigamp
    tflux = visin(good).totflux    
	endif else begin
		u_out = [u_out,visin(good).u * 206265.]
		v_out = [v_out,visin(good).v * 206265.]
		vis_out = [vis_out,visin(good).obsvis]
		svis = [svis,visin(good).sigamp]
    tflux = [tflux,visin(good).totflux]
	endelse
endfor

help,u_out,v_out,vis_out

;flux = mean(tflux);max(abs(vis_out))
amp=reverse(get_uniq(abs(visin.obsvis)))
flux=amp(4) ; This permits up to 4 outliers to exist, more deemed improbable 
print,'Flux = ',flux

default,imsize,128

;call MEM NJIT to make visibility map
if keyword_set(show) then begin
	image_struct=mem_njit(vis_out,u_out,v_out,flux=flux,svis=svis,imsiz=imsize,xyint=pixel_size,/show)
endif else begin
	image_struct=mem_njit(vis_out,u_out,v_out,flux=flux,svis=svis,imsiz=imsize,xyint=pixel_size)
endelse

return
end
