
;+ ***********************************************************************
; NAME:
;	LEC1D
;
; PURPOSE:
;	Cette procedure lit les donnees contenues dans un fichier au format
;	HELIO ou au format FITS 1D
;
; CATEGORY:
;	Put a category (or categories) here.  For example:
;	Widgets.
;
; CALLING SEQUENCE:
;	LEC1D, Unit, Images, Struc
;
; INPUTS:
;	UNIT	Unite de lecture du fichier. Le nom du fichier est soit
;		disponible soit par le COMMON NRH1_GLOBAL,Nomfich ou
;		passe par le KEYWORD Fichier
;
;	IMAGES	Tableau 2 ou 3 dimensions contenant les images
;		2 dimensions IMAGES[Espace,Temps] si 1 parametre se STOKES
;		3 dimensions IMAGES[Espace,Temps,I:V] si les parametres i et V
;
;	STRUC	Structure liee aux images (voir NRH1_STR_IMAGES__DEFINE) 
;	
; KEYWORD PARAMETERS:
;	FICHIER	Nom du fichier. Si non present nom du fichier pris dans
;		Nomfich(Unit) ou demande si Nomfich(Unit0=''
;	DEBUT	heure de debut chaine de caracteres au format NRH 
;		(hh:mn:ss:mmm)
;	FIN	Heure de fin chaine de caracteres au format NRH
;
;	POLAR	Lecture du parametre V
;
;	INTENS	Lecture du parametre I
;
;	ARRAY	Valable pour les fichiers FITS
;			0 Reseau E-W, 1 Reseau N-S
;

;
; COMMON BLOCKS:
;	NRH1_GLOBAL	defini dans NRH1.PRO
;

; MODIFICATION HISTORY: (bonmartin@obspm.fr)
;	12/11/98 Adapte du logiciel XHELIO (JB)
;-*******************************************************************

PRO Lec1D, n, tabl, struc, FICHIER=fichier, DEBUT=debut, $
               FIN=fin, POLAR=polar, INTENS=intens, ARRAY = array

;* -------------------------------------------- *
;*     Declaration des variables globales       *
;* -------------------------------------------- *

COMMON NRH1_GLOBAL, Nomfich,FichInfo    
;
;
;* --------------------------- *
;*     Test de la syntaxe      *
;* --------------------------- *
;
IF N_PARAMS() LE 2 THEN BEGIN

       Print, 'La variable et/ou la structure de sortie n''ont pas ete specifiees. '

       Print, 'Syntaxe: LEC1D, UniteLogique, VariableSortie, StrucSortie', $
               '[,FICHIER=''NomFichier''] [Debut=''13:45:...''] [Fin=''13:50:..'']', $
               ' [/Polar] [/Intens] '
       Print, ''
       MESSAGE, ' erreur.'
ENDIF
;                              
;
;* ----------------------------------- *
;*    Acquisition du nom du fichier    *
;* ----------------------------------- *
;
; Si le nom du fichier n'est pas passe en parametre nous le demandons 
;
NomFichier=''
NomFichier=NomFich(n)
IF N_ELEMENTS(FICHIER) NE '' THEN NomFichier=Fichier
IF NomFichier EQ '' THEN READ, 'Nom du fichier image ', NomFichier
IF N_ELEMENTS(FICHIER) EQ '' THEN Print,'Fichier lu = ',Nomfichier
;
FICHIER   = NomFichier
NomFichier= !Chemin + NomFichier  ; Chemin d'acces au fichier + fichier
;
;* --------------------------------------------------------- *
;*	    Lecture du Descripteur de fichier                *
;*  et memorisation dans le tableau de structure du noyau    *
;*        des Informations Relatives aux Donnees lues        *
;* --------------------------------------------------------- *
;

Litentete, n, Nomfichier, file
;
CLOSE,n
NomFich(n) = FICHIER   ; NomFich : Tableau du noyau contenant les noms des 
                       ;           fichiers lus 

FichInfo(n)= File      ; FichInfo: Tableau de structures d'informations
;                                  relatives aux donnees lues
NomFich(0) = STRING(n)
;
;* ---------------------------------------------------------- *
;*	Prise en compte des heures passees en interface       *
;* ---------------------------------------------------------- *
;
IF N_ELEMENTS(debut) NE 0 THEN BEGIN
    tempdeb = hms(debut)             ;conversion en milliseconde
   ;
   ;	Cadrage de l'intervale de temps demande avec celui des donnees
   ;    contenu dans le fichier
   ;
    IF (tempdeb LT File.heurDeb) OR (tempdeb GT File.heurfin) THEN BEGIN
         tempdeb = file.heurdeb
    ENDIF 
ENDIF ELSE tempdeb = File.HeurDeb
;      
IF N_ELEMENTS(fin) NE 0 THEN BEGIN
    tempfin = hms(fin)
    IF (tempfin LT File.heurDeb) OR (tempfin GT File.heurfin) THEN BEGIN
         tempfin = file.heurfin
      ENDIF
ENDIF ELSE tempfin = File.Heurfin

IF tempfin LT tempdeb THEN BEGIN
             tempfin = file.heurfin
   ENDIF 

HD = MSH(tempdeb)
HF = MSH (tempfin)
S= STR_SEP(nomfichier, '.')
Sz= SIZE(s)

IF S(1) EQ 'fts' THEN BEGIN
	IF NOT KEYWORD_SET(ARRAY) THEN Array=0
	LEC_NRH1D,n, Hd, Hf, Tabl,ARRAY = array
RETURN & END     
;
;* ---------------------------------------------------------------- *
;*	Calcul de l'indice de la premiere et derniere images        *
;*	corespondant a l'intervalle de temps demande ainsi          *
;*	que le temps exact de debut et de fin de l'intervalle       *
;* ---------------------------------------------------------------- *
;

hdeb = FLOAT(file.heurdeb)       ; conversion de l'heure en reel
hfin = FLOAT(file.heurfin)
dt = file.paspix(1)              ; Pas temporel entre deux valeurs
numval1 =INDICE(hdeb,tempdeb,dt,TEMPS1) ; calcul de la difference entre l'heure de
                                 ; debut standard et l'heure de debut du fichier 
numvalf =LONG(tempfin-hdeb)      ; Calcul de la difference entre l'heure de
                                 ; fin standard et l'heure de fin du fichier
numval2 =INDICE(hdeb,tempfin,dt,TEMPS2) ;indice de la derniere valeur de flux affiche

IF numval1 GE 0 THEN BEGIN
   temps1 = LONG(dt*numval1+hdeb)        ; temps exact de la valeur
   IF numvalf GE 0 THEN $
        temps2=LONG(dt*(numval2)+hdeb) $ ; Temps exact de la valeur    
   ELSE temps2=tempfin                   ; Temps de fin   
ENDIF ELSE BEGIN
     temps1 = tempdeb                    ; temps de debut
     IF numvalf GE 0 THEN $
        temps2=LONG(dt*(numval2)+hdeb) $ ; Temps exact de la valeur    
     ELSE temps2=tempfin                 ; Temps de fin     
ENDELSE 
;
;* -------------------------------------------- * 
;*	Lecture des donnees demandees et        *
;*	definition des variables de sortie      *
;* -------------------------------------------- *
;

Tableau   = CALL_FUNCTION( 'Litseq', n, temps1,temps2 )  ;

;
; Creation de la structure d'informations relative tableau de sortie 
; contennant les donnees
;

Struc    = { NRH1_STR_IMAGES}
;
;
;  On ne garde que ce qui est demande : Test des options 
;
;
Typinfo=''
;
;  Si le fichier ne contient qu'une sorte de donnees
;  nous prennons l'intensite
;
IF Fichinfo(n).facbloc(1) LT 2 THEN BEGIN
    typinfo = 'Intensite'
    Tabl    = REFORM(Tableau(*,0,*))

ENDIF ELSE BEGIN
       typinfo = 'Polarisation'
tabl = FLTARR(fichinfo(n).nbpix(0),fichinfo(n).nbpix(1)/2,2)

	for i = 0L, fichinfo(n).nbpix(1)/2L - 1L  DO begin
		Tabl(*,i,0) = Tableau(*,0,i)
		Tabl(*,i,1) = Tableau(*,1,i)
	ENDFOR

    IF N_ELEMENTS(intens) NE 0 THEN typinfo = typinfo+'Intensite'
    IF STRLEN(typinfo)    GT 9 THEN typinfo=''

ENDELSE
;
;* ----------------------------------------------------- *
;*	Remplissage de la structure d'informations       *
;* ----------------------------------------------------- *
;
Struc.Lun  = n
Struc.Hdeb = temps1
Struc.Hfin = temps2
Struc.Type = Typinfo
;
;* ------------------------------- *
;*	Modification du prompt     *
;* ------------------------------- *
;
!Prompt = 'IDL_'+FICHIER+'_'+STRCOMPRESS(STRING(n),/remove_all)+'> '
RETURN                                                                      
;
END       
