pro ccd_map_box_label, x0, y0, siz, ilab1, ilab2, command=command, fre=fre, ofr=ofr
;
;x0,y0 is lower left corner
;
if (ilab1 lt 0) then return
;
asp = !d.x_size/float(!d.y_size)
if (!d.name eq 'PS') then char_factor = .6 else char_factor = 1.0
;
lab1 = 'W-' + strtrim(ilab1, 2)
;if (keyword_set(fre)) then lab1 = 'FRE-' + strtrim( string(fre, format='(f9.1)'), 2)
;if (keyword_set(ofr)) then lab1 = 'OFR-' + strtrim( string(ofr, format='(i4)'), 2)
if (n_elements(ofr) eq 0) then ofr = -99
if (n_elements(fre) eq 0) then fre = -99
if (ofr ge -10) then lab1 = 'OFR-' + strtrim( string(ofr, format='(i4)'), 2)
if (fre ge -10) then lab1 = 'FRE-' + strtrim( string(fre, format='(f9.1)'), 2)
lab3 = ' '
if (keyword_set(command)) then begin
    ;;lab1 = ' '
    ;;if ((ilab1 mod command) eq 0) then lab1 = 'C-' + strtrim(ilab1/command,2) + '(*4)'
    lab3 = ' '
    if ((ilab1 mod command) eq 0) then lab3 = strtrim(ilab1/command,2)
end
lab2 = 'IDL-' + strtrim(ilab2, 2)
draw_boxcorn, x0, y0, x0+siz, y0+siz*asp, /data
xyouts, x0+siz/2+.008, y0+siz*asp+.004, lab1, orientation=90, charsize=1.2*char_factor
xyouts, x0+siz/2+.008, y0-.08, lab2, orientation=90, charsize=1.2*char_factor
xyouts, x0+siz/2+.005, y0+siz/2-.005, lab3, orientation=90, charsize=0.7*char_factor
;
;
end
;------------------------------------------------------------------------------
pro ccd_map, config0
;
;
;
;code = 0	- horizontal binning - Flight OBS configuration
;code = 1	- horizontal binning - Ground 12bit to CSTS with BLS/Flight CAL mode
;code = 2	- horizontal binning - Ground 8 bit to CSTS with BLS
;code = 3	- horizontal binning - Flight OBS config - labeling OFR
;code = 4	- vertical binning
;code = 5	- pixel binning
;
if (!d.name eq 'X') then if (!d.window eq -1) then wdef, 0, 900, 750 else wshow
if (!d.name eq 'PS') then char_factor = .6 else char_factor = 1.0
;
if (n_elements(config0) eq 0) then config = 0 else config = config0
;qfre = -1 & qofr = -1
;qfre = -1 & qofr =  1
 qfre =  1 & qofr = -1000
if (config eq 3) then begin
    config = 0
    qfre = -1000.
    qofr = 1
end
;
!p.region = [0,0,1,1]
!p.position = [0,0,1,1]
!x.range = [0,1]
!y.range = [0,1]
;
if (config eq 4) then begin & ccd_map_vertical & return & end
if (config eq 5) then begin & ccd_map_pixels   & return & end
;
erase
plot, fltarr(2), fltarr(2), /nodata, xstyle=4, ystyle=4
;
g = .02
;
n = 6		& st = .95	& for i=0,n do oplot, st-[1,1]*i*g, [0,1], linestyle=1		& first = st
n = 12		& st = .7	& for i=0,n do oplot, st-[1,1]*i*g, [0,1], linestyle=1		& ccd0 = st-2*g
n = 12		& st = .05	& for i=0,n do oplot, st+[1,1]*i*g, [0,1], linestyle=1		& ccd1 = st+2*g
oplot, ccd0*[1,1], [0.7,.88], thick=2
oplot, ccd1*[1,1], [0.7,.88], thick=2
oplot, [ccd0, ccd1], [1,1]*0.7, thick=2
oplot, [ccd1, .95-2*g], [1,1]*.69, thick=3
oplot, [.85-2*g, .95-2*g], [.69+.015, .69], thick=3
oplot, [.85-2*g, .95-2*g], [.69-.015, .69], thick=3
xcir = .2*g*cos(findgen(20)/19*2*!pi)
ycir = .2*g*sin(findgen(20)/19*2*!pi)
;
for i=0,9 do xyouts, ccd0-(i*g+.007), .82, 'FRI-' + strtrim(1024-i, 2), orientation=90, charsize=1.2*char_factor
for i=0,9 do xyouts, ccd1+((i+1)*g-.007), .82, 'FRI-' + strtrim(i+1, 2), orientation=90, charsize=1.2*char_factor
;for i=0,9 do polyfill, ccd0-(i*g+0.5*g)+xcir, .92+ycir
for i=0,9 do polyfill, ccd0-(i*g+0.5*g)+xcir, .01+ycir
;for i=0,9 do polyfill, ccd1+(i*g+0.5*g)+xcir, .92+ycir
for i=0,9 do polyfill, ccd1+(i*g+0.5*g)+xcir, .01+ycir
;
for i=0,9 do xyouts, ccd0-(i*g+.007), .72, 'CCD-' + strtrim(i,2), orientation=90, charsize=1.2*char_factor
for i=0,9 do xyouts, ccd1+((i+1)*g-.007), .72, 'CCD-' + strtrim(1023-i,2), orientation=90, charsize=1.2*char_factor
for i=0,1 do xyouts, ccd1-(i*g+.007), .72, 'Overclock-' + strtrim(i+1,2), orientation=90, charsize=1.2*char_factor
if (config eq 1) then begin
    xyouts, .95-(1*g+.007), .72, 'CSTS/SXTE-U Word Buffering', orientation=90, charsize=1.2*char_factor
end else begin
    xyouts, .95-(0*g+.007), .72, 'CSTS Mis-Buffering', orientation=90, charsize=1.2*char_factor
    xyouts, .95-(1*g+.007), .72, 'Invalid (SXTE-U Word buffering)', orientation=90, charsize=1.2*char_factor
end
xyouts, .95-(2*g+.007), .72, 'BLS-0/Line Label', orientation=90, charsize=1.2*char_factor
for i=0,2 do xyouts, .95-((i+3)*g+.007), .72, 'BLS-' + strtrim(i+1,2), orientation=90, charsize=1.2*char_factor
for i=0,1 do xyouts, ccd0+((i+1)*g-.007), .72, 'BLS-' + strtrim(23-i,2), orientation=90, charsize=1.2*char_factor
;
gg = g*.90
;
tit2 = ' '
tit3 = ' '
case 1 of
    (config eq 0): begin
	tit1 = 'Yohkoh Flight Configuration - "OBS" Mode'

	qdo_command = 1
	cl = .58
	ccd_map_box_label, ccd0-(2*g), cl, gg, 0, 1023, command=qdo_command*4, fre=qfre*(1023), ofr=qofr*1023
	for i=1,8 do ccd_map_box_label, ccd0-(i+2)*g, cl, gg, i, 1023-i, command=qdo_command*4, fre=qfre*(1023-i), ofr=qofr*(1023-i)
	for i=0,10 do ccd_map_box_label, ccd1+(i-1)*g, cl, gg, 1023-i, i, command=qdo_command*4, fre=qfre*i, ofr=qofr*i
	;
	cl = .35
	ccd_map_box_label, ccd0-(2*g), cl, gg, 0, 511, command=qdo_command*2, fre=qfre*(1023), ofr=qofr*1023
	for i=1,4 do ccd_map_box_label, ccd0-(i*2+2)*g, cl, gg*2, i, 511-i, command=qdo_command*2, fre=qfre*((511-i)*2+1.5), ofr=qofr*((511-i)*2+1)
	for i=0,4 do ccd_map_box_label, ccd1+(i*2*g), cl, gg*2, 511-i, i, command=qdo_command*2, fre=qfre*(i*2+1.5), ofr=qofr*(i*2+1)
	;
	cl = .1
	ccd_map_box_label, ccd0-(2*g), cl, gg, 0, 255, command=qdo_command*1, fre=qfre*(1023), ofr=qofr*1023
	for i=1,2 do ccd_map_box_label, ccd0-(i*4+2)*g, cl, gg*4, i, 255-i, command=qdo_command*1, fre=qfre*((255-i)*4+4.5), ofr=qofr*((255-i)*4+3)
	for i=0,1 do ccd_map_box_label, ccd1+(i*4+2)*g, cl, gg*4, 255-i, i, command=qdo_command*1, fre=qfre*(i*4+4.5), ofr=qofr*(i*4+3)
    end
    else: begin
	case config of
	    1: begin
			tit1 = 'Ground Configuration - 12 Bit to CSTS with BLS'
			tit2 = 'Yohkoh Flight Configuration - "CAL" Mode'
			tit3 = '(MSFC)
			off = 1
		end
	    2: begin
			tit1 = 'Ground Configuration - 8 Bit to CSTS with BLS'
			tit3 = '(WSMR)
			off = 0
		end
	endcase
	;
	qdo_command = 0
	cl = .58
	for i=0,5 do ccd_map_box_label, first-(i+1)*g, cl, gg, i-off, i-off
	for i=-1,10 do ccd_map_box_label, ccd0-i*g, cl, gg, i+25-off, i+25-off
	;
	cl = .35
	for i=0,5 do ccd_map_box_label, first-(i+1)*g, cl, gg, i-off, i-off
	for i=-1,2 do ccd_map_box_label, ccd0-i*g, cl, gg, i+25-off, i+25-off
	for i=1,4 do ccd_map_box_label, ccd0-(i*2+2)*g, cl, gg*2, i+25+2-off, i+25+2-off
	;
	cl = .1
	for i=0,5 do ccd_map_box_label, first-(i+1)*g, cl, gg, i-off, i-off
	for i=-1,2 do ccd_map_box_label, ccd0-i*g, cl, gg, i+25-off, i+25-off
	for i=1,2 do ccd_map_box_label, ccd0-(i*4+2)*g, cl, gg*4, i+25+2-off, i+25+2-off
    end
endcase
;
xyouts, .02, .95, tit1, size=3*char_factor, charthick=2
xyouts, .02, .90, tit2, size=3*char_factor, charthick=2
xyouts, .3, .85, tit3, size=3*char_factor, charthick=2
end
;------------------------------------------------------------------------------
pro ccd_map2_label, x0, y0, siz, ilab1, ilab2
;
;x0,y0 is lower left corner
;
if (ilab1 lt 0) then return
;
asp = !d.x_size/float(!d.y_size)
if (!d.name eq 'PS') then char_factor = .6 else char_factor = 1.0
;
lab1 = 'IDL-' + strtrim(ilab1, 2)
lab2 = ' (FRI-' + strtrim( string(ilab2, format='(f9.1)'), 2) + ')'
;
draw_boxcorn, x0, y0, x0+siz/asp, y0+siz, /data
xyouts, x0+siz+.008, y0+siz/2-.004, lab1+lab2, charsize=1.2*char_factor
;
;
end
;------------------------------------------------------------------------------
pro ccd_map_vertical, dummy
;
if (!d.name eq 'PS') then char_factor = .6 else char_factor = 1.0
;
erase
plot, fltarr(2), fltarr(2), /nodata, xstyle=4, ystyle=4
;
g = .02
;
n = 6		& st = .95	& first = st
n = 12		& st = .80	& ccd0 = st-2*g
n = 12		& st = .05	& ccd1 = st+2*g
;
n = 35		& st = .1	& for i=0,n do oplot, [ccd0, ccd1], st+[1,1]*i*g, linestyle=1
oplot, ccd0*[1,1], [0.1,.88], thick=2
oplot, ccd1*[1,1], [0.1,.88], thick=2
oplot, [ccd0, ccd1], [1,1]*0.1, thick=2
oplot, [ccd1, .95-2*g], [1,1]*.09, thick=3
oplot, [.85-2*g, .95-2*g], [.09+.015, .09], thick=3
oplot, [.85-2*g, .95-2*g], [.09-.015, .09], thick=3
xcir = .2*g*cos(findgen(20)/19*2*!pi)
ycir = .2*g*sin(findgen(20)/19*2*!pi)
;
gg = g*.90
;
tit2 = ' '
tit3 = ' '
if (n_elements(config) eq 0) then config = 0
case 1 of
    (config eq 0): begin
	tit1 = 'Yohkoh Flight Configuration'

	cl = .1
	for i=0,35 do ccd_map2_label, cl, i*g+.1, gg, i, i

	cl = .3
	for i=0,17 do ccd_map2_label, cl, i*2*g+.1, gg*2, i, i*2+.5

	cl = .5
	for i=0,8 do ccd_map2_label, cl, i*4*g+.1, gg*4, i, i*4+1.5
    end
endcase
;
xyouts, .02, .95, tit1, size=3*char_factor, charthick=2
xyouts, .02, .90, tit2, size=3*char_factor, charthick=2
xyouts, .3, .85, tit3, size=3*char_factor, charthick=2
end
;------------------------------------------------------------------------------
pro ccd_map3_label, x0, y0, siz, ilab1, ilab2
;
;x0,y0 is lower left corner
;
;;if (ilab1 lt 0) then return
;
asp = !d.x_size/float(!d.y_size)
if (!d.name eq 'PS') then char_factor = .6 else char_factor = 1.0
;
;;lab1 = 'IDL-' + strtrim(ilab1, 2)
;;lab2 = ' (FRI-' + strtrim( string(ilab2, format='(f9.1)'), 2) + ')'
;
draw_boxcorn, x0, y0, x0+siz, y0+siz*asp, /data
;;xyouts, x0+siz+.008, y0+siz/2-.004, lab1+lab2, charsize=1.2*char_factor
;
;
end
;------------------------------------------------------------------------------
pro ccd_map_pixels, dummy
;
if (!d.name eq 'PS') then char_factor = .6 else char_factor = 1.0
;
erase
plot, fltarr(2), fltarr(2), /nodata, xstyle=4, ystyle=4
;
g = .04
asp = !d.x_size/float(!d.y_size)
;
n = 16		& st = .1	& for i=0,n do oplot, st+[1,1]*g*i, st+[0,n*g*asp], linestyle=1
n = 16		& st = .1	& for i=0,n do oplot, st+[0,n*g], st+[1,1]*g*i*asp, linestyle=1
for i=0,n-1 do xyouts, st+g*i+0.5*g, .08, strtrim(i,2), alignment=0.5

xcir = .04*g*cos(findgen(20)/19*2*!pi)
ycir = .04*g*sin(findgen(20)/19*2*!pi)
for i=0,n-1 do for j=0,n-1 do polyfill, st+(i*g+0.5*g)+xcir, st+((j*g+0.5*g)+ycir)*asp
;
ccd_map3_label, st+1*g, st, g*2	& polyfill, st+2*g+xcir*2, st+(g+ycir*2)*asp
ccd_map3_label, st+5*g, st, g*4	& polyfill, st+7*g+xcir*4, st+(2*g+ycir*4)*asp
;
end

