A user section is now part of the CLASS data format. It can be added to the observations by any external program which is linked with the CLASS library and which uses the CLASS API.
The user section is composed of a basic owner and data descriptor, and of a data block. The content and length of the data is controlled by the section owner, but for a few restrictions described in this document. The data block is untyped, which means that the standard CLASS program is not able to understand it natively. Only its owner is able to do so with the appropriate decoding routines. On the other hand, the standard CLASS program is able to detect, load and propagate the User Section when possible. CLASS can also find all the observations containing a user section. However, users and programmers should be aware that there are CLASS operations under which the user section loose its meaning (for example AVERAGE'ing). These operations thus do not propagate the user function.
More precisely, the User Section can store several user subsections. Each of these is identified by a unique owner and title pair of values. The CLASS library will properly read and write in the correct subsection as long as the program has declared properly which one it owns. Each subsection has its own version number to enable the evolution of the data format (Note that abuse of the versioning mechanism may slow down operations on this section).
We also provide code hooks which enable external programs to work on the user sections when a few usual CLASS commands are called. These commands are WRITE, GET, DUMP, SET VARIABLE USER, FIND.