Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| public:documents:raw_olap_data_formats [2012-03-20 09:15] – Jan David Mol | public:documents:raw_olap_data_formats [2017-03-08 15:27] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Raw OLAP data formats ==== | + | ===== Raw OLAP data formats |
| OLAP produces several data formats, which are intended to be replaced by their final format, such as HDF5. | OLAP produces several data formats, which are intended to be replaced by their final format, such as HDF5. | ||
| - | ==== After 2011-10-24 ==== | + | ===== After 2011-10-24 |
| - | Files adhere to the following naming scheme: Liiiii_SAPsssss_Bbbb_Sz_bf.raw, | + | Files adhere to the following naming scheme: |
| - | - iiiii = SAS observation ID | + | - '' |
| - | - sssss = Station beam number (SAP) | + | - '' |
| - | - bbb = Tied-array beam number (TAB) | + | - '' |
| - | - z = Stokes number | + | - '' |
| The stokes numbers are to be interpreted as follows: | The stokes numbers are to be interpreted as follows: | ||
| Line 27: | Line 27: | ||
| The data is encoded as follows. Each .raw file is a multiple of the following structure. All data is written as big-endian 32-bit IEEE floats. | The data is encoded as follows. Each .raw file is a multiple of the following structure. All data is written as big-endian 32-bit IEEE floats. | ||
| + | < | ||
| struct block { | struct block { | ||
| - | float stokes[SAMPLES][SUBBANDS][CHANNELS]; | + | float sample[SUBBANDS][CHANNELS]; |
| }; | }; | ||
| + | </ | ||
| + | The constants used can be derived from the parset: | ||
| + | |||
| + | < | ||
| + | SUBBANDS = len(parset[" | ||
| + | |||
| + | if (complex voltages || coherent stokes) { | ||
| + | |||
| + | CHANNELS = parset[" | ||
| + | if (CHANNELS == 0) CHANNELS = parset[" | ||
| + | |||
| + | } elif (incoherent stokes) { | ||
| + | |||
| + | CHANNELS = parset[" | ||
| + | if (CHANNELS == 0) CHANNELS = parset[" | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | The sampling rate can be derived as follows: | ||
| + | |||
| + | < | ||
| + | # clock frequency (f.e. 200 MHz) | ||
| + | clock_hz = parset[" | ||
| + | |||
| + | # subband frequency (f.e. 195 kHz) | ||
| + | base_subband_hz = clock_hz / 1024 | ||
| + | |||
| + | # channel frequency (f.e. 763 Hz) | ||
| + | base_nrchannels = parset[" | ||
| + | base_channel_hz = base_subband_hz / base_nrchannels | ||
| + | |||
| + | if(complex voltages || coherent stokes) { | ||
| + | cs_temporalintegration = parset[" | ||
| + | |||
| + | sample_hz = base_channel_hz / cs_temporalintegration | ||
| + | |||
| + | } elif(incoherent stokes) { | ||
| + | |||
| + | is_temporalintegration = parset[" | ||
| + | |||
| + | sample_hz = base_channel_hz / is_temporalintegration | ||
| + | } | ||
| + | | ||
| + | </ | ||
| - | ==== Before 2011-20-24 ==== | + | ===== Before 2011-10-24 ===== |
| Data can be recorded as either complex voltages (yielding X and Y polarisations) or one or more stokes. In either case, a sequence of blocks will be stored, each of which consists of a header and data. The header is defined as: | Data can be recorded as either complex voltages (yielding X and Y polarisations) or one or more stokes. In either case, a sequence of blocks will be stored, each of which consists of a header and data. The header is defined as: | ||
| Line 167: | Line 213: | ||
| A BFRaw file starts with a file header containing the configuration: | A BFRaw file starts with a file header containing the configuration: | ||
| - | < | + | < |
| struct file_header | struct file_header | ||
| { | { | ||
| Line 197: | Line 243: | ||
| After the file header, there is a series of blocks until the end of file, configured using values from the file header: | After the file header, there is a series of blocks until the end of file, configured using values from the file header: | ||
| - | < | + | < |
| struct block | struct block | ||
| // 0x2913D852 | // 0x2913D852 | ||
| Line 234: | Line 280: | ||
| To convert a TimeStamp-compatible int64_t to a C-readable timestamp, use | To convert a TimeStamp-compatible int64_t to a C-readable timestamp, use | ||
| - | < | + | < |
| /* clockspeed is in Hz */ | /* clockspeed is in Hz */ | ||
| int64 nanoseconds = (int64) (timestamp * 1024 * 1e9 / clockspeed); | int64 nanoseconds = (int64) (timestamp * 1024 * 1e9 / clockspeed); | ||
| Line 256: | Line 302: | ||
| </ | </ | ||
| - | ==== Constants | + | === Constants === |
| Constants can be computed using the parset file. Below is a translation between the C constants used above and their respective parset keys: | Constants can be computed using the parset file. Below is a translation between the C constants used above and their respective parset keys: | ||