LOFAR Data Access Library (DAL) User Manual

24
LOFAR Data Access Library (DAL) User Manual Joseph Masters, Lars B¨ahren September 4, 2008 Contents 1 Introduction 3 1.1 A Note on the Examples ................................ 3 2 Motivation 3 3 File Types 3 3.1 HDF5 .......................................... 4 3.2 CASA Tables ...................................... 4 3.3 FITS ........................................... 4 4 Library Structure 4 4.1 Overview ........................................ 4 4.2 Primary classes ..................................... 5 4.3 Format-specific classes ................................. 5 5 Examples 5 5.1 C++ ........................................... 5 5.2 Python ......................................... 9 6 Working with standard LOFAR datasets 9 6.1 TBB time-series data .................................. 9 6.1.1 Structure of the data .............................. 9 6.1.2 C++ interface ................................. 10 6.1.3 Python interface ................................ 11 6.2 Beam-formed data ................................... 11 6.2.1 Structure of the data .............................. 11 6.2.2 Interface implementation ........................... 12 6.2.3 C++ interface ................................. 12 6.2.4 Python interface ................................ 14 1

Transcript of LOFAR Data Access Library (DAL) User Manual

LOFAR Data Access Library (DAL) UserManual

Joseph Masters, Lars Bahren

September 4, 2008

Contents

1 Introduction 31.1 A Note on the Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Motivation 3

3 File Types 33.1 HDF5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2 CASA Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.3 FITS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4 Library Structure 44.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44.2 Primary classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54.3 Format-specific classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

5 Examples 55.1 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

6 Working with standard LOFAR datasets 96.1 TBB time-series data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

6.1.1 Structure of the data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96.1.2 C++ interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106.1.3 Python interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

6.2 Beam-formed data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.2.1 Structure of the data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.2.2 Interface implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . 126.2.3 C++ interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126.2.4 Python interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1

Contents Page 2

7 Known Issues 157.1 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

A Appendicies 18A.1 Current State of the Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

lofar Project Page 2

Page 3

1 Introduction

The purpose of this document is to make it easier to work with the LOFAR Data Access Library(DAL). This is not intended to be a reference to all the class methods. For that purpose see theonline documentation [7].

The DAL is both a C++ library (libdal) and a Python module (pydal). The C++ interface isintended primarily, but not exlusively, for developers. Likewise, the python module is intendedprimarily, but not exlusively, for astronomers. The python interface is, and will likely remain, asubset of the methods available in C++.

The primary classes in the DAL are: dalDatast, dalGroup, dalTable, dalColumn, dalData,dalArray and dalFilter. These are the generic classes used to operate on a file of an unspecifiedtype.

A set of supporting classes also exist in the DAL, but they are generally not interesting to thedeveloper. There purpose is to provide common methods used by the primary classes mentionedabove. These supporting classes are: Common, Database, and HDF5Common.

Finally, the DAL includes format-specific classes. These classes are designed to work with asingle type of LOFAR data product such as beam-formed or transient buffer board data. Theformat-specific classes are: BFRaw, BeamFormed, BeamGroup, BeamSubband, Enumerations, TBB,dalLopesEvent and lopesevent.

This document describes only the primary classes.

1.1 A Note on the Examples

Please keep in mind that Python examples assume you imported the pydal module:

$ python> from pydal import *

C++ examples assume the inclusion of dal.h:

#include "dal.h"

For simplicity, none of the examples include error checking on the return values.

2 Motivation

The purpose of the DAL is to abstract the data product implementation details from the user. Inthis way, the user can generally ignore the nuances of the underlying file format and focus insteadon the high level objects reperesented therin (i.e. tables, arrays, attributes, etc.). Althoughsignificant, the storage mechanism is not scientifically interesting to the typical researcher.

3 File Types

Officially, the DAL supports three file types: HDF5, CASA Tables and FITS. At present, eachof these file types have varying levels of support.

lofar Project Page 3

3.1 HDF5 Page 4

3.1 HDF5

Hierarchical Data Format Version 5 (HDF5), is a relatively recent format designed with partic-ular attention to efficient operation on extremely large data sets. HDF5 is the intended formatfor LOFAR data products. The reasons for this decision are given in “Proposed Data Formats“[2].

HDF5 is organized much like a unix file system. The internal structure consists of a rootgroup, ’/’, which may recursively contain subgroups. Each of these groups may, in turn, containother groups or n-dimensional arrays of simple or complex datatypes. HDF5 tables are particularcase of a HDF5 array and thus are treated in a similar manner. Almost all objects in a HDF5file can hold associated metadata in the form of an attribute. For an abbreviated list of HDF5features see “HDF5 vs. CASA Tables” [3]. For a complete list see the hdfgroup website [6].

HDF5 files can be both read and written by the DAL.

3.2 CASA Tables

CASA Tables in general, and Measurement Sets in particular, are the primary data product ofthe Westerbork Synthesis Radio Telescope (WSRT). As WSRT is also based at ASTRON (wherethere is a large community of experienced CASA users), there is naturally a strong interest andadvantage in building upon this expertise for LOFAR.

CASA tables can currently be read, but not written, by the DAL.

3.3 FITS

FITS is the standard astronomical image format. Among its advantages for inclusion in theDAL is its widespread use and extensive toolset. Among its limitations is the fact that it wasnot designed for large and complex datasets.

FITS is the lowest of priority of the three supported formats and currently has almost noactual support in the DAL.

4 Library Structure

4.1 Overview

The DAL is designed, generally, around a superset of the features of the underlying formats.CASA supports a set of hierarchical tables, arrays and attributes. FITS supports multiple tablesor arrays and associated keywords. HDF5 supports all of the above, including groups, as wellas metadata in the form of attributes.

In addition to generic support of different file types, the DAL also supports the LOFAR-specific support of data products. For example, the beam-formed classes (BFRaw, BeamFormed,BeamGroup and BeamSubband) are intended for use only with the LOFAR Beam-formed dataproduct. The transient buffer board class (TBB) is likewise meant to be used only with itsassociated LOFAR data product.

The code examples below are meant as a guide to using the non-LOFAR-specific parts of thelibrary.

lofar Project Page 4

4.2 Primary classes Page 5

4.2 Primary classes

dalDataset At the highest level, a LOFAR data product is represented by the dalDataset object.A dalDataset may contain any number of dalGroup, dalTable and dalArray objects. AdalDataset represents the file as a whole and may have associated metadata.

dalGroup At the moment, the group object within the DAL is unique to HDF5. A group maycontain subgroups, arrays or tables. Additionally, attributes can be attached to a groupobject.

dalTable DAL tables can be located at the root level of a file, or within a group. A dalTableconsits of dalColumn objects and may have associated attributes.

dalColumn DAL columns are the components of the dalTable object. The dalData object holdsthe actual data of each column.

dalArray DAL arrays can be located at the root level of a file, or within a group. A dalArraymay have attribute data.

dalData The dalData object holds the actual data from a dalColumn. This allows the columninformation to be stored seperately from the information about the layout of the data.

dalFilter The filter object can be applied to CASA tables before opening. In the future, thesame syntax may become available for HDF5 and FITS.

4.3 Format-specific classes

BFRaw High-level interface between raw beam-formed data and the DAL.

BeamFormed High-level interface between beam-formed data and the DAL.

BeamGroup High-level interface between beam-formed data and the DAL.

BeamSubband High-level interface between beam-formed data and the DAL.

TBB High-level interface between TBB data and the DAL.

5 Examples

5.1 C++

• Open and read CASA MeasurementSet data:

• Create and close a new HDF5 file:

lofar Project Page 5

5.1 C++ Page 6

dalDataset * ds = NULL;ds = new dalDataset( FILENAME, "HDF5" );

ds->close();

delete ds;

• Open and close an existing file:

dalDataset ds;

ds.open( FILENAME );ds.close();

• Set attributes in a (HDF5) dataset:

dalDataset ds;ds.open( FILENAME );

std::string sval = "string test value";ds.setAttribute( "STRING_ATTR", sval );

std::vector<std::string> svals;svals.push_back("string");svals.push_back("vector");svals.push_back("test");ds.setAttribute_string( "STRING_ATTRS", svals );

int ival = 1;ds.setAttribute( "INT_ATTR", &ival );

int ivals[] = { 1, 2, 3 };ds.setAttribute( "INT_ATTRS", ivals, 3 );

uint uival = 2;ds.setAttribute( "UINT_ATTR", &uival );

uint uivals[] = { 1, 2, 3};ds.setAttribute( "UINT_ATTRS", uivals, 3 );

float fval = 3.0;ds.setAttribute( "FLOAT_ATTR", &fval );

float fvals[] = { 1.0, 2.0, 3.0 };ds.setAttribute( "FLOAT_ATTRS", fvals, 3 );

lofar Project Page 6

5.1 C++ Page 7

double dval = 3.0;ds.setAttribute( "DOUBLE_ATTR", &dval );

double dvals[] = { 1.0, 2.0, 3.0 };ds.setAttribute( "DOUBLE_ATTRS", dvals, 3 );

ds.close();

Once the above operations are completed, the HDF5 file will have the following structureand contents:

.

|-- STRING_ATTR = "string test value"

|-- STRING_ATTRS = {"string","vector","test"}

|-- INT_ATTR = 1

|-- INT_ATTRS = { 1, 2, 3 }

|-- UINT_ATTR = 2

|-- UINT_ATTRS = { 1, 2, 3 }

|-- FLOAT_ATTR = 3.0

|-- FLOAT_ATTRS = { 1.0, 2.0, 3.0 }

• Create a (HDF5) integer array within a dataset:

dalDataset ds;ds.open( FILENAME );

// define dimensions of arrayvector<int> dims;dims.push_back(4);dims.push_back(5);dims.push_back(6);vector<int> cdims;

int data[4*5*6];for (int gg=0; gg<(4*5*6); gg++)data[gg] = gg;

dalArray * array = ds.createIntArray( "int_array", dims,data, cdims );

array->close();delete array;

• Create a (HDF5) group:

dalDataset ds;

lofar Project Page 7

5.1 C++ Page 8

ds.open( FILENAME );

dalGroup * group = ds.createGroup( "group" );group->close();delete group;

• Get a list of groups in a file:

dalDataset ds;ds.open( FILENAME );

vector<string> groupnames = ds.getGroupNames();

ds.close();

• Get a list of members of a group:

dalDataset ds;ds.open( FILENAME );

dalGroup * mygroup = ds.openGroup( "groupname" );vector<string> memnames = mygroup->getMemberNames();

ds.close();

• Open an existing group:

dalDataset * ds = new dalDataset;ds->open( "somefile.h5" );dalGroup * mygroup = ds->openGroup( "groupname" );

• Read an attribute from a dataset:

dalDataset ds;ds.open( FILENAME );

std::string attr_name("INT_ATTR");int iattr = 0;

ds.getAttribute( attr_name, iattr );

ds.close();

• Read a array dimensions:

lofar Project Page 8

5.2 Python Page 9

uint ret = 0;

dalDataset ds;ds.open( FILENAME );

dalArray * array = ds.openArray( "int_array" );

std::vector<int> dims = array->dims();

array->close;delete array;

5.2 Python

• Create a new file:

filename = /path/somename.h5ds = dalDataset( filename, "HDF5" )

• Open an existing file:

ds = dalDataset()ds.open( "filename.h5" ) "

• Create a group in a file:

array_group = ds.createGroup( "groupname" )

6 Working with standard LOFAR datasets

6.1 TBB time-series data

6.1.1 Structure of the data

A LOFAR Time-Series data product is stored as a HDF5 file, grouped by station, then by dipole:

/

|

|-- Station001 ... Group

| |

| |-- 001000000 ... Dataset

| |-- 001000001 ... Dataset

|

| ‘

|-- Station002 ... Group

| |

| |-- 002000000 ... Dataset

lofar Project Page 9

6.1 TBB time-series data Page 10

| |-- 002000001 ... Dataset

|

For a complete description of this data format, see the LOFAR data format ICD: TBB Time-series data [1].

6.1.2 C++ interface

#include "dal.h"

using namespace std;

using namespace DAL;

int main() {

dalDataset ds;

ds.open( "tbb-time-series.h5" ) )

// The first 3 characters are the station id.

// The next 3 are the rsp id.

// The last 3 are the rcu id.

string id = "001002003";

// read the time series data for dipole ’id’

// from ’start’ index for ’length’ values into ’data’

int start = 25;

int length = 20;

short data[length];

ds.read_tbb( id, start, length, data );

for (int index = 0; index < length; index++)

{

printf("%d\n", data[ index ]);

}

vector<string> groups = ds.getGroupNames();

for (uint idx=0; idx<groups.size(); idx++)

cerr << groups[idx] << endl;

cerr << endl;

dalArray * array = ds.openArray( id, "Station001" );

string telescope("");

ds.getAttribute( "TELESCOPE", telescope );

cerr << telescope << endl;

uint time = 0;

lofar Project Page 10

6.2 Beam-formed data Page 11

array->getAttribute( "TIME", time );

cerr << time << endl;

array->close();

ds.close();

return 0;

}

6.1.3 Python interface

6.2 Beam-formed data

6.2.1 Structure of the data

A LOFAR Beam-Formed file is stored per observation as an HDF5 file, grouped by beam andthen subband. All attribute data, described below, is defined in the LOFAR Beam-Formed DataFormat ICD [4].

beam-formed-file.h5 <------- Root level of dataset

|--beam000 <------- First beam group

| |--SB000 \

| |--SB001 )------ Table for each subband

| ‘--SB00N /

|--beam001 <------- Second beam group

| |--SB000 \

| |--SB001 )------ Table for each subband

| ‘--SB00N /

‘--beam00N <------- Nth beam group

|--SB000 \

|--SB001 )------ Table for each subband

‘--SB00N /

Root-level The root level of the file contains the majority of associated meta-data, describing thecircumstances of the observation. These data attributes include time, frequency, weatherand other important characteristics of the dataset.

Beam Group Each observation beam is stored as a seperate group within the file, each contain-ing its own subband tables and pointing information.

Subband Data tables The subband tables are where the bulk of the data reside. Each beamhas a fixed number of tables; one per subband. The subband frequency information isstored as an attribute of the table.

Full Resolution The default data stored in each subband table is full resolution, polarized volt-ages from the dipoles. These voltages are stored as 16-bit complex pairs for both X and Y.In other words, each sample is stored as (X-real, X-imaginary)(Y-real, Y-imaginary) for atotal of 64-bits.

lofar Project Page 11

6.2 Beam-formed data Page 12

Total Intensity Although complete, full resolution data is very large due to a very high samplingrate. In some cases, the observer may not be especially interested in polarization data andinstead choose to receive only the total intensities of the samples. Because the totalintensity information can be stored as a single 32-bit floating point value, the size of thefile is effectively halved. In this case, each subband table consists of one total intensityvalue per sample instead of two complex pairs as described above.

Downsampled Furthermore, the observer may prefer a smaller file with data averaged alongthe time axis, or “downsampled”. A relatively modest downsample factor (i.e. 128) willdrastically reduce the size of the data file and, in many cases, still provide interesting,high-resolution data for analysis.

Channelized Another option for the user is to bin the data into frequency channels, effectivelydownsampling the data along the time-axis by a factor of the number of frequency bins.In this case, the subband table would have total intensities for each channel, per sample.

6.2.2 Interface implementation

The following DAL classes are specifically written for LOFAR Beam-Formed Data:

BFRaw Used to translate raw beam-formed samples from the telescope into a formatted HDF5product.

BeamFormed High-level interface which allows easy access to the HDF5 beam-formed dataproduct.

BeamGroup High-level interface which allows easy access to the HDF5 beam groups within thedata product.

6.2.3 C++ interface

The following example program shows how to open and do some simple inspection of a HDF5beam-formed data product:

#ifndef BEAMFORMED_H

#include <BeamFormed.h>

#endif

#define FILENAME "beam-formed-file.h5"

using namespace std;

int main()

{

// open a HDF5 beam-formed data product

DAL::BeamFormed * file = NULL;

file = new DAL::BeamFormed( FILENAME );

lofar Project Page 12

6.2 Beam-formed data Page 13

// print a summary of the file’s contents

file->summary();

// retrieve a beam from the file

DAL::BeamGroup * beam = NULL;

beam = file->getBeam( 0 );

// print a list of the sources, if any are recorded

// in the file header

std::vector<std::string> sources = file->sources();

cerr << "Sources:" << endl;

for (unsigned int idx=0; idx<sources.size(); idx++)

{

cerr << sources[ idx ] << endl;

}

cerr << endl;

int subband = 0;

int start = 0;

int length = 20;

std::vector< std::complex<short> > xvals;

std::vector< std::complex<short> > yvals;

std::vector< std::complex<short> > xx;

// Retrieve some X-polarization data from subband 0

beam->getSubbandData_X( subband, start, length, xx );

printf( "First %d xx values for subband %d.\n" ,

length, subband );

for (int ii=0; ii < length; ii++ )

{

printf( "(%d,%d)\n" , xx[ii].real(), xx[ii].imag() );

}

printf("\n");

// Step through the X & Y polarization data for subband 0,

// 10 samples at a time, 10 times

for (unsigned int count=0; count < 10; count++ )

{

beam->getSubbandData_XY( subband, start, length,

xvals, yvals );

lofar Project Page 13

6.2 Beam-formed data Page 14

printf( "Values %d through %d\n", start, start + length );

for (unsigned int ii=0; ii < xvals.size(); ii++ )

{

printf( "(%d,%d),(%d,%d)\n" , xvals[ii].real(),

xvals[ii].imag(),

yvals[ii].real(),

yvals[ii].imag() );

}

printf("\n");

xvals.clear();

yvals.clear();

start += length;

}

delete beam;

delete file;

}

6.2.4 Python interface

The following example script shows how to open and do some simple inspection of a HDF5beam-formed data product:

#! /usr/bin/env python

from pydal import *

import sys

# The BeamFormed object represents the file.

# The parameter is the name of the beam-formed file.

file = BeamFormed( "beam-formed-file.h5" )

# Here’s a print to screen summary of the file.

file.summary()

# print a list of the beams

print file.beams()

# get beam 0

beam = file.getBeam(0)

# show the beam pointing direction

print beam.ra()

print beam.dec()

# show the beam summary

beam.summary()

lofar Project Page 14

Page 15

# get X complex data for subband 0, start 0, length 10

# returns a numpy array

sb0x = beam.getSubbandData_X( 0, 0, 10 )

print sb0x

# get Y complex data for subband 0, start 0, length 10

# returns a numpy array

sb0y = beam.getSubbandData_Y( 0, 0, 10 )

print sb0y

# get X and Y complex data for subband 0, start 0, length 10

# returns a numpy array

sb0xy = beam.getSubbandData_XY( 0, 0, 10 )

print sb0xy

7 Known Issues

7.1 C++

7.2 Python

1. The POL_RESPONSE column of the FEED(1,2) table gives the following error when its datais accessed:

ERROR: Slicer error:length<0i.e.> from pydal import *> ds = dalDataset()> ds.open(’data/lofar/cs1/L2007_01810_SB18-20_OB20.MS’)0> feed1 = ds.openTable(’FEED1’)> pr = feed1.getColumn(’POL_RESPONSE’)> pr.shape()([16, 2, 2],)> pr_data = pr.data()ERROR: Slicer error:length<0

Also...> pr_data = pr.data(1)ERROR: ArrayBase::validateConformance

2. If we open a table, for example OBSERVATION, then DAL crashes when we access the LOGcolumn.

ERROR: Table DataManager error: Invalidoperation: SSMIndStringColumn::getShape: no array in row 0

lofar Project Page 15

References Page 16

3. Some methods are not implemented, like readRows() of a table.

Operation not yet supported for type MSCASA. Sorry.

4. > main.getColumn(’MS_VERSION’)ERROR: Table column MS_VERSION is unknown> main.getAttribute(’MS_VERSION’)Operation not yet supported for type MSCASA. Sorry.> main.getAttributes()Operation not yet supported for type MSCASA. Sorry.

5. I’m providing a complete list of what worked and didn’twork for me:- center_freq, dispersion_measure, main_beam_diam,sub_beam_diameter, total_integration_time, andweather_* methods give Segmentation faults

- epoch_lst, epoch_mjd, summary (afterlisting ’-- Observer’), methods give RuntimeErrors:- RuntimeError: basic_string::_S_construct

NULL not valid- filename contains the absolute path stored in the file- station_temperatures method gives:- Traceback (most recent call last):

File "<stdin>", line 1, in <module>TypeError: No to_python (by-value) converter foundfor C++ type: std::vector<int, std::allocator<int> >

The following methods work, but may have unexpected orunusual behavior:

- bandwidth, beams, breaks, datatype, dispersion_measure,emband, epoch_date, epoch_utc, getBeam, BeamGroup.dec,BeamGroup.n_subbands, BeamGroup.ra, BeamGroup.summary,main_beam_diam, notes, nstations, number_of_*,observation_id, observer, point_*, proj_id, sampling_time,source, sub_beam_diameter, telescope, and weather_* allseem to work as they should

- BeamGroup.get* methods don’t raise Exceptions, only returndefault arrays

References

[1] Bahren, L. (2008) LOFAR-USG-ICD-001.pdf

[2] Cadot, S. (2005) Proposed Data Formats

[3] Diepen, G. v. (2008) HDF5 vs. CASA Tables

lofar Project Page 16

References Page 17

[4] Masters, J. (2008) BeamFormed ICD

[5] Wise, M. (2006) LOFAR User Software Plan

[6] http://hdfgroup.org

[7] http://usg.lofar.org/doxygen

[8] http://usg.lofar.org

lofar Project Page 17

Page 18

A Appendicies

A.1 Current State of the Library

The following tables show the status of each DAL classes in terms of it’s HDF5, Casa, FITS andPython support.

Table 1: dalArrayHDF5 CASA FITS Python

dalArray Xdims XgetName * * *open Xclose XgetAttribute XgetAttributes X XsetAttribute Xextend X Xwrite int short int Xwrite int int int Xwrite int comp¡float¿ int Xwrite int comp¡short¿ int X

Table 2: dalShortArrayHDF5 CASA FITS Python

dalShortArray XreadShortArray X

Table 3: dalIntArrayHDF5 CASA FITS Python

dalIntArray XreadIntArray X

lofar Project Page 18

A.1 Current State of the Library Page 19

Table 4: dalFloatArrayHDF5 CASA FITS Python

dalFloatArray X

Table 5: dalComplexArray float32HDF5 CASA FITS Python

dalComplexArray float32 X

Table 6: dalComplexArray int16

HDF5 CASA FITS PythondalComplexArray int16 X

Table 7: dalColumn

HDF5 CASA FITS PythondalColumn * * * XdalColumn string * * * XdalColumn hid t,hid t,string XdalColumn string,string * * * XdalColumn Table,string XaddMember X XgetName * * * XsetName * * *setFileType * * *getDataType X XgetSize * * * Xclose XgetType * * *isArray X XisScalar X Xshape X Xndims X Xnrows Xdata int,int X X Xdata X X X

lofar Project Page 19

A.1 Current State of the Library Page 20

Table 8: dalData

HDF5 CASA FITS PythondalData * * *dalData str,str,vec,long X X∼dalData * * *datatype * * *fortran index * * *c index * * *get X X X

lofar Project Page 20

A.1 Current State of the Library Page 21

Table 9: dalDataset

HDF5 CASA FITS PythondalDataset X X XdalDataset char*,str X Xinit X X Xopen X X X Xclose X XgetAttributes XgetId XgetAttribute XgetAttribute string XgetAttribute string vector XgetAttribute int XgetAttribute uint XgetAttribute double XcreateArray X XcreateIntArray X X XcreateFloatArray X XcreateComplexFloatArray XcreateTable string X XcreateTable string,string X XcreateGroup * * * XopenTable string X X XopenTable string,string X XsetFilter string * * * XsetFilter string,string * * * XopenArray string XopenArray string,string XgetGroupNames XopenGroup X XlistTables X XgetType * * * XgetName * * *getFileHandle Xread tbb Xria boost Xrfa boost X

lofar Project Page 21

A.1 Current State of the Library Page 22

Table 10: dalFilter

HDF5 CASA FITS PythondalFilter * * *dalFilter string,string XdalFilter string,string,string Xset string Xset string,string XsetFileType * * *isSet * * *get * * *

Table 11: dalGroup

HDF5 CASA FITS PythondalGroup * * * XdalGroup char*,void* X XdalGroup hid t,char* X X∼dalGroup Xopen XgetName * * * XsetName * * * XcreateShortArray * * *createIntArray * * * XcreateFloatArray * * * XcreateComplexFloatArray * * *createComplexShortArray * * *getId X XgetMemberNames XgetAttribute X XsetAttribute Xria boost X

lofar Project Page 22

A.1 Current State of the Library Page 23

Table 12: dalTable

HDF5 CASA FITS PythondalTable * * *dalTable string X X∼dalTable XprintColumns X X XopenTable void*,str,str XopenTable str X XopenTable str,MSReader X XopenTable str,MSReader,filt XGetKeyword XGetKeywordType XcreateTable X XgetColumn complexInt16 X XgetColumn complexFloat32 X X XgetColumn Float32 X X XgetColumn X XaddColumn X XaddComplexColumn X XremoveColumn X XwriteDataByColNum X XsetFilter string * * * XsetFilter string,string * * * XappendRow X XappendRows X XlistColumns X X XreadRows X XgetAttribute X X XsetAttribute X XfindAttribute X XgetNumberOfRows X XgetName X XgetColumnData X

lofar Project Page 23

A.1 Current State of the Library Page 24

Table 13: Database

HDF5 CASA FITS PythonDatabase * * *∼Database * * *query * * *

lofar Project Page 24