pro calcpos2d, posew,sposew,posns,sposns, ihd, ihf, ihdeb, ihfin, $
	icpoit, icor, delta1, delta2,frequence,idate,chdate, $
	trp,ip,hdpos,compos,numew,numns,message
;+ ***********************************************************************
; NAME:
;	CALCPOS2D
;
; PURPOSE:
;	Calcul de positions heliographiques a partir d'une paire de tableaux
;	de positions (unite: canal) EW et NS.
;
; CATEGORY:
;	Fichiers NRH1
;
; CALLING SEQUENCE:
; 	calcpos2d, posew, sposew, posns, sposns, ihd, ihf, ihdeb, ihfin, $
;		icpoit, icor, delta1, delta2, frequence, idate, chdate, $
;		trp, ip, hdpos, compos, numew, numns, message
;
; INPUTS:
; 	posew,sposew	: tableau de position EW et sa structure
; 	posns,sposns	: tableau de position NS et sa structure
; 	ihd,ihf		: heures en ms demandees pour position commune
; 	ihdeb,ihfin	: heures en ms de debut et de fin de fichier 
;				d'images EW et NS
; 	icpoit		: correction ionosph. avec mesures Poitiers (0: non)
;	icor		: correction ionospherique modele statique (0: non)
; 	delta1,delta2	: Intervalle temps en ms entre 2 images (flottant)
; 	frequence	: frequence (flottant)
; 	idate,chdate  	: date en jr,m,a et en caracteres
; 	ip		: num de la position calculee
; 	numew,numns	: numero des posions EW et NS a associer
;
; OUTPUTS:
; 	trp		: tableau contenant les positions 2D calculees
; 	hdpos		: tableau des heures de debut des positions calculees
; 	compos		: tableau du nb de points des positions calculees
; 	message		: message d'erreur (sortie)
;
; SIDE EFFECTS:
;  
; COMMON BLOCS:
;	none
;
; MODIFICATIONS: (bonmartin@obspm.fr)
;	- 1998 Dec 3	Introduction du ROUND dans calcul des indices 
;				inc1, inc2
;			Changement des noms: posew, ponsns, etc. (KLK)
;			Enlevement de l'argument Date en caracteres
;			Enlevement de qq. commandes mises en commentaires
;	- 1999 Jan 5	Calcul des positions en IDL
;+ ***********************************************************************

  message = ''
  ihddem=ihd
  ihfdem=ihf
; Heures debut, fin des positions EW et NS
  ihdew=sposew.tabe(1,numew)
  ihfew=ihdew+long(sposew.tabe(2,numew)*delta1)
  ihdns=sposns.tabe(1,numns)
  ihfns=ihdns+long(sposns.tabe(2,numns)*delta2)

; Recherche heure de debut commune et indices d'image correspondants
  hdr=max([ihddem,ihdew,ihdns])
  hfr=min([ihfdem,ihfew,ihfns])
  numi1=longindice(ihdeb,ihdew,delta1,heurd1)
  numi2=longindice(ihdeb,ihdns,delta2,heurd2)
  numf1=longindice(ihdeb,ihfew,delta1,heurf1)
  numf2=longindice(ihdeb,ihfns,delta2,heurf2)

; Indices des premiers enregistrements simultanes en EW et NS
  inc1=ROUND( FLOAT(hdr-ihdew)/delta1 )
  inc2=ROUND( FLOAT(hdr-ihdns)/delta2 )
  nbrpts=long( FLOAT(hfr-hdr)/delta1 )
  IF(nbrpts LE 0L) THEN BEGIN
	me=STRCOMPRESS("No common points, positions EW" + STRING(numew) $
		+ " SN" + STRING(numns) )
	message = [  message, me]
      RETURN
  ENDIF

; Test de compatibilite des temps d'integration des deux fichiers
  IF delta1 NE delta2 THEN BEGIN
	timeshift= 2.*nbrpts*ABS(delta1-delta2) / (delta1+delta2)
	IF timeshift GT 0.5 THEN BEGIN
		message = ["Different integration times in position files ", $
		STRCOMPRESS("The timing error is " + STRING(timeshift) + $
			" in the last record")]
		RETURN
	ENDIF
  ENDIF

; Tableau des heures pour la position 2D
  ihdt=ihdew+long(delta1)*inc1
  ihtab=long(lindgen(nbrpts)*long(delta1)+ihdt)
; Tableaux des indices des images
  trp1=reform(posew(numew,1,inc1:inc1+nbrpts-1))
  trp2=reform(posns(numns,1,inc2:inc2+nbrpts-1))

  message = [ STRCOMPRESS( "First point: " + MSH(ihtab(0)) ) + $
	STRCOMPRESS(" EW: "+STRING( trp1(0))+" NS: "+STRING( trp2(0)) ), $
	STRCOMPRESS("Last point: "+MSH(ihtab(nbrpts-1))) + $
	STRCOMPRESS(" EW: "+STRING( trp1(nbrpts-1))+" NS: "+ $
			STRING( trp2(nbrpts-1))) ]
  trp12d=trp1 & trp22d=trp2
  jinter=0L

HMER = INTARR(3)
DEC = INTARR(3)
INIT_MALAX,Idate, Hmer, Dec, 'SOLEIL'
FOR I = 0, Nbrpts-1 DO BEGIN
	Heures = Ihtab[i] / 3600000
	Minutes = Ihtab[i] /60000 - Heures * 60
	Calcpos, Frequence, Heures, Minutes, Trp1[i], Trp2[i], EW, NS 
			Trp[0, I, Ip]= Ew
			Trp[1, i, Ip]= Ns
END

  trp(2,0:nbrpts-1,ip)=reform(posew(numew,3,inc1:inc1+nbrpts-1))
  trp(3,0:nbrpts-1,ip)=reform(posns(numns,3,inc2:inc2+nbrpts-1))
  trp(4,0:nbrpts-1,ip)=reform(posew(numew,4,inc1:inc1+nbrpts-1))
  trp(5,0:nbrpts-1,ip)=reform(posns(numns,4,inc2:inc2+nbrpts-1))
  compos(ip) = LONG(nbrpts)
  hdpos(ip) = LONG(ihtab(0))
; Trace de controle des positions heliographiques
  win=1
  tabcoor=fltarr(2,nbrpts)
  tabcoor(0,*) = REFORM(trp(0,Inc1:Inc1+Nbrpts-1,Ip))
  tabcoor(1,*)=REFORM(trp(1,Inc1:Inc1+Nbrpts-1,Ip))
  win = get_window(13,16,$
			TITLE='*** Plot for test purposes only ***',$
			XSIZE=400,YSIZE=400)
  plotphot, [-2., -2., 2., 2.], LIMB=1, CADRE=1
	tabpos=FLTARR(1,2,nbrpts)
	tabpos(0,*,*)=tabcoor(*,*)

  plotpos2d, tabpos, [ihdt, nbrpts], delta1, frequence, chdate, $
	HEURES=[hdr, hfr], SYMBOL=1

  return
  end

 
