PRO shiftrh1d, fichier, outfich, origin, message

;+ ***********************************************************************
; NAME:
;	SHIFTRH1D
;
; PURPOSE:
;	Replie le bord droit des images 1D du RH sur le bord gauche 
;	(c'est-a-dire bords ouest -> est, sud -> nord).
;
; CATEGORY:
;	NRH1  calculs
;
; CALLING SEQUENCE:
; 	shiftrh1d, fichier, outfich, origin, message
;
; INPUTS:
;	fichier		Nom du fichier d'images a lire
;	outfich		Nom du fichier d'images a origine decalee
;	origin		Nouveau canal d'origine (can. minimum)
;
; OUTPUTS:
;	message		Message sur le succes de l'operation
;
; COMMON:
;	NRH1_GLOBAL
;
; SIDE EFFECTS:
;	Si le fichier outfich existe deja, il sera efface !
;
; EXAMPLE:
; 	shiftrh1d, infile, outfile, -35., message
;	
;	Pour une image d'origine definie pour les canaux (-32,-31,...,62,63)
;	la procedure produit des images de sortie avec les canaux 
;	(60,61,62,63,-32,-31,..., 59) (canal -35 = canal 60) 
;	
; REMARQUE:
; Le but de la procedure est de donner la possibilite de suivre une source
; qui sort du champ de vue de l'instrument, en deplacant artificiellement ce 
; champ de vue. Elle n'a de sens que pour une source clairement definie sur
; un fond quasiment nul.
;
; MODIFICATION HISTORY:
;	Ecrit par: K.-L. Klein (obspm.fr), 28.11.1998
;-*******************************************************************
;
;
;* -------------------------------------------- *
;*     Declaration des variables globales       *
;* -------------------------------------------- *
;
   COMMON NRH1_GLOBAL,nomfich,FichInfo
;
;* ----------------------------------------------------------- *
;*	Test de validite de la syntaxe de la procedure         *
;* ----------------------------------------------------------- *
;
message=''
IF (N_PARAMS() LE 1) THEN BEGIN
	message = 'Erreur de syntaxe: Parametres manquants'
	message = [message, $
		"Syntaxe: SHIFTRH1D,", $ 
		" fichier (entry filename), ", $
		" outfich (output filename),", $
		" origin (new origin of 1D images),",  $ 
		" message (message to the calling proc.)"]
	RETURN
ENDIF


;* --------------------------------------------------------------------------* 
;*     Lecture images, identification de l'origine, nbre de points a decaler *
;* --------------------------------------------------------------------------* 
;*
err = newlitentete(1,fichier,file)
IF (err EQ 1) THEN BEGIN
	message = "Error reading file " + fichier + " (Proc. NEWLITENTETE)
	RETURN
ENDIF
err = newlec1d(2,oldim,soldim,FICHIER=fichier)
IF (err EQ 1) THEN BEGIN
	message = "Error reading file " + fichier + " (Proc. NEWLEC1D)
	RETURN
ENDIF

;	Origine dans le fichier d'entree:			oldorigin
;	Nombre de points dont il faut decaler les images:	nporig
;	file.paspix(0) = Difference de canaux entre deux points
oldorigin = file.valorg(0)	; Canal minimum
nporig = ROUND( FLOAT(oldorigin - origin) / file.paspix(0) )

;* --------------------------------------------------------------------------* 
;*	Lecture du descripteur du fichier d'entree, decalage des images      *
;* --------------------------------------------------------------------------* 
;
lun=10
LECDESCR, lun, fichier, longrec, dfixe, mot_cle, valcle, comment
CLOSE, lun
IF dfixe.facbloc(1) GT 1 THEN newim = SHIFT(oldim, nporig,0,0) $
	ELSE newim = SHIFT(oldim, nporig,0)
;
;* -------------------------------------* 
;*	Ecriture du fichier de sortie   *
;* -------------------------------------*
;
; 	Saut du descripteur de infich

OPENW, 11, outfich
; 	Ecriture de la nouvelle origine en entete
dfixe.valorg0 = Origin
ECRDESCD,11,longrec/4,dfixe,mot_cle,valcle,comment
nprofs = dfixe.nbpix(1) / dfixe.facbloc(1); Nbre de profils


; Modification pour fichier images FITS
		S= STR_SEP(Fichier, '.')
		Sz= SIZE(s)

     IF S(1) EQ 'fts' THEN BEGIN
	   IHMS = Dfixe.Heurdeb - Dfixe.paspix1

	   FOR i = 0, nprofs -1 DO BEGIN
		Ihms = Ihms+ Dfixe.paspix1
		IF File.texte.val(4) EQ 'I+V'  THEN BEGIN
			WRITEU, 11, ihms, newim(*,i,0)
			WRITEU, 11, ihms, newim(*,i,1)
		ENDIF ELSE BEGIN
			WRITEU, 11, ihms, newim(*,i)
		ENDELSE		
	   ENDFOR
      ENDIF ELSE BEGIN

	OPENR, lun, fichier
	rec1 = BYTARR(longrec)
	FOR k=1, dfixe.nblocs DO READU, lun, rec1
	ihms=0l
	aux = FLTARR(dfixe.nbpix(0))
	FOR i = 0, nprofs -1 DO BEGIN
		READU, lun, ihms, aux
		IF dfixe.facbloc(1) GT 1 THEN BEGIN
			WRITEU, 11, ihms, newim(*,i,0)
			READU, lun, ihms, aux
			WRITEU, 11, ihms, newim(*,i,1)
		ENDIF ELSE BEGIN
			WRITEU, 11, ihms, newim(*,i)
		ENDELSE
	ENDFOR
	CLOSE, lun
      ENDELSE
CLOSE, 11
message = "Shifted images in file " + outfich
	
END
