;+ ; Contains the time_conv procedure ; and associated functions ; ; :Author: ; Baptiste Cecconi ; ; :History: ; 08/01/2002: first idea. ; ; 13/05/2002: Changed Proc. names and split files ; Added support for $ROOT_RPWS system variable ; ; 2004/12/03: File Created ; ; 2004/12/03: Last Edit ;- ; ; ------------------------------------------------- Function AJ_T97, aj ; ------------------------------------------------- ; date conversion AAAAJJJ -> T1997.0 or AAJJJ -> T1997.0 ; YYYYDDD -> T1997.0 or YYDDD -> T1997.0 ; data type = long integer or double precision, scalar or 1D array ; call : t97 = AJ_T97(aj) ; t97 = AJ_T97(yd) deb= double([0,reform(rebin(reform([365,365,365,366],4,1),4,15),60)]) for i=1,60 do deb(i)=deb(i)+deb(i-1) aj=double(aj) a=long(aj/1000.) test=where(a lt 60) & if test(0) ne -1 then a(test)=a(test)+2000 test=where(a lt 100) & if test(0) ne -1 then a(test)=a(test)+1900 t97=deb(a-1997)+(aj mod 1000.) return, t97 end ; ------------------------------------------------- Function AJ_AMJ, aj ; ------------------------------------------------- ; date conversion AAAAJJJ -> AAAAMMJJ or AAJJJ -> AAMMJJ ; YYYYDDD -> YYYYMMDD or YYDDD -> YYMMDD ; data type = long integer or double precision, scalar or 1D array ; call : amj = AJ_AMJ(aj) ; ymd = AJ_AMJ(yd) amj=aj for i=0, n_elements(aj)-1 do begin j=aj(i) mod 1000 & a=long(aj(i)/1000) m=1 & k=1 & ms=31 while j gt ms do begin m=m+1 & j=j-ms & k=-k case m of 2: if (a mod 4) eq 0 then ms=29 else ms=28 3: ms=31 8: begin k=1 & ms=31 end else: ms=ms+k endcase endwhile amj(i)=a*10000L+m*100+j endfor return, amj end ; ------------------------------------------------- Function T97_AJ, t97 ; ------------------------------------------------- ; date conversion T1997.0 -> AAAAJJJ ; T1997.0 -> YYYYDDD ; data type MUST BE double precision, scalar or 1D array ; call : aj = T97_AJ(t97) ; yd = T97_AJ(t97) aa = dindgen(61)+1997. deb= double([0,reform(rebin(reform([365,365,365,366],4,1),4,15),60)]) for i=1,60 do deb(i)=deb(i)+deb(i-1) aj=double(t97) for i=0, n_elements(t97)-1 do begin j=t97(i)-deb test=where(j ge 1.0) aj(i)=aa(test(n_elements(test)-1))*1000.d0+j(test(n_elements(test)-1)) endfor return, aj end ; ------------------------------------------------- Function AMJ_AJ, amj ; ------------------------------------------------- ; date conversion AAAAMMJJ -> AAAAJJJ or AAMMJJ -> AAJJJ ; YYYYMMDD -> YYYYDDD or YYMMDD -> YYDDD ; data type = long integer or double precision, scalar or 1D array ; call : aj = AMJ_AJ(amj) ; yd = AMJ_AJ(ymd) mois=[0L,31,59,90,120,151,181,212,243,273,304,334,365] a=long(amj/10000) m=long((amj-a*10000L)/100) j=mois(m-1) test=float(a)/4. for i=0, n_elements(a)-1 do $ if test(i) eq float(fix(test(i))) and m(i) ge 3 then j(i)=j(i)+1 aj=a*1000+j+(amj-a*10000-m*100) return, aj end ; ============================================================================= PRO TC_refresh,params ; ----------------------------------------------------------------------------- time = params.time t97 = double(time.d)+time.h/24.d0+time.m/1440.d0+time.s/86400.d0 amj = aj_amj(t97_aj(t97)) aj = t97_aj(t97) widget_control,params.text(0),set_value=string(format='(f20.5)',t97) widget_control,params.text(1),set_value=string(format='(f20.5)',amj) widget_control,params.text(2),set_value=string(format='(f20.5)',aj) widget_control,params.text(3),set_value=string(format='(I2.2)',time.h) widget_control,params.text(4),set_value=string(format='(I2.2)',time.m) widget_control,params.text(5),set_value=string(format='(f4.1)',time.s) ;stop end ; ============================================================================= PRO TC_event,event ; ----------------------------------------------------------------------------- widget_control,event.id,get_uvalue=uv widget_control,event.top,get_uvalue=params if uv eq 99 then widget_control,event.top,/destroy else begin widget_control,event.id,get_value=timetmp timetmp = double(timetmp(0)) timeD = params.time.d timeH = params.time.h timeM = params.time.m timeS = params.time.s case uv of 0 : timeD = long(timetmp) 1 : timeD = long(aj_t97(amj_aj(timetmp))) 2 : timeD = long(aj_t97(timetmp)) 3 : timeH = fix(timetmp) 4 : timeM = fix(timetmp) 5 : timeS = float(timetmp) endcase if uv le 2 then begin timeH = fix((timetmp mod 1.d0)*24.d0) timeM = fix(((timetmp mod 1.d0) - timeH/24.d0)*1440.d0) timeS = ((timetmp mod 1.d0) - timeH/24.d0 - timeM/1440.d0)*86400. endif timeS = (round(timeS*10.))/10. if timeS ge 60. then begin timeM = timeM + fix(timeS)/60 & timeS = timeS mod 60. endif if timeM ge 60 then begin timeH = timeH + timeM/60 & timeM = timeM mod 60 endif if timeH ge 24 then begin timeD = timeD + long(timeH/24) & timeH = timeH mod 24 endif params.time.d = timeD params.time.h = timeH params.time.m = timeM params.time.s = timeS widget_control,event.top,set_uvalue=params TC_refresh,params widget_control endelse end ;+ ; small widget utility to convert times between several formats used in Df RPWS ; ; :Uses: ; aj_amj, amj_aj ;- PRO time_conv ; Defining default path for common RPWS functions ; ----------------------------------------------- spawn,'echo $ROOT_RPWS',root_dir !path = !path + ':'+root_dir+'Pro' ; Cretaing widgets ; ---------------- mainWid = widget_base(title='DfRPWS Time Converter',/column) mwid_Info = widget_label(mainWid,value='Enter any Value :',/align_center) editWid = widget_base(mainWid,/frame,/column) ewid_t97 = widget_base(editWid,/row) ewid_t97Title = widget_label(ewid_t97,value='t97: ',xsize=50) ewid_t97Value = widget_Text(ewid_T97,/Editable,Xsize=20,uvalue=0) ewid_amj = widget_base(editWid,/row) ewid_amjTitle = widget_label(ewid_amj,value='amj: ',xsize=50) ewid_amjValue = widget_text(ewid_amj,/editable,xsize=20,uvalue=1) ewid_aj = widget_base(editWid,/row) ewid_ajTitle = widget_label(ewid_aj,value='aj: ',xsize=50) ewid_Ajvalue = Widget_Text(ewid_Aj,/Editable,Xsize=20,uvalue=2) ewid_hms = widget_base(editWid,/row) ewid_hmsHtitle = widget_label(ewid_hms,value='h: ',xsize=20) ewid_hmsHvalue = widget_text(ewid_hms,/editable,xsize=3,uvalue=3) ewid_hmsMtitle = widget_label(ewid_hms,value='m: ',xsize=20) ewid_hmsMvalue = widget_text(ewid_hms,/editable,xsize=3,uvalue=4) ewid_hmsStitle = widget_label(ewid_hms,value='s: ',xsize=20) ewid_hmsSvalue = widget_text(ewid_hms,/editable,xsize=4,uvalue=5) mwid_copyright = widget_label(mainWid,value="© B.Cecconi 01/2002",/align_right) mwid_copyright = widget_label(mainWid,value="Observatoire de Meudon",/align_right) mwid_Quit = widget_button(mainWid,value='QUIT',uvalue=99) params = {text:[ewid_t97Value,ewid_amjValue,ewid_ajValue,ewid_hmsHvalue,ewid_hmsMvalue,ewid_hmsSvalue],time:{time_t97, d:1l, h:0, m:0, s:0.}} widget_control, mainWid, set_uvalue=params widget_control, mainWid, /realize TC_refresh,params xmanager,'TC',mainWid,/no_block end