PRO CW_SCANSOURCE_Event, Event
COMMON FIELDscansource, FIELD1, FIELD2, FIELD3, FIELD4, FIELD5, $
FIELD41, FIELD42, FIELD43, FIELD44, FIELD45, FIELD46, FIELD47, FIELD48, $
FIELD16, FIELD17, FIELD18, FIELD19, BUTSTART, BUTZOOM, BUTPROFI
COMMON DATAscansource, fichier, Idimg, facteur, niveau, nbmax, compteur, imag, imgorig, coord
COMMON VISU_2D,str_visu
COMMON FICRH,str_fic
COMMON INFO2D, str_inf2d
COMMON LIMIT,str_lim
COMMON OPTPOSI, str_opt

  WIDGET_CONTROL,Event.Id,GET_UVALUE=Ev

  flag=0

  CASE Ev OF 

  'BUTSTART': BEGIN
    IF (compteur EQ 0) THEN BEGIN
        WIDGET_CONTROL, BUTZOOM, SENSITIVE=1
        WIDGET_CONTROL, BUTPROFI, SENSITIVE=1
        WIDGET_CONTROL, BUTSTART, SET_VALUE='NEXT'
        nbmax=str_opt.Nbmax & facteur=str_opt.Facteur & fmax=str_opt.fmax
        READ_NRHIM, fichier, '00:00:00', str_inf2d, imag, str_im, INDIC=Idimg
        imag = imag(str_lim.Xd:str_lim.Xf, str_lim.Yd:str_lim.Yf)
        WIDGET_CONTROL, FIELD2, SET_VALUE=str_im.time
        maxtab=MAX(imag,i)
        niveau=maxtab*fmax/100.0
    ENDIF
    
    ; recherche de la valeur et de la position du max
    sz = SIZE(imag)
    dimx = sz(1)*facteur
    dimy = sz(2)*facteur
    imgtrv = CONGRID(imag, dimx, dimy, CUBIC=-0.5)
    maxtab=MAX(imgtrv,i)
    xmax=i MOD dimx
    ymax=i/dimx
    
    ; recherche des 8 distances
    di = FLTARR(10)
    points = INTARR(8,2)
    TRV_DIST, imgtrv, xmax, ymax, di, points, str_opt.seuil
    di(8)=di(0)
    di(9)=di(1)

    ; recherche de l'ellipse a mi-hauteur
    gra = FLTARR(8)
    grb = FLTARR(8)
    tet = FLTARR(8)
    DET_ELLIP, di, gra, grb, tet
    naire=0
    aire=1.E20
    FOR i=0,7 DO BEGIN
        IF ((gra(i)*grb(i)) GT 0.0) THEN BEGIN
            IF (aire GT (!PI*SQRT(1/(gra(i)*grb(i))))) THEN BEGIN
                aire=(!PI*SQRT(1/(gra(i)*grb(i))))
                naire=i
            ENDIF
        ENDIF
    ENDFOR
    
    ;Affichage des resultats
    idx = xmax/facteur + str_lim.Xd
    idy = ymax/facteur + str_lim.Yd
    axea = gra(naire)*(facteur^2)
    axeb = grb(naire)*(facteur^2)
    incl = tet(naire)
    dib = di/facteur
    str_gauss = {GAUSS}
    str_gauss.max = maxtab
    str_gauss.xmax = idx & str_gauss.ymax = idy
    str_gauss.gra = axea & str_gauss.grb = axeb & str_gauss.tet = incl
    flux = cp_fluxpos_nrh2(str_gauss, str_inf2d.Ray, str_inf2d.Freq, dimx, dimy)
    IF coord EQ 0 THEN BEGIN    ; affichage en coordonnees helio
        Xd = ind_rs(0, str_inf2d.Xcen, str_inf2d.Ray)
        Yd = ind_rs(0, str_inf2d.Ycen, str_inf2d.Ray)
        idx=ind_rs(idx, str_inf2d.Xcen, str_inf2d.Ray)
        idy=ind_rs(idy, str_inf2d.Ycen, str_inf2d.Ray)
        xa=COS(incl)/SQRT(axea)
        ya=SIN(ABS(incl)/SQRT(axea))
        xa = ind_rs(xa, str_inf2d.Xcen, str_inf2d.Ray) - Xd
        ya = ind_rs(ya, str_inf2d.Ycen, str_inf2d.Ray) - Yd
        xb=COS(incl)/SQRT(axeb)
        yb=SIN(ABS(incl)/SQRT(axeb))
        xb = ind_rs(xb, str_inf2d.Xcen, str_inf2d.Ray) - Xd
        yb = ind_rs(yb, str_inf2d.Ycen, str_inf2d.Ray) - Yd
        axea = SQRT(xa^2 + ya^2)
        axeb = SQRT(xb^2 + yb^2)
        dib(0) = ind_rs(dib(0), str_inf2d.Xcen, str_inf2d.Ray) - Xd
        xdi = ind_rs(dib(1)/SQRT(2), str_inf2d.Xcen, str_inf2d.Ray) - Xd
        ydi = ind_rs(dib(1)/SQRT(2), str_inf2d.Ycen, str_inf2d.Ray) - Yd
        dib(1) = SQRT(xdi^2 + ydi^2)
        dib(2) = ind_rs(dib(2), str_inf2d.Ycen, str_inf2d.Ray) - Yd
        xdi = ind_rs(dib(3)/SQRT(2), str_inf2d.Xcen, str_inf2d.Ray) - Xd
        ydi = ind_rs(dib(3)/SQRT(2), str_inf2d.Ycen, str_inf2d.Ray) - Yd
        dib(3) = SQRT(xdi^2 + ydi^2)
        dib(4) = ind_rs(dib(4), str_inf2d.Xcen, str_inf2d.Ray) - Xd
        xdi = ind_rs(dib(5)/SQRT(2), str_inf2d.Xcen, str_inf2d.Ray) - Xd
        ydi = ind_rs(dib(5)/SQRT(2), str_inf2d.Ycen, str_inf2d.Ray) - Yd
        dib(5) = SQRT(xdi^2 + ydi^2)
        dib(6) = ind_rs(dib(6), str_inf2d.Ycen, str_inf2d.Ray) - Yd
        xdi = ind_rs(dib(7)/SQRT(2), str_inf2d.Xcen, str_inf2d.Ray) - Xd
        ydi = ind_rs(dib(7)/SQRT(2), str_inf2d.Ycen, str_inf2d.Ray) - Yd
        dib(7) = SQRT(xdi^2 + ydi^2)
    ENDIF ELSE BEGIN
        axea = 1/SQRT(axea) & axeb = 1/SQRT(axeb)
    ENDELSE

    WIDGET_CONTROL, FIELD3, SET_VALUE=flux
    WIDGET_CONTROL, FIELD4, SET_VALUE=idx
    WIDGET_CONTROL, FIELD5, SET_VALUE=idy
    WIDGET_CONTROL, FIELD41, SET_VALUE=dib(0)
    WIDGET_CONTROL, FIELD42, SET_VALUE=dib(1)
    WIDGET_CONTROL, FIELD43, SET_VALUE=dib(2)
    WIDGET_CONTROL, FIELD44, SET_VALUE=dib(3)
    WIDGET_CONTROL, FIELD45, SET_VALUE=dib(4)
    WIDGET_CONTROL, FIELD46, SET_VALUE=dib(5)
    WIDGET_CONTROL, FIELD47, SET_VALUE=dib(6)
    WIDGET_CONTROL, FIELD48, SET_VALUE=dib(7)
    WIDGET_CONTROL, FIELD16, SET_VALUE=naire
    WIDGET_CONTROL, FIELD17, SET_VALUE=axea
    WIDGET_CONTROL, FIELD18, SET_VALUE=axeb
    WIDGET_CONTROL, FIELD19, SET_VALUE=incl*!RADEG

    ;calcul du nb de pixels en x et y en fonction de la region selectionnee
    interpx= Fix(str_visu.dim /( str_lim.Xf-str_lim.Xd))
    interpy= Fix(str_visu.dim /( str_lim.Yf-str_lim.Yd))
    interp= interpx
    if interpx gt interpy then interp = interpy
    nbpx = (str_lim.Xf-str_lim.Xd+1)*interp
    nbpy = (str_lim.Yf-str_lim.Yd+1)*interp
    ; affichage de l'image en 3d
    imgaff = REBIN(imag, nbpx, nbpy)
    WINDOW, /FREE, XSIZE=str_visu.dim, YSIZE=str_visu.dim
    SURFR, AZ=az
    SHADE_SURF, imgaff, XSTYLE=4, YSTYLE=4, ZSTYLE=1, AZ=az, MIN_VALUE=0.0, ZRANGE=[0, MAX(imag)]
    WINDOW, /FREE, XSIZE=str_visu.dim, YSIZE=str_visu.dim
    TVSCL, imgaff
    AFF_DIST, (di/facteur)*interp, (xmax/facteur)*interp, (ymax/facteur)*interp, COLOR=2
    PLOTS, (points(*,0)/facteur)*interp, (points(*,1)/facteur)*interp, /DEVICE, COLOR=2
    TVELLIPSE, interp/(facteur*SQRT(grb(naire))), interp/(facteur*SQRT(gra(naire))), $
    (xmax/facteur)*interp, (ymax/facteur)*interp, tet(naire)*!RADEG+90, COLOR=2

    ; soustraction de la gaussienne
    tab_sous = FLTARR(dimx, dimy)
    temp = {GAUSS}
    temp.max = maxtab
    temp.xmax = xmax & temp.ymax = ymax
    temp.gra = gra(naire) & temp.grb = grb(naire) & temp.tet = tet(naire)
    calc_volgauss, temp, dimx, dimy, tab_sous
    imgtrv = imgtrv - tab_sous
    imgorig = imag
    imag = CONGRID(imgtrv, dimx/facteur, dimy/facteur, CUBIC=-0.5)
    compteur = compteur+1
    maxtab=MAX(imag,i)
    IF (maxtab LT niveau) OR (compteur EQ nbmax) THEN BEGIN
        WIDGET_CONTROL, BUTSTART, SET_VALUE='START'
        compteur = 0
    ENDIF
    END
      'BUTRESET': BEGIN
    WIDGET_CONTROL, BUTSTART, SET_VALUE='START
    compteur = 0
    END
      'BUTPROFI': BEGIN
    ;calcul du nb de pixels en x et y en fonction de la region selectionnee
    interpx= Fix(str_visu.dim /( str_lim.Xf-str_lim.Xd))
    interpy= Fix(str_visu.dim /( str_lim.Yf-str_lim.Yd))
    interp= interpx
    if interpx gt interpy then interp = interpy
    nbpx = (str_lim.Xf-str_lim.Xd+1)*interp
    nbpy = (str_lim.Yf-str_lim.Yd+1)*interp
    imgaff = REBIN(imgorig, nbpx, nbpy)
    ;PROFILCR1, imgaff
    PROFILES, imgaff
    END
      'BUTZOOM': ZOOM, /INTERP
      'LSTFORMA': coord = event.index   ; format des coordonnees helio ou en pixel
      'BUTDONE': BEGIN
    WHILE !D.WINDOW NE -1 DO WDELETE, !D.WINDOW
    WIDGET_CONTROL, Event.Top, /DESTROY
    END

  'FIELD2': BEGIN       ; on change l'heure
        ;WIDGET_CONTROL, FIELD2, GET_VALUE=temps
        ;temps=temps(0)
    temps = Event.Value
    IF (HMS(temps) GE HMS(str_inf2d.Hd)) AND (HMS(temps) LE HMS(str_inf2d.Hf)) THEN BEGIN
        Idimg = TIME_IND_NRH(fichier, temps)
            WIDGET_CONTROL, FIELD1, SET_VALUE=Idimg+1
    ENDIF ELSE rep = DIALOG_MESSAGE('Time out of range', /ERROR)
      END
  'FIELD1': BEGIN       ; on change l'index de l'image
        ;WIDGET_CONTROL, FIELD1, GET_VALUE=Idimg
    ;Idimg = Idimg-1
    Idimg = Event.Value-1
    IF (Idimg LT str_inf2d.nim) AND (Idimg GE 0) THEN BEGIN
        READ_NRHIM, fichier, '00:00:00', str_inf2d, temp, str_im, INDIC=Idimg
        WIDGET_CONTROL, FIELD2, SET_VALUE=str_im.time
    ENDIF ELSE BEGIN
        rep = DIALOG_MESSAGE('Index of image out of range', /ERROR)
        Idimg = 0
    ENDELSE
      END
  'BUTPLUS': BEGIN
    IF (Idimg+1) LT str_inf2d.nim THEN BEGIN
        Idimg = Idimg+1
        WIDGET_CONTROL, FIELD1, SET_VALUE=Idimg+1
        READ_NRHIM, fichier, '00:00:00', str_inf2d, temp, str_im, INDIC=Idimg
        WIDGET_CONTROL, FIELD2, SET_VALUE=str_im.time
    ENDIF ELSE rep = DIALOG_MESSAGE('No more images', /ERROR)
    END
  ENDCASE
    
END


; DO NOT REMOVE THIS COMMENT: END MAIN1
; CODE MODIFICATIONS MADE BELOW THIS COMMENT WILL BE LOST.



PRO cw_scansource, fich, index, GROUP=Group
COMMON FIELDscansource, FIELD1, FIELD2, FIELD3, FIELD4, FIELD5, $
FIELD41, FIELD42, FIELD43, FIELD44, FIELD45, FIELD46, FIELD47, FIELD48, $
FIELD16, FIELD17, FIELD18, FIELD19, BUTSTART, BUTZOOM, BUTPROFI
COMMON DATAscansource, fichier, Idimg, facteur, niveau, nbmax, compteur, imag, imgorig, coord
COMMON VISU_2D,str_visu
COMMON FICRH,str_fic
COMMON INFO2D, str_inf2d
COMMON LIMIT,str_lim

  IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0

  junk   = { CW_PDMENU_S, flags:0, name:'' }

  fichier = fich
  Idimg = index
  coord = 0

  CW_SCANSOURCE = WIDGET_BASE(GROUP_LEADER=Group, $
      COLUMN=1, $
      MAP=1, $
      TITLE='Details', $
      UVALUE='CW_SCANSOURCE')

  BASE2 = WIDGET_BASE(CW_SCANSOURCE, $
      ROW=1, $
      FRAME=1, $
      MAP=1, $
      TITLE='BMENU', $
      UVALUE='BASE2')
  BUTSTART = WIDGET_BUTTON(BASE2, VALUE = 'START', UVALUE='BUTSTART')
  BUTRESET = WIDGET_BUTTON(BASE2, VALUE = 'RESET', UVALUE='BUTRESET')
  BUTPROFI = WIDGET_BUTTON(BASE2, VALUE = 'PROFILE', UVALUE='BUTPROFI')
  BUTZOOM = WIDGET_BUTTON(BASE2, VALUE = 'ZOOM', UVALUE='BUTZOOM')
  LSTFORMA = WIDGET_DROPLIST(BASE2, VALUE=['Helio', 'Pixel'], UVALUE='LSTFORMA')
  BUTPLUS = WIDGET_BUTTON(BASE2, VALUE = 'Next image', UVALUE='BUTPLUS')
  BUTDONE = WIDGET_BUTTON(BASE2, VALUE = 'DONE', UVALUE='BUTDONE')

  FieldVal195 = [ 'hh:mm:ss' ]
  FIELD2 = CW_FIELD( CW_SCANSOURCE,VALUE=FieldVal195, $
      ROW=1, $
      STRING=1, $
      TITLE='Time:', $
      RETURN_EVENTS=1, $
      UVALUE='FIELD2')

  FIELD1 = CW_FIELD( CW_SCANSOURCE,VALUE='0', $
      ROW=1, $
      INTEGER=1, $
      TITLE='Index:', $
      RETURN_EVENTS=1, $
      UVALUE='FIELD1')

  FieldVal264 = [ '0.0' ]
  FIELD3 = CW_FIELD( CW_SCANSOURCE,VALUE=FieldVal264, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Max. Flux:', $
      UVALUE='FIELD3')

  FieldVal336 = [ '0' ]
  FIELD4 = CW_FIELD( CW_SCANSOURCE,VALUE=FieldVal336, $
      ROW=1, $
      FLOAT=1, $
      TITLE='X of Max:', $
      UVALUE='FIELD4')

  FieldVal411 = [ '0' ]
  FIELD5 = CW_FIELD( CW_SCANSOURCE,VALUE=FieldVal411, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Y of Max:', $
      UVALUE='FIELD5')

  LABEL7 = WIDGET_LABEL( CW_SCANSOURCE, $
      FRAME=1, $
      UVALUE='LABEL7', $
      VALUE='Distances')

  BASE49 = WIDGET_BASE(CW_SCANSOURCE, $
      COLUMN=2, $
      FRAME=1, $
      MAP=1, $
      TITLE='BDIST', $
      UVALUE='BASE49')

  FieldVal2114 = [ '0' ]
  FIELD41 = CW_FIELD( BASE49,VALUE=FieldVal2114, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D0', $
      UVALUE='FIELD41')

  FieldVal2116 = [ '0' ]
  FIELD42 = CW_FIELD( BASE49,VALUE=FieldVal2116, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D1', $
      UVALUE='FIELD42')

  FieldVal2118 = [ '0' ]
  FIELD43 = CW_FIELD( BASE49,VALUE=FieldVal2118, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D2', $
      UVALUE='FIELD43')

  FieldVal2120 = [ '0' ]
  FIELD44 = CW_FIELD( BASE49,VALUE=FieldVal2120, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D3', $
      UVALUE='FIELD44')

  FieldVal2122 = [ '0' ]
  FIELD45 = CW_FIELD( BASE49,VALUE=FieldVal2122, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D4', $
      UVALUE='FIELD45')

  FieldVal2124 = [ '0' ]
  FIELD46 = CW_FIELD( BASE49,VALUE=FieldVal2124, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D5', $
      UVALUE='FIELD46')

  FieldVal2126 = [ '0' ]
  FIELD47 = CW_FIELD( BASE49,VALUE=FieldVal2126, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D6', $
      UVALUE='FIELD47')

  FieldVal2128 = [ '0' ]
  FIELD48 = CW_FIELD( BASE49,VALUE=FieldVal2128, $
      ROW=1, $
      FLOAT=1, $
      TITLE='D7', $
      UVALUE='FIELD48')


  LABEL16 = WIDGET_LABEL( CW_SCANSOURCE, $
      FRAME=1, $
      UVALUE='LABEL16', $
      VALUE='Ellipse')

  FIELD16 = CW_FIELD( CW_SCANSOURCE,VALUE='0', $
      ROW=1, $
      INTEGER=1, $
      TITLE='Number:', $
      UVALUE='FIELD16')

  FieldVal1285 = [ '0' ]
  FIELD17 = CW_FIELD( CW_SCANSOURCE,VALUE=FieldVal1285, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Axe A:', $
      UVALUE='FIELD17')

  FieldVal1350 = [ '0' ]
  FIELD18 = CW_FIELD( CW_SCANSOURCE,VALUE=FieldVal1350, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Axe B:', $
      UVALUE='FIELD18')

  FIELD19 = CW_FIELD( CW_SCANSOURCE,VALUE='0', $
      ROW=1, $
      FLOAT=1, $
      TITLE='Theta:', $
      UVALUE='FIELD19')

  WIDGET_CONTROL, CW_SCANSOURCE, /REALIZE

  READ_NRHIM, fichier, '00:00:00', str_inf2d, imag, str_im, INDIC=Idimg
  imag = imag(str_lim.Xd:str_lim.Xf, str_lim.Yd:str_lim.Yf)
  imgorig = imag
  WIDGET_CONTROL, FIELD2, SET_VALUE=str_im.time
  WIDGET_CONTROL, FIELD1, SET_VALUE=Idimg+1
  compteur = 0
  WIDGET_CONTROL, BUTZOOM, SENSITIVE=0
  WIDGET_CONTROL, BUTPROFI, SENSITIVE=0

  XMANAGER, 'CW_SCANSOURCE', CW_SCANSOURCE, /NO_BLOCK
END