
;+ ***********************************************************************
; NAME:
;	NRHR_CAL
;
; PURPOSE:
;	Cette procedure calibre une frequence des routines NRH.
;
; CATEGORY:
;	Routines
;
; CALLING SEQUENCE:
;	NRHR_CAL, File, Freq, [calib]
;
; INPUTS:
;	FILE	Nom du fichier d'observation de calibration
;	FREQ	Numero de la frequence a callibrer
;
; KEYWORD PARAMETERS:
;	HDEB	Heure de debut ('hh:mm:ss:cc')
;	DUREE	Duree en secondes sur laquelle porrte la calibration (42)
;	DATA	Tableau contenant les valeurs prises pour la calibration
;	SEUIL	Seuil de detection des pas de 1dB (0.008 par defaut)
;	COORD	Coordonne des milieux de pas de 1dB mesures
;	TIME_STAR	Heure de debut de calibration trouve
;	PLOT	Trace de controle: observation, coefficients de calibration,
;		calibration appliquee a l'observation
;
; OUTPUTS:
;	CALIB	coefficients de calibration
;
; COMMON BLOCKS:
;	Non
;
; PROCEDURE:
;	Le debut de la mesure de calibration est determine a partir de
;	la detection du front de debut.
;	La determination des pas de 1dB est faite en detectant les fronts 
;	d'attenuation. Les points manquants sont completes.
;	Un coefficient est applique pour amener le 1er point a la valeur
;	maximale (2.8*10.^8] puis les points suivants a la valeur correspondant
;	a l'attenuation appliquee. 
;	Une interpolation est effectuee pour obtenir une correspondance 
;	entre les valeurs mesurees en mV et la valeur du signal de sortie
;
; EXAMPLE:
;	Please provide a simple example here
;
; MODIFICATION HISTORY:
;	Ecrit par:J Bonmartin le 22/02/01
;		mise au point le 27/03/01
;-*******************************************************************

PRO NRHR_CAL, File, Freq, Tbc, HDEB=Hdeb, HFIN=Hfin, DUREE= Duree, $
	DATA= Tab, SEUIL = Seuil, COORD= Coord, PLOT = PLOT, $
	TIME_START = Tstart

;Calibration des routines
;FILE	Nom du fichier
;FREQ	Numero de la frequence
;HDEB	Heure approximative de debut de calibration, sinon recherche du 1er
;HFIN	Heure de fin de calibration, sinon heure exacte de debut + DUREE
;DUREE	Duree de la calibration en SECONDES (38 par defaut)
;SEUIL	Seuil de recherche des pas (0.008 par defaut)
;DATA	Tableau contenant le spectre de calibration
;COORD	Coordonnees des points de calibration dans DATA
;NOPLOT	Pas de trace du resultat de calibration


NIV_MAX = 2.8*10.^8			;Constante du maximum
IF NOT KEYWORD_SET(SEUIL) THEN Seuil=0.008

SPEC = MRDFITS (File, 1, /SILENT)
	NLIG=  N_ELEMENTS(Spec.time)

	IF NOT KEYWORD_SET(DUREE) THEN Duree= 42
	IF NOT KEYWORD_SET(HDEB) THEN BEGIN
		IDEB = 0
	ENDIF ELSE BEGIN
		HDMS = HMS (Hdeb)
		IF Hdms LT Spec[0].time THEN HDMS=Spec[0].time
		IDEB = LONG(TIME_IND ( Spec.Time, Hdms))
	ENDELSE

SPC = Spec.frq[Freq]
		WHILE (Spc[Ideb+1]-Spc[Ideb]) LT 0.5 $
;		WHILE (Spec[Ideb+1].frq[Freq])-(Spec[Ideb].frq[Freq]) LT 1. $
;		WHILE (Spec.frq[Freq,Ideb+1])-(Spec.frq[Freq,Ideb]) LT 1. $
			DO BEGIN
				Ideb = LONG(Ideb) +1
				IF Ideb GE Nlig-1 THEN BEGIN
				  PRINT,'Debut de calibration non trouve'
				RETURN & ENDIF
		ENDWHILE

		HDMS = (Spec.time)[Ideb]

	IF NOT KEYWORD_SET(HFIN) THEN $
			IFIN=TIME_IND(Spec.Time, Hdms+(LONG(Duree)*1000)) $
	ELSE BEGIN
		HFMS = HMS (Hfin)
		IFIN = TIME_IND ( Spec.Time, Hfms)
	ENDELSE

	DIFF = (Spec[Ideb+1:ifin].frq[Freq]) - (Spec[Ideb:ifin-1].frq[Freq])
	MAX = MAX( Diff, Imax)
	IDEB = Imax-10 + Ideb
	Hfms = (Spec.time)[Ideb]+(LONG(Duree)*1000)
	IFIN = TIME_IND ( Spec.Time, Hfms)

TAB = (Spec.frq[Freq])[Ideb+10:ifin]
TEMPS= (Spec.Time)[Ideb+10:ifin]
TSTART = MSH(Temps[0])

	DIFF = (Spec[Ideb+5:ifin].frq[Freq]) - $
			(Spec[Ideb+6:ifin-1].frq[Freq])

	;Recherche des debuts intervalles
	SCBRUT = WHERE (Diff GT SEUIL, Nbp)
	SC = Scbrut[WHERE (Scbrut[1:Nbp-1]-Scbrut[0:Nbp-2] gt 3, Nsc)]
	INTERMOY=TOTAL(Sc[1:Nsc-1]-Sc[0:Nsc-2])/(Nsc-1)

COORD = SC

	CTRL = WHERE( Sc[1:Nsc-1]-Sc[0:Nsc-2] gt INTERMOY*1.5 , Nct)
	NCTRL=0
	IF Ctrl[0] NE -1 THEN $
	   FOR I=0, N_ELEMENTS(ctrl)-1 DO $	;Nombre d'elements manquants
		NCTRL =NCTRL +FIX((Sc[ctrl[I]+1]-Sc[ctrl[I]]) /Intermoy) -1

	IF Nct NE 0 THEN BEGIN		;Recherche des intervalles sautes
		Print, 'Saut de pas (Seuil =',$
				STRING( Seuil,FORMAT='(F5.3)'),'), A:'
		FOR I=0,Nct-1 DO $
			Print,'	',MSH(Temps[Sc[Ctrl[i]]]),Sc[ctrl[i]]
	ENDIF

PAS = FLTARR(N_ELEMENTS(Sc) + Nctrl)
ISC=0 & ICT=0 & Ipas=0
FOR I= 0, N_ELEMENTS(Sc)-1 DO BEGIN	;Remplissage des trous
		Pas[Ipas] = Sc[Isc]
		Ipas=Ipas+1
	IF Isc EQ CTRL[Ict] AND Ict LT N_ELEMENTS(Ctrl) THEN BEGIN
		NCT = FIX((Sc[Isc+1]-Sc[ctrl[Ict]]) /Intermoy) -1 
		FOR J = 0, Nct-1 DO BEGIN
			Pas[Ipas] = Pas[Ipas-1] + Intermoy 
			Ipas = Ipas+1
		ENDFOR
		IF Ict LT N_ELEMENTS(Ctrl)-1 THEN Ict = Ict+1
	ENDIF
	Isc = Isc+1
ENDFOR 

PAS= FIX(Pas)		; (PAS)INDICES des points dans TAB
NPAS = N_ELEMENTS(Pas)	; L'indice des valeurs de pas donne le nombre de dB
;				print,'Nombre de pas:',npas

ITAB=WHERE(Tab[pas[0:npas-2]]-tab[pas[1:npas-1]] GT 0.)
ATEN= (10.^(FLOAT(64-ITAB)/10))
;				PRINT,ATEN
RAP = Niv_Max / Aten[0]
Aten = Aten *Rap

RPAS = pas[WHERE(Tab[pas[0:npas-2]]-tab[pas[1:npas-1]] GT 0.)]

	VTAB = FLTARR(N_ELEMENTS(Rpas))
	MILIEU = Rpas+(Intermoy/2)
	FOR VI=0, N_ELEMENTS(Rpas)-1 DO $	;Filtrage autour du milieu
		VTAB[Vi]=TOTAL(tab[Milieu[Vi]-2:Milieu[Vi]+2])/5

RMA= MAX(VTAB, MA) & RMI=MIN(VTAB, MI)

VOLTS= INDGEN(4000) & TBC = FLTARR(4000)
FLUX = INTERPOL ( Aten[Ma:Mi], FIX(Vtab[Ma:Mi]*1000),Volts[RMi*1000:RMa*1000])

	Tbc[0:(Rmi*1000)-1] = Aten[N_ELEMENTS(Itab)-1]
	Tbc[(Rma*1000):N_ELEMENTS(Tbc)-1]= Aten[0]
	Tbc[(Rmi*1000):(Rma*1000)]=Flux

IF KEYWORD_SET (PLOT) THEN BEGIN
	Wset,10 
	TR_TIME_NRH, VTAB, TEMPS[rpas],Psym=2,YRANGE=[0,5],/YLOG, $
		XLAB='Acquistion'
	TR_TIME_NRH, TAB, TEMPS,/OPLOT 
	wset,11
	PLOT,Tbc,XTITLE='Correction',/YLOG
	SORTIE= FLTARR(N_ELEMENTS(Tab))
	FOR I=0, N_ELEMENTS(TAB)-1 DO $
		Sortie[i]= Tbc[FIX(Tab[i]*1000)]
	wset,12
	TR_TIME_NRH,Sortie,Temps,XLAB='Sortie apres correction'
ENDIF


RETURN


END
