pro plt_gcross, nx, ny, npos, nrep, x, y, tit0, progver, ytit0, ytit1, xrange=xrange, yrange=yrange, offset=offset
;
;
;
if (n_elements(offset) eq 0) then offset = 0
if (n_elements(ytit1) eq 0) then ytit1 = ''
;
if (n_elements(xrange) eq 0) then begin
    xrange = [min(x), max(x)]
    yrange = [min(y), max(y)]
end
;
avgx = fltarr(npos)
avgy = fltarr(npos)
!p.multi = [0,nx,ny]
for i=0,npos-1 do begin
    ss = indgen(nrep)*npos+i + offset
    plot, x(ss), y(ss), /ynoz, psym=-1, xrange=xrange, yrange=yrange, tit=ytit0 + ' ' +strtrim(i,2) + ' ' + ytit1
    avgx(i) = total(x(ss))/nrep
    avgy(i) = total(y(ss))/nrep
end
;
!p.multi(0) = !p.multi(0)-1
plot, avgx, avgy, /nodata, tit = 'All ' + ytit0 + ' ' + ytit1, xrange=xrange, yrange=yrange
for i=0,npos-1 do xyouts, avgx(i), avgy(i), strtrim(i,2)
;
plottime, .015, .1, tit0, 0.5, 90
plottime & plottime,0,0,progver & pause
;
end
;------------------------------------------------------------------------------
pro plot_gcross, mat, tit0, nrep, smoo, xytrend=xytrend, qscreen=qscreen, $
		mdiprot=mdiprot, mdimrot=mdimrot, progver=progver2, plot_list=plot_list
;+
;NAME:
;	plot_gcross
;PURPOSE:
;	To plot the grid cross data - time series and location variation
;SAMPLE CALLING SEQUENCE:
;	plot_gcross, mat, tit0
;INPUT:
;	mat	- The matrix with the FIT_GCROSS output
;	tit0	- The title to display
;	smoo	- The smoothing to display
;OPTIONAL KEYWORD INPUT:
;	xytrend	- If set, Show an additional plot with the X position plotted
;		  versus image number, and Y pos versus image number
;	qscreen	- If set, screen (how?) before choosing the min/max
;	plot_list - If set, only plot the plots listed in that string
;		    String items: rawp, smoop, diff, m1, m2, pol
;HISTORY:
;	Written 26-Apr-94 by M.Morrison
;V3.1	27-Apr-94 (MDM) - Modified to plot the residuals from the RAW-SMOOTH
;			  separated by PAW and M Tuning
;			- Plot the average of all repeats all on one plot
;V3.2	 3-Jun-94 (MDM) - Added capability to only do single plot
;			  (so that we can do guide plots)
;			  (added PLOT_LIST optional keyword input)
;-
;
progver = 'PLOT_GCROSS  Ver 3.1  '
if (keyword_set(progver2)) then progver = progver2 + ' / ' + progver
;
qrawp  = 1	;raw position
qsmoop = 1	;smoothed position
qdiff  = 1	;difference of position
qm1    = 1	;m1 positions
qm2    = 1	;m2 positions
qpol   = 1	;polarizer positions
if (keyword_set(plot_list)) then begin
    qrawp  = 0
    qsmoop = 0
    qdiff  = 0
    qm1    = 0
    qm2    = 0
    qpol   = 0
    if (strpos(plot_list, 'rawp')  ne -1) then qrawp  = 1
    if (strpos(plot_list, 'smoop') ne -1) then qsmoop = 1
    if (strpos(plot_list, 'diff')  ne -1) then qdiff  = 1
    if (strpos(plot_list, 'm1')    ne -1) then qm1    = 1
    if (strpos(plot_list, 'm2')    ne -1) then qm2    = 1
    if (strpos(plot_list, 'pol')   ne -1) then qpol   = 1
end    
;
x = mat(3,*)
y = mat(4,*)
;
if (keyword_set(xytrend)) then begin
    !p.multi=[0,1,2]
    for dir=0,1 do begin		;dir=0 ==> plot x, dir=1 ==> plot y
	if (dir eq 0) then yy = x else yy = y
	if (dir eq 0) then ytit = 'X Position' else ytit = 'Y position'
	ss = where(yy ne 0)
	if (keyword_set(qscreen)) then ss = where(yy gt 0.8*total(yy(ss))/n_elements(ss))
	yrange = [min(yy(ss)), max(yy(ss))]
	plot, yy, /ynozer, xtit='Image number', ytit=ytit, psym=-2, yrange=yrange, tit=tit0
    end
    plottime & plottime,0,0,progver & pause
end
;
ss = where(x ne 0)
xrange = [min(x(where(x ne 0))), max(x(where(x ne 0)))]
yrange = [min(y(where(y ne 0))), max(y(where(y ne 0)))]
if (keyword_set(qscreen)) then begin
    ss = where(x ne 0)	& ss = where(x gt 0.8*total(x(ss))/n_elements(ss))	& xrange=[min(x(ss)), max(x(ss))]
    ss = where(y ne 0)	& ss = where(y gt 0.8*total(y(ss))/n_elements(ss))	& yrange=[min(y(ss)), max(y(ss))]
end
;
if (qrawp) then begin
    !p.multi = 0
    plot, x(ss), y(ss), /ynoz, psym=-2, xrange=xrange, yrange=yrange, $
                    tit='Grid Pixel Location (' + tit0 + ')', xtit='X Pos', ytit='Y Pos'
    plottime & plottime,0,0,progver & pause
end
;
if (keyword_set(smoo)) then begin
    if (qsmoop) then begin
	ppp = ' Pos (smooth ' + strtrim(smoo,2) + ')'
	plot, smooth(x(ss), smoo), smooth(y(ss), smoo), /ynoz, psym=-2, xrange=xrange, yrange=yrange, $
                tit='Grid Pixel Location (' + tit0 + ')', xtit='X'+ppp, ytit='Y'+ppp
	plottime & plottime,0,0,progver & pause
    end
    ;
    x2 = x(ss)-smooth(x(ss), smoo)
    y2 = y(ss)-smooth(y(ss), smoo)
    if (qdiff) then begin
	ppp = ' Pos RAW - SMOOOTH ' + strtrim(smoo,2)
	plot, x2, y2, /ynoz, psym=-2, $
                tit='Grid Pixel Location (' + tit0 + ')', xtit='X'+ppp, ytit='Y'+ppp
	plottime & plottime,0,0,progver & pause
    end
end
;
!p.charsize = 1.5
;------------------------- MDIMROT CASE -------------------------
;
if (keyword_set(mdimrot)) then begin
    if (keyword_set(smoo)) then begin
	if (qm1) then plt_gcross, 4, 3, 10, nrep, x2, y2, tit0, progver, 'M1 Tuning ', '(RAW-SMOO '+strtrim(smoo,2) + ')'
	if (qm2) then plt_gcross, 4, 3, 10, nrep, x2, y2, tit0, progver, 'M2 Tuning ', '(RAW-SMOO '+strtrim(smoo,2) + ')', offset=nrep*10
    end else begin
	if (qm1) then plt_gcross, 4, 3, 10, nrep, x, y, tit0, progver, 'M1 Tuning ', xrange=xrange, yrange=yrange
	if (qm2) then plt_gcross, 4, 3, 10, nrep, x, y, tit0, progver, 'M2 Tuning ', xrange=xrange, yrange=yrange, offset=nrep*10
    end
end

;------------------------- MDIPROT CASE -------------------------
;
if (keyword_set(mdiprot)) then begin
    if (keyword_set(smoo)) then begin
	if (qpol) then plt_gcross, 3, 2, 4, nrep, x2, y2, tit0, progver, 'Polarization Tuning ', '(RAW-SMOO '+strtrim(smoo,2) + ')'
    end else begin
	if (qpol) then plt_gcross, 3, 2, 4, nrep, x, y, tit0, progver, 'Polarization Tuning ', xrange=xrange, yrange=yrange
    end
end
;
!p.charsize = 0
!p.multi = 0
end
