nds2-client - User  0.16.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
NDS Client Bindings


The NDS Client bindings are a set of C/C++ libraries that provide access to the LIGO project NDS servers. The libraries provide a uniform interface to both NDS1 and NDS2 servers. In addition to the C/C++ libraries a series of modules are provided to allow Java, MATLAB, Octave, and Python programs to interface with the NDS systems.


The main components of the library are the connection , buffer objects, and channel objects.


The libraries are connection oriented. Each connection object connects to a single NDS server and allows the user to query for available channels and retreive data. This is the basic class you use to interact with the NDS server. All requests for data are done through a connection object.


The channel class represents a stored channel. It provides access to the metadata, such as name, rate, frame type, and data type. The channel does not give access to the data. For that a buffer class is used.


The buffer class is the combination of channels and data. When you make requests for data to a connection you recieve a series of buffers.

Using the NDS client

Each of the C++ classes are broken out into their own header files. However there is a combined header file that should be included by the application.

#include "nds.hh"

Differences between NDS1 and NDS2

NDS1 has no concept of channel history. It maintains one channel list, the current channel list. It cannot read historical data if channels have changed name or rate. NDS1 is only available in the LIGO control rooms. It is not exported to the outside world and is part of the LIGO control systems.

NDS2 Contains the full history of LIGO data. It tracks each name and rate change. Channels may have several co-existing versions, and may have long stretches where they do not exist. When accessing data, users should keep in mind that recent data is often cached on disk and as such can be read with relatively low latency. However data that is not cached on disk must be pulled from tape archives and will have a high latency for the request.

Channel names in NDS2

With the full history of channels in NDS2 a name may map to multiple channels. The NDS2 server will attempt to extrapolate the channel you ask for based on the name and timespans given. However a user may specify more information in a channel name in order to force the NDS2 server to select the desired channel. The user must specify a base name, and may also specify channel types, and rates.

For example the H1 strain data is in H1:GDS-CALIB_STRAIN. However there are multiple sources of the data. The real time online data and the archived reduced type. You can fully qualify the name by including frame type and rate information. So you could qualify the name as H1:GDS-CALIB_STRAIN,reduced,16384 or H1:GDS-CALIB_STRAIN,reduce to denote archived strain data. To specify the online, real time stream of strain you could use H1:GDS-CALIB_STRAIN,online,16384 or H1:GDS-CALIB_STRAIN,online.