; PRO RH_DP_CALIB_SUB    tout a la fin

; Notes utiles
; Lancement de menu_rh a Meudon
;   Se mettre de preference dans le repertoire contenant les fichiers a traiter
;   puis taper sous unix :
;	in_nrh
;	menu_rh

;_____________________________________________________________________________

; PROEDURES CONTENUES : 
;   RH_DP_SUB_1		: decider si une scrutation est biaisee ou non par des
;			    parasites, et lever le drapeau d'autorisation 
;			    d'integration i_integ.
;   DP_CON_2		: controle des drapeux d'integration
;______________________________________________________________________________

PRO RH_DP_SUB_1, $
;   entree
	sel_ant,   a_p,   correl,   j_pol,	$
	n_image,   freq,    nf,			$	
	harm_N_moy,  harm_N,			$
;   sortie
	i_integ

; Creation 7 mars 2003

; Modifications :
; 04 jan   : - extension aux antennes AA.

; But : decider si une scrutation est biaisee ou non par des parasites, et
;	lever le drapeau d'autorisation d'integration i_integ.

; Rem : j_pol ne sert qu'a l'impression.

; Principe : une scrutation npn polar ou polar a une frequence donnee (un vec-
;	teur harm_N) est integre dans son ensemble ou rejetee. Il faut donc 
;	que tous les harmoniques puissent etre consideres comme acceptables.
;	En pratique on fait le test sur un sous ensemble d'harmoniques definis
;	par un ensemble choisi d'antennes

; Notations :
; nbre_harm	nombre des harmoniaues acquis : 576 avant 1 nov 2003, 648 ou 
;		  720 ensuite avec AA1 a AA4.
; correl 	tableau (2, nbre_harm) indiquant les numeros des 2 antennes 
;		  correspondant a chacun des  nbre_harm  harmoniques.
; harm_N	harmoniques non polar ou polar d'une scrutation courante 
;		  (format Nancay, 576 harm avant 1 nov 2003, 648 ou 720 apres).
;		  
; harm_N_moy	moyenne non selective, faite lors d'une lecture precedente) 
;		  de harm_N sur l'intervalle de traitement.
; i_integ	drapeau d'integration
; sel_ant	definit les antennes des bases sur lesquelles on detecte les 
;		  parasites est faite

    ; Rangement des harmoniques dans harm_N
 	;  NS0  avec E2, E1, H1 a H16		  0 a  17
	;  NS1  ---- ----------------------      18 a  35
	;  NS8  ---- ----------------------	144 a 161
	;  NS23 ---- ----------------------     414 a 431
	;  NS45	---- -----------------------    432 a 449

	; jusqu'au 7 oct 98 inclus:
	;  E0	---- NS0  a NS17		450 a 467
	;  --   ---- NS10 a NS23                468 a 481
	;  --	---- NS45                       482
	;  --	---- NS7  a NS9                 483 a 485
	; a partir du 8 oct 98 inclus:
	;  NS45	---- NS0  a NS17		450 a 467
	;  --   ---- NS10 a NS23                468 a 481
	;  --	---- NS45                       482
	;  --	---- NS7  a NS9                 483 a 485

	;  E2	---- E2, E1, H1 a H16		486 a 503
	;  E1	---- E2, E1, H1 a H16		504 a 521
	;  E0	---- E2, E1, H1 a H16		522 a 539
	;  NS8	---- NS0  a NS17		540 a 557
	;  NS0	---- NS10 a NS23 et NS45	558 a 572
	;  ---	---- NS7 a NS9			573 a 575

	;  AA1  ---- NS0 a NS17			576 a 593
	;  AA2  ---- ----------			594 a 611
	;  AA3  ---- ----------			612 a 629
	;  AA4  ---- ----------			630 a 647

	;  XX1  ---- YY1			648 a 665
	;  XX2  ---- YY2			666 a 683
	;  XX3  ---- YY3			684 a 701
	;  XX4  ---- YY4			702 a 719

; Rangement des antennes (comme dans les tableaux des coord des antennes) 
	;    num  ant  bew    num  ant  bew 	num   ant	num   ant
	;     0    E2  -48     3    H1  -14 	 19  NS 0	 35  NS 16
	;     1    E1  -16     4    H2  -12	 20  NS 1	 36  NS 17
	;     2    E0  -15     5    H3  -10      21  NS 2	 37  NS 18    
	;		       6    H4   -8 	 22  NS 3	 38  NS 19
	;		       7    H5   -6	 23  NS 4	 39  NS 20 
	;		       8    H6   -4 	 24  NS 5	 40  NS 21 
	;		       9    H7   -2	 25  NS 6	 41  NS 22 
	;		      10   NS0    0	 26  NS 7	 42  NS 23 
	;		      11    H9    2	 27  NS 8	 43  NS 45
	;		      12   H10    4	 28  NS 9
	;		      13   H11    6	 29  NS 10 	 44  AA 1
	;		      14   H12    8	 30  NS 11 	 45  AA 2
	;		      15   H13   10	 31  NS 12 	 46  AA 3
	;		      16   H14   12	 32  NS 13 	 47  AA 4
	;		      17   H15   14	 33  NS 14 
	;		      18   H16   16 	 34  NS 15


; Controle de harm_N_moy
    icon = 0
    if (icon eq 1) then begin
	a_h = abs(harm_N_moy)
	h_m = harm_N_moy + 0.0001 * max(a_h)
	p_h = 180/!pi * atan(imaginary(h_m), float(h_m))
	n1 = 0
	n2 = 100
	window, 0
	plot, a_h(n1 : n2)
	xyouts, 0.5, 0.97, /normal, alignment=0.5, $
	    'abs(harm_N moyen)'
	window, 1
	plot, p_h(n1 : n2)
	xyouts, 0.5, 0.97, /normal, alignment=0.5, $
	    'phase(harm_N moyen), degres'
	stop
    endif

    nbre_harm_test = 0			; nbre d'harmoniques testes.
    nbre_harm_tot  = n_elements(harm_N)	; nbre d'harmoniques total.	
	; et non 576 pour preserver l'extension aux harmoniques avec les 
	;   antennes anti_alias.
    i_integ = 0		; re-initialis'e a chaque scrutation.

    i_test = 1		; 1 test sur module et phase,  2 test sur module seul.
			;    usuel : 1 .

    for i_harm = 0, nbre_harm_tot - 1   do begin
	if ( (sel_ant(correl(0, i_harm)) eq 0) or $
	     (sel_ant(correl(1, i_harm)) eq 0) )  then  goto, a1
	nbre_harm_test = nbre_harm_test + 1
	if(i_test eq 1) then begin			; test sur amp et phase
	    a_dh  = abs(harm_N(i_harm)  -  harm_N_moy(i_harm, nf))
	    a_h_moy = abs(harm_N_moy(i_harm, nf))
	    if (a_dh   gt   a_p * a_h_moy)  then  goto, a2
	endif
	if(i_test eq 2) then begin			; test sur amp seul
	    if (abs(harm_N(i_harm))  gt  $
		(a_p + 1) * abs(harm_N_moy(i_harm, nf)) )   then  goto, a2
	endif
a1:	J_M = 0		; toujours vrai.
    endfor		; fin de boucle sur les harmoniques.

    i_integ = 1	

a2: J_M = 0		; fin du saut de lever du drapeau d'integration si un 
			;   harmonique trait'e est parasit'e.

    icon = 0
    if (icon eq 1) then begin
	print, 'RH_DP_SUB_1 : detection des parasites, n_image =', n_image
	if (j_pol eq 1) then  ch_format ="(4x, 'freq =', i4, ' MHz non polar')"
	if (j_pol eq 2) then  ch_format ="(4x, 'freq =', i4, ' MHz polar')"
	print, format=ch_format, nint(freq)
	print, '    nbre d''harmoniques testes :', nbre_harm_test
	print, '    drapeau d''integration    :', i_integ
	stop
    endif

    end			; fin de RH_DP_SUB_1

;_____________________________________________________________________________

; PROCEDURES DE CONTROLE CI-DESSOUS.
;______________________________________________________________________________


PRO DP_CON_1,  correl,  i_np_p,  freq_I, harm_np, harm_p

; Creation 6 mars 03
; But : controle de la scrutation integree a une frequence. On calcule l'image
;	interferometrique.

; Notations: 
; nbre_harm	nombre des harmoniaues acquis : 576 avant 1 nov 2003, 648 ou 
;		  720 ensuite avec AA! a AA4.
;  correl 	tableau (2, nbre_harm) indiquant les numeros des 2 antennes 
;		  correspondant a chacun des  nbre_harm harmoniques. Permet de
;		  faire le passage de du vecteur harm_N a la repartition 2D 
;		  dans le plan uv "harm".
;  harm_np	harmoniques polar, integres sur la duree de la calibration.
;		  complexarr (nbre_harm).
;  harm_p	harmoniques polar, idem.
;  npi		dimension de l'image interferometrique, figee a 128 depuis le
;		  6 jul 01. 
;  harm		visibilite observee dans le plan (u, v), centree en milieu de 
;		  tableau, et corrigee des redondances. complexarr (npi, npi).
;  harl		spectre du lobe theorique, idem.
;  uu, vv	tableaux des bases / lambda


    npi = 128		; dimension des images a construire.
    i_sh_tv = 1		; 1 shade_surf, 2 tvscl.

    if (i_np_p eq 0) then begin
	harm_N = harm_np
	ch_polar = ' non polar'
    endif
    if (i_np_p eq 1) then begin
	harm_N = harm_p
	ch_polar = ' polar'
    endif

    for i_freq = 0, 9 do begin			; boucle sur les frequences.
	freq = freq_I(i_freq)
	if (freq eq 0) then goto, a1
	ch_freq = strcompress(string(nint(freq)))
	print, 'Frequence', nint(freq), ' MHz'
	i_stop = 1
	i_sys_lin =  2		; 1 Cramer, 2 LU, 3 SVD.
	i_pave_plein = 0
	ie0_ew = 1
	n_bord = 10		; comme dans RH_DPATCHFITS_NRH.
	i_recentrage = 0    & x_centrage = 0    & y_centrage = 0
	RH_MALC_IM_2D, $
	    ; entree:
		i_stop,	i_sys_lin, 					$
		i_pave_plein,  i_recentrage,  x_centrage,  y_centrage,	$
		freq,   ie0_ew,   harm_N,   correl,   npi,  n_bord,	$
	    ; sortie:
		harl,  l_th,   harm,  image,  flux_total, flux_compact, uu, vv
	window, i_freq
	if (i_sh_tv eq 1) then shade_surf, image
	if (i_sh_tv eq 2) then tvscl, congrid(image, 512, 512, cubic=-0.5)
	xyouts, 0.5, 0.97, /normal, alignment=0.5, $
		ch_freq + ' MHz : image' + ch_polar
	print, 'Taper .c pour les images aux autres frequences'
	stop
a1:	J_M = 0
    endfor

    end			; fin de  DP_CON_1 .

;______________________________________________________________________________


PRO DP_CON_2, n_image, nsel, freq_I, t_i_integ

; But : controle des drapeux d'integration

   for i_f = 0, nsel-1 do begin		; boucle sur les frequences
	ch_freq = strcompress(string(nint(freq_I(i_f))))
;     Trace des drapeaux d'integration
	window, i_f, xsize=1000
	plot,  t_i_integ(*, 0, i_f), xstyle=1, yrange=[0, 1.1], ystyle=1
	oplot, t_i_integ(*, 1, i_f) * 0.9, linestyle=1
	xyouts, 0.5, 0.97, /normal, alignment=0.5, $
	  ch_freq + ' MHz. Drapeaux d''integration : ___ non polar, ./.. polar'
;     Impression des nombres de scrutation integrees
	n_tot = n_elements(t_i_integ(*, 0, i_f)) - 2
	    ; -2 car dans RH_CALIB_CON on a defini :
	    ;	t_i_integ = intarr(n_image/nsel + 2,  2, nf_max + 1)
	toto = where(t_i_integ(*, 0, i_f) eq 0, ic_paras_np)
	toto = where(t_i_integ(*, 0, i_f) eq 1, ic_integ_np)
	toto = where(t_i_integ(*, 1, i_f) eq 0, ic_paras_p)
	toto = where(t_i_integ(*, 1, i_f) eq 1, ic_integ_p)
	ch_format = "('Non polar : total =', i4, '    acceptees =', i4, " + $
		"'    rejetees =', i4)"
	print, format=ch_format, n_tot, ic_integ_np, ic_paras_np
	ch_format = "('Polar     : total =', i4, '    acceptees =', i4, " + $
		"'    rejetees =', i4)"
	print, format=ch_format, n_tot, ic_integ_p, ic_paras_p
	stop
    endfor		; fi de boucle sur les frequences.

   end			; fin de  DP_CON_2 .
;______________________________________________________________________________

PRO RH_DP_CALIB_SUB

; Creation 6 mars 03

; But : compilation des controles ci-dessus.

    J_M = 0

    end
