O3a_2 ATLAS DATA FORMAT

This document describes the data format used for release of O3a Atlas.

The release uses Mappable Vector Library (MVL) file to distribute data.

Every MVL file has the following architecture:

[PREAMBLE] .. [VECTOR] .. [ [VECTOR] ... ]  [POSTAMBLE]

The PREAMBLE starts with letter MVL0 to identify the file as MVL format, and contains information on data alignment and endianness. For this release the data is aligned on 64 byte boundary and is little-endian.

This is followed by VECTORs that carry data separated by optional padding. Each VECTOR has the following structure:

[HEADER] [DATA]

The 64-byte HEADER describes type and length of DATA and contains an optional 64-bit offset pointing to metadata:

typedef struct {
    LIBMVL_OFFSET64 length;
    int type;
    int reserved[11];
    LIBMVL_OFFSET64 metadata;
    } LIBMVL_VECTOR_HEADER;

The DATA is a plain array of length elements of given type. MVL supports integer and numeric types, character strings and a special LIBMVL_OFFSET64 type which is an unsigned 64-bit integer.

Knowing an offset from the beginning of the file uniquely identifies vectors stored in it. An array of offsets then acts as a list of vectors.

This allows to store data of arbitrary complexity in MVL file, whether a set of a tables similar to SQL database, a tree like structure, or a more complex data organization.

A metadata offset allows to associate additional information with a vector. A common use is to add a vector of "names" of the same length as an original vector, which can be used to retrieve data symbolically.

In order to retrieve data one needs to know offsets. They can be either provided externally (see table at the end of this document), or retrieved from other vectors in the MVL file.

The POSTAMBLE stores pointer to a directory, which is a named vector of offsets.

The low-level libMVL library is written in C and provides functions to write data into MVL file, access existing MVL files, parse metadata and perform database functions. See code and examples at:

https://github.com/volodya31415/libMVL

A higher level RMVL package for R integrates MVL files into R allowing easy analysis of data:

https://cran.r-project.org/package=RMVL

The examples provided with the data use RMVL. The R computing environment is open source:

https://www.r-project.org/

The RMVL package (and other R packages such as inline) are installed from within R by using the command:

install.packages("RMVL")

The data included in O3a_atlas consists of two tables (or in R terminology "data.frames") "parameters" and "skymaps":

> parameters[1:5,]
label idx first_bin band_start band_stop resolution
1     0   1    288000   20.00333  20.06778  0.3743345
2     1   2    288648   20.04833  20.11278  0.3734956
3    10   3    294480   20.45333  20.51778  0.3661116
4   100   4    352800   24.50333  24.56778  0.3056788
5  1000   5    936000   65.00333  65.06778  0.1153215

> skymaps[1:5,]
            ul      ul_circ       ul_avg         ul_S      snr snr_frequency   snr_psi snr_iota        ra       dec stage idx     rel_err
1 2.958927e-24 1.007307e-24 2.579873e-24 3.185131e-05 8.745301      20.01973 0.0000000 0.000000 0.0000000 0.3141593    02   1 0.015888453 ...
2 3.051866e-24 1.025739e-24 2.661516e-24 3.263957e-05 8.745301      20.01973 0.3926991 1.963495 0.3695991 0.3141593    02   1 0.013583064 ...
3 3.069451e-24 1.063987e-24 2.733632e-24 3.571220e-05 8.745301      20.01973 0.3926991 1.963495 0.1047198 0.6283185    02   1 0.003847361 ...
4 3.138739e-24 1.064705e-24 2.733632e-24 3.361250e-05 8.718230      20.01968 0.5235988 1.767146 0.3141593 0.6283185    02   1 0.013532281 ...
5 3.177858e-24 1.064705e-24 2.733632e-24 3.388693e-05 8.546866      20.01968 0.5235988 1.767146 0.5235988 0.6283185    02   1 0.009366274 ...

These two tables have a common column "idx" which ties corresponding records. Thus all entries shown above for skymaps table have idx=1 and, reading line 1 from parameter table, for these entries the frequency band spans 500.0033 Hz to 500.0500 Hz

"parameter" table columns description

"skymaps" table columns description

WARNING: the column ul_avg is a placeholder for population average proxy. This column is a placeholder because determining correct values requires a simulation campaign that would delay the early release. To prevent mistakes, the values stored there were set overly conservatively using population specific upper limits.

Each entry in the parameter table corresponds to a region in the parameter space that was analyzed on its own. The regions are created by selecting one of overlapping frequency bands and one of 10 slices of the sky.

The atlas data is constructed in such a way, that if you are interested in a particular sky location and frequency, you need to find the entry in the skymaps table is closest in spherical distance and which frequency band covers frequency of interest. No corrections are needed for sky position mismatch, as it has already been accounted for.

Data layout in O3a_2_atlas.mvl file

                        path          type     length      vector_offset
1                /parameters    data.frame          6 0x0000000002119f00
2          /parameters/label string_vector     658000 0x000000000057d7a0
3            /parameters/idx        double     658000 0x0000000000a82a80
4      /parameters/first_bin         int32     658000 0x0000000000f87d40
5     /parameters/band_start        double     658000 0x000000000120a6c0
6      /parameters/band_stop        double     658000 0x000000000170f980
7     /parameters/resolution        double     658000 0x0000000001c14c40
8                   /skymaps    data.frame         27 0x000000ba2f6f9340
9                /skymaps/ul         float 7076327840 0x0000000002119f80
10          /skymaps/ul_circ         float 7076327840 0x0000000699326640
11           /skymaps/ul_avg         float 7076327840 0x0000000d30532d00
12             /skymaps/ul_S         float 7076327840 0x00000013c773f3c0
13              /skymaps/snr         float 7076327840 0x0000001a5e94ba80
14    /skymaps/snr_frequency        double 7076327840 0x00000020f5b58140
15          /skymaps/snr_psi         float 7076327840 0x0000002e23f70e80
16         /skymaps/snr_iota         float 7076327840 0x00000034bb17d540
17               /skymaps/ra         float 7076327840 0x0000003b52389c00
18              /skymaps/dec         float 7076327840 0x00000041e95962c0
19            /skymaps/stage         uint8 7076327840 0x00000048807a2980
20              /skymaps/idx        double 7076327840 0x0000004a26425b60
21          /skymaps/rel_err         float 7076327840 0x000000575483e8a0
22             /skymaps/unit         float 7076327840 0x0000005deba4af60
23               /skymaps/pp         float 7076327840 0x0000006482c57620
24               /skymaps/pc         float 7076327840 0x0000006b19e63ce0
25               /skymaps/cc         float 7076327840 0x00000071b10703a0
26            /skymaps/im_pc         float 7076327840 0x000000784827ca60
27              /skymaps/pp2         float 7076327840 0x0000007edf489120
28              /skymaps/cc2         float 7076327840 0x00000085766957e0
29              /skymaps/pc2         float 7076327840 0x0000008c0d8a1ea0
30              /skymaps/ipp         float 7076327840 0x00000092a4aae560
31              /skymaps/ipc         float 7076327840 0x000000993bcbac20
32              /skymaps/icc         float 7076327840 0x0000009fd2ec72e0
33              /skymaps/ppc         float 7076327840 0x000000a66a0d39a0
34              /skymaps/pcc         float 7076327840 0x000000ad012e0060
35             /skymaps/ppcc         float 7076327840 0x000000b3984ec720
36 /skymaps_extent_index_idx     mvl_index          6 0x000000ba30e09120

Vector types: