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