PRO stabil_q,llx,lly,pore,scam
;
;procedure para corregir una serie de imagenes tomadas en La Palma, de
;los shift de la imagen producidos por defectos de tracking.  
;Each image is aligned with respect to the frame "refima". (This is
;the difference regarding 'stabil_p.pro' where the shifts are cumulative
;and with respect to the 1st image)
;
;Las entradas se dan mediante editor:  numero de la imagen inicial,
;numero de la imagen final, dimension de las imagenes, numero de la imagen
;de referencia, delimitacion de la caja para correlar y paths para lectura
;y deposito de imagenes.
;
;
;Este programa es una version del gr.pro solo para shift.
;
;Editado el 12 de Junio de 1995. Introducida la correccion opcional de trend
;en la caja de correlacion el 22 de Febrero de 1994.
;
;Editado por Michal 20 Nov 95 para alinear los subfields de poros:
;
;    llx,lly = lower-left corner of stabilized subfield
;    pore =	    pore 'p5' or 'p6' (STRING!!)
;    scam =	    camera 'a' or 'b' (STRING!!)


;---------------------------------------------------------------------------

; SERIES 23 OF 30Jun95 - REALIGNMENT OF SUBFIELDS P5 and P6

;definicion de parametros de entrada

	ninit=1             ;numero de la imagen inicial de la subserie.
	nfin=291            ;numero de la imagen final de la subserie. 

	n=224      ;dimension x of source image
	m=224      ;dimension y       "     "

	wx=192	    ;dimension x of stabilized subfield
	wy=192	    ;dimension y        "         "
        
	;delimitacion de la caja para correlar con ALIGN_CROSS. Dimensiones
	;de la caja = mejor potencias de 2

	refima=149	;reference frame number

	itrend=0  ;correccion opcional de trend en caja de correlacion= 0 , 1

	n1=llx+32-17     ;coordenada x menor de la caja
	n2=llx+32+127-17 ;coordenada x mayor de la caja
	m1=lly+32+8      ;coordenada y menor de la caja
	m2=lly+32+127+8  ;coordenada y mayor de la caja
	nn=80        ;dimension x de la subcaja a desplazar en la correlacion
	mm=80        ;dimension y de la subcaja a desplazar en la correlacion

;definicion de los paths

	st1a=string('im'+scam+'/'+scam+'_'+pore+'.') ;prefijo imagenes entrada
	st1b=string('im'+scam+'/'+scam+'x_'+pore+'.') ;prefijo imagenes salida

;----------------------------------------------------------------------------

;prepara arrays para depositar los shifts (x,y),
;asi como las matrices imagen.

	nnn=nfin-ninit+1
	x = fltarr(nnn)
	y = fltarr(nnn)
	iimage = intarr(n,m,/nozero)


;lee la imagen de referencia


	dcn=strtrim(refima,2)
	print,'Leyendo la imagen de referencia:'
	print,st1a+dcn
	openr,unit,st1a+dcn,/get_lun
	readu,unit,iimage
	free_lun,unit
	ima=float(iimage)
	ima=ima(n1:n2,m1:m2)
	if itrend eq 1 then ima=ima-sfit(ima,2);corrige de trend
	ref=ima


;ciclo de lectura de imagenes sucesivas, correccion de shift
;y deposito de la imagen resultante

	FOR i = ninit,nfin DO BEGIN
		dcn=strtrim(i,2)
		print,'Leyendo nueva imagen:'
		print,st1a+dcn
		openr,unit,st1a+dcn,/get_lun
		readu,unit,iimage
		free_lun,unit
		image=float(iimage)
		ii=i-ninit
		ima=image(n1:n2,m1:m2)
		if itrend eq 1 then ima=ima-sfit(ima,2);corrige de trend	
		dxy = ALIGN_CROSS(ref,ima,nn,mm)   ;proced.lib.OSLO. Uti-
			;liza correlacion por Fourier. Da como resultado
			;el desplazamiento que hay que darle a 'image'
			;para que se superponga a 'ref'.
		x(ii) = dxy(0)  ;shift en x
		y(ii) = dxy(1)  ;shift en y
		;corrige de shift
		image = SHIFT(image,nint(x(ii)),nint(y(ii)));rutina IDL. Solo
			;trabaja con shifts = numero entero de pixels (o sea
			;que no interpola). Convenio de signos: 
			;desplaz.dcha = +, desplaz.izq. = -.
		;deposita el resultado
		print,' Escribiendo la imagen resultante'
		print,st1b+dcn
		openw,unit,st1b+dcn,/get_lun

		writeu,unit,nint(image(llx:llx+wx-1,lly:lly+wy-1)) ;subfield

		free_lun,unit

	ENDFOR
	SAVE,x,y,filename='gr_data'+pore+scam+'b'

END