Changes in trunk/doc/userguide.tex [1217:1347]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/userguide.tex
r1217 r1347 48 48 package. 49 49 50 This userguide is beingupdated for the ASAP 2.1. Please report any50 This userguide has been updated for the ASAP 2.1. Please report any 51 51 mistakes you find. 52 52 … … 65 65 66 66 {\em Note. ASAP2.1 only runs on ATNF Linux machines which have been 67 updated to Debian Sarge and are using the ``DEBIAN sarge''67 updated to Debian Sarge and are using the ``DEBIANSarge'' 68 68 /usr/local. If your favourite machine has not been upgraded, send a 69 request your your friendly IT support.} 69 request to your friendly IT support. At the time of writing asap 2.1 70 does not run on hydra, bourbon or kaputar.} 70 71 71 72 \index{Running}To start asap log onto one of these Linux hosts and enter … … 76 77 \end{verbatim} 77 78 78 This starts the ASAP. To quit, you need to type \verb+^+-d79 (control-d) ortype \cmd{\%Exit}.79 This starts ASAP. To quit, you need to type \verb+^+-d (control-d) or 80 type \cmd{\%Exit}. 80 81 81 82 \section{Interface} … … 98 99 main objects are used : 99 100 100 \begin{itemize} 101 \item[\cmd{scantable}] The data container (actual spectra and header 102 information) 103 \item[\cmd{selector}] Allows the user to select a subsection of the 104 data, such as a specified or range of beam numbers, IFs, etc. 105 \item[\cmd{plotter}] A tool used to plot the spectral line data 106 \item[\cmd{fitter}] A tool used to fit functions to the spectral data 107 \item[\cmd{reader}] A tool which can be used to read data from disks 108 into a scantable object (advanced use). 109 \end{itemize} 101 \begin{tabular}{ll} 102 103 \cmd{scantable} & \parbox[t]{0.7\textwidth}{The data container (actual 104 spectra and header information)} \\ 105 \cmd{selector} & \parbox[t]{0.80\textwidth}{Allows the user to select 106 a subsection of the data, such as a specified or range of beam 107 numbers, IFs, etc.} \\ 108 \cmd{plotter} & A tool used to plot the spectral line data \\ 109 \cmd{fitter} & A tool used to fit functions to the spectral data \\ 110 \cmd{reader} & \parbox[t]{0.8\textwidth}{A tool which can be used to 111 read data from disks into a scantable object (advanced use).}\\ 112 \end{tabular} 110 113 111 114 There can be many objects of the same type. Each object is referred to … … 124 127 functions using the syntax: 125 128 \begin{verbatim} 126 ASAP> 129 ASAP>out = object.function(arguments) 127 130 \end{verbatim} 128 131 … … 136 139 137 140 \begin{verbatim} 138 ASAP> 139 ASAP> 140 ASAP> 141 ASAP> 142 ASAP> 143 ASAP> 141 ASAP>av = scans.average_time(msk,weight='tsys') 142 ASAP>av = scans.average_time(mask=msk,weight='tsys') 143 ASAP>av = scans.average_time(msk,tsys) 144 ASAP>scans.poly_baseline(mask=msk, order=0, insitu=True) 145 ASAP>scans.poly_baseline(msk,0,True) 146 ASAP>scans.poly_baseline(mask, insitu=True) 144 147 \end{verbatim} 145 148 … … 168 171 Example 169 172 \begin{verbatim} 170 ASAP> 171 ASAP> 172 ASAP> 173 ASAP>scans = scantable('MyData.rpf') 174 ASAP>scans.se<TAB> 175 ASAP>scans.set_in<TAB> 173 176 scans.set_cursor scans.set_freqframe scans.set_selection 174 177 scans.set_doppler scans.set_instrument scans.set_unit 175 178 scans.set_fluxunit scans.set_restfreqs 176 179 177 ASAP> 180 ASAP>scans.set_instrument() 178 181 \end{verbatim} 179 182 … … 204 207 205 208 \begin{verbatim} 206 ASAP> 207 ASAP> 208 ASAP> 209 ASAP> 209 ASAP>pwd 210 ASAP>ls 211 ASAP>cd /my/data/directory 212 ASAP>! mozilla& 210 213 \end{verbatim} 211 214 … … 216 219 217 220 \begin{verbatim} 218 ASAP> 221 ASAP>commands() 219 222 \end{verbatim} 220 223 … … 223 226 224 227 \begin{verbatim} 225 ASAP> 226 ASAP> 227 ASAP> 228 ASAP> 229 230 ASAP> 231 ASAP> 228 ASAP>help scantable.get_scan # or help(scantable.get_scan) 229 ASAP>help scantable.stats 230 ASAP>help plotter.plot 231 ASAP>help fitter.plot 232 233 ASAP>scans = scantable('mydata.asap') 234 ASAP>help scans.get_scan # Same as above 232 235 \end{verbatim} 233 236 … … 235 238 236 239 \begin{verbatim} 237 ASAP> 240 ASAP>help average_time 238 241 \end{verbatim} 239 242 … … 285 288 normally contain 13 beams, 1 IF and 2 polarisations, Parkes 286 289 methanol-multibeam data would contain 7 beams, 2 IFs and 2 287 polarisations while the Mopra 8-GHz MOP DS filterbank will produce one290 polarisations while the Mopra 8-GHz MOPS filterbank will produce one 288 291 beam, many IFs, and 2-4 polarisations. 289 292 290 293 All of the combinations of Beams/IFs an Polarisations are 291 contained in sep erate rows. These rows are grouped in cycles (same time stamp).294 contained in separate rows. These rows are grouped in cycles (same time stamp). 292 295 293 296 A collection of cycles for one source is termed a scan (and each scan 294 297 has a unique numeric identifier, the SCANNO). A scantable is then a 295 298 collection of one or more scans. If you have scan-averaged your data 296 in time, i.e. you have aver egaed all cycles within a scan, then each299 in time, i.e. you have averaged all cycles within a scan, then each 297 300 scan would hold just one (averaged) integration. 298 301 … … 302 305 changed via the {\tt .asaprc} resource file. 303 306 304 For example a Mopra scan with a 4s inte rgration time, two IFs and307 For example a Mopra scan with a 4s integration time, two IFs and 305 308 dual polarisations has two (2s) cycles. 306 309 \begin{verbatim} … … 345 348 346 349 \begin{verbatim} 347 ASAP> 348 ASAP> 350 ASAP>scans = scantable('MyData.rpf') 351 ASAP>scans.summary() # Brief listing 349 352 350 353 # Equivalent to brief summary function call 351 ASAP> 354 ASAP>print scan 352 355 \end{verbatim} 353 356 … … 356 359 of summary is redirected into your current pager specified by the 357 360 \$PAGER environment variable. If you find the screen is reset to the 358 original state when summary is finished (i ethe output from summary361 original state when summary is finished (i.e. the output from summary 359 362 disappears), you may need to set the \$LESS environment variable to 360 363 include the \cmd{-X} option. … … 382 385 The common selection functions are: 383 386 384 \begin{itemize} 385 386 \item[\cmd{set\_beams}] Select beams by index number 387 \item[\cmd{set\_ifs}] Select ifs by index number 388 \item[\cmd{set\_name}] Select by source name. Can contain ``*'' as a 389 wildcard, e.g. ``Orion*\_R''. 390 \item[\cmd{set\_ifs}] Select IFs by index number 391 \item[\cmd{set\_polarisation}] Select by polarisation index or 392 name. If polarisation names are given, the data will be on-the-fly 393 converted (for example from linears to Stokes). 394 \item[\cmd{set\_query}] Set query directly. For power users only! 395 \item[\cmd{set\_tsys}] Select data based on Tsys. Also example of user 396 definable query. 397 \item[\cmd{reset}] Reset the selection to include all spectra. 398 387 \begin{tabular}{ll} 388 389 \cmd{set\_beams} & Select beams by index number \\ 390 \cmd{set\_ifs} & Select ifs by index number \\ 391 \cmd{set\_name} & Select by source name. Can contain ``*'' as a 392 wildcard, e.g. ``Orion*\_R''. \\ 393 \cmd{set\_ifs} & Select IFs by index number \\ 394 395 \cmd{set\_polarisation} & \parbox[t]{0.73\textwidth}{Select by 396 polarisation index or name. If polarisation names are given, the data 397 will be on-the-fly onverted (for example from linears to Stokes). }\\ 398 399 \cmd{set\_query} & Set query directly. For power users only! \\ 400 \cmd{set\_tsys} & Select data based on Tsys. Also example of user 401 definable query. \\ 402 \cmd{reset} & Reset the selection to include all spectra. \\ 403 404 \end{tabular} 399 405 400 406 Note that all indices are zero based. … … 403 409 404 410 \begin{verbatim} 405 ASAP> selection = selector() # Create selection object 406 ASAP> selection.set_ifs(0) # Just select the first IF 407 ASAP> scans.set_selection(selection) # Apply the selection 408 ASAP> print scans # Will just show the first IF 409 410 ASAP> selection.set_ifs([0,1]) # Select the first two IFs 411 ASAP> selection.set_beams([1,3,5]) # Also select three of the beams 412 ASAP> scans.set_selection(selection) # Apply the selection 413 414 ASAP> selection.set_name('G308*') # Select by source name 415 416 ASAP> selection.reset() # Turn off selection 417 ASAP> scans.set_selection(selection) # Apply the reset selection 418 419 \end{verbatim} 420 421 \end{itemize} 411 ASAP>selection = selector() # Create selection object 412 ASAP>selection.set_ifs(0) # Just select the first IF 413 ASAP>scans.set_selection(selection) # Apply the selection 414 ASAP>print scans # Will just show the first IF 415 416 ASAP>selection.set_ifs([0,1]) # Select the first two IFs 417 ASAP>selection.set_beams([1,3,5]) # Also select three of the beams 418 ASAP>scans.set_selection(selection) # Apply the selection 419 420 ASAP>selection.set_name('G308*') # Select by source name 421 422 ASAP>selection.reset() # Turn off selection 423 ASAP>scans.set_selection(selection) # Apply the reset selection 424 425 \end{verbatim} 422 426 423 427 \subsection{State} … … 455 459 456 460 \begin{verbatim} 457 ASAP> 458 ASAP> 459 ASAP> 460 ASAP> 461 ASAP> 461 ASAP>scans = scantable('2004-11-23_1841-P484.rpf') # Read in the data 462 ASAP>scans.set_freqframe('LSRK') # Use the LSR velocity frame 463 ASAP>scans.set_unit('km/s') # Use velocity for plots etc from now on 464 ASAP>scans.set_doppler('OPTICAL') # Use the optical velocity convention 465 ASAP>scans.set_unit('MHz') # Use frequency in MHz from now on 462 466 \end{verbatim} 463 467 … … 479 483 \begin{verbatim} 480 484 # Set all IFs 481 ASAP> 485 ASAP>scans.set_restfreqs(freqs=1.667359e9) 482 486 \end{verbatim} 483 487 … … 489 493 \begin{verbatim} 490 494 # Set rest frequency for all IFs 491 ASAP> scans.set_restfreqs(freqs=[1.6654018e9,1.667359e9,]) 492 493 \end{verbatim} 494 495 {\em Currently the following is not implemented 496 497 In both of the above modes, you can also specify the rest frequencies via 498 names in a known list rather than by their values. 499 500 Examples: 501 502 \begin{verbatim} 503 ASAP> scans.set_restfreqs(freqs=['OH1665','OH1667']) 504 \end{verbatim} 505 } 495 ASAP>scans.set_restfreqs(freqs=[1.6654018e9,1.667359e9,]) 496 497 \end{verbatim} 498 499 A predetermined ``line catalog'' can be used to set the rest 500 frequency. See section \S \ref{sec:linecat}. 501 506 502 507 503 \subsubsection{Masks} … … 532 528 533 529 # Select channel range for baselining 534 ASAP> 535 ASAP> 530 ASAP>scans.set_unit('channels') 531 ASAP>msk = scans.create_mask([100,400],[600,800]) 536 532 537 533 # Select velocity range for fitting 538 ASAP> 539 ASAP> 534 ASAP>scans.set_unit('km/s') 535 ASAP>msk = scans.create_mask([-30,-10]) 540 536 \end{verbatim} 541 537 … … 546 542 Example : 547 543 \begin{verbatim} 548 ASAP> 549 ASAP> 544 ASAP>scans.set_unit('channels') 545 ASAP>msk = scans.create_mask([0,100],[900-1023], invert=True) 550 546 \end{verbatim} 551 547 … … 556 552 557 553 \begin{verbatim} 558 ASAP> 559 ASAP> 554 ASAP>scans.set_unit('km/s') 555 ASAP>msk = q.create_mask([-30,-10], row=5) 560 556 \end{verbatim} 561 557 … … 566 562 567 563 \begin{verbatim} 568 ASAP> 569 ASAP> 570 ASAP> 571 ASAP> 572 573 ASAP> 564 ASAP>scans.set_unit('channels') 565 ASAP>msk1 = q.create_mask([0,100],[511,511],[900,1023],invert=True) 566 ASAP>scans.set_unit('km/s') 567 ASAP>msk2 = q.create_mask([-20,-10],invert=True) 568 569 ASAP>mask = msk1 and msk2 574 570 \end{verbatim} 575 571 … … 585 581 586 582 \begin{verbatim} 587 ASAP> 583 ASAP>list_scans() 588 584 The user created scantables are: 589 585 ['s', 'scans', 'av', 's2', 'ss'] 590 586 591 ASAP> 592 ASAP> 587 ASAP>del s2 588 ASAP>del ss 593 589 \end{verbatim} 594 590 … … 611 607 612 608 \begin{verbatim} 613 ASAP> 609 ASAP>scan = scantable('2004-11-23_1841-P484.rpf') 614 610 615 611 # Don't scan average the data 616 ASAP> 612 ASAP>scan = scantable('2004-11-23_1841-P484.rpf', average=False) 617 613 \end{verbatim} 618 614 … … 634 630 635 631 \begin{verbatim} 636 ASAP> 637 ASAP> 638 ASAP> 639 ASAP> 632 ASAP>r = reader('2003-03-16_082048_t0002.rpf') 633 ASAP>r.summary() 634 ASAP>scan = r.read() 635 ASAP>del r 640 636 \end{verbatim} 641 637 … … 652 648 reference for multiple sources. Auto quotient assumes reference scans 653 649 have a trailing ``\_R'' in the source name for data from Parkes and 654 Mopra, and a trailing ``e'' or ``w'' for data fro, Tidbinbilla. 655 656 \begin{verbatim} 657 ASAP> q = s.auto_quotient() 650 Mopra, and a trailing ``e'' or ``w'' for data from Tidbinbilla. 651 This functions has two \cmd{mode}s. \cmd{paired} (the deafault), which assumes 652 matching adjacent pairs of source/reference scans and \cmd{time}, which finds 653 the closest reference scan in time. 654 655 \begin{verbatim} 656 ASAP>q = s.auto_quotient() 658 657 \end{verbatim} 659 658 … … 663 662 664 663 \begin{verbatim} 665 ASAP> 664 ASAP>q = s.auto_quotient(preserve=True) 666 665 \end{verbatim} 667 666 … … 678 677 For Mopra and Parkes data: 679 678 \begin{verbatim} 680 ASAP> 681 ASAP> s = scans.get_scan('*_S')679 ASAP>r = scans.get_scan('*_R') 680 ASAP>s = scans.get_scan('*^_R') 682 681 \end{verbatim} 683 682 684 683 For Tidbinbilla data 685 684 \begin{verbatim} 686 ASAP> r = scans.get_scan('*_[ew]') 687 ASAP> s = scans.get_scan('*_[^ew]') 688 \end{verbatim} 689 690 \subsection{Make the quotient spectra} 691 692 Use the quotient function 693 694 \begin{verbatim} 695 ASAP> q = s.quotient(r) 696 \end{verbatim} 697 698 This uses the rows in scantable \cmd{r} as reference spectra for the 699 rows in scantable \cmd{s}. Scantable \cmd{r} must have either 1 row 700 (which is applied to all rows in \cmd{s}) or both scantables must have 701 the same number of rows. 685 ASAP>r = scans.get_scan('*_[ew]') 686 ASAP>s = scans.get_scan('*_[^ew]') 687 \end{verbatim} 702 688 703 689 \subsection{Time average separate scans} … … 708 694 709 695 \begin{verbatim} 710 ASAP> 696 ASAP>av = q.average_time() 711 697 \end{verbatim} 712 698 … … 715 701 716 702 \begin{verbatim} 717 ASAP> 703 ASAP>av = average_time(q1, q2, q3) 718 704 \end{verbatim} 719 705 … … 723 709 724 710 \begin{verbatim} 725 ASAP> 711 ASAP>av = average_time(q, weight='tintsys') 726 712 \end{verbatim} 727 713 … … 730 716 731 717 \begin{verbatim} 732 ASAP> 733 ASAP> 718 ASAP>msk = scans.create_mask([200,400],[600,800]) 719 ASAP>av = average_time(scans, mask=msk, weight='var') 734 720 \end{verbatim} 735 721 736 722 If you have not observed your data with Doppler tracking (or run 737 \cmd{freq\_align} explicit ally) you should align the data in frequency723 \cmd{freq\_align} explicitly) you should align the data in frequency 738 724 before averaging. 739 725 740 726 \begin{verbatim} 741 ASAP> 727 ASAP>av = scans.average_time(align=True) 742 728 \end{verbatim} 743 729 … … 752 738 753 739 \begin{verbatim} 754 ASAP> 755 ASAP> 740 ASAP>msk = scans.create_mask([100,400],[600,900]) 741 ASAP>scans.poly_baseline(msk, order=1) 756 742 \end{verbatim} 757 743 … … 771 757 772 758 \begin{verbatim} 773 ASAP> 759 ASAP>scans.auto_poly_baseline(order=2,threshold=5) 774 760 \end{verbatim} 775 761 … … 786 772 \begin{verbatim} 787 773 # Don't try and fit the edge of the bandpass which is noisier 788 ASAP> 774 ASAP>scans.auto_poly_baseline(edge=(500,450),order=3,threshold=3) 789 775 790 776 # Only fit a given region around the line 791 ASAP> 792 ASAP> 793 ASAP> 777 ASAP>scans.set_unit('km/s') 778 ASAP>msk = scans.create_mask([-60,-20]) 779 ASAP>scans.auto_poly_baseline(mask=msk,order=3,threshold=3) 794 780 795 781 \end{verbatim} … … 801 787 802 788 \begin{verbatim} 803 ASAP> 789 ASAP>scans.average_pol() 804 790 \end{verbatim} 805 791 … … 823 809 824 810 \begin{verbatim} 825 ASAP> 811 ASAP>scans = scantable('2004-11-23_1841-P484.rpf', unit='Jy') 826 812 # Or in two steps 827 ASAP> 828 ASAP> 813 ASAP>scans = scantable('2004-11-23_1841-P484.rpf') 814 ASAP>scans.set_fluxunit('Jy') 829 815 \end{verbatim} 830 816 … … 840 826 841 827 \begin{verbatim} 842 ASAP> 843 ASAP> 828 ASAP>scans = scantable('2004-11-23_1841-P484.rpf') 829 ASAP>scans.set_feedtype('circular') 844 830 \end{verbatim} 845 831 … … 852 838 853 839 \begin{verbatim} 854 ASAP> 840 ASAP>scans.scale(1.05, tsys=True) 855 841 \end{verbatim} 856 842 … … 866 852 867 853 \begin{verbatim} 868 ASAP> 869 ASAP> 870 ASAP> 871 ASAP> 854 ASAP>scans.convert_flux() # If efficency known 855 ASAP>scans.convert_flux(eta=0.48) # If telescope diameter known 856 ASAP>scans.convert_flux(eta=0.48,d=35) # Unknown telescope 857 ASAP>scans.convert_flux(jypk=15) # Alternative 872 858 \end{verbatim} 873 859 … … 884 870 885 871 \begin{verbatim} 886 ASAP> scans.recalc_azel() # recalculate az/el based on pointing 872 ASAP>scans.recalc_azel() # recalculate az/el 873 # based on pointing 887 874 \end{verbatim} 888 875 889 876 Gain-elevation curves for some telescopes and frequencies are known to 890 ASAP (currently only for Tidbinbilla at 20~GHz ). In these cases891 making gain-corrections is simple. If the gain curve for your data is 892 not known, the user can supply either a gain polynomial or text file877 ASAP (currently only for Tidbinbilla at 20~GHz and Parkes at K-band). 878 In these cases making gain-corrections is simple. If the gain curve for your 879 data is not known, the user can supply either a gain polynomial or text file 893 880 tabulating gain factors at a range of elevations (see \cmd{help 894 881 scantable.gain\_el}). … … 897 884 898 885 \begin{verbatim} 899 ASAP> 900 ASAP> 886 ASAP>scans.gain_el() # If gain table known 887 ASAP>scans.gain_el(poly=[3.58788e-1,2.87243e-2,-3.219093e-4]) 901 888 \end{verbatim} 902 889 … … 906 893 907 894 \begin{verbatim} 908 ASAP> 895 ASAP>scans.opacity(0.083) 909 896 \end{verbatim} 910 897 … … 916 903 \label{sec:freqalign} 917 904 918 \index{Frequency alignment}\index{Vel icity alignment}When time905 \index{Frequency alignment}\index{Velocity alignment}When time 919 906 averaging a series of scans together, it is possible that the velocity 920 907 scales are not exactly aligned. This may be for many reasons such as … … 927 914 928 915 \begin{verbatim} 929 ASAP> 930 ASAP> 916 ASAP>scans.freq_align() 917 ASAP>av = average_time(scans) 931 918 \end{verbatim} 932 919 … … 940 927 941 928 \begin{verbatim} 942 ASAP> 943 ASAP> 944 ASAP> 945 ASAP> 929 ASAP>scans1.freq_align() # Copy the refeference Epoch from the output 930 ASAP>scans2.freq_align(reftime='2004/11/23/18:43:35') 931 ASAP>scans3.freq_align(reftime='2004/11/23/18:43:35') 932 ASAP>av = average_time(scans1, scans2, scans3) 946 933 \end{verbatim} 947 934 … … 960 947 961 948 \begin{verbatim} 962 ASAP> 963 ASAP> 964 ASAP> 965 ASAP> 966 967 ASAP> 968 ASAP> 969 970 ASAP> 971 ASAP> s = scans.get_scan('*_S') # Get all program sources (Parkes/Mopra)972 ASAP> 973 ASAP> 949 ASAP>ss = scans.get_scan(10) # Get the 11th scan (zero based) 950 ASAP>ss = scans.get_scan(range(10)) # Get the first 10 scans 951 ASAP>ss = scans.get_scan(range(10,20)) # Get the next 10 scans 952 ASAP>ss = scans.get_scan([2,4,6,8,10]) # Get a selection of scans 953 954 ASAP>ss = scans.get_scan('345p407') # Get a specific source 955 ASAP>ss = scans.get_scan('345*') # Get a few sources 956 957 ASAP>r = scans.get_scan('*_R') # Get all reference sources (Parkes/Mopra) 958 ASAP>s = scans.get_scan('*^_R') # Get all program sources (Parkes/Mopra) 959 ASAP>r = scans.get_scan('*[ew]') # Get all reference sources (Tid) 960 ASAP>s = scans.get_scan('*[^ew]') # Get all program sources (Tid) 974 961 975 962 \end{verbatim} … … 978 965 979 966 \begin{verbatim} 980 ASAP> 967 ASAP>ss = scans 981 968 \end{verbatim} 982 969 … … 986 973 987 974 \begin{verbatim} 988 ASAP> 975 ASAP>ss = scans.copy() 989 976 \end{verbatim} 990 977 … … 1024 1011 1025 1012 \begin{verbatim} 1026 ASAP> scans.save('myscans') # Save in default format 1027 ASAP> scans.save('myscans', 'FITS') # Save as FITS for exporting into CLASS 1028 ASAP> scans.save('myscans', overwrite=True) # Overwrite an existing file 1013 ASAP>scans.save('myscans') # Save in default format 1014 ASAP>scans.save('myscans', overwrite=True) # Overwrite an existing file 1029 1015 \end{verbatim} 1030 1016 1031 1017 \section{Plotter} 1032 1018 1033 \index{Plotter}Scantable spectra can be plotted at any time. An asapplotter object is 1034 used for plotting, meaning multiple plot windows can be active at the 1035 same time. On start up a default asapplotter object is created called 1036 ``plotter''. This would normally be used for standard plotting. 1037 1038 The plotter, optionally, will run in a multipanel mode and contain 1019 \index{Plotter}Scantable spectra can be plotted at any time. An 1020 asapplotter object is used for plotting, meaning multiple plot windows 1021 can be active at the same time. On start up a default asapplotter 1022 object is created called ``plotter''. This would normally be used for 1023 standard plotting. 1024 1025 The plotter, optionally, will run in a multi-panel mode and contain 1039 1026 multiple plots per panel. The user must tell the plotter how they want 1040 1027 the data distributed. This is done using the set\_mode function. The … … 1046 1033 1047 1034 \begin{verbatim} 1048 ASAP> 1049 ASAP> plotter.set_mode(stacking='p',panelling='t')1050 ASAP> 1035 ASAP>scans.set_unit('km/s') 1036 ASAP>plotter.set_mode(stacking='p', panelling='t') 1037 ASAP>plotter.plot(scans) 1051 1038 \end{verbatim} 1052 1039 … … 1058 1045 \begin{verbatim} 1059 1046 # Plot multiple IFs per panel 1060 ASAP> plotter.set_mode(stacking='i',panelling='t')1047 ASAP>plotter.set_mode(stacking='i', panelling='t') 1061 1048 1062 1049 # Plot multiple beams per panel 1063 ASAP> plotter.set_mode(stacking='b',panelling='t')1050 ASAP>plotter.set_mode(stacking='b', panelling='t') 1064 1051 1065 1052 # Plot one IF per panel, time stacked 1066 ASAP> 1053 ASAP>plotter.set_mode('t', 'i') 1067 1054 1068 1055 # Plot each scan in a seperate panel 1069 ASAP> 1056 ASAP>plotter.set_mode('t', 's') 1070 1057 1071 1058 \end{verbatim} … … 1080 1067 should be used for this purpose. Selection can either be applied to 1081 1068 the scantable or directly to the plotter, the end result is the same. 1082 You don't have to reset the scantable s lection though, if you set1069 You don't have to reset the scantable selection though, if you set 1083 1070 the selection on the plotter. 1084 1071 … … 1086 1073 1087 1074 \begin{verbatim} 1088 ASAP> 1075 ASAP>selection = selector() 1089 1076 # Select second IF 1090 ASAP> 1091 ASAP> 1077 ASAP>selection.set_ifs(1) 1078 ASAP>plotter.set_selection(selection) 1092 1079 1093 1080 # Select first 4 beams 1094 ASAP> 1095 ASAP> 1081 ASAP>selection.set_beams([0,1,2,3]) 1082 ASAP>plotter.set_selection(selection) 1096 1083 1097 1084 # Select a few scans 1098 ASAP> 1099 ASAP> 1085 ASAP>selection.set_scans([2,4,6,10]) 1086 ASAP>plotter.set_selection(selection) 1100 1087 1101 1088 # Multiple selection 1102 ASAP> 1103 ASAP> 1104 ASAP> 1089 ASAP>selection.set_ifs(1) 1090 ASAP>selection.set_scans([2,4,6,10]) 1091 ASAP>plotter.set_selection(selection) 1105 1092 1106 1093 \end{verbatim} … … 1112 1099 zooming the individual plots). From left to right: 1113 1100 1114 \begin{itemize} 1115 1116 \item[Home] This will unzoom the plots to the original zoom factor 1117 1118 \item[Plot history] (left and right arrow). The plotter keeps a 1119 history of zoom settings. The left arrow sets the plot zoom to the 1120 previous value. The right arrow returns back again. This allows you, 1121 for example, to zoom in on one feature then return the plot to how it 1122 was previously. 1123 1124 \item[Pan] (The Cross) This sets the cursor to pan, or scroll mode 1125 allowing you to shift the plot within the window. Useful when 1126 zoomed in on a feature. 1127 1128 \item[Zoom] (the letter with the magnifying glass) lets you draw a 1129 rectangle around a region of interest then zooms in on that 1130 region. Use the plot history to unzoom again. 1131 1132 \item[Adjust] (rectangle with 4 arrows) adjust subplot paramaters 1133 (space at edge of plots) 1134 1135 \item[Save] (floppy disk). Save the plot as a postscript or .png file 1101 \begin{tabular}{ll} 1102 1103 Home & This will unzoom the plots to the original zoom factor \\ 1104 1105 Plot history & \parbox[t]{0.8\textwidth}{(left and right arrow) The 1106 plotter keeps a history of zoom settings. The left arrow sets the plot 1107 zoom to the previous value. The right arrow returns back again. This 1108 allows you, for example, to zoom in on one feature then return the 1109 plot to how it was previously. }\\ 1110 1111 Pan & \parbox[t]{0.8\textwidth}{(The Cross) This sets the cursor to 1112 pan, or scroll mode allowing you to shift the plot within the 1113 window. Useful when zoomed in on a feature. }\\ 1114 1115 Zoom & \parbox[t]{0.8\textwidth}{(the letter with the magnifying 1116 glass) lets you draw a rectangle around a region of interest then 1117 zooms in on that region. Use the plot history to unzoom again.}\\ 1118 1119 Adjust & \parbox[t]{0.8\textwidth}{(rectangle with 4 arrows) adjust 1120 subplot parameters (space at edge of plots)}\\ 1121 1122 Save & \parbox[t]{0.8\textwidth}{(floppy disk). Save the plot as a 1123 postscript or .png file}\\ 1124 1125 \end{tabular} 1136 1126 1137 1127 You can also type ``g'' in the plot window to toggle on and off grid 1138 1128 lines. Typing 'l' turns on and off logarithmic Y-axis. 1139 1140 \end{itemize}1141 1129 1142 1130 \subsection{Other control} … … 1150 1138 1151 1139 \begin{verbatim} 1152 ASAP> 1153 ASAP> 1154 ASAP> 1155 ASAP> 1140 ASAP>scans.set_unit('km/s') 1141 ASAP>plotter.plot(scans) 1142 ASAP>plotter.set_range(-150,-50) 1143 ASAP>plotter.set_range() # To reset 1156 1144 \end{verbatim} 1157 1145 … … 1159 1147 1160 1148 \begin{verbatim} 1161 ASAP> 1149 ASAP>plotter.set_range(-10,30,-1,6.6) 1162 1150 \end{verbatim} 1163 1151 … … 1165 1153 1166 1154 \begin{verbatim} 1167 ASAP> 1168 ASAP> 1155 ASAP>plotter.save('myplot.ps') 1156 ASAP>plotter.save('myplot.png', dpi=80) 1169 1157 \end{verbatim} 1170 1158 … … 1172 1160 1173 1161 The plotter allows the user to change most properties such as text 1174 size and colour. The \cmd{commands} func ation and {\cmd help\1162 size and colour. The \cmd{commands} function and {\cmd help\ 1175 1163 asapplotter} list all the possible commands that can be used with the 1176 1164 plotter. … … 1187 1175 plots. Allowable values are 'line', 'dashed', 'dotted', 'dashdot', 1188 1176 'dashdotdot' and 'dashdashdot. Example: }{ 1189 ASAP> 1190 ASAP> 1177 ASAP>plotter.set\_linestyles('line dash cotted datshot.)\\ 1178 ASAP>plotter.set\_font(size=10)\\ 1191 1179 } 1192 1180 1193 1181 \commanddef{set\_font}{Change the font style and size. Example}{ 1194 ASAP> 1195 ASAP> 1196 ASAP> 1182 ASAP>plotter.set\_font(weight='bold')\\ 1183 ASAP>plotter.set\_font(size=10)\\ 1184 ASAP>plotter.set\_font(style='italic')\\ 1197 1185 } 1198 1186 1199 \commanddef{set\_layout}{Change the multi-panel layout, i enow many1187 \commanddef{set\_layout}{Change the multi-panel layout, i.e. now many 1200 1188 rows and columns}{ 1201 ASAP> 1189 ASAP>plotter.set\_layout(3,2) 1202 1190 } 1203 1191 1204 1192 \commanddef{set\_legend}{Set the position, size and optional value of the legend}{ 1205 ASAP> 1206 ASAP> 1207 ASAP> 1208 ASAP> 1209 ASAP> 1210 ASAP> 1193 ASAP>plotter.set\_legend(fontsize=16)\\ 1194 ASAP>plotter.set\_legend(mode=0) \# ASAP chooses where to put the legend\\ 1195 ASAP>plotter.set\_legend(mode=4) \# Put legend on lower right\\ 1196 ASAP>plotter.set\_legend(mode=-1) \# No legend\\ 1197 ASAP>plotter.set\_legend(mp=['RR','LL']) \# Specify legend labels\\ 1198 ASAP>plotter.set\_legend(mp=[r'\$\^\{12\}CO\$',r'\$\^\{13\}CO\$']) \# Latex labels 1211 1199 } 1212 1200 1213 1201 \commanddef{set\_title}{Set the plot title. If multiple panels are 1214 1202 plotted, multiple titles have to be specified}{ 1215 ASAP> 1216 ASAP> 1203 ASAP>plotter.set\_title(`G323.12$-$1.79`)\\ 1204 ASAP>plotter.set\_title([`SiO`, 'Methanol'], fontsize=18)\\ 1217 1205 } 1218 1206 1219 1207 \subsection{Plotter Annotations} 1220 1208 1221 The plotter allows various anno ntations (lines, arrows, text and1209 The plotter allows various annotations (lines, arrows, text and 1222 1210 ``spans'') to be added to the plot. These annotations are 1223 1211 ``temporary'', when the plotter is next refreshed … … 1225 1213 will be removed. 1226 1214 1227 \bigcommanddef{arrow(x,y,x+dx,y+dy)}{Draw an arrow from a specif ed1215 \bigcommanddef{arrow(x,y,x+dx,y+dy)}{Draw an arrow from a specified 1228 1216 \cmd{(x,y)} position to \cmd{(x+dx, y+dy)}. The values are in world 1229 coordinates. \em {HOW TO SET ARROW HEAD??}}{1230 ASAP> plotter.arrow(-40,7,35,0)1217 coordinates. Addition arguments which must be passed are {\cmd head\_width} and \cmd{head\_length}}{ 1218 ASAP>plotter.arrow(-40,7,35,0,head\_width=0.2, head\_length=10) 1231 1219 } 1232 1220 1233 1221 \bigcommanddef{axhline(y, xmin, xmax)}{Draw a horizontal line at the 1234 specif ed \cmd{y} position (in world coordinates) between xmin and xmax1235 (in relative coordinates, i e0.0 is the left hand edge of the plot1236 while 1.0 is the right side of the plot .}{1237 ASAP> 1222 specified \cmd{y} position (in world coordinates) between xmin and xmax 1223 (in relative coordinates, i.e. 0.0 is the left hand edge of the plot 1224 while 1.0 is the right side of the plot).}{ 1225 ASAP>plotter.axhline(6.0,0.2,0.8) 1238 1226 } 1239 1227 1240 1228 \bigcommanddef{avhline(x, ymin, ymax)}{Draw a vertical line at the 1241 specif ed \cmd{x} position (in world coordinates) between \cmd{ymin}1242 and \cmd{ymax} (in relative coordinates, i e0.0 is the left hand edge1229 specified \cmd{x} position (in world coordinates) between \cmd{ymin} 1230 and \cmd{ymax} (in relative coordinates, i.e. 0.0 is the left hand edge 1243 1231 of the plot while 1.0 is the right side of the plot).}{ 1244 ASAP> 1232 ASAP>plotter.axvline(-50.0,0.1,1.0) 1245 1233 } 1246 1234 1247 1235 \bigcommanddef{axhspan(ymin, ymax, \\ \hspace*{20mm}xmin, 1248 1236 xmax)}{Overlay a transparent colour rectangle. \cmd{ymin} and 1249 \cmd{ymax} are given in world coord nates while \cmd{xmin} and1237 \cmd{ymax} are given in world coordinates while \cmd{xmin} and 1250 1238 \cmd{xmax} are given in relative coordinates}{ 1251 ASAP> 1239 ASAP>plotter.axhspan(2,4,0.25,0.75) 1252 1240 } 1253 1241 1254 1242 \bigcommanddef{axvspan(xmin, xmax, \\ \hspace*{20mm} ymin, 1255 1243 ymax)}{Overlay a transparent colour rectangle. \cmd{ymin} and 1256 \cmd{ymax} are given in relative coord nates while \cmd{xmin} and1244 \cmd{ymax} are given in relative coordinates while \cmd{xmin} and 1257 1245 \cmd{xmax} are given in world coordinates}{ 1258 ASAP> 1246 ASAP>plotter.axvspan(-50,60,0.2,0.5) 1259 1247 } 1260 1248 … … 1264 1252 } 1265 1253 1266 1267 1268 1254 These functions all take a set of \cmd{kwargs} commands. These can be 1269 1255 used to set colour, linewidth fontsize etc. These are standard … … 1271 1257 1272 1258 \begin{tabular}{ll} 1273 \tt color 1274 \tt linewidth \\1259 \tt color, facecolor, edgecolor \\ 1260 \tt width, linewidth \\ 1275 1261 \tt fontsize \\ 1276 1262 \tt fontname & Sans, Helvetica, Courier, Times etc\\ … … 1281 1267 Examples: 1282 1268 \begin{verbatim} 1283 ASAP> plotter.axhline(6.0,0.2,0.8, color='red', linewidth=3) 1284 ASAP> plotter.text(-10,7,"CO", fontsize=20) 1285 \end{verbatim} 1269 ASAP>plotter.axhline(6.0,0.2,0.8, color='red', linewidth=3) 1270 ASAP>plotter.text(-10,7,"CO", fontsize=20) 1271 \end{verbatim} 1272 1273 \section{Line Catalog} 1274 \label{sec:linecat} 1275 \index{Linecatalog}ASAP can load and manipulate line catlogs to 1276 retrieve rest frequencies for \cmd{set\_restfreqs} and for line 1277 identification in the plotter. All line catalogs are loaded into a ``linecatalog'' object. 1278 1279 No line catalogs are built into ASAP, the user must load a ASCII based 1280 table (which can optionally be saved in an internal format) either of 1281 the users own creation or a standard line catalog such as the JPL line 1282 catalog or Lovas. The ATNF asap ftp area as copies of the JPL and 1283 Lovas catalog in the appropriate format: 1284 1285 \hspace{1cm}\cmd{ftp://ftp.atnf.csiro.au/pub/software/asap/data} 1286 1287 1288 \subsection{Loading a Line Catalog} 1289 1290 \index{Linecatalog!loading}The ASCII text line catalog must have at 1291 least 4 columns. The first four columns must contain (in order): 1292 Molecule name, frequency in MHz, frequency error and ``intensity'' 1293 (any units). If the molecule name contains any spaces, they must be 1294 wrapped in quotes \verb+""+. 1295 1296 A sample from the JPL line catalog: 1297 1298 \begin{verbatim} 1299 H2D+ 3955.2551 228.8818 -7.1941 1300 H2D+ 12104.7712 177.1558 -6.0769 1301 H2D+ 45809.2731 118.3223 -3.9494 1302 CH 701.6811 .0441 -7.1641 1303 CH 724.7709 .0456 -7.3912 1304 CH 3263.7940 .1000 -6.3501 1305 CH 3335.4810 .1000 -6.0304 1306 \end{verbatim} 1307 1308 To load a line catalog then save it in the internal format: 1309 1310 \begin{verbatim} 1311 ASAP>jpl = linecatalog('jpl_pruned.txt') 1312 ASAP>jpl.save('jpl.tbl') 1313 \end{verbatim} 1314 1315 Later the saved line catalog can reloaded: 1316 1317 \begin{verbatim} 1318 ASAP>jpl = linecatalog('jpl.tbl') 1319 \end{verbatim} 1320 1321 {\em NOTE:} Due to a bug in ipython, if you do not \cmd{del} the 1322 linecatalog table before quiting asap, you will be left with temporary 1323 files. It is safe to delete these once asap has finished. 1324 1325 \subsection{Line selection} 1326 1327 \index{Linecatalog!line selection}The linecatalog has a number of 1328 selection functions to select a range of lines from a larger catalog 1329 (the JPL catalog has $>$180000 lines for 1330 example). \cmd{set\_frequency\_limits} selects on frequency range, 1331 \cmd{set\_strength\_limits} selects on intensity while \cmd{set\_name} 1332 selects on molecule name (wild cards allowed). The \cmd{summary} 1333 function lists the currently selected lines. 1334 1335 \begin{verbatim} 1336 ASAP>jpl = linecatalog('jpl.tbl') 1337 ASAP>jpl.set_frequency_limits(80,115,'GHz') # Lines for 3mm receiver 1338 ASAP>jpl.set_name('*OH') # Select all alcohols 1339 ASAP>jpl.set_name('OH') # Select only OH molecules 1340 ASAP>jpl.summary() 1341 1342 ASAP>jpl.reset() # Selections are accumulative 1343 ASAP>jpl.set_frequency_limits(80,115,'GHz') 1344 ASAP>jpl.set_strength_limits(-2,10) # Select brightest lines 1345 ASAP>jpl.summary() 1346 \end{verbatim} 1347 1348 \subsection{Using Linecatalog} 1349 1350 The line catalogs can be used for line overlays on the plotter or with 1351 \cmd{set\_restfreq}. 1352 1353 \subsubsection{Plotting linecatalog} 1354 1355 \index{Linecatalog!plotting} 1356 1357 The plotter \cmd{plot\_lines} function takes a line catalog as an 1358 argument and overlays the lines on the spectrum. {\em Currently this 1359 only works when plotting in units of frequency (Hz, GHz etc).} If a 1360 large line catalog has been loaded (e.g. JPL) it is highly recommended 1361 that you use the selection functions to narrow down the number of 1362 lines. By default the line catalog overlay is plotted assuming a line 1363 velocity of 0.0. This can be set using the \cmd{doppler} argument (in 1364 km/s). Each time \cmd{plot\_lines} is called the new lines are added 1365 to any existing line catalog annotations. These are all removed after 1366 the next call to \cmd{plotter.plot()}. 1367 1368 \begin{verbatim} 1369 ASAP>jpl = linecatalog('jpl.tbl') 1370 ASAP>jpl.set_frequency_limits(23,24,'GHz') 1371 ASAP>data.set_unit('GHz') # Only works with freq axis currently 1372 ASAP>plotter.plot(data) 1373 ASAP>plotter.plot_lines(jpl) 1374 1375 ASAP>plotter.plot() # Reset plotter 1376 ASAP>plotter.plot_lines(jpl,doppler=-10,location='Top') 1377 # On top with -10 km/s velocity 1378 \end{verbatim} 1379 1380 \subsubsection{Setting Rest Frequencies} 1381 1382 \index{Linecatalog!set\_restfreq}A linecatalog can be used as an 1383 argument for \cmd{set\_restfreqs}. If a personal line catalog has been 1384 used (which has the same size as the number of number of IFs) or 1385 linecatalog selection has been used to reduce the number of entries, 1386 the line catalog can be used directly as an argument to 1387 \cmd{set\_restfreqs}, e.g.: 1388 \begin{verbatim} 1389 ASAP>jpl = linecatalog('jpl.tbl') 1390 ASAP>jpl.set_frequency_limits(23.66,23.75,'GHz') 1391 ASAP>data = scantable('data.rpf') 1392 ASAP>data.set_restfreqs(jpl) 1393 \end{verbatim} 1394 1395 If a larger linecatalog is used, individual elements can be used. Use 1396 the \cmd{summary} to get the index number of the rest frequency you 1397 wish to use. E.g.: 1398 1399 \begin{verbatim} 1400 ASAP>jpl.summary() 1401 ASAP>data.set_restfreqs([jpl[11],[jpl[21]]) 1402 \end{verbatim} 1403 1404 For data with many IFs, such as from MOPS, the user it is recommended 1405 that the user creates their own line cstalog for the data and use this 1406 to set the rest frequency for each IF. 1286 1407 1287 1408 \section{Fitting} … … 1296 1417 1297 1418 \begin{verbatim} 1298 ASAP> 1299 ASAP> 1300 ASAP> 1301 ASAP> 1302 ASAP> 1303 ASAP> 1304 ASAP> 1305 ASAP> 1306 ASAP> 1307 ASAP> 1419 ASAP>f = fitter() 1420 ASAP>f.set_function(gauss=2) # Fit two Gaussians 1421 ASAP>f.set_scan(scans) 1422 ASAP>selection = selector() 1423 ASAP>selection.set_polarisations(1) # Fit the second polarisation 1424 ASAP>scans.set_selection(selection) 1425 ASAP>scans.set_unit('km/s') # Make fit in velocity units 1426 ASAP>f.fit(1) # Run the fit on the second row in the table 1427 ASAP>f.plot() # Show fit in a plot window 1428 ASAP>f.get_parameters() # Return the fit paramaters 1308 1429 \end{verbatim} 1309 1430 … … 1316 1437 1317 1438 \begin{verbatim} 1318 ASAP> 1319 ASAP> 1320 ASAP> 1321 ASAP> 1322 ASAP> 1323 ASAP> 1324 ASAP> 1325 ASAP> 1326 ASAP> 1439 ASAP>f = fitter() 1440 ASAP>f.set_function(gauss=2) 1441 ASAP>scans.set_unit('km/s') # Set the mask in channel units 1442 ASAP>msk = s.create_mask([1800,2200]) 1443 ASAP>scans.set_unit('km/s') # Make fit in velocity units 1444 ASAP>f.set_scan(s,msk) 1445 ASAP>f.fit() 1446 ASAP>f.plot() 1447 ASAP>f.get_parameters() 1327 1448 \end{verbatim} 1328 1449 … … 1331 1452 1332 1453 \begin{verbatim} 1333 ASAP> 1334 ASAP> 1335 ASAP> 1336 ASAP> 1454 ASAP>f = fitter() 1455 ASAP>f.set_function(gauss=2) 1456 ASAP>f.set_scan(s,msk) 1457 ASAP>f.fit() # Fit using auto-estimates 1337 1458 # Set Peak, centre and fwhm for the second gaussian. 1338 1459 # Force the centre to be fixed 1339 ASAP> 1340 ASAP> 1460 ASAP>f.set_gauss_parameters(0.4,450,150,0,1,0,component=1) 1461 ASAP>f.fit() # Re-run the fit 1341 1462 \end{verbatim} 1342 1463 … … 1349 1470 \begin{verbatim} 1350 1471 # Plot the residual 1351 ASAP> 1472 ASAP>f.plot(residual=True) 1352 1473 1353 1474 # Plot the first 2 componentsa 1354 ASAP> 1475 ASAP>f.plot(components=[0,1]) 1355 1476 1356 1477 # Plot the first and third component plus the model sum 1357 ASAP> 1478 ASAP>f.plot(components=[-1,0,2]) # -1 means the compoment sum 1358 1479 \end{verbatim} 1359 1480 … … 1364 1485 1365 1486 \begin{verbatim} 1366 ASAP> f.storefit()1487 ASAP>f.store_fit() 1367 1488 \end{verbatim} 1368 1489 … … 1376 1497 1377 1498 \begin{verbatim} 1378 ASAP> scans.get_fit(4) # Print fits for row 4 1499 ASAP>scans.get_fit(4) # Print fits for row 4 1500 \end{verbatim} 1501 1502 A fit can also be exported to an ASCII file using the \cmd{store\_fit} 1503 function. Simply give the name of the output file requires as an 1504 argument. 1505 1506 \begin{verbatim} 1507 ASAP>f.store_fit('myfit.txt') 1379 1508 \end{verbatim} 1380 1509 … … 1399 1528 1400 1529 \begin{verbatim} 1401 ASAP> 1530 ASAP>scans.rotate_xyphase(10.5) # Degrees 1402 1531 \end{verbatim} 1403 1532 … … 1412 1541 1413 1542 \begin{verbatim} 1414 ASAP> 1543 ASAP>scans.rotate_linpolphase(-45) # Degrees; correct for receiver mounting 1415 1544 \end{verbatim} 1416 1545 … … 1421 1550 1422 1551 \begin{verbatim} 1423 ASAP> 1552 ASAP>scans.invert_phase() 1424 1553 \end{verbatim} 1425 1554 1426 1555 Depending on how the correlator is configured, ``BA'' may be 1427 correlated ins ead of ``AB''. Use \cmd{swap\_linears} to correct for1556 correlated instead of ``AB''. Use \cmd{swap\_linears} to correct for 1428 1557 this problem: 1429 1558 1430 1559 \begin{verbatim} 1431 ASAP> 1560 ASAP>scans.swap_linears() 1432 1561 \end{verbatim} 1433 1562 … … 1439 1568 1440 1569 \begin{verbatim} 1441 ASAP> 1570 ASAP>stokescans = linearscans.convert_pol("stokes") 1442 1571 \end{verbatim} 1443 1572 … … 1458 1587 1459 1588 \begin{verbatim} 1460 ASAP> 1461 1462 ASAP> 1589 ASAP>selection = selector() 1590 1591 ASAP>selection.set_polarisations(``I Q U V'') 1463 1592 ASAP plotter.set_selection(selection); # Select I, Q, U \& V 1464 1593 1465 ASAP> 1594 ASAP>selection.set_polarisations(``I Q'') 1466 1595 ASAP plotter.set_selection(selection); # Select just I \& Q 1467 1596 1468 ASAP> 1597 ASAP>selection.set_polarisations(``RR LL'') 1469 1598 ASAP plotter.set_selection(selection); # Select just RR \& LL 1470 1599 1471 ASAP> 1600 ASAP>selection.set_polarisations(``XX YY'') 1472 1601 ASAP plotter.set_selection(selection); # Select linears 1473 1602 1474 ASAP> 1603 ASAP>selection.set_polarisations(``I Plinear'') 1475 1604 ASAP plotter.set_selection(selection); # Fractional linear 1476 1605 1477 ASAP> 1606 ASAP>selection.set_polarisations(``Pangle'') 1478 1607 ASAP plotter.set_selection(selection); # Position angle 1479 1608 … … 1483 1612 describe in section~\ref{sec:selection}. 1484 1613 1485 \subsection{Saving}1486 1487 \index{Polarisation!saving}When saving data using the \cmd{save}1488 function, the \cmd{stokes} argument can be used to save the data as1489 Stoke values when saving in FITS format.1490 1491 Example:1492 1493 \begin{verbatim}1494 ASAP> scans.save('myscan.sdfits', 'SDFITS', stokes=True)1495 \end{verbatim}1496 1497 1614 \section{Specialised Processing} 1498 1615 … … 1501 1618 MX mode is a specific observing approach with a multibeam where a 1502 1619 single source is observed cycling through each beam. The scans when 1503 the beam is off source is used as a reference for the on source1620 the beam is off source is used as a reference for the on-source 1504 1621 scan. The function \cmd{mx\_quotient} is used to make a quotient 1505 1622 spectrum from an MX cycle. This works averaging the ``off-source'' … … 1509 1626 single scan (it the scan numbers are re-labelled to be the same). Note 1510 1627 that the current version of \cmd{mx\_quotient} only handles a single 1511 MX cycle, i eif each beam has observed the source multiple times you1628 MX cycle, i.e. if each beam has observed the source multiple times you 1512 1629 will need to use the selector object multiple times to select a single 1513 1630 MX cycle, run \cmd{mx\_quotient} for each cycle then merge the … … 1517 1634 1518 1635 \begin{verbatim} 1519 ASAP> 1520 ASAP> 1521 ASAP> 1636 ASAP>scans = scantable('mydata.rpf') 1637 ASAP>q = scans.mx_quotient() 1638 ASAP>plotter.plot(q) 1522 1639 \end{verbatim} 1523 1640 … … 1527 1644 1528 1645 \begin{verbatim} 1529 ASAP> 1646 ASAP>av = q.average_beam() 1530 1647 \end{verbatim} 1531 1648 … … 1533 1650 1534 1651 {\em FILL ME IN} 1652 1653 \subsection{Disk Based Processing} 1654 \index{Scantable!disk based} 1655 1656 Normally scantables exist entirely in memory during an ASAP 1657 session. This has the advantage of speed, but causes limits on the 1658 size of the dataset which can be loaded. ASAP can use ``disk based'' 1659 scan tables which cache the bulk of the scantable on disk and require 1660 significantly less memory usage. 1661 1662 To use disk based tables you either need to change the default in your 1663 \cmd{.asaprc} file, e.g. 1664 \begin{verbatim} 1665 scantable.storage : disk 1666 \end{verbatim} 1667 1668 or use set the ``\cmd{rc}'' value while running asap to change this 1669 on-the-fly. E.g. 1670 \begin{verbatim} 1671 ASAP>rc('scantable',storage='disk') 1672 ASAP>data = scantable('data.rpf') # Loaded using disk based table 1673 ASAP>rc('scantable',storage='memory') # Memory tables will be used now 1674 \end{verbatim} 1675 1676 Changing the ``\cmd{rc}'' value affects the next time the 1677 \cmd{scantable} constructor is called. 1678 1679 {\bf NOTE: } Currently a bug in ipython means temporary files are not 1680 cleaned up properly when you exit ASAP. If you use disk based scan 1681 tables your directory will be left with 'tabXXXXX\_X' directories. These can 1682 be safely removed if ASAP is not running. 1535 1683 1536 1684 \section{Scantable Mathematics} … … 1544 1692 {\em Currently mathematics between two scantables is not available } 1545 1693 1546 % ASAP> 1547 \begin{verbatim} 1548 ASAP> 1549 ASAP> 1694 % ASAP>sum = scan1+scan2 1695 \begin{verbatim} 1696 ASAP>scan2 = scan1+2.0 1697 ASAP>scan *= 1.05 1550 1698 \end{verbatim} 1551 1699 1552 1700 \section{Scripting} 1553 1701 1554 \index{Scripting}Because asapis based on python, it easy for the user1702 \index{Scripting}Because ASAP is based on python, it easy for the user 1555 1703 write their own scripts and functions to process data. This is highly 1556 1704 recommended as most processing of user data could then be done in a 1557 1705 couple of steps using a few simple user defined functions. A Python 1558 primer is beyond the scope of this userguide. See the asaphome pages1706 primer is beyond the scope of this userguide. See the ASAP home pages 1559 1707 for a scripting tutorial or the main python website for comprehensive 1560 1708 documentation. … … 1562 1710 \hspace{1cm} http://www.atnf.csiro.au/computing/software/asap/tutorials 1563 1711 1712 \hspace{1cm} http://svn.atnf.csiro.au/trac/asap/wiki 1713 1564 1714 \hspace{1cm} http://www.python.org/doc/Introduction.html 1565 1715 1566 1716 \subsection{Running scripts} 1567 1717 1568 The asapglobal function \cmd{execfile} reads the named text file and1718 The ASAP global function \cmd{execfile} reads the named text file and 1569 1719 executes the contained python code. This file can either contain 1570 1720 function definitions which will be used in subsequent processing or 1571 1721 just a set of commands to process a specific dataset. 1572 1722 1723 As an alternative to run scripts without entering ASAP, create a script which 1724 starts with. 1725 1726 \begin{verbatim} 1727 from asap import * 1728 1729 <your code> 1730 \end{verbatim} 1731 1732 And run it with \cmd{python scriptname}. 1733 1573 1734 \subsection{asapuserfuncs.py} 1574 1735 1575 1736 The file $\sim$/.asap/asapuserfuncs.py is automatically read in when 1576 asapis started. The user can use this to define a set of user1577 functions which are automatically available each time asapis1737 ASAP is started. The user can use this to define a set of user 1738 functions which are automatically available each time ASAP is 1578 1739 used. The \cmd{execfile} function can be called from within this file. 1579 1740 … … 1581 1742 1582 1743 In the following section a few examples of end-to-end processing of 1583 some data in asapare given.1744 some data in ASAP are given. 1584 1745 1585 1746 \subsection{Mopra} … … 1587 1748 1588 1749 The following example is of some dual polarisation, position switched 1589 data from Mopra. The source has been observed mul itple times split1590 into a number of sep erate rpfitsfiles. To make the processing easier,1591 the first step is to \cmd{cat} the se eprate rpfitsfiles together and1592 load as a whole (future versions of asapwill make this unnecessary).1750 data from Mopra. The source has been observed multiple times split 1751 into a number of separate RPFITS files. To make the processing easier, 1752 the first step is to \cmd{cat} the separate RPFITS files together and 1753 load as a whole (future versions of ASAP will make this unnecessary). 1593 1754 1594 1755 … … 1650 1811 1651 1812 \index{Parkes}\index{Polarisation}The following example is processing 1652 of some Parkes polar metric observations of OH masers at1813 of some Parkes polarimetric observations of OH masers at 1653 1814 1.6~GHz. Because digital filters where used in the backend, the 1654 1815 baselines are stable enough not to require a quotient spectra. The 1655 1816 4~MHz bandwidth is wide enough to observe both the 1665 and 1667~MHz 1656 1817 OH maser transitions. Each source was observed once for about 10 1657 minutes. Tsys information was not written to the rpfitsfile (a1818 minutes. Tsys information was not written to the RPFITS file (a 1658 1819 nominal 25K values was used), so the amplitudes need to be adjusted 1659 1820 based on a separate log file. A simple user function is used to … … 1681 1842 \end{verbatim} 1682 1843 1683 The typical asapsession would be1844 The typical ASAP session would be 1684 1845 1685 1846 \begin{verbatim} … … 1766 1927 limitations. The data is position switched, observing first an 1767 1928 reference to the west, then the source twice and finally reference to 1768 the east. 1929 the east. Important to note, that \cmd{auto\_quotient} should be executed 1930 using the \cmd{mode} `time'. 1769 1931 1770 1932 \begin{verbatim} … … 1775 1937 1776 1938 # Make the quotient spectra 1777 q = d.auto_quotient( )1939 q = d.auto_quotient(mode='time') 1778 1940 print q 1779 1941 … … 1826 1988 \index{Functions!summary}% 1827 1989 \begin{verbatim} 1828 1829 [The scan container] 1990 [The scan container] 1830 1991 scantable - a container for integrations/scans 1831 1992 (can open asap/rpfits/sdfits and ms files) … … 1853 2014 get_abcissa - get the abcissa values and name for a given 1854 2015 row (time) 2016 get_column_names - get the names of the columns in the scantable 2017 for use with selector.set_query 1855 2018 set_freqframe - set the frame info for the Spectral Axis 1856 2019 (e.g. 'LSRK') … … 1867 2030 set_restfreqs - set a list of rest frequencies 1868 2031 flag - flag selected channels in the data 1869 lag_flag - flag specified frequency in the data1870 2032 save - save the scantable to disk as either 'ASAP', 1871 2033 'SDFITS' or 'ASCII' … … 1910 2072 [Selection] 1911 2073 selector - a selection object to set a subset of a scantable 1912 set_scans - set (a list of) scans by index 1913 set_cycles - set (a list of) cycles by index 2074 set_cycles - set (a list of) cycles by index 1914 2075 set_beams - set (a list of) beamss by index 1915 2076 set_ifs - set (a list of) ifs by index … … 1918 2079 set_names - set a selection by name (wildcards allowed) 1919 2080 set_tsys - set a selection by tsys thresholds 2081 set_query - set a selection by SQL-like query, e.g. BEAMNO==1 1920 2082 reset - unset all selections 1921 2083 + - merge to selections … … 1988 2150 arrow - draw arrow annotations either in data or relative 1989 2151 coordinates 1990 set_abcissa - specify a user label for the abcissa 1991 set_ordinate - specify a user label for the ordinate 1992 set_layout - specify the multi-panel layout (rows,cols) 1993 set_colors - specify a set of colours to use 1994 set_linestyles - specify a set of linestyles to use if only 1995 using one color 1996 set_font - set general font properties, e.g. 'family' 1997 set_histogram - plot in historam style 1998 set_mask - set a plotting mask for a specific polarization 1999 text - draw text annotations either in data or relative 2000 coordinates 2152 axhline,axvline - draw horizontal/vertical lines 2153 axhspan,axvspan - draw horizontal/vertical regions 2154 2155 xyplotter - matplotlib/pylab plotting functions 2156 2157 [Reading files] 2158 reader - access rpfits/sdfits files 2001 2159 arrow - draw arrow annotations either in data or relative 2002 2160 coordinates … … 2060 2218 histogram rather than lines.} 2061 2219 2062 {\em MALTE TO FIX}2063 2064 2220 \asaprc{plotter.colours}{}{Set default colours for plotting} 2065 2221 … … 2069 2225 2070 2226 % scantable 2071 \asaprc{scantable.save}{{\bf ASAP} SDFITS FITSASCII MS2}{Default output2227 \asaprc{scantable.save}{{\bf ASAP} SDFITS ASCII MS2}{Default output 2072 2228 format when saving} 2073 2229 … … 2087 2243 \subsection{Installation} 2088 2244 2089 \index{Installation}ASAP depends on a number of third-party libraries which you must 2090 have installed before attempting to build ASAP. These are: 2091 2092 \begin{itemize} 2093 \item AIPS++ 2094 \item Boost 2095 \item Matplotlib 2096 \item python/ipython 2097 \end{itemize} 2098 2099 Debian Linux is currently supported and we intend also 2100 to support other popular Linux flavours, Solaris and Mac. 2101 2102 Of the dependencies, AIPS++ is the most complex to install. 2245 \index{Installation} 2246 2247 Please refer to the asap wiki for instructions on downloading and/or 2248 building asap from source. 2249 2250 \hspace{1cm}\cmd{http://www.atnf.csiro.au/computing/software/asap/} 2103 2251 2104 2252 \printindex
Note:
See TracChangeset
for help on using the changeset viewer.