! P_UVBOTH ! !SET MARKER 0 0 .1 sym amarker1 'marker1' sym amarker2 'marker2' clear plot set box /def define integer ii ir iw ic nc k n n1 n2 imark nmap nadd i1 i2 define character xtext*30 ytext*30 atext*30 atype*8 fitext*12 cmark*12 define real l1 l2 l3 l4 real x1 dx y1 define double xmark define logical docurve ! if (name.eq." ") then say "Please enter UV file name (without extension) " let name endif symb abcdef 'name'.tuv if (file.ne.'abcdef') then image /close say "Changing to file " 'abcdef' if file.eq."NEW" then vector\transpose 'name'.uvt 'name'.tuv 213 else sic\sic search 'name'.tuv if (.not.sic$exist) then vector\transpose 'name'.uvt 'name'.tuv 213 endif endif on error return image 'name'.tuv let nz g_dim[1] /new integer let file 'abcdef' on error continue delete /variable uv delete /variable num on error define real uv[nz,2] num[nz] /global else image 'name'.tuv endif let nc (g_dim[2]-7)|3 @ p_uvheader.graphic ! let x1 box_xmin let y1 box_ymin if first.eq.0 then let n1 1 else let n1 first endif if last.eq.0 then let n2 nc else let n2 last endif let nmap n2-n1+1 let n int(sqrt(nmap+1)) if (n**2.lt.nmap) then let n = n+1 endif set expand min(3.|n,1.) let dx (box_xmax-x1)|n let dx min((box_ymax-y1)|n,dx) ! ! first pass to get limits if (limits.eq." ") then say "... Finding limits ..." let k n1-1 let l1 1e30 let l2 -1e30 let l3 l1 let l4 l2 for ik n1 to n2 let ir 5+3*ik let ii 6+3*ik let iw 7+3*ik for kax 1 to 2 if (kax.eq.1) then let atype 'xtype' else if (kax.eq.2) then let atype 'ytype' endif if (atype.eq."U") then let uv[kax] rg[1] else if (atype.eq."V") then let uv[kax] rg[2] else if (atype.eq."ANGLE") then let uv[kax] 180|pi*atan2(rg[2],rg[1]) else if (atype.eq."RADIUS") then let uv[kax] sqrt(rg[1]**2+rg[2]**2) else if (atype.eq."TIME") then let uv[kax] rg[5] else if (atype.eq."SCAN") then let uv[kax] rg[3] else if (atype.eq."NUMBER") then let num[i] i let uv[kax] num else if (atype.eq."AMP") then let uv[kax] sqrt(rg[ir]**2+rg[ii]**2) else if (atype.eq."PHASE") then let uv[kax] 180|pi*atan2(rg[ii],rg[ir]) else if (atype.eq."REAL") then let uv[kax] rg[ir] else if (atype.eq."IMAG") then let uv[kax] rg[ii] else if (atype.eq."WEIGHT") then let uv[kax] rg[iw] else say "E-UVPLOT, Type not supported " 'atype' endif next limits /var uv[1] uv[2] let l1 min(user_xmin,l1) let l2 max(user_xmax,l2) let l3 min(user_ymin,l3) let l4 max(user_ymax,l4) next symbol alimits 'l1'" "'l2'" "'l3'" "'l4' else symbol alimits 'limits' endif let in 0 /new integer for l 1 to g_dim[1] if (rg[l,3].lt.10000) then let in in+1 endif next let im g_dim[1]-in /new integer if (in.ne.0) then define real xa1[in] ya1[in] endif if (im.ne.0) then define real xa2[im] ya2[im] endif ! ! SECOND PASS TO PLOT let k n1-1 for j 1 to n for i 1 to n set box x1+(i-1)*dx x1+i*dx y1+(n-j)*dx y1+(n+1-j)*dx let k k+1 if ((k.gt.nc).or.(k.gt.n2)) then set expand 1.0 return else let xmark g_veloff+(k-g_convert[1,2])*g_velres if (mark.eq."FREQUENCY") then let imark nint((-(xmark-g_veloff)*g_restfre|299792.458+g_restfre)*1e3) let xmark 1d-6*imark else if (mark.eq."CHANNEL") then let xmark k else let mark "VELOCITY" let imark nint(xmark*10.) let xmark 1d-1*imark endif ! let ir 5+3*k let ii 6+3*k let iw 7+3*k for kax 1 to 2 if (kax.eq.1) then let atype 'xtype' else if (kax.eq.2) then let atype 'ytype' endif if (atype.eq."U") then let uv[kax] rg[1] let atext "U (meters)" else if (atype.eq."V") then let uv[kax] rg[2] let atext "V (meters)" else if (atype.eq."ANGLE") then let uv[kax] 180|pi*atan2(rg[2],rg[1]) let atext "UV position angle (degrees)" else if (atype.eq."RADIUS") then let uv[kax] sqrt(rg[1]**2+rg[2]**2) let atext "UV radius (meters)" else if (atype.eq."TIME") then let uv[kax] rg[5] let atext "Time (hours)" else if (atype.eq."SCAN") then let uv[kax] rg[3] let atext "Scan number" else if (atype.eq."NUMBER") then let num[i] i let uv[kax] num let atext "Visibility number" else if (atype.eq."AMP") then let uv[kax] sqrt(rg[ir]**2+rg[ii]**2) let atext "Amplitude (Janskys)" else if (atype.eq."PHASE") then let uv[kax] 180|pi*atan2(rg[ii],rg[ir]) let atext "Phase (degrees)" else if (atype.eq."REAL") then let uv[kax] rg[ir] let atext "Real part (Janskys)" else if (atype.eq."IMAG") then let uv[kax] rg[ii] let atext "Imaginary part (Janskys)" else if (atype.eq."WEIGHT") then let uv[kax] rg[iw] let atext "Relative Weight" else say "E-UVPLOT, Type not supported " 'atype' endif if (kax.eq.1) then let xtext 'atext' else if (kax.eq.2) then let ytext 'atext' endif next if (xtype.eq."U").and.(ytype.eq."V") then limits 300 -300 300 -300 point uv[1] uv[2] limits -300 300 -300 300 point uv[1] uv[2] else greg1\limits 'alimits' /variable uv[1] uv[2] let im 1 let in 1 for l 1 to g_dim[1] if (rg[l,3].lt.10000) then let xa1[in] uv[l,1] let ya1[in] uv[l,2] let in in+1 else let xa2[im] uv[l,1] let ya2[im] uv[l,2] let im im+1 endif next if (in.gt.1) then set marker 'amarker1' points xa1 ya1 endif if (im.gt.1) then pen 0 /col 3 set marker 'amarker2' points xa2 ya2 pen 0 /col 0 endif if (fit.ne." ") then if k.lt.10 then let fitext 'fit'00'k' else if k.lt.100 then let fitext 'fit'0'k' else let fitext 'fit''k' endif let docurve .true. on error let docurve .false. col x 1 y 2 /file 'name'.'fitext' on error if docurve then curve endif endif endif if i.eq.1.and.(k+n.gt.n2) then box label 'xtext' /x label 'ytext' /y else box n n endif set coord box let cmark 'xmark' dra text 0.1 -0.1 'cmark' 3 /box 7 endif next next let k n1-1 for j 1 to n for i 1 to n set box x1+(i-1)*dx x1+i*dx y1+(n-j)*dx y1+(n+1-j)*dx let k k+1 if (fit.ne." ") then if k.lt.10 then let fitext 'fit'00'k' else if k.lt.100 then let fitext 'fit'0'k' else let fitext 'fit''k' endif on error continue col x 1 /file 'name'.'fitext'r let i1 int(x[1]) let i2 int((x[1]-i1)*100) if (i1.ne.0.or.i2.ne.0) then draw text user_xmax-(user_xmax-user_xmin)|10 user_ymax-(user_ymax-user_ymin)|10 "FW = "'i1'.'i2' 4 /user let x[1] 0 endif endif next next set expand 1.