PRO RH_MALC_IM_1D, ident, visib, i_sys_lin,   $	; entree
		   l_th,	image		; sortie

; Creation le 9 mars 99 a partir de RH_MALC_IM_2D.PRO .

; Calcule lobe theorique et image 1D a partir des visibilites 1D centrees en
;   milieu de champ fournies par fit_tf_1d. Utilise seulement pour l'autocali-
;   bration.

; Notations: 
;  np		dimension de l'image 1D, fixee dans fit_tf_1d (usuel np=128).
;  visib	complexarr(np). Visibilite 1D centree en milieu de tableau 
;		  fournie par fit_tf_1d. Les visibilites EW sont lacunaires: 
;		  harm pairs avec E1, NS0_ns) et impairs (avec E0). 
;  v_l_th	visibilite du lobe theorique (1 partout).
;  freq		frequence (MHz). Ne sert que pour mise au point (flux du Cygne)
;  image	image brute (np*np).
;  l_th		lobe theorique.

    taille = size(visib)
    np = taille(1)
    v_l_th  = [0, replicate(1, np-1)]			; visib lobe theorique
							;   sans comp continue.

; Definition de la chaine de reconnaissance des differents cas
    if (ident eq 1) then begin				; harm EW pairs 2 a 32.
	ch_id = 'harm EW de E1'
    endif
    if (ident eq 2) then begin				; harm EW pairs 2 a 32.
	ch_id = 'harm EW de E0'
    endif
    if (ident eq 3) then begin				; harm EW pairs -8 a 8.
	ch_id = 'harm EW de NS0_ns'
    endif
    if (ident eq 4) then begin				; harm NS avec NS0_ew.
	ch_id = 'harm NS de NS0_ew'
    endif
    if (ident eq 5) then begin				; harm NS avec NS0_ns.
	ch_id = 'harm NS de NS0_ns'
    endif
    if (ident eq 6) then begin				; harm NS avec NS8.
	ch_id = 'harm NS de NS8'
    endif

; Reconstitution de la composante continue d'image et de lobe theorique par
	; extrapolation parabolique des bas harm. Dans le cas de l'EW
;  Extrapolation d'ordre 0 (en EW les visib impairs sont nuls hors axe).
    if ((ident eq 1) or (ident eq 3)) then begin	; harm EW avec E1 et 
							;  NS0_ns.
	c_c_0 =  (abs(visib(np/2-2)) + abs(visib(np/2+2))) / 2
    endif
    if (ident eq 2) then begin	; harm EW avec E0.
	c_c_0 =  (abs(visib(np/2-1)) + abs(visib(np/2+1))) / 2
    endif
    if (ident eq 4) then begin	; harm NS avec NS0_ew (serie complete).
	c_c_0 =  (abs(visib(np/2-1)) + abs(visib(np/2+1))) / 2
    endif
    if (ident eq 5) then begin	; harm NS avec NS0_ns (1 a 6 manquent)
	c_c_0 =  (abs(visib(np/2-7)) + abs(visib(np/2+7))) / 2
    endif
    if (ident eq 8) then begin	; harm NS avec NS8
	c_c_0 =  (abs(visib(np/2-1)) + abs(visib(np/2+1))) / 2
    endif
;  Extrapolation parabolique
    n_harm = 8	; nbre  d'harm de part et d'autre de l'origine sur lesquels on
		;   reduit le fit parabolique de la visibilite. Usuel 8
		;  Le fit est reduit aux pts > certaine fraction (souvent 0.3)
		;   de la moyenne de points pres de l'origine (details dans 
		;   fit_quadric).
    i_stop = 0
    RH_FIT_QUADRIC,  i_stop, i_sys_lin,		    $	; entree
		  abs(visib),  n_harm, ident=ident, $	; entree
		  tcon, tnul, n_tnul,		    $	; sortie. con pour 
							;         "contrainte"
		  c_c_p, BB, CC, DD,  fit_visib		; sortie
	    ; calcul de la comp cont par un fit parabolique a l'origine.
	    ; Si le tableau en entree est a deux dimensions:
	    ;   fit_visib = c_c_p  +  BB*i^2  +  CC*i*j  +  DD*j^2
	    ;  BB, CC et DD ne sont pas utilises ici.
	    ; Si le tableau en entree est a une dimension:
	    ;   fit_visib = c_c_p  +  BB*i^2 	et CC et DD sont bidon (nuls).
	    ; Le mot-cle ident ne sert qu'au cas a une dimension.
	    ; Les variables en sortie tcon, tnul et n_tnul ne servent que dans
	    ;   le cas ou on utilise RH_FIT_CUBIC pour fitter une phase de 
	    ;	visibilite apres en avoir fitte le module avec RH_FIT_QUADRIC 
	    ;   (ce qui ne se fait plus depuis la creation de RH_FIT_QUARTIC),
	    ;   mais les arguments sont restes dans la liste au cas ou...


;     Choix entre les 2 calculs de la composante continue.
;	visib(np/2) = c_c_0
	visib(np/2) = c_c_p

;     Controle de la reconstitution de la composante continue
	imp = 0
	if (imp eq 1) then begin
	    visib_c = abs(visib(np/2 - n_harm  :  np/2 + n_harm))
	    help, harm_c
;         Visualisation de la partie centrale du module de la visibilite.
	    plot, visib_c, xstyle=1, title='visibilite entree (zone du fit)'
;	  Copmparaison avec le fit.
	    ch_format = "('comp cont extrapol ordre 0 =', f5.1, " + $ 
		     "'         comp cont extrapol parabolique =', f5.1)"
	    print, format=ch_format, c_c_0, c_c_p
	    window, 1	&	wset, 1
	    plot, fit_visib, xstyle=1, title='fonction fit (zone du fit)' 
	    stop
	endif
;     Fin de controle.

;     Permutation sur indices amenant l'origine des harmoniques spatiaux a 
	    ; l'extremite gauche du tableau (l'origine des TF en IDL est au 
	    ; debut du tableau et non au centre).
	visib = shift (visib, -np/2)	
	v_l_th ( where(abs(visib) ne 0) ) = 1	
		; 1 avec meme distrib que visib.

;    endif		; fin du if "images non nulles".

; Mise au point. Visualisation de l'amplitude des harmoniques (histogramme).
    icon = 0
    if (icon eq 1) then begin
	wset, 0
;     Zoom sur la partie centrale des harmoniques (de -nh a + nh).
	nh = 63
	vis_c = shift(visib, np/2)
	v_l_th_c = shift(v_l_th, np/2)
	h_i_c = vis_c   (np/2-nh : np/2+nh)	; pour l'image.
	h_l_c = v_l_th_c(np/2-nh : np/2+nh)	; pour le lobe.
;     Trace du tableau des harmoniques et histogramme.
	amul = (freq / 164)^0.9		; pour corriger le spectre du Cygne.
	plot, amul * abs(h_i_c), xstyle=1, title='amp des harm zone de fit'
	window, 1	&	wset, 1
	bin_size=0.01
	plot, histogram(amul * abs(h_i_c), binsize=bin_size), $
		xrange=[0.1/bin_size, 1.5/bin_size]
	stop
	plot, h_i_c(*, 64 + 46)
	stop
;     Idem sur le lobe theorique.
;	window, 2		&	wset, 2
	plot, abs(h_l_c), xstyle=1, title='amp des harm lobe theo zone de fit'
	tab_z = where(abs(harm_N) eq 0., c_z)	    ; c nbre d'harm nuls.
	if (c_z lt 1) then print, 'nbre d harm nuls:   0'
	if (c_z ge 1) then begin
	    print, 'nbre d harm nuls:', c_z, '   , de numeros:'
	    print, tab_z
	endif
	stop
	    ; Conclusions: 
	    ; - Les correlations de E0 et des NS sont bien presentes dans 
	    ;     l'observation du 25 jul 98. Sont nulles les sorties corres-
	    ;     pondant aux correlations:
	    ;     . E_NS (NS46) avec E2 a H16
	    ;     . E0 avec NS46
	    ;     . E2 avec H1	(panne?)
	    ;     . E1 avec E1
	    ;     . NS8 avec NS8
	    ;     . NS0 avec E_NS
	    ; - Les amplitudes des harmoniques du Cygne sont de l'ordre de 
	    ;	  164/freq pres de l'origine (Cygne du 16 jul 98).
    endif
; Fin de mise au point

; Calcul de l'image et du lobe theorique avec centre du Soleil en (np/2, np/2)
	; bew et bns interviennent avec un signe + dans phi (voir plus haut);
	;  il faut donc un signe - dans le calcul de l'image, soit une FFT 
	;  directe au sens d'IDL, avec drapeau -1.
    image = float (shift(fft(visib , -1), np/2))	; -1 pour FFT directe.
    l_th  = float (shift(fft(v_l_th, -1), np/2))

; Normalisation de lobe theorique et image pour que:  Flux = Somme des pts. 
    l_th  = l_th   /  total (l_th)
    image = image  /  total (l_th)
	; Rappel: l_th est l'image (avec composante continue) d'une source dont
	;   l'amplitude des harmoniques est 1, c'est a dire, compte tenu de la
	;   procedure de calibration, d'une source ponctuelle de 1 sfu. En di-
	;   visant par total(l_th), on normalise l'image interferometrique de 
	;   sorte que le flux soit simplement la somme des npew*npew points,
	;   quel que soit npew.

; Controle: visualisation de l'image a une dimension.
    icon = 0
    if (icon eq 1) then begin
	window, 0	&	wset, 0
	absc = indgen(np) - np/2
	plot, absc, image, xstyle=1
	xyouts, /normal, 0.5, 0.97, ch_id + ': image 1D', $
		alignment=0.5
	stop
    endif
; Fin de controle de l'image de sortie 1D.

; Controle du flux et de l'image de sortie.
    imp = 0
    if (imp eq 1) then begin
;     Zoom sur la partie centrale des harmoniques (de -nh a + nh).
	nh = 4
	visib_c = shift(visib, np/2)
	h_i_c = abs(visib_c(np/2-nh : np/2+nh))
;     Trace du tableau des harmoniques et de son histogramme.
	amul = (freq / 164)^0.9		; corriger spectre (cas du du Cygne).
;	amul = 1			; cas du Soleil.
;	tvscl, congrid(amul * h_i_c, 512, 512, cubic=-0.5)
;	window, 1	&	wset, 1
	bin_size=0.01
;	plot, histogram(amul * h_i_c, binsize=bin_size), $
;		xrange=[0.1/bin_size, 1.5/bin_size]
;     Calcul de flux
	amul = (freq / 164)^0.9		; corriger spectre (cas du du Cygne).
;	amul = 1			; cas du Soleil.
	flux = total (image)
	flux_c = amul * flux
	ifreq = fix(freq)
	ch_format = "('Freq =', i4, ' MHz        Flux =', f5.2," + $
		"'       Flux * freq / 164 =', f5.2)"
	print, format = ch_format, ifreq, flux, flux_c
	stop
;     Trace de l'image
	window, 2	&	wset, 2
	plot, image, xstyle=1
	xyouts, /normal, 0.5, 0.97, ch_id + ': image 1D', $
		alignment=0.5
	stop
    endif
; Fin de mise au point
  
    image    = float(image)

    end		; fin de RH_MALC_IM_1D.

