
PRO RH_MAILLE_3, $
    ; entree:
	npi,	freq, 	hmsc, $		
	; common MALAX, initialise par INIT_MALAX_2D. 
    ; sortie:
	maille, domega

; But: calculer les coordonnees heliographiques des 3 points M0, M1, M2 dfinis-
;    sant la maille elementaire des coordonnees interferometriques ("canaux"),
;    notees r et s. 

; Les coordonnees heliographiques tiennent compte :
;    . des derives en angle horaire et declinaison du soleil
;    . de la rotation -p  si  rot_p=1 . Si rot_p=0, INIT_MALAX_2D a en effet
;	 ecrit sinp=0, cosp=1  dans le common MALAX.

; La grille des coordonnees interferometriques entieres r et s, variant de
;    0 a npi, couvre l'image interferometrique sur un champ interferometrique
;    en EW et NS.
; La maille est ensuite utilisee par RH_GRILLE pour calculer les coord inter-
;    ferometriques non entieres (rg, sg) correspondant a une grille de coor-
;    donnees heliographiques carree de np*np points, sur un champ carre de 
;    largeur "larg" (souvent 4Rs) choisi dans RH_DPNEW. Depuis le 06 jul 01 
;    npi est fige a 128 et n'est plus pris egal a np.
; L'image heliographique sera obtenue par interpolation a partir des npi*npi 
;    valeurs de l'image interferometriqur (calculee par MALC_IM_2D).
; POS_HELIO et son introduction CALCPOS supposent que r et s en entree 
;    sont des 1/new et 1/nns des champs interferometriques, ou new et nns sont
;    les dimensions de l'image interferometrique definies dans le common MALAX
;    (rempli par INIT_MALAX). Depuis le 10 sept 01 new = nns = npi = 128
; new et nns sont egaux a : 
;    . 64 et 64   avec :  dew=99.806,  ie0=0,  ie1=ie2=1
;    			  dns=54.2740  ins45=0
;    . 128 et 128 avec :  dew=99.806, ie1=0, ie1=ie2=1
;			  dns=54.2740 ins45=1
;        c'est le cas usuel apres l'introduction de ins45 en jul 01.
; => M0, M1 et M2 passes a CALCPOS (0, 0), (new/npi, 0) et (0, nns/npi),
;	 c'est a dire : (0, 0), (1, 0), (0, 1).

; Modifications:
; 99 mar 31: calcul de la maille elementaire, definie par les points (0,0),
;		(1,0) et (0,1) en unites 1/npew  des champs interferometriques
;		(au lieu des dimensions totales des champs).
;    aug 25: passage de:
;		- npew (nbre de pts sur image choisis dans RH_DPNEW) en argu-
;		    ment,
;		- new=128 et nns=64 en introduisant le common MALAX.
;	     calcul des pts definissant la maille elementaire en unites de
;		1/nnew et 1/nns.
;    sep  6: - transformation en procedure
;	     - calcul de l'angle solide domega sous-tendu par la maille elemen-
;		 taire (en steradians).
; 01 jul  6: - le nbre de pts npi sur l'image interferometrique et le nbre de
;		 pts np sur l'image heliographique (avec soleil rond) ne sont 
;		 plus forcement identiques.  npi est pris egal a son min theo-
;		 rique 128 dans RH_DPATCHFITS_NRH, et np est choisi par l'uti-
;		 lisateur.
;		 Cela ne change rien dans RH_MAILLE_3, mais le nbre de pts 
;		 intervenant ici est npi et npn plus npew. On a modifie les 
;		 notations pour la clarte.
;    sep 18: - mise a jour des commentaires relatifs au choix de npi (fixe a
;		 128 dans RH_DPATCHFITS_NRH) et au calcul de new et nns dans 
;		 INIT_MALAX_2D (RH_MAILLE_3 pouvait conduire a un ecrasement 
;		 du soleil en NS quand nns etait reste fixe a 64 par 
;		 INIT_MALAX_2D alors que npi etait fige a 128).

; Notations:
; npi		nombre de points sur chaque axe de l'image, fixe a 128 dans
;		  RH_DPATCHFITS_NRH depuis le 6 jul 01.
; new, nns	nbre de canaux sur les images EW et NS, contenus le common 
;		  MALAX (rempli par INIT_MALAX_2D) et utilises pour la defini-
;		  tion de ls grille interferometrique. Depuis le 18 sept 01 
;		  new = nns = npi = 128, avec un possible periode de confusion
;		  entre jul et sept 01 (il s'est trouve que nns=64 alors que
;		  npi etait fixe a 128, ce qui produisait un ecrasement du 
;		  soleil en NS).
; xc, yc 	coord helio du centre des coord interferometriques (on rappelle
;		  que la correction de mouvt diurne n'inclue pas la derive du
;		  soleil en angle horaire et declinaison).
; maille	[x0, y0, x1, y1, x2, y2] coord heliographiques, exprimees en 
;		  RS, des points M0 (r=0, s=0), M1 (r=1, s=0) et M2 (r=0, s=1),
;		  definissant la maille interferometrique elementaire MI. Un 
;		  pavage de npi*npi  MI  couvre le champ interferometrique.
;		Dans l'ancienne version maille_2d: maille = [x1, y1,  x2, y2],
;		  coord des points M1 (64?, 0) et M2 (0, 64?) situes aux extre-
;		  mites des axes interferometriques.	

    common MALAX, ij, im, ian, icorpoi, icorion, isour,$
	etmer, edec, dew, new, hew, u, dns, hns, a1, nns, sinl, cosl, $
	sinp, cosp, gdel, ghmer, ahmer, c, rsol, ahmersol, sind, cosd
		; seulement pour recuperer new et nns.

    heure  = long (hmsc(0))
    minute = long (hmsc(1))

    maille = fltarr(6)	
    
; Calcul des positions helio des 3 points definissant la maille.
    r = 0. 
    s = 0.  
    CALCPOS, freq, heure, minute, r, s,    $	; entree.
	        X,  Y				; sortie (pos helio en RS).
	; Calcule les coordonnees heliographiques (RS) du point de coordonnees
	;   interferometriques r et s (exprimes en unites de 1/new et 1/nns des
	;    champs).
	;  On rappelle que les positions heliographiques ne dependent que de
	;   r/(new*dew)  et  s/(nns*dns). 
	; Rappel: la correction du mouvt diurne (blocage des franges) faite 
	;   pendant l'observation est la meme que par le passe: on ignore les 
	;   derives du soleil en angle horaire et en declinaison. 
	;   CALCPOS inclut le supplement de correction de mouvement diurne du
	;   a cette derive.
	; Remarque : CALC_POS utilise le common MALAX, qui contient sinp et 
	;   cosp. La correction d'angle -p (p = (axe terrestre, axe solaire) )
	;   est donc formellement incluse pour avoir les vraies ccoord helio.
	;   Cependant le common MALAX est rempli par INIT_MALAX_2D, dont la
	;   liste d'entree comporte rot_p (defini en entree dans RH_DPNEW), et
	;   si rot_p = 0,  INIT_MALAX_2D fait  sinp=0  et  cosp=1 sans le
	;   common MALAX.
	; Remarque : depuis le 18 sept 01 new = nns = npi = 128. On garde
	;	quand meme la redaction ci-dessous, qui tentait de traiter les
	;	observations ou ce n'etait pas le cas (on etait reste attache
	;	a la notion de "canaux minimaux" en entree du calcul de posi-
	;	tions car c'etait ainsi que se presentait les images dans les 
	;	versions successives du RH, mais ce n'est en fait pas neces-
	;	saire).
    maille(0) = X
    maille(1) = Y

    r = float(new) / float(npi)
    s = 0.
    CALCPOS, freq,  heure,  minute,   r,  s, $   ; entree 
		X   ,  Y			    ; sortie: pos helio en RS.
    maille(2) = X
    maille(3) = Y

    r = 0. 
    s = float(nns) / float(npi)			; pouvait valoir 1/2 sans NS45
    CALCPOS, freq,  heure,  minute,  r,  s, $ ; entree 
		X   , Y				 ; sortie: pos helio en Rs.
    maille (4) = X
    maille (5) = Y

	; Rem (12 jul 01) : la maille est correctement evaluee en fonction de
	;	npi, meme si npi n'est pas egal a new et/ou nns.

; Mise au point
    icon = 0
    if (icon eq 1) then begin
	h2 = byte(heure)
	m2 = byte(minute)
	print, 'sortie de maille_3'
	print, 'coord des points de la maille a ', h2,':', m2, $
		'   en 1/100 ray sol'	;   , '   freq =', freq, ' MHz'
	ch_f_1 = "('x =', 3f7.2)"
	ch_f_2 = "('y =', 3f7.2)"
	print, format = ch_f_1, maille(0)*100, maille(2)*100, maille(4)*100 
	print, format = ch_f_2, maille(1)*100, maille(3)*100, maille(5)*100
	stop
    endif 

; Calcul de l'angle solide sous-tendu par la maille (steradians).
	; u et v sont les vecteurs definissant la maille.
    Rs = 16.0 / 60 * !pi/180
	;  rayon solaire (16') en radians. Sert seulement ici a un calcul 
	;    d'angle solide et non de position => precision non requise. Pas
	;    besoin de tenir compte de la variation annuelle.
    ux = Rs * (maille(2) - maille(0))
    uy = Rs * (maille(3) - maille(1))
    vx = Rs * (maille(4) - maille(0))
    vy = Rs * (maille(5) - maille(1))
    domega = abs(ux * vy  - uy * vx)

; Controle
    icon = 0
    if (icon eq 1) then begin
	ux_Rs = ux /Rs
	uy_Rs = uy /Rs
	vx_Rs = vx /Rs
	vy_Rs = vy /Rs
	domega_R = domega / Rs^2
	print, 'RH_MAILLE_3, sortie :'
	ch_format ="('    new =', i3, '    nns =', i3, " + $
		"'   dew =', f7.4, '   dns =', f7.4)"
	print, format=ch_format, new, nns, dew, dns
	ch_format = "('    Vecteurs de la maille (image ', i3, '*', i3, " + $
		"' pts), en Rs:')"
	print, format=ch_format, npi, npi
	ch_format = "('       ux =', f5.2, '   uy =', f5.2, " + $
	    	    " '       vx =', f5.2, '   vy =', f5.2)"
	print, format = ch_format, ux_Rs, uy_Rs, vx_Rs, vy_Rs
	ch_format = "('    domega =', f7.4, ' Rs^2')"
	print, format = ch_format, domega_R
	stop
    endif
; Fin de controle

    end			; fin de RH_MAILLE_3.
