! cso_plot.astro ! draw frequency layout for CSO receiver tuning tuning at CSO ! sradford, 2013-07-15, 2013-09-23, 2014-01-10, 2014-01-14 ! begin cso_plot greg\set plot land tick 0 0 0 0 ! force loading of molecular catalog alma\frequency "12co2-1" 230.538 USB 6000 ! load cso line catalog @cso_lines set atm new sic message astro s-e ! suppress atm error messages clear greg\set box 4 26 2.5 19 def double bw[2] if (cso%bw.eq.1) then ! narrow receivers let bw 1 2 else if (cso%bw.eq.4) then ! narrow receivers let bw 4 8 else say "unsupported receiver bandwidth" endif if (cso%if.gt.bw[2]).or.(cso%if.lt.bw[1]) then say "if offset outside receiver bandpass" return endif ! atmospheric transmission, sb correction def real rf[101,2] ! usb, lsb def real trans[101,2] def real sbcorr[101,2] def real tau_usb tau_lsb tau_line sbc def double lo if ((cso%sb.eq."U")) then let lo cso%freq-cso%if let freq_sig cso%freq let freq_ima freq_sig atm let tau_usb tau_tot let tau_line tau_tot let freq_sig cso%freq-2*cso%if let freq_ima freq_sig atm let tau_lsb tau_tot let sbc 0.5*(1+exp((tau_usb-tau_lsb)*airmass)) else let lo cso%freq+cso%if let cso%sb "L" let freq_sig cso%freq let freq_ima freq_sig atm let tau_lsb tau_tot let tau_line tau_tot let freq_sig cso%freq+2*cso%if let freq_ima freq_sig atm let tau_usb tau_tot let sbc 0.5*(1+exp((tau_lsb-tau_usb)*airmass)) endif ! atmosphere for i 1 to 101 let rf[i,1] lo+(bw[1]+(bw[2]-bw[1])*(i-1)|100) ! usb let freq_sig rf[i,1] let freq_ima freq_sig atm let tau_usb tau_tot let trans[i,1] exp(-tau_tot*airmass)*100 let rf[i,2] lo-(bw[1]+(bw[2]-bw[1])*(i-1)|100) ! lsb let freq_sig rf[i,2] let freq_ima freq_sig atm let tau_lsb tau_tot let trans[i,2] exp(-tau_tot*airmass)*100 let sbcorr[i,1] 0.5*(1+exp((tau_usb-tau_lsb)*airmass))*100 let sbcorr[i,2] 0.5*(1+exp((tau_lsb-tau_usb)*airmass))*100 next ! Receiver tuning draw text 0 0 "CSO" 9 /char 7 draw text 0 0 'cso%name'" "'cso%freq'" "'cso%sb'"SB "'cso%if' 8 /char 8 draw text 0 0 "LO: "'lo'" GHz" 7 /char 9 ! atmosphere parameters draw text 0 -1.2 "Airmass = "'nint(airmass*10)|10'", ZA = "'nint(acos(1|airmass)*180|pi)'"^" 9 /char 7 draw text 0 -2.3 "PWV = "'nint(10*water)|10'" mm" 9 /char 7 draw text 0 -3.4 "\g\it (225 GHz) \s[ "'nint(100*water|20)|100' 9 /char 7 pen 0 /col 3 draw text -2 -1.2 " direct: " 7 /char 9 draw text -2 -1.2 'nint(sbc*100)|100' 9 /char 9 pen 0 /col 2 draw text -2 -2.3 "inverse: " 7 /char 9 draw text -2 -2.3 'nint(1|sbc*100)|100' 9 /char 9 pen 0 /col 0 draw text -6.25 -1.75 "SB corr. " 7 /char 9 draw text 0 -1.2 "Trans. = "'nint(exp(-tau_line*airmass)*100)'"%" 8 /char 8 draw text 0 -2.3 "\g\it\iA = "'nint(tau_line*airmass*100)|100' 8 /char 8 ! ffts1 if (exist(ffts1)) then ! draw text 0 -1.2 "FFTS1"'ffts1%mode'" "'ffts1%if' 8 /char 8 draw text 5 0 "FFTS1"'ffts1%mode'" "'ffts1%if' 9 /char 7 def double fftspoly[4,2] if ((ffts1%mode.eq."W")) then let fftspoly[1,1] ffts1%if-0.5 let fftspoly[2,1] ffts1%if-0.5 let fftspoly[3,1] ffts1%if+0.5 let fftspoly[4,1] ffts1%if+0.5 else let ffts1%mode "N" let fftspoly[1,1] ffts1%if-0.25 let fftspoly[2,1] ffts1%if-0.25 let fftspoly[3,1] ffts1%if+0.25 let fftspoly[4,1] ffts1%if+0.25 endif let fftspoly[1,2] 0 let fftspoly[2,2] -5 let fftspoly[3,2] -5 let fftspoly[4,2] 0 endif ! usb tuning lim bw[1] bw[2] -10 105 greg\set box 5 26 10.4 15.9 label "Transmission [%]" /y greg\set box 4 26 10.4 15.9 axis xlo axis yleft axis yright /tick none label "IF frequency [GHz]" /x draw text 3 0 "Optical depth [\g\it\iA]" 5 -90 /char 6 for xtau 0 0.2 0.5 1 2 draw rel bw[2] 100*exp(-xtau) /user draw line bw[2]-0.015*(bw[2]-bw[1]) 100*exp(-xtau) /user draw text bw[2] 100*exp(-xtau) " "'nint(xtau*10)|10' 6 /user next for xtau 0 0.1 0.3 0.4 0.6 0.7 0.8 0.9 1.5 3 draw rel bw[2] 100*exp(-xtau) /user draw line bw[2]-0.0075*(bw[2]-bw[1]) 100*exp(-xtau) /user next draw rel bw[2] 0 /user draw line bw[2]-0.015*(bw[2]-bw[1]) 0 /user draw text bw[2] 0 " \gv" 6 /user if (exist(ffts1)) then poly fftspoly /var /fill 1 draw text ffts1%if 0.1 "FFTS1"'ffts1%mode' 8 /u endif lim lo+bw[1] lo+bw[2] = = axis xup /label p draw text 0 1.5 "USB frequency [GHz]" 8 /char 8 ! lines ! repeat for cso%line if (exist(astro%line)) then for i 1 to astro%line%n if (astro%line%freq[i].ge.lo+bw[1]).and.(astro%line%freq[i].le.lo+bw[2]) then draw rel astro%line%freq[i] 40 /u draw line astro%line%freq[i] 60 /u draw text astro%line%freq[i] 75 'astro%line%name[i]' 5 45 /u endif next endif if (exist(cso%line)) then for i 1 to cso%line%n if (cso%line%freq[i].ge.lo+bw[1]).and.(cso%line%freq[i].le.lo+bw[2]) then draw rel cso%line%freq[i] 40 /u draw line cso%line%freq[i] 60 /u draw text cso%line%freq[i] 75 'cso%line%name[i]' 5 45 /u endif next endif if ((cso%sb.eq."U")) then pen /col 1 draw rel cso%freq 40 /user draw line cso%freq 60 /user pen /col 0 draw text cso%freq 25 'cso%name' 5 /u endif ! atmosphere conn rf[,1] trans[,1] pen 0 /col 3 conn rf[,1] sbcorr[,1] pen 0 /col 2 let sbcorr[,1] 10000|sbcorr[,1] conn rf[,1] sbcorr[,1] pen 0 /col 0 ! lsb tuning greg\set box 5 26 2.5 8 label "Transmission [%]" /y greg\set box 4 26 2.5 8 lim bw[1] bw[2] = = axis xup /label p axis yleft axis yright /tick none draw text 3 0 "Optical depth [\g\it\iA]" 5 -90 /char 6 for xtau 0 0.2 0.5 1 2 draw rel bw[2] 100*exp(-xtau) /user draw line bw[2]-0.015*(bw[2]-bw[1]) 100*exp(-xtau) /user draw text bw[2] 100*exp(-xtau) " "'nint(xtau*10)|10' 6 /user next for xtau 0 0.1 0.3 0.4 0.6 0.7 0.8 0.9 1.5 3 draw rel bw[2] 100*exp(-xtau) /user draw line bw[2]-0.0075*(bw[2]-bw[1]) 100*exp(-xtau) /user next draw rel bw[2] 0 /user draw line bw[2]-0.015*(bw[2]-bw[1]) 0 /user draw text bw[2] 0 " \gv" 6 /user if (exist(ffts1)) then poly fftspoly /var /fill 1 draw text ffts1%if 0.1 "FFTS1"'ffts1%mode' 8 /u endif if (exist(ffts1)) then poly fftspoly /var /fill 1 draw text ffts1%if 0.1 "FFTS1"'ffts1%mode' 8 /u endif lim lo-bw[1] lo-bw[2] = = axis xlo label "LSB frequency [GHz]" /x ! lines if (exist(astro%line)) then for i 1 to astro%line%n if (astro%line%freq[i].le.lo-bw[1]).and.(astro%line%freq[i].ge.lo-bw[2]) then draw rel astro%line%freq[i] 40 /u draw line astro%line%freq[i] 60 /u draw text astro%line%freq[i] 75 'astro%line%name[i]' 5 45 /u endif next endif if (exist(cso%line)) then for i 1 to cso%line%n if (cso%line%freq[i].le.lo-bw[1]).and.(cso%line%freq[i].ge.lo-bw[2]) then draw rel cso%line%freq[i] 40 /u draw line cso%line%freq[i] 60 /u draw text cso%line%freq[i] 75 'cso%line%name[i]' 5 45 /u endif next endif if ((cso%sb.eq."L")) then pen /col 1 draw rel cso%freq 40 /user draw line cso%freq 60 /user pen /col 0 draw text cso%freq 25 'cso%name' 5 /u endif conn rf[,2] trans[,2] pen 0 /col 3 conn rf[,2] sbcorr[,2] pen 0 /col 2 let sbcorr[,2] 10000|sbcorr[,2] conn rf[,2] sbcorr[,2] pen 0 /col 0