[1852] | 1 | =====================
|
---|
| 2 | Scantable Description
|
---|
| 3 | =====================
|
---|
| 4 |
|
---|
| 5 | Introduction
|
---|
| 6 | ============
|
---|
| 7 |
|
---|
| 8 | The Scantable is the ASAP single-dish data container. It was designed
|
---|
| 9 | based on the data abstraction of the PKSreader API.
|
---|
| 10 |
|
---|
[1854] | 11 | ASAP data handling works on objects called scantables. A scantable holds your
|
---|
| 12 | data, and also provides functions to operate upon it.
|
---|
| 13 |
|
---|
| 14 | The building block of a scantable is an integration, which is a single row of
|
---|
| 15 | a scantable. Each row contains just one spectrum for each beam, IF and
|
---|
| 16 | polarisation. For example Parkes OH-multibeam data would normally contain
|
---|
| 17 | 13 beams, 1 IF and 2 polarisations, Parkes methanol-multibeam data would
|
---|
| 18 | contain 7 beams, 2 IFs and 2 polarisations while the Mopra 8-GHz MOPS
|
---|
| 19 | filterbank will produce one beam, many IFs, and 2-4 polarisations.
|
---|
| 20 |
|
---|
| 21 | All of the combinations of Beams/IFs an Polarisations are contained in separate
|
---|
| 22 | rows. These rows are grouped in cycles (same time stamp).
|
---|
| 23 |
|
---|
| 24 | A collection of cycles for one source is termed a scan (and each scan has a
|
---|
| 25 | unique numeric identifier, the SCANNO). A scantable is then a collection of
|
---|
| 26 | one or more scans. If you have scan-averaged your data in time, i.e. you
|
---|
| 27 | have averaged all cycles within a scan, then each scan would hold just
|
---|
| 28 | one (averaged) integration.
|
---|
| 29 |
|
---|
[1852] | 30 | Schema
|
---|
| 31 | ======
|
---|
| 32 |
|
---|
| 33 | The Scantable consist of a main (casacore) Table and several sub-tables which
|
---|
[1854] | 34 | are referenced via **ID**. The following descriptions use the following syntax
|
---|
[1852] | 35 |
|
---|
[1854] | 36 | **COLUMN/KEYWORD NAME** - *DATA_TYPE(N)=DEFAULT_VALUE*
|
---|
| 37 |
|
---|
| 38 | where *DEFAULT_VALUE* is optional and *(N)* indicates a Vector of that type
|
---|
| 39 |
|
---|
[1852] | 40 | ----------
|
---|
| 41 | Main Table
|
---|
| 42 | ----------
|
---|
| 43 |
|
---|
| 44 | The main table consists of global data (keywords) and row-based data (columns)
|
---|
| 45 |
|
---|
[1854] | 46 |
|
---|
| 47 | Keywords
|
---|
| 48 | --------
|
---|
| 49 |
|
---|
| 50 | * **VERSION** - *uInt*
|
---|
| 51 |
|
---|
| 52 | the version of the scantable for compatibility tests
|
---|
| 53 |
|
---|
| 54 | * **POLTYPE** - *String=linear*
|
---|
| 55 |
|
---|
| 56 | the polarisation type, i.e. *stokes*, *linear* or *circular*
|
---|
| 57 |
|
---|
| 58 | * **DIRECTIONREF** - *String=J2000*
|
---|
| 59 |
|
---|
| 60 | the reference frame of the direction (coordinate) [redundant?!]
|
---|
| 61 |
|
---|
| 62 | * **OBSMODE** - *String=""*
|
---|
| 63 |
|
---|
| 64 | no idea...
|
---|
| 65 |
|
---|
| 66 | * **UTC** - *String*
|
---|
| 67 |
|
---|
| 68 | most likely the starting time of the observation (file)
|
---|
| 69 |
|
---|
| 70 | * **AntennaName** - *String*
|
---|
| 71 |
|
---|
| 72 | the name of the antenna
|
---|
| 73 |
|
---|
| 74 | * **AntennaPosition** - *Double(3)*
|
---|
| 75 |
|
---|
| 76 | the WGS position of the antenna
|
---|
| 77 |
|
---|
| 78 | * **FluxUnit** - *String*
|
---|
| 79 |
|
---|
| 80 | the unit of the channel values i.e. *Jy* or *K*
|
---|
| 81 |
|
---|
| 82 | * **Observer** - *String*
|
---|
| 83 |
|
---|
| 84 | the name of the observer
|
---|
| 85 |
|
---|
| 86 | * **Obstype** - *String*
|
---|
| 87 |
|
---|
| 88 | probably telescope specific name/encoding
|
---|
| 89 |
|
---|
| 90 | * **Project** - *String*
|
---|
| 91 |
|
---|
| 92 | e.g. proposal project number, survey name
|
---|
| 93 |
|
---|
| 94 | * **Bandwidth** - *Double*
|
---|
| 95 |
|
---|
| 96 | self-explanatory
|
---|
| 97 |
|
---|
| 98 | * **nIF, nBeam, nPol, nChan** - *Int*
|
---|
| 99 |
|
---|
| 100 | the number of IF, Beam, Polarisation and Channel values in the scantable
|
---|
| 101 | This is currently **FIXED**
|
---|
| 102 |
|
---|
| 103 | * **FreqRefFrame** - *String*
|
---|
| 104 |
|
---|
| 105 | redundant info - also in **FREQUENCIES** sub-table
|
---|
| 106 |
|
---|
| 107 | * **FreqRefVal** - *Double*
|
---|
| 108 |
|
---|
| 109 | no idea...
|
---|
| 110 |
|
---|
[1852] | 111 | Columns
|
---|
| 112 | -------
|
---|
| 113 |
|
---|
| 114 | * **SPECTRA** - *Float(nchannel)*
|
---|
| 115 |
|
---|
| 116 | the spectral channel data.
|
---|
| 117 |
|
---|
| 118 | * **FLAGTRA** - *uChar(nchannel)*
|
---|
| 119 |
|
---|
| 120 | the corresponding flags
|
---|
| 121 |
|
---|
| 122 | * **TSYS** - *Float(nchannel)*
|
---|
| 123 |
|
---|
| 124 | the channel-based system temperature values
|
---|
| 125 |
|
---|
[1854] | 126 | * **FLAGROW** - *uInt=-1*
|
---|
[1852] | 127 |
|
---|
| 128 | spectrum based flags
|
---|
| 129 |
|
---|
| 130 | * **TIME** - *MEpoch*
|
---|
| 131 |
|
---|
| 132 | The mjd time when the observation took place
|
---|
| 133 |
|
---|
| 134 | * **INTERVAL** - *Double*
|
---|
| 135 |
|
---|
| 136 | the integration time in seconds
|
---|
| 137 |
|
---|
| 138 | * **DIRECTION** - *MDirection*
|
---|
| 139 |
|
---|
| 140 | the associated direction on the sky
|
---|
| 141 |
|
---|
| 142 | * **AZIMUTH, ELEVATION** - *Float*
|
---|
| 143 |
|
---|
| 144 | the azimuth/elevation when the spectrum was collected
|
---|
| 145 |
|
---|
| 146 | * **SRCNAME** - *string*
|
---|
| 147 |
|
---|
| 148 | the name of the source observered
|
---|
| 149 |
|
---|
[1854] | 150 | * **SRCTYPE** - *Int=-1*
|
---|
[1852] | 151 |
|
---|
| 152 | the tyep of the source, i.e. indicating if it is an on source scan or
|
---|
| 153 | off source. This will be used for calibration
|
---|
| 154 |
|
---|
| 155 | * **SCANNO, BEAMNO, POLNO, IFNO, CYCLENO** - *uInt*
|
---|
| 156 |
|
---|
| 157 | These columns index (0-based) the respective values.
|
---|
| 158 |
|
---|
| 159 | * SCANNO: the number odf the scan. A scan is usually multiple integrations
|
---|
| 160 | (cycles)
|
---|
| 161 |
|
---|
| 162 | * CYCLENO: the integration number within a scan (sub-scan?)
|
---|
| 163 |
|
---|
| 164 | * IFNO: the index of the IF (spectral window)
|
---|
| 165 |
|
---|
| 166 | * BEAMNO: the index of the beam (in a multibeam system)
|
---|
| 167 |
|
---|
| 168 | * POLNO: the index of the polarisation, e.g. XX=0, YY=1, Real(XY)=2,
|
---|
| 169 | Imag(XY)=3
|
---|
| 170 |
|
---|
[1854] | 171 | * **REFBEAMNO** - *Int=-1*
|
---|
[1852] | 172 |
|
---|
| 173 | optional index of the reference beam in a multibeam obervation
|
---|
| 174 |
|
---|
[1854] | 175 | * **FREQ_ID, MOLECULE_ID, TCAL_ID, FOCUS_ID, WEATHER_ID, FIT_ID** - *Int*
|
---|
[1852] | 176 |
|
---|
[1854] | 177 | the reference indeces to the sub-tables
|
---|
[1852] | 178 |
|
---|
[1854] | 179 | * **FIELDNAME** - *string*
|
---|
| 180 |
|
---|
| 181 | the name of the field the source belongs to
|
---|
| 182 |
|
---|
| 183 | * **OPACITY** - *Float*
|
---|
| 184 |
|
---|
| 185 | maybe redundant - not used anywhere
|
---|
| 186 |
|
---|
| 187 | * **SRCPROPERMOTION, SRCVELOCITY, SRCDIRECTION**
|
---|
| 188 |
|
---|
| 189 | see livedata docs - not used in ASAP
|
---|
| 190 |
|
---|
| 191 | * **SCANRATE**
|
---|
| 192 |
|
---|
| 193 | see livedata docs - not used in ASAP
|
---|
| 194 |
|
---|
[1852] | 195 | ----------
|
---|
| 196 | Sub-Tables
|
---|
| 197 | ----------
|
---|
| 198 |
|
---|
| 199 | FREQUENCY
|
---|
| 200 | ---------
|
---|
| 201 |
|
---|
[1854] | 202 | """"""""
|
---|
| 203 | Keywords
|
---|
| 204 | """"""""
|
---|
[1852] | 205 |
|
---|
[1854] | 206 | * **BASEFRAME** - *String=TOPO*
|
---|
| 207 | * **FRAME** - *String=TOPO*
|
---|
| 208 | * **EQUINOX** - *String=J2000*
|
---|
| 209 | * **UNIT** - *String=""*
|
---|
| 210 | * **DOPPLER** - *String=RADIO*
|
---|
[1852] | 211 |
|
---|
[1854] | 212 | """""""
|
---|
| 213 | Columns
|
---|
| 214 | """""""
|
---|
| 215 |
|
---|
| 216 | * **REFPIX** - *Double*
|
---|
| 217 |
|
---|
| 218 | * **REFVAL** - *Double*
|
---|
| 219 |
|
---|
| 220 | * **INCREMENT** - *Double*
|
---|
| 221 |
|
---|
| 222 | MOLECULES
|
---|
| 223 | ---------
|
---|
| 224 |
|
---|
| 225 | """"""""
|
---|
| 226 | Keywords
|
---|
| 227 | """"""""
|
---|
| 228 |
|
---|
| 229 | * **UNIT** - *String=Hz*
|
---|
| 230 |
|
---|
| 231 | """""""
|
---|
| 232 | Columns
|
---|
| 233 | """""""
|
---|
| 234 |
|
---|
| 235 | * **RESTFREQUENCY** - *Double()*
|
---|
| 236 | * **NAME** - *String()*
|
---|
| 237 | * **FORMATTEDNAME** - *String()*
|
---|
| 238 |
|
---|
[1858] | 239 | .. todo:: add all sub-table descriptions
|
---|
[1854] | 240 |
|
---|
[1852] | 241 | ========================
|
---|
| 242 | Mapping to other formats
|
---|
| 243 | ========================
|
---|
| 244 |
|
---|
| 245 | MS
|
---|
| 246 | ==
|
---|
[1854] | 247 |
|
---|
| 248 | MeasurementSets are specifically designed for synthesis data. As such one of the
|
---|
| 249 | main dfferences between the Scantable and a MS is how spectra are stored.
|
---|
| 250 | An MS usually stores those in an n_pol x n_channel complex matrix whereas the
|
---|
| 251 | Scantable stores each polarisation seperately. In case of polarimetry data the
|
---|
| 252 | (complex) cross-polarisation is serialised into real and imaginary parts, e.g. a
|
---|
| 253 | total of four rows would descibe one polarisation.
|
---|