3.2. The Body Header

Beginning with NSCLDAQ version 11.0, the ring item body has been modified to allow it to include timestamp, event source, and barrier information either emitted by or intended for the event builder. This header follows immediately after the ring item header but is optionally present. If it is not present, there is a single 32-bit integer whose value is zero (version 11) or sizeof(uint32_t) (version 12) to indicate no body header is present. Otherwise, it is present. The structure of the body header is as follows:

Table 3-2. Body Header

DescriptionSize (bytes)
Size4
Timestamp8
Source ID4
Barrier Type4

The fields of this structure are as follows:

Size

The inclusive size in bytes. You can also think of items that don't have a body header as having a header size of zero. We promise to maintain backwards compatility by adding any new elements to the end of the body header.

Timestamp

The value of the event/globally synchronized timestamp at the time this ring item was initially formed.

Source ID

Unique identifier of the source of this ring item.

Barrier type

If the item was part of a barrier synchronization amongst the data sources, this field will be non-zero and represent the type of the barrier. If zero, this item was not part of a barrier.

See the documentation of DataFormat.h for more detailed information about these stuctures.

To be even more explicit, the format of a complete ring item with a body header present is as follows:

Table 3-3. Ring Item With Body Header

 DescriptionSize (bytes)
HeaderInclusive Size4
Type4
Body HeaderSize = 204
Timestamp8
Source ID4
Barrier Type4
BodyData...>=0

Alternatively, the complete ring item without a body header present looks like the following:

Table 3-4. Ring Item Without Body Header

 DescriptionSize (bytes)
HeaderInclusive Size4
Type4
Body HeaderSize = szzeof(uint32_t)4
BodyData...>=0