|
|
Experiments are stored in up to three files.
Description of experiment is stored in text *.exp file. The recorded data are stored in binary
*.d01 file. When an experiment contains large parameter arrays (more than 1000 elements),
those arrays are stored in an optional binary sidecar *.bip file instead of inline in the *.exp file.
Structure of *.d01 file
| Name |
Type |
Description |
| Data amount |
unsigned 32 |
Number of recorded variables stored. |
| Data format |
unsigned 32 |
0 - data stored in double format, 1 - data stored in float format. |
The following two sections are repeated a number of times equal to the Data amount value.
| Name |
Type |
Description |
| Data dimension |
int 32 |
The number of dimensions of stored data. |
| Array of dimensions |
(int 32)*4 |
The sizes of dimensions. |
| Overall data size |
int 32 |
The size of data stored. Equal to the product of all dimension sizes. |
| Data |
(Overall data size) * sizeof(double or float) |
Data stored in c-style 1D array: [(0,0,0,0), (1,0,0,0), …,
(n,0,0,0), (0,1,0,0), …, (n,m,k,l)].
Fastest index corresponds to transient axes, slowest to Z-axes. |
Structure of *.exp file
The exp file is written in Windows ini-file style. Section names are enclosed in square brackets [].
Fields have field_name = field_value format. The order in which fields appear within one section is insignificant.
Some sections contain plain text.
Required sections are marked in red.
Section and field names with_underline stand for arbitrary names.
Field names in bold are reserved words.
| Section |
Field |
Value |
Description |
| [general] |
name |
string |
The name of the experiment. |
| [text] |
- |
plain multiline text |
Any text (sample description). |
| [sweep] |
- |
- |
Experimental axis definition. |
| transient |
string |
Transient axis. Format: T/I, trace_length, rep_number, first_stream_name[, second_stream_name[, …]].
T = transient trace stored; I = trace integrated, only integral stored.
Example: transient = I,200,30,a,b — 200-point transient, integrated, 30 shots per loop, streams a and b.
For single-point devices trace length is 1. Streams must be defined in the [aquisition] section. |
| sweep0/1/… |
string |
Scan axes. Format: X/Y/Z/S/P, trace_length, rep_number, par_name[, …].
Example: sweep0 = X,128,1,T1.
The definition order sets the axis presentation order. Data are stored as a 1D c-style array, fastest to slowest: I/T, X, Y, Z.
S(um) and P(arameters) axes do not increase stored data amount. Parameters must be described in the [params] section. |
| [presetup] |
var_name |
string |
Actions before the experiment. Format: value; property@device. Example: Delay = 10 ms;Delay@ADC. |
| [aftersetup] |
var_name |
string |
Actions after the experiment. Format: value; property@device. Example: Delay = 10 ms;Delay@ADC. |
| [eachpoint] |
var_name |
string |
Actions executed at each point. Format: value; property@device. Example: Delay = 10 ms;Delay@ADC. |
| [params] |
- |
- |
Parameters of the experiment. |
| par_name |
string |
Format: value; property@device. Value forms:
(i) comma-separated list;
(ii) first_value step increment;
(iii) first_value to last_value;
(iv) @bip — large array stored in the *.bip sidecar file (see below).
Examples: T1 = 40 ns step 20 ns;PPL variable or RF = 40 MHz to 60 MHz;Freq@Gen1. |
| [aquisition] |
- |
- |
Acquisition streams. |
| stream_name |
string |
Format: property@device. Example: a = In_Ch0@PulseGen. |
| [program] |
- |
plain multiline text |
Pulse program. |
| [streams] |
- |
- |
Supporting information about data streams. |
| names |
comma-separated list |
Names of data streams (may differ from acquisition stream names). Example: names = Re, Im. |
| units |
comma-separated list |
Units of data streams. Example: units = V, V. |
| dwelltime |
comma-separated list |
Dwell time of transient data streams. Example: dwelltime = 10 ns, 10 ns. |
| [device_name] |
any_field |
device dependent |
Any information a device chooses to store in the exp file. |
Structure of *.bip file
The *.bip file is a binary sidecar that stores experiment parameter arrays too large to be written
compactly in the *.exp file (threshold: 1000 elements). Its name matches the *.exp file with the
extension replaced by .bip. In the *.exp file the corresponding parameter value is stored
as the literal string @bip to signal that the actual data must be read from the sidecar.
File header:
| Field |
Type |
Description |
| Magic |
char[4] |
Always BIP1 (ASCII, no null terminator). Any other value indicates a corrupt or incompatible file. |
| Count |
uint32 |
Number of parameter entries stored in this file. |
The following record is repeated Count times, once per parameter:
| Field |
Type |
Description |
| name_len |
uint32 |
Byte length of the parameter name string. |
| name |
char[name_len] |
Parameter name (no null terminator). Matches the name used in the *.exp [params] section. |
| unit_len |
uint32 |
Byte length of the unit string. |
| unit |
char[unit_len] |
Unit string (no null terminator), e.g. ns, MHz. |
| sig_digit |
uint32 |
Number of significant digits used when displaying this parameter. |
| data_type |
uint32 |
Element format: 0 = double (8 bytes), 1 = float (4 bytes). Current writer always produces 1 (float). |
| elem_count |
uint32 |
Number of elements in the array. |
| data |
float[elem_count] or double[elem_count] |
Raw array values in native binary format, elem_count × sizeof(float or double) bytes. All values are in the parameter's native unit. |
|