	function s_align,iew,Date,time_sec,Receiver,Dt,Dir, $
	fast=fast,single=single,interpolate=interpolate, $
	start_time=start_time,SUN=SUN,Channel=Channel, $
	polarization=polarization,Current_Channel=Current_Channel, $
	Order=Order, log_only=log_only, shift_bounds=shift_bounds

if n_elements(Channel) le 0 then amax=max(iew(*,0),Channel)

D=4.9D0	&	C=2.997925D8	&	Fi=51.7575D0*!DPi/180

Sum_chan=[176,192]

WIDGET_CONTROL,/HOUR

N=Sum_chan(Receiver)

N_scans=(size(iew))(2)

if n_elements(start_time) le 0 then $
	start_time=time_sec(0)+Dt*(N_scans-1)/2.

	suneph,Date,smh(time_sec(0)+Dt*(N_scans-1)/2.,ms=3),SUN
SUNs=SUN
type=size(start_time)
type=type(n_elements(type)-2)
	if type eq 7 then $
reference_time=start_time else reference_time=smh(start_time,ms=3)
	suneph,Date,reference_time,SUNs

INT_ORD,dir,Receiver,SUN,P,Nord,Ord0,Chan
INT_ORD,dir,Receiver,SUNs,Ps,Nords,Ords,Chans

Ord=ORD_RECOGNIZE(Channel,Nords,Ords,Chans)
;print,Ord

Pstart=acos(Ord*C/(chanfreq(Channel,Receiver)*D) > (-1) < 1)

P_cur=(Pstart-Ps(1))+P(1)

Chan_cur=p_to_chan(P_cur, Dir,Receiver, SUN=SUN, Orde=Ord)

Chan_cur_save=Chan_cur

Chan_min=min(abs(Chan_cur-Sum_chan(Receiver)/2), imin)

Chan_cur=Chan_cur(imin)

Ord_cur=Ord(where(Chan_cur eq Chan_cur_save))

if n_elements(Ord_cur) eq 1 then Ord_cur=Ord_cur(0)

Chan_ref=Chan(*,where(Ord_cur eq Ord0))

C_shift_start=Chan_cur-Channel

Order=Ord_cur
Current_channel=Chan_cur

factor=(Chan_ref(2)-Chan_ref(0))/(Chans(2,0)-Chans(0,0))
factor=float(1.+factor)/2.
;factor=1.
Fmin_max=chanfreq([1,([180,192])(Receiver)],Receiver)
	Df0=Fmin_max(1)-Fmin_max(0)
	F0=(Fmin_max(1)+Fmin_max(0))/2.
C_shift0=F0/(Df0/(N-1))*SUN.W0


	CASE dir OF

0:	C_shift=C_shift0/tan(SUN.H)* $
		(dindgen(N_scans)-0.5*(N_scans-1))*dt-C_shift_start

1:	C_shift=-C_shift0*sin(SUN.H)/(cos(SUN.H)-tan(SUN.Decl)/tan(Fi))* $
		(dindgen(N_scans)-0.5*(N_scans-1))*dt-C_shift_start

ELSE:		message,'Incorrect input of the interferometer'

	ENDCASE

shift_bounds=[min(C_shift),max(C_shift)]

		CASE 1 OF

keyword_set(log_only):	return,0

keyword_set(fast):	begin
	scan=iew
	for i=0,N_scans-1 do scan(*,i)=shift(scan(*,i), c_shift(i))
			end

keyword_set(interpolate):	begin
	scan=iew

if keyword_set(polarization) then amin=0 else amin=-32000

Argument=float(findgen(N+2)*factor+(N+1)*(1-factor)/2.)+(Channel-(N+1)/2.)*(1-factor)

for i=0,N_scans-1 do begin
	scan(*,i)=(interpolate([amin,scan(*,i),amin], $
		Argument-c_shift(i)))(1:N)
ind=c_shift(i)*(c_shift(i) ge 0)+(N-1+rough(c_shift(i)))*(c_shift(i) lt 0)
scan([ind,ind+1]<(N-1),i)=amin
;if c_shift ge 0 then scan(c_shift(i),i)=amin else scan(N-1+c_shift(i),i)=amin
	endfor

			end

keyword_set(single):	begin

s=10
shift_min=min(c_shift,max=shift_max)

scan=fltarr((N-1+abs(shift_min-1)+(shift_max+1))*s+1)
number=intarr((N-1+abs(shift_min-1)+(shift_max+1))*s+1)
register=findgen((N-1+abs(shift_min-1)+(shift_max+1))*s+1)
register0=findgen(N)

	for j=0,n_scans-1 do begin
channels=float((C_shift(j)-shift_min)*s)+register
i=long(channels(register0*s)+0.5)
scan(i)=scan(i)+iew(*,j)
number(i)=number(i)+1
	endfor

index=where(number ne 0)

scan(index)=scan(index)/number(index)

	end

ELSE:
		ENDCASE


return,scan
end