pro make_visibilities,event ;Author: Rick Pernak, NASA Goddard Space Flight Center ;get data from input widget_control,event.top,get_uvalue=datptr dat = *datptr ;check whether visibilities should be constructed or restored widget_control,dat.savefile,get_value=name ;restore user and default detector arrays det = dat.udet ;construct/restore visibilities if name eq '' then begin ;find date widget_control,dat.date,get_value=date date = date+' ' ;create string for save file name split = strsplit(date,'-',/extract) name=strcompress(split[0]+split[1]+split[2],/rem) ;find time interval widget_control,dat.time1,get_value=time1 widget_control,dat.time2,get_value=time2 ;make times for file name split = strsplit(time1,':',/extract) t1 = split[0]+split[1]+split[2] split = strsplit(time2,':',/extract) t2 = split[0]+split[1]+split[2] t = t1+'-'+t2 name = name+'_'+t ;create time interval array time1 = date+time1 time2 = date+time2 times = [time1,time2] ;find x and yoffsets widget_control,dat.xoff,get_value=xoff widget_control,dat.yoff,get_value=yoff ;create xyoffset array xy = fix([xoff,yoff]) ;find energies widget_control,dat.elo,get_value=e1 widget_control,dat.ehi,get_value=e2 ;create energy array e1 = double(e1) & e2 = double(e2) en = [e1,e2] ;make energy strings sen1 = string(fix(e1)) & sen2 = string(fix(e2)) sen = 'E'+sen1+'-'+sen2 sen = strcompress(sen,/rem) ;finalize save file name name=name+sen+'_vis.fits' widget_control,dat.savefile,set_value=name print,'Computing Visibilities' ;make, edit, and combine (conjugate) visibilities ;using usershell (gh) ; vis = hsi_vis_usershell(savefile=name,xy=xy,time=times,en=en) ;using object code (Richard and Andre), requires vis & hxrbsqueue directories obj = hsi_image() obj -> set,vis_time_int=times obj -> set,image_algorithm='njit' obj -> set,det_index_mask=[1,1,1, 1,1,1, 1,1,1] obj -> set,im_energy_binning = en obj -> set,pixel_size = [.5d,.5d] obj -> set,xyoffset = xy obj -> set,image_dim = [128,128] obj -> set,NJ_SHOW_MAPS=1 ; nphz = replicate(12d,9) ; obj -> set, phz_n_roll_bins_min= nphz ; nroll = [126,128,120,68,40,22,12,12,12] ; nroll = replicate(12,9) ; obj -> set,phz_n_roll_bins_min = 12 ; obj -> set,phz_n_roll_bins_max = 128 ; obj -> set,phz_n_roll_bins_info = nroll ; obj -> set,phz_n_roll_bins_control = nroll temp = obj->get(/obj,class='hsi_visibility') temp -> write,vis_out=name vis = temp->getdata() vise = hsi_vis_edit(vis,subcoll=det) visc = hsi_vis_combine(vise,/conjugate) box = dialog_message('Visibilities constructed',$ dialog_parent=event.id,title='Visibilities') endif else begin ; restore,name obj = hsi_image() obj ->set,vis_filename=name temp = obj->get(/obj,class='hsi_visibility') vis = temp->getdata() vise = hsi_vis_edit(vis,subcoll=det) visc = hsi_vis_combine(vise,/conjugate) box = dialog_message('Visibilities restored',$ dialog_parent=event.id,title='Visibilities') ;repopulate the text fields in GUI ;time and date time1 = (strsplit(anytim(vis[0].trange[0],/vms),' ',/extract))[1] time1 = strmid(time1,0,8) ;returns time in TT:TT:TT format time2 = (strsplit(anytim(vis[0].trange[1],/vms),' ',/extract))[1] time2 = strmid(time2,0,8) ;returns time in TT:TT:TT format day = (strsplit(anytim(vis[0].trange[0],/vms),' ',/extract))[0] split = strsplit(day,'-',/extract) day = split[2]+'-'+split[1]+'-'+split[0] day = strlowcase(day) widget_control,dat.time1,set_value=time1 widget_control,dat.time2,set_value=time2 widget_control,dat.date,set_value=day ;x and y offsets xpos = string(fix(vis[0].xyoffset[0])) xpos = strcompress(xpos,/rem) ypos = string(fix(vis[0].xyoffset[1])) ypos = strcompress(ypos,/rem) widget_control,dat.xoff,set_value=xpos widget_control,dat.yoff,set_value=ypos ;energies en1 = string(vis[0].erange[0],format='(f5.1)') en1 = strcompress(en1,/rem) en2 = string(vis[0].erange[1],format='(f5.1)') en2 = strcompress(en2,/rem) widget_control,dat.elo,set_value=en1 widget_control,dat.ehi,set_value=en2 endelse ;store new visibilities into data structure *dat.vis_un = vis *dat.vis_edit = vise *dat.vis_con = visc *datptr = dat end