pro aqe_reduce,odd=odd,noplot=noplot,sec=sec

; there are no inputs - the countrates as a function of (filter,temp) are 
; written to a file.
; temps and filters are hardcoded. The optional flag odd can be used with SB304
; devices to get the countrates from the odd rather then the even rows, although they are
; very similar. Default is even. Rockwell devices use all rows.

temps=[423,400,375,350,325]
ntt=n_elements(temps)

; get the device type and part number from the pathname
ff=file_expand_path('*_J+PK50-2_*.fit*')
index=strpos(ff,'idtl/data')
dev=strmid(ff,index+10)
dev=strmid(dev,0,strpos(dev,'/'))

; to select nominal image piece for each device
; SB304 can use odd or even or both rows, while rockwell devices will use all rows

ff=findfile('*J+PK50-2_'+strcompress(string(temps(0)),/rem)+'_On*.fits')
dettemp=fix(float(getkeyval(ff(0),'DETTEMP'))+0.5)
startcol=fix(getkeyval(ff(0),'STARTCOL'))
startrow=fix(getkeyval(ff(0),'STARTROW'))
fits_read,ff(0),im
sz=size(im)
if strmid(dev,0,2) eq 'SB' then begin
	goodx=findgen(sz(1))
	; even rows
	if not keyword_set(odd) then goody=findgen(sz(2)/2)*2.+1
	; odd rows
	if keyword_set(odd) then goody=findgen(sz(2)/2)*2.+0
endif
if strmid(dev,0,1) eq 'H' then begin
	goodx=findgen(sz(1))
	goody=findgen(sz(2))
endif


; image section for computing statistics (use a J-band image to get the size)
ff=findfile('*J+PK50-2_'+strcompress(string(temps(0)),/rem)+'_On*.fits')
fits_read,ff(0),im
im=im(goodx,goody,*)
sz=size(im)
if not keyword_set(sec) then begin
	sec=[4,sz(1)-1-3,4,sz(2)-1-3]
	realsec=sec
endif else begin
	realsec=sec
	if strmid(dev,0,1) eq 'H' then sec=sec
	; divide input y section by 2 for SB304 because of odd even separation
	if strmid(dev,0,2) eq 'SB' then sec(2:3)=sec(2:3)/2.
endelse

yy=dblarr(5,ntt)

; this is the main Micron temp loop
for tt=0,ntt-1 do begin

	railflag=0

	print,'**** Working on Micron Temp: '+strcompress(string(temps(tt)),/rem)+' K ****'
	print

		print,'J *************'
		f1=findfile('*J+PK50-2_'+strcompress(string(temps(tt)),/rem)+'_On*.fits')
		f0=findfile('*J+PK50-2_'+strcompress(string(temps(tt)),/rem)+'_Off*.fits')
		n1=n_elements(f1)
		n0=n_elements(f0)
		fits_read,f1(0),t
		t=t(goodx,goody,*)
		sz=size(t)
		j_on=fltarr(sz(1),sz(2))
		j_off=fltarr(sz(1),sz(2))
		im1=fltarr(sz(1),sz(2),n1)
		im0=fltarr(sz(1),sz(2),n0)
		
		j_exptime=getkeyval(f1(0),'EXP_TIME')
		
		print,'Reading images...'
		for i=0,n1-1 do begin
			print,i+1
			fits_read,f1(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im1(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		for i=0,n0-1 do begin
			print,i+1
			fits_read,f0(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im0(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		
		print,'Making medians...'
		for i=0,sz(1)-1 do for j=0,sz(2)-1 do begin
			j_on(i,j)=median(im1(i,j,*))
			j_off(i,j)=median(im0(i,j,*))
		endfor
		
		j_dif=j_on-j_off
		; if any of the input reads was railed, then set the median flux to -1
		if median(j_on) eq -1 or median(j_off) eq -1 then j_dif(*) = (-1)
		print,median(j_dif(sec(0):sec(1),sec(2):sec(3)))/j_exptime,'DN/s'
		
		
		
		print,'H *************'
		f1=findfile('*H+PK50-2_'+strcompress(string(temps(tt)),/rem)+'_On*.fits')
		f0=findfile('*H+PK50-2_'+strcompress(string(temps(tt)),/rem)+'_Off*.fits')
		n1=n_elements(f1)
		n0=n_elements(f0)
		fits_read,f1(0),t
		t=t(goodx,goody,*)
		sz=size(t)
		h_on=fltarr(sz(1),sz(2))
		h_off=fltarr(sz(1),sz(2))
		im1=fltarr(sz(1),sz(2),n1)
		im0=fltarr(sz(1),sz(2),n0)
		
		h_exptime=getkeyval(f1(0),'EXP_TIME')
		
		print,'Reading images...'
		for i=0,n1-1 do begin
			print,i+1
			fits_read,f1(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im1(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		for i=0,n0-1 do begin
			print,i+1
			fits_read,f0(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im0(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		
		print,'Making medians...'
		for i=0,sz(1)-1 do for j=0,sz(2)-1 do begin
			h_on(i,j)=median(im1(i,j,*))
			h_off(i,j)=median(im0(i,j,*))
		endfor
		
		h_dif=h_on-h_off
		; if any of the input reads was railed, then set the median flux to -1
		if median(h_on) eq -1 or median(h_off) eq -1 then h_dif(*) = (-1)
		print,median(h_dif(sec(0):sec(1),sec(2):sec(3)))/h_exptime,'DN/s'
		
		
		
		
		
		print,'K *************'
		f1=findfile('*K+PK50-2*_'+strcompress(string(temps(tt)),/rem)+'_On*.fits')
		f0=findfile('*K+PK50-2*_'+strcompress(string(temps(tt)),/rem)+'_Off*.fits')
		n1=n_elements(f1)
		n0=n_elements(f0)
		fits_read,f1(0),t
		t=t(goodx,goody,*)
		sz=size(t)
		k_on=fltarr(sz(1),sz(2))
		k_off=fltarr(sz(1),sz(2))
		im1=fltarr(sz(1),sz(2),n1)
		im0=fltarr(sz(1),sz(2),n0)
		
		k_exptime=getkeyval(f1(0),'EXP_TIME')
		
		print,'Reading images...'
		for i=0,n1-1 do begin
			print,i+1
			fits_read,f1(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im1(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		for i=0,n0-1 do begin
			print,i+1
			fits_read,f0(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im0(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		
		print,'Making medians...'
		for i=0,sz(1)-1 do for j=0,sz(2)-1 do begin
			k_on(i,j)=median(im1(i,j,*))
			k_off(i,j)=median(im0(i,j,*))
		endfor
		
		k_dif=k_on-k_off
		; if any of the input reads was railed, then set the median flux to -1
		if median(k_on) eq -1 or median(k_off) eq -1 then k_dif(*) = (-1)
		print,median(k_dif(sec(0):sec(1),sec(2):sec(3)))/k_exptime,'DN/s'
		
		
		print,'L *************'
		f1=findfile('*L*_'+strcompress(string(temps(tt)),/rem)+'_On*.fits')
		f0=findfile('*L*_'+strcompress(string(temps(tt)),/rem)+'_Off*.fits')
		n1=n_elements(f1)
		n0=n_elements(f0)
		fits_read,f1(0),t
		t=t(goodx,goody,*)
		sz=size(t)
		l_on=fltarr(sz(1),sz(2))
		l_off=fltarr(sz(1),sz(2))
		im1=fltarr(sz(1),sz(2),n1)
		im0=fltarr(sz(1),sz(2),n0)
		
		l_exptime=getkeyval(f1(0),'EXP_TIME')
		
		print,'Reading images...'
		for i=0,n1-1 do begin
			print,i+1
			fits_read,f1(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im1(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		for i=0,n0-1 do begin
			print,i+1
			fits_read,f0(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im0(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im0(*,*,i) = (-1)
			railflag=0
		endfor
		
		print,'Making medians...'
		for i=0,sz(1)-1 do for j=0,sz(2)-1 do begin
			l_on(i,j)=median(im1(i,j,*))
			l_off(i,j)=median(im0(i,j,*))
		endfor
		
		l_dif=l_on-l_off
		; if any of the input reads was railed, then set the median flux to -1
		if median(l_on) eq -1 or median(l_off) eq -1 then l_dif(*) = (-1)
		print,median(l_dif(sec(0):sec(1),sec(2):sec(3)))/l_exptime,'DN/s'
		
		
		
		
		print,'M *************'
		f1=findfile('*M*_'+strcompress(string(temps(tt)),/rem)+'_On*.fits')
		f0=findfile('*M*_'+strcompress(string(temps(tt)),/rem)+'_Off*.fits')
		n1=n_elements(f1)
		n0=n_elements(f0)
		fits_read,f1(0),t
		t=t(goodx,goody,*)
		sz=size(t)
		m_on=fltarr(sz(1),sz(2))
		m_off=fltarr(sz(1),sz(2))
		im1=fltarr(sz(1),sz(2),n1)
		im0=fltarr(sz(1),sz(2),n0)
		
		m_exptime=getkeyval(f1(0),'EXP_TIME')
		
		print,'Reading images...'
		for i=0,n1-1 do begin
			print,i+1
			fits_read,f1(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im1(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		for i=0,n0-1 do begin
			print,i+1
			fits_read,f0(i),t
			t=t(goodx,goody,*)
			if median(t(*,*,0)) gt 32700. or median(t(*,*,0)) lt -32700. then begin
				print,'0th read RAILED'
				railflag=1
			endif
			if median(t(*,*,1)) gt 32700. or median(t(*,*,1)) lt -32700. then begin
				print,'1st read RAILED'
				railflag=1
			endif
			im0(*,*,i)=t(*,*,1)-float(t(*,*,0))
			if railflag eq 1 then im1(*,*,i) = (-1)
			railflag=0
		endfor
		
		print,'Making medians...'
		for i=0,sz(1)-1 do for j=0,sz(2)-1 do begin
			m_on(i,j)=median(im1(i,j,*))
			m_off(i,j)=median(im0(i,j,*))
		endfor
		
		m_dif=m_on-m_off
		; if any of the input reads was railed, then set the median flux to -1
		if median(m_on) eq -1 or median(m_off) eq -1 then m_dif(*) = (-1)
		print,median(m_dif(sec(0):sec(1),sec(2):sec(3)))/m_exptime,'DN/s'
		
		
		
		print
		
		xx=[1.1,1.6,2.2,3.2,4.5]
		yy(*,tt)=[median(j_dif(sec(0):sec(1),sec(2):sec(3)))/j_exptime,median(h_dif(sec(0):sec(1),sec(2):sec(3)))/h_exptime,median(k_dif(sec(0):sec(1),sec(2):sec(3)))/k_exptime,median(l_dif(sec(0):sec(1),sec(2):sec(3)))/l_exptime,median(m_dif(sec(0):sec(1),sec(2):sec(3)))/m_exptime]
		ym=[median(j_dif(sec(0):sec(1),sec(2):sec(3))),median(h_dif(sec(0):sec(1),sec(2):sec(3))),median(k_dif(sec(0):sec(1),sec(2):sec(3))),median(l_dif(sec(0):sec(1),sec(2):sec(3))),median(m_dif(sec(0):sec(1),sec(2):sec(3)))]
	
		; check for medians of (-1), which means one or more of the reads was railed
		yytt=yy(*,tt)
		uu=where(ym eq -1)
		if uu(0) ne -1 then yytt(uu)=(-1)
		yy(*,tt)=yytt
 
		if not keyword_set(noplot) then plot,xx,yy(*,tt),/ylog
		
		print,yy(*,tt)


; this is the end of the main micron temp loop
endfor

; now write out the reults

realsec(0:1)=realsec(0:1)+(startcol-1)
realsec(2:3)=realsec(2:3)+(startrow-1)
stsec=strcompress(string(realsec),/rem)
openw,1,'aqe_data.txt'
printf,1
printf,1,'          '+dev+' Observed Micron Blackbody Countrates (ADU/s)'
printf,1,'          Detector temp: '+strcompress(string(dettemp),/rem)+'K'
if strmid(dev,0,2) ne 'SB' then printf,1,'          Image section: ['+stsec(0)+':'+stsec(1)+','+stsec(2)+':'+stsec(3)+']'
if strmid(dev,0,2) eq 'SB' and not keyword_set(odd) then printf,1,'          Image section: ['+stsec(0)+':'+stsec(1)+','+stsec(2)+':'+stsec(3)+'], even rows only'
if strmid(dev,0,2) eq 'SB' and keyword_set(odd) then printf,1,'          Image section: ['+stsec(0)+':'+stsec(1)+','+stsec(2)+':'+stsec(3)+'], odd rows only'
printf,1
printf,1,'       BB Temp           J               H               K               L               M'
printf,1,'     -----------------------------------------------------------------------------------------'
for i=0,4 do printf,1,format='$(f14.2,2x,f14.2,2x,f14.2,2x,f14.2,2x,f14.2,2x,f14.2)',temps(i),yy(*,i)
close,1

end
