LIF Data Storage
LIF data are stored inside the same experiment folder as CP-FTMW data. For
the experiment-folder naming convention and the files that every experiment
writes (header.csv, hardware.csv, auxdata.csv, etc.), see
Data Storage.
LIF-specific files are placed in a lif/ subdirectory of the experiment
folder:
experiments/Z/Y/X/
├── header.csv
├── hardware.csv
├── auxdata.csv
├── ...
└── lif/
├── lifparams.csv
├── processing.csv
├── 0.csv
├── 1.csv
└── ...
LIF parameters in header.csv
Before any LIF-specific files are read, the scan-axis parameters and
digitizer configuration can be recovered from the experiment’s
header.csv. Two sections are written:
LifConfig — the scan parameters set on the wizard’s LIF group (see LIF Experiment Setup).
LifDigitizer.<key> — the digitizer settings set on the LIF Configuration (the section name embeds the configured digitizer hardware key, e.g.
LifDigitizer.Default).
For example, an experiment with a 6×6 (delay × laser) grid, 10 shots per
point, randomized delay order, and a single-channel LIF acquisition writes
the following LifConfig section to header.csv:
LifConfig;;;CompleteMode;StopWhenComplete;
LifConfig;;;DelayPoints;6;
LifConfig;;;DelayRandom;true;
LifConfig;;;DelayStart;200;μs
LifConfig;;;DelayStep;10;μs
LifConfig;;;LaserPoints;6;
LifConfig;;;LaserStart;250;nm
LifConfig;;;LaserStep;5;nm
LifConfig;;;ScanOrder;DelayFirst;
LifConfig;;;ShotsPerPoint;10;
The companion LifDigitizer.Default section captures the digitizer
configuration that produced the trace files:
LifDigitizer.Default;;;BlockAverageEnabled;false;
LifDigitizer.Default;;;ByteOrder;LittleEndian;
LifDigitizer.Default;;;BytesPerPoint;1;
LifDigitizer.Default;;;LifChannel;1;
LifDigitizer.Default;;;LifRefChannel;2;
LifDigitizer.Default;;;LifRefEnabled;false;
LifDigitizer.Default;;;RecordLength;10000;
LifDigitizer.Default;;;SampleRate;1.25e+09;Hz
LifDigitizer.Default;;;TriggerChannel;0;
LifDigitizer.Default;;;TriggerDelay;0;μs
LifDigitizer.Default;;;TriggerEdge;RisingEdge;
LifDigitizer.Default;;;TriggerLevel;0.3;V
LifDigitizer.Default;AnalogChannel;0;Enabled;true;
LifDigitizer.Default;AnalogChannel;0;FullScale;0.05;V
LifDigitizer.Default;AnalogChannel;0;Index;1;
LifDigitizer.Default;AnalogChannel;0;VerticalOffset;0;V
LifDigitizer.Default;AnalogChannel;1;Enabled;false;
LifDigitizer.Default;AnalogChannel;1;FullScale;0.05;V
LifDigitizer.Default;AnalogChannel;1;Index;2;
LifDigitizer.Default;AnalogChannel;1;VerticalOffset;0;V
Together these sections fully describe how the trace files in lif/
were acquired. ShotsPerPoint is needed to convert the on-disk
accumulated values to per-shot voltages (see below).
lif/lifparams.csv
This file is the index of all acquired trace files. One row is written per scan point that has been acquired. The columns are:
lIndex;dIndex;shots;lifsize;refsize;spacing;lifymult;refymult
lIndex— laser position index (0-based).dIndex— delay index (0-based).shots— number of waveforms accumulated at this point.lifsize— number of samples per LIF channel waveform.refsize— number of samples per reference channel waveform (0 when no reference channel is enabled).spacing— time between samples, in seconds.lifymult— scale factor to convert one LIF integer sample to volts.refymult— scale factor to convert one reference integer sample to volts (0 when no reference channel is enabled).
For a single-channel acquisition with ShotsPerPoint = 10, a 10000-sample
record at 1.25 GS/s, and a 50 mV / 128-step LIF range, lifparams.csv
begins:
lIndex;dIndex;shots;lifsize;refsize;spacing;lifymult;refymult
0;0;10;10000;0;8e-10;0.000390625;0
1;0;10;10000;0;8e-10;0.000390625;0
2;0;10;10000;0;8e-10;0.000390625;0
...
lif/N.csv — trace files
Each acquired scan point is stored as a separate CSV file. The file name is
an integer index N computed as:
N = dIndex * laserPoints + lIndex
This ordering matches the row order in lifparams.csv and allows direct
file lookup given a delay and laser index pair. The same encoding scheme is
used for FTMW data (see Data Storage): values are written
as signed base-36 integers, one row per sample point. When only the LIF
channel is recorded the file has a single lif column; when a reference
channel is enabled, a second ref column is added.
A single-channel trace file from the example above begins:
lif
4b
-1b
-4i
-94
c0
3r
58
3n
3g
...
With the reference channel enabled, the file is:
lif;ref
<lifvalue0>;<refvalue0>
<lifvalue1>;<refvalue1>
...
Important
The on-disk values are the sum of raw digitizer samples across all
shots, not the co-averaged waveform. To recover the per-shot voltage
for sample i of a given scan point, divide by shots first and
then apply the y-multiplier:
where shots and ymult come from the matching row of
lifparams.csv. This convention matches the FTMW FID files and lets
Blackchirp resume averaging when an experiment is reopened.
The blackchirp Python package (pip install blackchirp) provides
loader functions that perform the base-36 decoding and per-shot voltage
conversion for both LIF and FTMW data, returning numpy arrays.
lif/processing.csv
This file records the integration gate positions and waveform-filter settings associated with the experiment. It is always present: when an experiment begins, Blackchirp writes the gate and filter values active on the LIF Configuration at that moment, so the file captures the processing state used during acquisition. Clicking Save in the LIF tab’s processing panel (see Viewing LIF Data) overwrites the file with the current values, making them the new defaults when the experiment is reopened.
The file uses the standard ObjKey;Value metadata layout:
ObjKey;Value
LifGateEndPoint;1421
LifGateStartPoint;240
LowPassAlpha;0
RefGateEndPoint;1
RefGateStartPoint;0
SavGolEnabled;false
SavGolPoly;3
SavGolWindow;11
The keys correspond to the controls described on the LIF tab processing panel:
LifGateStartPoint,LifGateEndPoint— LIF integration gate bounds, in sample points.RefGateStartPoint,RefGateEndPoint— reference integration gate bounds, in sample points.LowPassAlpha— IIR low-pass filter coefficient (0 = disabled).SavGolEnabled— whether the Savitzky-Golay filter is active.SavGolWindow,SavGolPoly— Savitzky-Golay window size and polynomial order.