EPICS V4 telecon, Mar 29 2016


1. Status and AIs

2. exampleJava pull request (Marty, Greg)

3. New Normative Type proposal, “NTComplexTable” (Murali)

Material from Murali for item 3

NTComplexTable is the EPICS V4 Normative Type suitable for column-oriented tabular datasets with complex columns.

An NTComplexTable is made up of a number of arrays. Each array can be thought of as a column. All the arrays MUST be of the same length. Each array may be of a different complex type. The set of the ith array members of all the columns make up one row, or n-tuple. The number of elements of labels MUST be equal to the number of fields of value.

Use case examples: Archive data for complex process variables; tabular data for scientific analysis.

NTComplexTable :=


    string[]   labels        // Very short text describing each field below

    structure  value

           {any[] colname }0+ // 0 or more arrays, each of which can be

                             // an array of any type.

    string     descriptor  : opt

    alarm_t    alarm       : opt

    time_t     timeStamp   : opt



The table column headings are given by the labels field. Each column heading given as one element of the array of strings.


The data of the table are encoded in a structure named value. The columnar data field is named "value" (rather than, for instance, "columndata") so that the primary field of the type is named the same for all Normative Types. That helps general purpose clients identify the primary field of any Normative Type instance.


An NTComplexTable instance represents a table of structured data. The column data is given in union arrays in the structure field value, and the column headings are given in field labels. Each colname union array field of value contains the data for the column corresponding to the same indexed element of the labels field. Agents SHOULD use the elements of labels as the column headings. There is no normative requirement that the field names of value match the strings in labels.

Note that the above description is given in terms of a table and its columns, but there is nothing specifically columnar about how this data may be rendered. A user may choose to print the fields row wise if, for instance, if there are many fields in value, but each has only length 1 or 2. For example, if one wanted to give all the scalar data related to one device, then one might use an NTTable rendered in such a way.


The number of union[] fields in the value structure, and the length of labels MUST be the same. All union[] fields in the value structure MUST have the same length, which is the number of "rows" in the table.

Active Action Items

Note: Completed AIs are shown once in the list of the meeting in which they are recognized as completed. They are removed in the minutes of the following meeting.




Target Date



See who can fund dbGroup/Qsrv going on




Write the one license file (using the MIT license in most cases)




Update your module to include copy of that one LICENSE. Update your headers to contain the header text.


wait on 5


On your module pages, remove the current/previous links; replace “Working Draft” with version number of module, which has its own numbering scheme, like 5.0.2 for pvDataCPP. Eg “Version 5.0.2 18/Nov/2015”

AJ check status, ALL MODULE OWNERS




Simplify Literature page and home page to help users find novice oriented documentation.




Commit changes to all modules, other than exampleCPP and pvDatabaseCPP, which set the shared library versions




Monitor changes pull request (AI from meeting 15-Mar-2016, http://tinyurl.com/zqa3qyp





Present: AJ, DH, MK, MatejS, MuraliS, KK, GW*

Chair: AJ

Scribe: KK

1. Status and AI

AJ: Completed his part in Action item 7

2. ExampleJava Pull Request

AJ: State?

MK: Intent to commit today, not quite ready

GW: I’ll try to check the pull request, but if no timely response you can complete (merge) the pull request yourself

3. NTComplexTable Proposal

Mur: Arman, Guobao and I propose this based on NTTable. NTTable values are restricted to scalars, but we need arrays as well. Example use case is V4 archive data service.

“eget -s hist -a pv=”somePV”..” would return NTComplexTable which has array of values, seconds, severities, … and with NTComplexTable the value can be an array of array samples.

When requesting data for multiple PVs, result is an array where each element is an NTComplexTable for the values of one PV.

In example, that is

  any[] data

where each data element is then an NTComplexTable

MK: Can CSS support this?

Matej: CSS as specific application can’t easily support “any”.

DH: Why not structure array instead of any array?

AJ: What if data type of archived data changes over time?

Murali: Can only return all samples as one type per channel.

MK: What about NTMultiChannel?

Mur: NTMultiChannel more for ‘score’ type application. One point in time, many samples for that time. Could use union instead of any.

MK: ‘value’ field best handled as in NTMultiChannel

KK: What is the use of the ‘labels’?

Mur: Headers for table display

KK: For ‘archive’ service, wouldn’t it be best to have a well-known structure where the ‘labels’ are known, no ‘any’?

Mur: OK with change to union instead of any.

MK, AJ: Continue work as branch/pull request for Java and/or C++, with tests

Mur: Will do

AJ: Will need new version number for NT spec update

MK: CPP or Java?

Mur: First in Java..

MK: Good, do Java first

→ AI (Murali): Send updated normative type spec that uses union instead of any