S R T B H P N

∞ Data Library - Building Blocks

Author: Alexey Zaitsev


∞DL Building Blocks

Principal novelty of the ∞DL model is the concept that all or almost all digital data objects arising in a modern research laboratory can be adequately described using a finite (and limited) number of archetypical data formats intuitively understood by a human operator. We believe that, through education and professional experience, there is a set of archetypical data formats ingrained in our brain, enabling the represention of arbitrary data objects as structures reducible to these archetypical data formats; that naturally facilitates data handling by human operators. The currently implemented set of archetypical formats includes ARRAY (any number of dimensions), TEXT, FILE, TABLE, NETWORK, TREE, MULTICHANNEL, TRAJECTORIES, SPARSE_VALUES, and 𝐋OGBOOK. The types are mostly self-explanatory. The elementary data objects (DataItems) conforming to these base formats have an intuitively expected high-level behavior. Across all archetypes, this includes summary statistics, extraction of “traits” to check conformance to format layout, and extraction of subranges of data, which are presented as objects of the same type (self-similarity). As examples of the latter, a new object can be derived from an existing TABLE object based on a selection of columns and rows, and a new MULTICHANNEL object can be derived from an existing MULTICHANNEL object based on a selection of channels and recorded time points. ∞DL software is designed to accommodate a growing number of archetypical formats, without breaking the code or invalidating formats of data objects existing in the ∞DL software. However, we believe that the number of archetypical formats will grow slowly and remain finite (<30?). For each archetypical format, the front-end of ∞DL has APIs to facilitate reading and writing DataItems. For example, reading or writing DataItems of TABLE type is as simple as calling getRow(int rowNo)::String[] or addRow(int rowNo, String[]row)::void methods. ARRAY can be accessed via getDataRange(String rangeString)::void and putDataRange(String rangeString)::void methods as well as via a family of byte stream methods putBytes(…) and getBytes(…).