source: trunk/doc/cookbook.tex@ 537

Last change on this file since 537 was 537, checked in by kil064, 20 years ago

add 'bourbon' as host for Parkes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 41.0 KB
Line 
1%% TODO
2%% Help doco
3%% .asaprc
4%% Intro
5%% Plotter options - pol etc
6%% Fit saving
7
8\documentclass[11pt]{article}
9\usepackage{a4}
10\usepackage[dvips]{graphicx}
11
12% Adjust the page size
13\addtolength{\oddsidemargin}{-0.4in}
14\addtolength{\evensidemargin}{+0.4in}
15\addtolength{\textwidth}{+0.8in}
16
17\setlength{\parindent}{0mm}
18\setlength{\parskip}{1ex}
19
20
21\title{ATNF Spectral Analysis Package\\Cookbook }
22\author{Chris Phillips}
23
24
25\newcommand{\cmd}[1]{{\tt #1}}
26
27\begin{document}
28
29\maketitle
30
31\section{Introduction}
32
33%\section{Documentation Standards}
34
35%In most of the examples in this document, it has been assumed that the
36
37\section{Installation and running}
38
39Currently there are installations running on Linux machines at
40
41\begin{itemize}
42\item Epping - use hosts {\tt draco} or {\tt hydra}
43\item Narrabri - use host {\tt kaputar}
44\item Parkes - use host {\tt bourbon}
45\item Mopra - use host {\tt minos}
46\end{itemize}
47
48To start asap log onto one of these Linux hosts and enter
49
50\begin{verbatim}
51 > cd /my/data/directory
52 > source /nfs/aips++/daily/aipsinit.csh # Temporary measure
53 > asap
54\end{verbatim}
55
56This starts the asap. To quit, you need to type \verb+^+-d (control-d).
57
58\section{Interface}
59
60ASAP is written in C++ and python. The user interface uses the
61``ipython'' interactive shell, which is a simple interactive interface
62to python. The user does not need to understand python to use this,
63but certain aspects python affect what the user can do. The current
64interface is object oriented. In the future, we will build a
65functional (non object oriented) shell on top of this to ease
66interactive use.
67
68\subsection {Integer Indices are 0-relative}
69
70Please note, all integer indices in ASAP and iPython are {\bf 0-relative}.
71
72\subsection{Objects}
73
74The ASAP interface is based around a number of ``objects'' which the
75user deals with. Objects range from the data which have been read from
76disk, to tools used for fitting functions to the data. The following
77main objects are used :
78
79\begin{itemize}
80 \item[scantable] The data container (actual spectra and header information)
81 \item[fitter] A tool used to fit functions to the spectral data
82 \item[plotter] A tool used to plot the spectral line data
83 \item[reader] A tool which can be used to read data from disks
84 into a scantable object.
85\end{itemize}
86
87These are all described below.
88
89There can be many objects of the same type. Each object is referred to
90by a variable name made by the user. The name of this variable is not
91important and can be set to whatever the user prefers (ie ``s'' and
92``ParkesHOH-20052002'' are equivalent). However, having a simple and
93consistent naming convention will help you a lot.
94
95\subsection{Member functions(functions)}
96
97Following the object oriented approach, objects have associated
98``member functions'' which can either be used to modify the data in
99some way or change global properties of the object. In this document
100member functions will be referred to simply as functions. From the
101command line, the user can excute these functions using the syntax:
102\begin{verbatim}
103 ASAP> out = object.function(arguments)
104\end{verbatim}
105
106Where \cmd{out} is the name of the returned variable (could be a new
107scantable object, or a vector of data, or a status retrn), \cmd{object} is the
108object variable name (set by the user), \cmd{function} is the name of
109the member function and \cmd{arguments} is a list of arguments to the
110function. The arguments can be provided either though position or names.
111A mix of the two can be used. E.g.
112
113\begin{verbatim}
114 ASAP> av = scans(msk,weight='tsys')
115 ASAP> av = scans(mask=msk,weight='tsys')
116 ASAP> av = scans(msk,True)
117 ASAP> scans.polybaseline(mask=msk, order=0, insitue=True)
118 ASAP> scans.polybaseline(msk,0,True)
119 ASAP> scans.polybaseline(mask, insitu=True)
120\end{verbatim}
121
122\subsection{Global Functions}
123
124Some functions do not make sense to be implemented as member
125functions, typically fuctions which operate on more than one scantable
126(e.g. time averaging of many scans). These functions will always be
127refered to as global functions.
128
129\subsection{Interactive enviroment}
130
131ipython has a number of useful interactive features and a few things to be aware
132of for the new user.
133
134\subsubsection{String completion}
135
136Tab completion is enabled for all function names. If you type the
137first few letters of a function name, then type <TAB> the function
138name will be auto completed if it is un-ambigious, or a list of
139possibilities will be given. Auto-completion works for the user
140object names as well as function names. It does not work for filenames,
141nor for function arguments.
142
143Example
144\begin{verbatim}
145 ASAP> scans = scantable('MyData.rpf')
146 ASAP> scans.se<TAB>
147scans.set_cursor scans.set_freqframe scans.set_unit scans.setpol
148scans.set_doppler scans.set_instrument scans.setbeam
149scans.set_fluxunit scans.set_restfreqs scans.setif
150 ASAP> scans.set_in<TAB>
151 ASAP> scans.set_instrument
152\end{verbatim}
153
154\subsubsection{Unix Interaction}
155
156Basic unix shell commands (pwd, ls, cd etc) can be issued from within
157ASAP. This allows the user to do things list look at files in the
158current directory. The shell command ``cd'' does work within ASAP
159allowing the user to change between data directories. Unix programs
160cannot be run this way, but the shell escape ``$!$'' can be used to run
161arbitrary programs. E.g.
162
163\begin{verbatim}
164 ASAP> pwd
165 ASAP> ls
166 ASAP> ! mozilla&
167\end{verbatim}
168
169\subsection{Help}
170
171Help me...
172
173\subsection{.asaprc}
174
175
176\section{Scantables}
177
178\subsection {Description}
179
180\subsubsection {Basic Structure}
181
182ASAP data handling works on objects called scantables. A scantable
183holds your data, and also provides functions to operate
184upon it.
185
186The building block of a scantable is an integration, which is a single
187row of a scantable. Each row contains spectra for each beam, IF and
188polarisation. For example Parkes multibeam data would contain many
189beams, one IF and 2-4 polarisations, while the new Mopra 8-GHz
190filterbank will eventually produce one beam, many IFs, and 2-4
191polarisations.
192
193A collection of sequential integrations (rows) for one source is termed
194a scan (and each scan has a unique numeric identifier, the ScanID). A
195scantable is then a collection of one or more scans. If you have
196scan-averaged your data in time, then each scan would hold just one
197(averaged) integration.
198
199Many of the functions which work on scantables can either return a
200new scantable with modified data or change the scantable insitu. Which
201method is used depends on the users preference. The default can be
202changed via the {\tt .asaprc} resource file.
203
204\subsubsection {Contents}
205
206A scantable has header information and data (a scantable is actually an AIPS++
207Table and it is stored in Memory when you are manipulating it with ASAP.
208You can store it to disk and then browse it with the AIPS++
209Table browser if you know how to do that !).
210
211The data are stored in columns (the length of a column is the number of
212rows/integrations of course).
213
214Two important columns are those that describe the frequency setup. We mention
215them explicitly here because you need to be able to undertand the presentation
216of the frequency information and possibly how to manipulate it.
217
218These columns are called FreqID and RestFreqID. They contain indices, for
219each IF, pointing into tables with all of the frequency information for that
220integration. More on these below when we discuss the \cmd{summary} function
221in the next subsection.
222
223There are of course many other columns which contain the actual spectra,
224the flags, the Tsys, the source names and so on, but those are a little
225more transparently handled.
226
227\subsection{Management}
228
229During processing it is possible to create a large number of scan
230tables. These all consume memory, so it is best to periodically remove
231unneeded scan tables. Use \cmd{list\_scans} to print a list of all
232scantables and \cmd{del} to remove unneeded ones.
233
234Example:
235
236\begin{verbatim}
237 ASAP> list_scans
238 The user created scantables are:
239 ['s', 'scans', 'av', 's2', 'ss']
240
241 ASAP> del s2
242 ASAP> del ss
243\end{verbatim}
244
245There is also a function \cmd{summary} to list a summary of the scantable.
246You will find this very useful.
247
248Example:
249
250\begin{verbatim}
251 ASAP> scans = scantable('MyData.rpf')
252 ASAP> scans.summary() # Brief listing
253 ASAP> scans.summary(verbose=True) # Include frequency information
254 ASAP> print scan # Equivalent to brief summary function call
255\end{verbatim}
256
257Most of what the \cmd{summary} function prints out is obvious. However,
258it also prints out the FreqIDs and RestFreqIDs to which we alluded above.
259These are the last column of the listing.
260
261The summary function gives you a scan-based summary. So it lists all of
262the FreqIDs and RestFreqIDs that it encountered for each scan. If you'd
263like to see what each FreqID actually means, then set the verbose
264argument to True and the frequency table will be listed at the end.
265FreqID of 3 say, refers to the fourth row of the frequency table (ASAP
266is 0-relative). The list of rest frequencies, to which the RestFreqIDs
267refer, is always listed.
268
269You can copy one scantable to another with the \cmd{copy} function.
270
271Example:
272
273\begin{verbatim}
274 ASAP> scans = scantable('MyData.rpf')
275 ASAP> scan2 = scans.copy()
276\end{verbatim}
277
278
279
280\subsection{State}
281
282
283Each scantable contains "state"; these are properties applying to all
284of the data in the scantable.
285
286Examples are the selection of beam, IF and polarisation, spectral unit
287(e.g. $km/s$) frequency reference frame (e.g. BARY) and velocity doppler
288type (e.g. RADIO).
289
290
291
292\subsubsection{Units, Doppler and Frequency Reference Frame}
293
294The information describing the frequency setup for each integration
295is stored fundamentally in frequency in the reference frame
296of observation (E.g. TOPO).
297
298When required, this is converted to the desired reference frame (e.g. LSRK),
299Doppler (e.g. OPTICAL) and unit (e.g. $km/s$) on-the-fly. For example,
300this is important when you are displaying the data or fitting to it.
301
302For units, the user has the choice of frequency, velocity or channel.
303The \cmd{set\_unit} function is used to set the current unit for a
304scantable. All functions will (where relevant) work with the selected
305unit until this changes. This is mainly important for fitting (the fits
306can be computed in any of these units), plotting and mask creation.
307
308The velocity doppler can be changed with the \cmd{set\_doppler}
309function, and the frequency reference frame can be changed with the
310\cmd{set\_freqframe} function.
311
312Example usage:
313
314\begin{verbatim}
315 ASAP> scans = scantable('2004-11-23_1841-P484.rpf') # Read in the data
316 ASAP> scans.set_freqframe('LSRK') # Use the LSR velocity frame
317 ASAP> scans.set_unit('km/s') # Use velocity for plots etc from now on
318 ASAP> scans.set_doppler('OPTICAL') # Use the optical velocity convention
319 ASAP> scans.set_unit('MHz') # Use frequency in MHz from now on
320\end{verbatim}
321
322
323\subsubsection{Rest Frequency}
324
325ASAP reads the line rest frequency from the RPFITS file when reading
326the data. The values stored in the RPFITS file are not always correct
327and so there is a function \cmd{set\_restfreq} to set the rest frequencies.
328
329For each integration, there is a rest-frequency per IF (the rest
330frequencies are just stored as a list with an index into them).
331There are a few ways to set the rest frequencies with this function.
332
333If you specify just one rest frequency, then it is selected for the
334specified source and IF and added to the list of rest frequencies.
335
336\begin{verbatim}
337 ASAP> scans.set_restfreqs(freqs=1.667359e9, source='NGC253', theif=0) # Selected for specified source/IF
338 ASAP> scans.set_restfreqs(freqs=1.667359e9) # Selected for all sources and IFs
339\end{verbatim}
340
341
342If you specify a list of frequencies, then it must be of length the
343number of IFs. Regardless of the source, the rest frequency will be set
344for each IF to the corresponding value in the provided list. The
345internally stored list of rest frequencies will be replaced by this
346list.
347
348
349\begin{verbatim}
350 ASAP> scans.set_restfreqs(freqs=1.667359e9, source='NGC253', theif=0) # Selected for specified source/IF
351 ASAP> scans.set_restfreqs(freqs=1.667359e9) # Selected for all sources and IFs
352\end{verbatim}
353
354
355In both of the above modes, you can also specify the rest frequencies via
356names in a known list rather than by their values.
357
358Examples:
359
360\begin{verbatim}
361 ASAP> scans.lines() # Print list of known lines
362 ASAP> scans.set_restfreqs(lines=['OH1665','OH1667'])
363\end{verbatim}
364
365
366
367\subsection{Data Selection}
368
369Data selection is currently fairly limited. This will be improved in
370the future.
371
372
373\subsubsection{Cursor}
374
375Generally the user will want to run functions on all rows in a
376scantable. This allows very fast reduction of data. There are situations
377when functions should only operate on specific elements of the spectra. This
378is handled by the scantable cursor, which allows the user to select a
379single beam, IF and polarisation combination.
380
381Example :
382
383\begin{verbatim}
384 ASAP> scans.set_cursor(0,2,1) # beam, IF, pol
385 ASAP> scans.smooth(allaxes=F) # in situ by default or .aipsrc
386\end{verbatim}
387
388\subsubsection{Row number}
389
390Most functions work on all rows of a scan table. Exceptions are the
391fitter and plotter. If you wish to only operate on a selected set of
392scantable rows, usw the \cmd{get_scan} function to copy the rows into
393a new scantable.
394
395\subsubsection{Allaxes}
396
397Many functions have an \cmd{allaxes} option which controls whether the
398function will operate on all elements within a scantable row, or just
399those selected with the current cursor. The default is taken from the
400users {\tt .asaprc} file.
401
402\subsubsection{Masks}
403
404Many tasks (fitting, baseline subtraction, statistics etc) should only
405be run on range of channels. Depending on the current ``unit'' setting
406this range is set directly as channels, velocity or frequency
407ranges. Internally these are converted into a simple boolean mask for
408each channel of the abscissa. This means that if the unit setting is
409later changed, previously created mask are still valid. (This is not
410true for functions which change the shape or shift the frequency axis).
411You create masks with the function \cmd{create\_mask} and this specified
412the channels to be included in the selection.
413
414When setting the mask in velocity, the conversion from velocity
415to channels is based on the current cursor setting, selected row and
416selected frequency reference frame (**Currently first row only**)
417
418
419Example :
420\begin{verbatim}
421
422 # Select channel range for baselining
423 ASAP> scans.set_unit('channels')
424 ASAP> msk = q.create_mask([100,400],[600,800])
425
426 # Select velocity range for fitting
427 ASAP> scans.set_unit('km/s')
428 ASAP> msk = q.create_mask([-30,-10])
429\end{verbatim}
430
431
432Sometimes it is more convenient to specify the channels to be
433excluded, rather included. You can do this with the ``invert'' argument.
434
435Example :
436\begin{verbatim}
437 ASAP> scans.set_unit('channels')
438 ASAP> msk = q.create_mask([0,100],[900-1023], invert=True) # Excludes specified channels
439\end{verbatim}
440
441Because the mask is stored in a simple python variable, the users is
442able to combine masks using simple arithmetic. To create a mask
443excluding the edge channels, a strong maser feature and a birdie in
444the middle of the band:
445
446\begin{verbatim}
447 ASAP> scans.set_unit('channels')
448 ASAP> msk1 = q.create_mask([0,100],[511,511],[900,1023],invert=True)
449 ASAP> scans.set_unit('km/s')
450 ASAP> msk2 = q.create_mask([-20,-10],invert=True)
451
452 ASAP> mask = msk1 and msk2
453\end{verbatim}
454
455
456\section{Data Input}
457
458Data can be loaded in one of two ways; using the reader object or via
459the scantable constructor. The scantable method is simpler but the
460reader allow the user more control on what is read.
461
462\subsection{Scantable constructor}
463
464This loads all of the data from filename into the scantable object scans
465and averages all the data within a scan (i.e. the resulting scantable
466will have one row per scan). The recognised input file formats are
467RPFITS, SDFITS (singledish fits), ASAP's scantable format and aips++
468MeasurementSet2 format.
469
470
471Example usage:
472
473\begin{verbatim}
474 ASAP> scan = scantable('2004-11-23_1841-P484.rpf')
475\end{verbatim}
476
477
478\subsection{Reader object}
479
480For more control when reading data into ASAP, the reader object should
481be used. This has the option of only reading in a range of integrations
482and does not perform any scan averaging of the data, allowing analysis
483of the individual integrations. Note that due to limitation of the
484RPFITS library, only one reader object can be open at one time reading
485RPFITS files. To read multiple RPFITS files, the old reader must be
486destroyed before the new file is opened. However, multiple readers can
487be created and attached to SDFITS files.
488
489
490Example usage:
491
492\begin{verbatim}
493 ASAP> r = reader('2003-03-16_082048_t0002.rpf')
494 ASAP> r.summary
495 ASAP> scan = r.read()
496 ASAP> s = r.read(range(100)) # To read in the first 100 integrations
497 ASAP> del r
498\end{verbatim}
499
500\section{Basic Processing}
501
502In the following section, a simple data reduction to form a quotient
503spectrum of a single source is followed. Variations of this approach
504are given later.
505
506%\subsection{Editing}
507
508%How and when?
509
510\subsection{Separate reference and source observations}
511
512Most data from ATNF observatories distinguishes on and off source data
513using the file name. This makes it easy to create two scantables with
514the source and reference data. As long as there was exactly one
515reference observation for each on source observation for following
516method will work.
517
518For Mopra and Parkes data:
519\begin{verbatim}
520 ASAP> r = scans.get_scan('*_R')
521 ASAP> s = scans.get_scan('*_S')
522\end{verbatim}
523
524For Tidbinbilla data
525\begin{verbatim}
526 ASAP> r = scans.get_scan('*_[ew]')
527 ASAP> s = scans.get_scan('*_[^ew]')
528\end{verbatim}
529
530\subsection{Make the quotient spectra}
531
532Use the quotient function
533
534\begin{verbatim}
535 ASAP> q = s.quotient(r)
536\end{verbatim}
537
538This uses the rows in scantable \cmd{r} as reference spectra for the
539rows in scantable \cmd{s}. Scantable \cmd{r} must have either 1 row
540(which is applied to all rows in \cmd{s}) or both scantables must have
541the same number of rows. By default the quotient spectra is calculated
542to preserve continuum emission. If you wish to remove continuum
543contribution, use the \cmd{preserve} argument:
544
545\begin{verbatim}
546 ASAP> q = s.quotient(r, preserve=True)
547\end{verbatim}
548
549\subsection{Time average separate scans}
550
551If you have observed the source with multiple source/reference cycles you
552will want to scan-average the quotient spectra together.
553
554\begin{verbatim}
555 ASAP> av = average_time(q)
556\end{verbatim}
557
558If for some you want to average multiple sets of scan tables together you can:
559
560\begin{verbatim}
561 ASAP> av = average_time(q1, q2, q3)
562\end{verbatim}
563
564The default is not to use any weighting, which probably is not what
565you want. The alternative is to use variance or Tsys weighting.
566
567To use variance based weighting, you need to supply a mask saying which
568channel range you want it to calculate the variance from.
569
570\begin{verbatim}
571 ASAP> av = average_time(q, weight='tsys')
572
573 ASAP> msk = q.create_mask([200,400],[600,800])
574 ASAP> av = average_time(q, mask=msk, weight='var')
575\end{verbatim}
576
577\subsection{Baseline fitting}
578
579To make a baseline fit, you must first create a mask of channels to
580use in the baseline fit.
581
582\begin{verbatim}
583 ASAP> msk = scans.create_mask([100,400],[600,900])
584 ASAP> scans.poly_baseline(msk, 1)
585\end{verbatim}
586
587This will fit a first order polynomial to the selected channels and subtract
588this polynomial from the full spectra.
589
590\subsubsection{Auto-baselining}
591
592The function \cmd{auto\_poly\_baseline} can be used to automatically
593baseline your data with out having to specify channel ranges for
594the line free data. It automatically figures out the line-free
595emission and fits a polynomial baseline to that data. The user can use
596masks to fix the range of channels or velocity range for the fit as
597well as mark the band edge as invalid.
598
599Simple example
600
601\begin{verbatim}
602 ASAP> scans.auto_poly_baseline(order=2,threshold=5)
603\end{verbatim}
604
605\cmd{order} is the polynomial order for the fit. \cmd{threshold} is
606the SNR threshold to use to deliminate line emission from
607signal. Making this too small or too large will result in a poor fit,
608but generally the value is not critical.
609
610Other examples:
611
612\begin{verbatim}
613 # Don't try and fit the edge of the bandpass which is noisier
614 ASAP> scans.auto_poly_baseline(edge=(500,450),order=3,threshold=3)
615
616 # Only fit a given region around the line
617 ASAP> scans.set_unit('km/s')
618 ASAP> msk = scans.create_mask((-60,-20))
619 ASAP> scans.auto_poly_baseline(mask=msk,order=3,threshold=3)
620
621\end{verbatim}
622
623\subsection{Average the polarisations}
624
625If you are just interested in the highest SNR for total intensity you
626will want to average the parallel polarisations together.
627
628\begin{verbatim}
629 ASAP> scans.average_pol()
630\end{verbatim}
631
632\subsection{Calibration}
633
634For most uses, calibration happens transparently as the input data
635contains the Tsys measurements taken during observations. The nominal
636``Tsys'' values may be in Kelvin or Jansky. The user may wish to
637supply a Tsys correction or apply gain-elevation and opacity
638corrections.
639
640\subsubsection{Brightness Units}
641
642RPFITS files to not contain any information as to whether the telescope
643calibration was in units of Kelvin or Janskys. On reading the data a
644default value is set depending on the telescope and frequency of
645observation. If this default is incorrect (you can see it in the
646listing from the \cmd{summary} function) the user can either override
647this value on reading the data or later. E.g:
648
649\begin{verbatim}
650 ASAP> scans = scantable(('2004-11-23_1841-P484.rpf', unit='Jy')
651 # Or in two steps
652 ASAP> scans = scantable(('2004-11-23_1841-P484.rpf')
653 ASAP> scans.set_fluxunit('Jy)
654\end{verbatim}
655
656\subsubsection{Tsys scaling}
657
658Sometime the nominal Tsys measurement at the telescope is wrong due to
659an incorrect noise diode calibration. This can easily be corrected for
660with the scale function. By default, \cmd{scale} only scans the
661spectra and not the corresponding Tsys.
662
663\begin{verbatim}
664 ASAP> scans.scale(1.05, tsys=True)
665\end{verbatim}
666
667\subsubsection{Unit Conversion}
668
669To convert measurements in Kelvin to Jy (and vice versa) the global
670function \cmd{convert\_flux} is needed. This converts and scales the data
671from K to Jy or vice-versa depending on what the current brightness unit is
672set to. The function knows the basic parameters for some frequencies
673and telescopes, but the user may need to supply the aperture
674efficiency, telescope diameter or the Jy/K factor.
675
676\begin{verbatim}
677 ASAP> scans.convert_flux # If efficency known
678 ASAP> scans.convert_flux(eta=0.48) # If telescope diameter known
679 ASAP> scans.convert_flux(eta=0.48,d=35) # Unknown telescope
680 ASAP> scans.convert_flux(jypk=15) # Alternative
681\end{verbatim}
682
683\subsubsection{Gain-Elevation and Opacity Corrections}
684
685As higher frequencies (particularly $>$20~GHz) it is important to make
686corrections for atmospheric opacity and gain-elevation effects.
687
688Gain-elevation curves for some telescopes and frequencies and known to
689ASAP (currently only for Tid at 20~GHz). In these cases making
690gain-corrections is simple. If the gain curve for your data is not
691known the user can supply either a gain polynomial or text file
692tabulating gain factors at a range of elevations (see \cmd{help
693gain\_el}).
694
695Examples:
696
697\begin{verbatim}
698 ASAP> scans.gain_el() # If gain table known
699 ASAP> scans.gain_el(poly=[3.58788e-1,2.87243e-2,-3.219093e-4])
700\end{verbatim}
701
702Opacity corrections can be made with the global function
703\cmd{opacity}. This should work on all telescopes as long as a
704measurement of the opacity factor, was made during the
705observation.
706
707\begin{verbatim}
708 ASAP> scans.opacity(0.083)
709\end{verbatim}
710
711Note that at 3~mm Mopra uses a paddle wheel for Tsys calibration,
712which takes opacity effects into account (to first order). ASAP
713opacity corrections should not then be used for Mopra 3-mm data.
714
715\subsection{Frequency Frame Alignment}
716
717When time averaging a series of scans together, it is possible that the
718velocity scales are not exactly aligned. This may be for many reasons
719such as not Doppler tracking the observations, errors in the Doppler
720tracking etc. This mostly affects very long integrations or
721integrations averaged together from different days data. Before
722averaging such data together, they should be frequency aligned using
723\cmd{freq\_align}.
724
725E.g.:
726
727\begin{verbatim}
728 ASAP> scans.freq_align()
729 ASAP> av = average_time(scans)
730\end{verbatim}
731
732\cmd{freq\_align} has two modes of operations controlled by the
733\cmd{perif} argument. By default it will align each source and freqid
734separately. This is needed for scan tables containing multiple
735sources. However if scan-based Doppler tracking has been made at the observatory,
736each row will have a different freqid. In these cases run with
737\cmd{perif=True} and all rows of a source will be aligned to the same
738frame. In general \cmd{perif=True} will be needed for most
739observations as Doppler tracking of some form is made at Parkes, Tid
740and Mopra.
741
742\begin{verbatim}
743 ASAP> scans.freq_align(perif=True)
744\end{verbatim}
745
746To average together data taken on different days, which are in
747different scantables, each scantable must aligned to a common
748reference time then the scantables averaged. The simplest way of
749doing this is to allow ASAP to choose the reference time for the first
750scantable then using this time for the subsequent scantables.
751
752\begin{verbatim}
753 ASAP> scans1.freq_align() # Copy the refeference Epoch from the output
754 ASAP> scans2.freq_align(reftime='2004/11/23/18:43:35')
755 ASAP> scans3.freq_align(reftime='2004/11/23/18:43:35')
756 ASAP> av = average_time(scans1, scans2, scans3)
757\end{verbatim}
758
759\section{Scantable manipulation}
760
761While it is very useful to have many independent sources within one
762scantable, it is often inconvenient for data processing. The
763\cmd{get\_scan} function can be used to create a new scantable with a
764selection of scans from a scantable. The selection can either be on
765the source name, with simple wildcard matching or set of scan ids.
766
767For example:
768
769\begin{verbatim}
770 ASAP> ss = scans.get_scan(10) # Get the 11th scan (zero based)
771 ASAP> ss = scans.get_scan(range(10)) # Get the first 10 scans
772 ASAP> ss = scans.get_scan([2,4,6,8,10]) # Get a selection of scans
773
774 ASAP> ss = scans.get_scan('345p407') # Get a specific source
775 ASAP> ss = scans.get_scan('345*') # Get a few sources
776
777 ASAP> r = scans.get_scan('*_R') # Get all reference sources (Parkes/Mopra)
778 ASAP> s = scans.get_scan('*_S') # Get all program sources (Parkes/Mopra)
779 ASAP> r = scans.get_scan('*_[ew]') # Get all reference sources (Tid)
780 ASAP> s = scans.get_scan('*_[^ew]') # Get all program sources (Tid)
781
782\end{verbatim}
783
784To copy a scantable the following does not work:
785
786\begin{verbatim}
787 ASAP> ss = scans
788\end{verbatim}
789
790as this just creates a reference to the original scantable. Any changes
791made to \cmd{ss} and also seen in \cmd{scans}. To duplicate a
792scantable, use the copy function.
793
794\begin{verbatim}
795 ASAP> ss = scans.copy
796\end{verbatim}
797
798\section{Data Output}
799
800ASAP can save scantables in a variety of formats, suitable for reading
801into other packages. The formats are:
802
803\begin{itemize}
804\item[ASAP] This is the internal format used for ASAP. It is the only
805format that allows the user to restore the data, fits etc. without
806loosing any information. As mentioned before, the ASAP scantable
807is just an AIPS++ Table (a memory-based table).
808This function just converts it to a disk-based
809Table. You can the access that Table with the AIPS++ Table browser
810or any other AIPS++ tool.
811
812\item[SDFITS] The Single Dish FITS format. This format was
813designed to for interchange between packages, but few packages
814actually can read it.
815
816\item[FITS] This uses simple ``image'' fits to save the data, each row
817being written to a separate fits file. This format is suitable for
818importing the data into CLASS.
819
820\item[ASCII] A simple text based format suitable for the user to
821processing using Perl or, Python, gnuplot etc.
822
823\item[MS2] Saves the data in an aips++ MeasurementSet V2 format.
824You can also access this with the Table browser and other AIPS++
825tools.
826
827\end{itemize}
828
829The default output format can be set in the users {\tt .asaprc} file.
830Typical usages are:
831
832\begin{verbatim}
833 ASAP> scans.save('myscans') # Save in default format
834 ASAP> scans.save('myscans', 'FITS') # Save as FITS for exporting into CLASS
835
836 ASAP> scans.save('myscans', stokes=True) # Convert raw polarisations into Stokes
837 ASAP> scans.save('myscans', overwrite=True) # Overwrite an existing file
838\end{verbatim}
839
840
841
842\section{Plotter}
843
844Scantable spectra can be plotter at any time. An asapplotter object is
845used for plotting, meaning multiple plot windows can be active at the
846same time. On start up a default asapplotter object is created called
847``plotter''. This would normally be used for standard plotting.
848
849The plotter, optionally, will run in a mulipanel mode and contain
850multiple plots per panel. The user must tell the plotter how they want
851the data distributed. This is done using the set\_mode function. The
852default can be set in the users {\tt .asaprc} file. The units (and frame
853etc) of the abcissa will be whatever has previously been set by
854set\_unit, set\_freqframe etc.
855
856Typical plotter usage would be:
857
858\begin{verbatim}
859 ASAP> scans.set_unit('km/s')
860 ASAP> plotter.set_mode(stacking='p',panelling='t')
861 ASAP> plotter.plot(scans)
862\end{verbatim}
863
864This will plot multiple polarisation within each plot panel and each
865scanrow in a separate panel.
866
867Other possbilities include:
868
869\begin{verbatim}
870 # Plot multiple IFs per panel
871 ASAP> plotter.set_mode(stacking='i',panelling='t')
872 more????
873\end{verbatim}
874
875\subsection{Plot control}
876
877The plotter window has a row of buttons on the lower left. These can
878be used to control the plotter (mostly for zooming the individual
879plots). From left to right:
880
881\begin{itemize}
882
883\item[Home] This will unzoom the plots to the original zoom factor
884
885\item[Plot history] (left and right arrow). The plotter keeps a
886history of zoom settings. The left arrow sets the plot zoom to the
887previous value. The right arrow returns back again. This allows you,
888for example, to zoom in on one feature then return the plot to how it
889was previously.
890
891\item[Pan] (The Cross) This sets the cursor to pan, or scroll mode
892 allowing you to shift the plot within the window. Useful when
893 zoomed in on a feature.
894
895\item[Zoom] (the letter with the magnifying glass) lets you draw a
896 rectangle around a region of interest then zooms in on that
897 region. Use the plot history to unzoom again.
898
899\item[Save] (floppy disk). Save the plot as a postscript or .png file
900
901\end{itemize}
902
903\subsection{Other control}
904
905The plotter has a number of functions to describe the layout of the
906plot. These include \cmd{set\_legend}, \cmd{set\_layout} and \cmd{set\_title}.
907
908To set the exact velocity or channel range to be plotted use the
909\cmd{set\_range} function. To reset to the default value, call
910\cmd{set\_range} with no arguments. E.g.
911
912\begin{verbatim}
913 ASAP> scans.set_unit('km/s')
914 ASAP> plotter.plot(scans)
915 ASAP> plotter.set_range(-150,-50)
916 ASAP> plotter.set_range()
917\end{verbatim}
918
919To save a hardcopy of the current plot, use the save function, e.g.
920
921\begin{verbatim}
922 ASAP> plotter.save('myplot.ps')
923\end{verbatim}
924
925\section{Fitting}
926
927Currently multicomponent Gaussian function is available. This is done
928by creating a fitting object, setting up the fit and actually fitting
929the data. Fitting can either be done on a single scantable row/cursor
930selection or on an entire scantable using the \cmd{auto\_fit} function.
931
932\begin{verbatim}
933 ASAP> f = fitter()
934 ASAP> f.set_function(gauss=2) # Fit two Gaussians
935 ASAP> f.set_scan(scans)
936 ASAP> scans.set_cursor(0,0,1) # Fit the second polarisation
937 ASAP> scans.set_unit('km/s') # Make fit in velocity units
938 ASAP> f.fit(1) # Run the fit on the second row in the table
939 ASAP> f.plot() # Show fit in a plot window
940 ASAP> f.get_parameters() # Return the fit paramaters
941\end{verbatim}
942
943This auto-guesses the initial values of the fit and works well for data
944without extra confusing features. Note that the fit is performed in
945whatever unit the abscissa is set to.
946
947If you want to confine the fitting to a smaller range (e.g. to avoid
948band edge effects or RFI you must set a mask.
949
950\begin{verbatim}
951 ASAP> f = fitter()
952 ASAP> f.set_function(gauss=2)
953 ASAP> scans.set_unit('km/s') # Set the mask in channel units
954 ASAP> msk = s.create_mask([1800,2200])
955 ASAP> scans.set_unit('km/s') # Make fit in velocity units
956 ASAP> f.set_scan(s,msk)
957 ASAP> f.fit()
958 ASAP> f.plot()
959 ASAP> f.get_parameters()
960\end{verbatim}
961
962If you wish, the initial parameter guesses can be specified specific
963parameters can be fixed:
964
965\begin{verbatim}
966 ASAP> f = fitter()
967 ASAP> f.set_function(gauss=2)
968 ASAP> f.set_scan(s,msk)
969 ASAP> f.fit() # Fit using auto-estimates
970 # Set Peak, centre and fwhm for the second gaussian.
971 # Force the centre to be fixed
972 ASAP> f.set_gauss_parameters(0.4,450,150,0,1,0,component=1)
973 ASAP> f.fit() # Re-run the fit
974\end{verbatim}
975
976The fitter \cmd{plot} function has a number of options to either view
977the fit residuals or the individual components (by default it plots
978the sum of the model components).
979
980Examples:
981
982\begin{verbatim}
983 # Plot the residual
984 ASAP> f.plot(residual=True)
985
986 # Plot the first 2 componentsa
987 ASAP> f.plot(components=[0,1])
988
989 # Plot the first and third component plus the model sum
990 ASAP> f.plot(components=[-1,0,2]) # -1 means the compoment sum
991
992\end{verbatim}
993
994\section{Polarisation}
995
996Currently ASAP only supports polarmetric analysis on linearly
997polarised feeds and the cross polarisation products measured. Other
998cases will be added on an as needed basic.
999
1000But how do you actually do it...
1001
1002\section{Function Summary}
1003
1004\begin{verbatim}
1005
1006 [The scan container]
1007 scantable - a container for integrations/scans
1008 (can open asap/rpfits/sdfits and ms files)
1009 copy - returns a copy of a scan
1010 get_scan - gets a specific scan out of a scantable
1011 summary - print info about the scantable contents
1012 set_cursor - set a specific Beam/IF/Pol 'cursor' for
1013 further use
1014 get_cursor - print out the current cursor position
1015 stats - get specified statistic of the spectra in
1016 the scantable
1017 stddev - get the standard deviation of the spectra
1018 in the scantable
1019 get_tsys - get the TSys
1020 get_time - get the timestamps of the integrations
1021 get_unit - get the currnt unit
1022 set_unit - set the abcissa unit to be used from this
1023 point on
1024 get_abcissa - get the abcissa values and name for a given
1025 row (time)
1026 set_freqframe - set the frame info for the Spectral Axis
1027 (e.g. 'LSRK')
1028 set_doppler - set the doppler to be used from this point on
1029 set_instrument - set the instrument name
1030 get_fluxunit - get the brightness flux unit
1031 set_fluxunit - set the brightness flux unit
1032 create_mask - return an mask in the current unit
1033 for the given region. The specified regions
1034 are NOT masked
1035 get_restfreqs - get the current list of rest frequencies
1036 set_restfreqs - set a list of rest frequencies
1037 lines - print list of known spectral lines
1038 flag_spectrum - flag a whole Beam/IF/Pol
1039 save - save the scantable to disk as either 'ASAP'
1040 or 'SDFITS'
1041 nbeam,nif,nchan,npol - the number of beams/IFs/Pols/Chans
1042 history - print the history of the scantable
1043
1044 average_time - return the (weighted) time average of a scan
1045 or a list of scans
1046 average_pol - average the polarisations together.
1047 The dimension won't be reduced and
1048 all polarisations will contain the
1049 averaged spectrum.
1050 quotient - return the on/off quotient
1051 scale - return a scan scaled by a given factor
1052 add - return a scan with given value added
1053 bin - return a scan with binned channels
1054 resample - return a scan with resampled channels
1055 smooth - return the spectrally smoothed scan
1056 poly_baseline - fit a polynomial baseline to all Beams/IFs/Pols
1057 gain_el - apply gain-elevation correction
1058 opacity - apply opacity correction
1059 convert_flux - convert to and from Jy and Kelvin brightness
1060 units
1061 freq_align - align spectra in frequency frame
1062 rotate_xyphase - rotate XY phase of cross correlation
1063 rotate_linpolphase - rotate the phase of the complex
1064 polarization O=Q+iU correlation
1065 [Math] Mainly functions which operate on more than one scantable
1066
1067 average_time - return the (weighted) time average
1068 of a list of scans
1069 quotient - return the on/off quotient
1070 simple_math - simple mathematical operations on two scantables, 'add', 'sub', 'mul', 'div'
1071 [Fitting]
1072 fitter
1073 auto_fit - return a scan where the function is
1074 applied to all Beams/IFs/Pols.
1075 commit - return a new scan where the fits have been
1076 commited.
1077 fit - execute the actual fitting process
1078 get_chi2 - get the Chi^2
1079 set_scan - set the scantable to be fit
1080 set_function - set the fitting function
1081 set_parameters - set the parameters for the function(s), and
1082 set if they should be held fixed during fitting
1083 set_gauss_parameters - same as above but specialised for individual gaussian components
1084 get_parameters - get the fitted parameters
1085 plot - plot the resulting fit and/or components and
1086 residual
1087 [Plotter]
1088 asapplotter - a plotter for asap, default plotter is
1089 called 'plotter'
1090 plot - plot a (list of) scantable
1091 save - save the plot to a file ('png' ,'ps' or 'eps')
1092 set_mode - set the state of the plotter, i.e.
1093 what is to be plotted 'colour stacked'
1094 and what 'panelled'
1095 set_range - set the abcissa 'zoom' range
1096 set_legend - specify user labels for the legend indeces
1097 set_title - specify user labels for the panel indeces
1098 set_ordinate - specify a user label for the ordinate
1099 set_abcissa - specify a user label for the abcissa
1100 set_layout - specify the multi-panel layout (rows,cols)
1101
1102 [Reading files]
1103 reader - access rpfits/sdfits files
1104 read - read in integrations
1105 summary - list info about all integrations
1106
1107 [General]
1108 commands - this command
1109 print - print details about a variable
1110 list_scans - list all scantables created bt the user
1111 del - delete the given variable from memory
1112 range - create a list of values, e.g.
1113 range(3) = [0,1,2], range(2,5) = [2,3,4]
1114 help - print help for one of the listed functions
1115 execfile - execute an asap script, e.g. execfile('myscript') list_rcparameters - print out a list of possible values to be
1116 put into $HOME/.asaprc
1117 mask_and,mask_or,
1118 mask_not - boolean operations on masks created with
1119 scantable.create_mask
1120
1121 Note:
1122 How to use this with help:
1123 # function 'summary'
1124 [xxx] is just a category
1125 Every 'sub-level' in this list should be replaces by a '.' Period when using help
1126 Example:
1127 ASAP> help scantable # to get info on ths scantable
1128 ASAP> help scantable.summary # to get help on the scantable's
1129 ASAP> help average_time
1130
1131
1132\end{verbatim}
1133
1134\section{Scripting}
1135
1136Malte to add something
1137
1138\section{Appendix}
1139
1140\subsection{Installation}
1141
1142
1143ASAP depends on a number of third-party libraries which you must
1144have installed before attempting to build ASAP. These are:
1145
1146\begin{itemize}
1147\item AIPS++
1148\item Boost
1149\item Matplotlib
1150\item ipython/python
1151\end{itemize}
1152
1153Debian Linux is currently supported and we intend also
1154to support other popular Linux flavours, Solaris and Mac.
1155
1156Of the dependencies, AIPS++ is the most complex to install.
1157
1158\subsection{ASCII output format}
1159
1160\subsection{.asaprc settings}
1161
1162\end{document}
1163
1164
Note: See TracBrowser for help on using the repository browser.