

PRO rh_integre, tb_fich, fichier_itg, integ, hdd, hfd, TOUT = TOUT
;+ ------------------------------------------------------------------
; NAME:
;       RH_INTEGRE
; PURPOSE:
;       Cette procedure integre les donnees sur un delta T donne.
;       Elle tourne sur des fichiers Nancay natifs et cree en sortie des
; fichiers Nancay natifs. 
; CALLING SEQUENCE:
;        RH_INTEGRE, ['/data/extraits/vilmer/2d020220.01B'],'./2i020220.01B',
;  4.,[11,13,59,87],[11,17,47,50]
;
; INPUTS:
; tb_fich :	Liste des fichiers a integrer
; fichier_itg:	nom du fichier integre
; integ:	temps d'integration en secondes
; hdd:		debut d'integration demande(h,mn,sec,ct)
; hfd:		fin d'integration demande        "
;
; KEYWORD:
;  TOUT:		integration de tout le fichier

; MODIFICATIONS:
;	juin 1999 : Passage aux fichiers 8 images/sec
;		    lecture acq par acq
;	nov 1999  : Demarrage a la freq zero
;       jan 2006  : bug recherche heure de debut corrige
;                   accepte nint=1 : fait alors une extraction simple
;       dec 2010  : bug corrigé (flag i_stop_fich) on ne lit pas les fichiers
;       suivants quand on a rencontre l'heure de fin demandee.
;- ------------------------------------------------------------------
@rh_common.inc

FOR nbfich = 0, n_elements(tb_fich)-1 DO BEGIN

    fichier = tb_fich[nbfich]
   
    IF NOT (rh_open(fichier,/MONO)) THEN BEGIN
        print,' ERROR INPUT FILE : ', fichier
        RETURN  
    ENDIF
 
    hd = entfi.hdeb
    hf = entfi.hfin
    k0 = 0L
    k1 = entFI.klumax
    i_stop_fich = 0        ; heure de fin apres le fichier courant

; Passage aux fichiers 8 images/sec:
; Le fichier journalier est decoupe arbitrairement en paquets de 1,5 giga,
;  la coupure pouvant intervenir a une frequence quelconque sans perte d'acq.
; Le fichier integr'e doit commencer par la frequence zero pour pouvoir etre 
;  traite par les programmes FILM et IMAGE de menu_rh
; Dans le cas ou on integre un intervalle a cheval sur une fin de fichier
;  et qu'on enchaine la lecture du fichier suivant (nbfich>0), il faut
;  commencer au debut du fichier suite quelque soit le numero de la frequence 
;  de la 1ere acq. ( C'est le cas de l'integration de la manip journaliere)
;  Attention ne pas enchainer des fichiers non jointifs (periode du 19/04/99
;  au 24/06/99).
    IF KEYWORD_SET(TOUT) EQ 0 THEN BEGIN ; pas de keyword TOUT
        IF nbfich eq 0 THEN BEGIN
;           k0 : acq de debut
            rh_hdeb, hdd, k0, hd1
            rh_read,k0
; pour commencer a la frequence zero
            kd0 = (entfi.nf-bfi.nof) mod entfi.nf
            k0 = k0+kd0
            hd = rh_readh(k0)
        ENDIF 
;        IF nbfich eq n_elements(tb_fich)-1 THEN BEGIN
        ct_hfd  = rh_hcent(hfd)
        ct_hfin = rh_hcent(entfi.hfin)
        i_stop_fich = 0        ; heure de fin apres le fichier courant
        if ct_hfd le ct_hfin then begin
            i_stop_fich = 1     ; heure de fin dans le fichier courant
                                   ; on ne lit pas le(s) fichier(s) suivant(s)
;              k1 : acq de fin
            rh_hfin, hfd, k1, hf1
            rh_read,k1
; pour finir avec une sequence de frequence complete (a la fin de la sequence 
;  precedente)
            kd1 = bfi.nof+1
            if kd1 ne entfi.nf then k1 = k1-kd1
            hf = rh_readh(k1)
        ENDIF
    ENDIF
;    f = '("Lecture   ",(a),"  ", 3(i2.2,":"),i2.2, "  ", 3(i2.2,":"),i2.2)'
;    print, format = f, fichier, hd, hf

    k2= k1-k0+1
    IF k2 LT 1 THEN return
    nint = long(long(integ*1000L)/entfi.itg)
    fact  =1./(float(nint))
    IF nint LT 1 THEN BEGIN
       print, "ERREUR : facteur d'integration = ", nint
       RETURN
    ENDIF
  nf = entFI.nf
    
;Structure Resultat
  rec = bFI
;Open fichier integre
   IF nbfich EQ 0 THEN BEGIN
      OPENW, unit, fichier_itg, /GET_LUN
      entFi2       = entfi
      entFi2.hdeb  = hd
      entFi2.hfin  = hf
; longueur de l'entete a reecrire
      entfi2.lgent = n_tags(entfi,/length)

      entfi2.itg   = nint*entFI.itg
      IF entFI.endian EQ 1 THEN WRITEU, UNIT, swap_endian(entFi2) $
      ELSE WRITEU,UNIT,entfi2
       f1 = '("Creation  ",(a),"  ", 3(i2.2,":"),i2.2, "  ", 3(i2.2,":"),i2.2)'
      print, format = f1, fichier_itg, hd, hf
;      print, "Integration, en secondes : ",integ  
;Integrateur
      itg = FLTARR(4,ENTFI.NVAL/4,nf)
      itg(*,*,*) = 0.
      kint = lonarr(entfi.nf)
      kint(*) = 0
;Sauvegarde heure de debut d'integration
      h0  = INTARR(4,ENTFI.NF)
      h = intarr(4)
  ENDIF
  
  print, 'Integration en cours ...', integ,' sec'

;Boucle de lecture
  FOR k = k0 ,k1 DO BEGIN
          RH_READ, k
          nof = bFI.nof
          kint(nof) = kint(nof)+1
          IF kint(nof) EQ 1 THEN h0(*, nof) = bFI.h
          itg(*,*,nof) = itg(*,*,nof) + luFI.pt
	  imp=0
	  if imp eq 1 then begin 
 	      if nof eq 0 then begin
	          print,' nouveau',k,kint(nof),bfi.h,bfi.g
	          print,itg(0,0:25,0)
	          if(kint(nof) eq nint) then stop
	      endif
	  endif         
          IF kint(nof) EQ nint THEN BEGIN
              itg(*,*,nof) = itg(*,*,nof)*fact
              h = rh_hitg(h0(*,nof), bFI.h)
              rh_format, rec, bFI.c, bFI.nof, h, itg(*,*,nof)      
              WRITEU, unit, rec
              kint(nof) = 0
              itg(*,*,nof) = 0.
          ENDIF
   ENDFOR
   RH_CLOSE
   if i_stop_fich eq 1 then goto, FIN
 ENDFOR
 FIN:  
;Arret
   CLOSE,UNIT
   FREE_LUN,UNIT
   RETURN
END
