ABF1 files (unlike ABF2 files) use a fixed-length header and values are always
at the same byte positions in the file. This document was created to simplify
the task of finding ABF1 byte offsets. It was created from data found in the
CHM file distributed as part of the ABF1 SDK and from
While the byte offsets are not useful for ABF2 files, the definitions are.
👉 Review the Unofficial Guide to the ABF File Format for a more extensive description of the ABF1 and ABF2 file format, with code examples for how to read structured data from binary files using Python.
File type used for format identification. Possible values are: “ABF “, “CLPX” and “FTCX”. Used to create the numbers in nFileType. (In old pCLAMP and Axotape data files, the first four bytes were a float: 1 = CLAMPEX, 10 = FETCHEX/AxoTape. This is translated on reading into either CLPX or FTCX as appropriate.)
File format version stored in the data file during acquisition. The present version is 1.65. (In old pCLAMP and Axotape data files, this parameter is in the range 2.0–5.3.)
Actual number of ADC samples (aggregate) in data file. See lAcqLength. Averaged sweeps are included.
Number of points ignored at data start. Normally zero, but non-zero for gap-free acquisition using AXOLAB configurations with one or more ADS boards.
Actual number of sweeps in the file including averaged sweeps. See lEpisodesPerRun. If nOperationMode = 3 (gap-free) the value of this parameter is 1.
Date when data portion of this file was first written to. Stored as YYMMDD. If YY is in the range 80–99, prefix with “19” to get the year. If YY is in the range 00–79, prefix with “20” to get the year.
Time of day in seconds past midnight when data portion of this file was first written to.
Time since the stopwatch was zeroed that the data portion of this file was first written to. Not supported by all programs. Default = 0.
Version number of the header structure returned by the ABF_ReadOpen function. Currently 1.65. This parameter does not identify the data file format. See fFileVersionNumber above.
Numeric equivalent of file type. 1 = ABF file; 2 = Old FETCHEX file (FTCX); 3 = Old Clampex file (CLPX). See sFileType.
Storage method for real numbers in the header. Also see nDataFormat. 0 = IEEE format; 1 = Microsoft Binary format (old files only).
short channel_count_acquired; // number of input channels acquired
short nADCNumChannels; // number of input channels recorded
* The two sample intervals must be an integer multiple (or submultiple) of each other.
* The documentation says these two sample intervals are the interval between multiplexed samples, but not all digitisers work like that.
* Instead, these are the per-channel sample rate divided by the number of channels.
* If the user chose 100uS and has two channels, this value will be 50uS.
* The total number of samples per episode, for the recorded channels only.
* This does not include channels which are acquired but not recorded.
* This is the number of samples per episode per channel, times the number of recorded channels.
* If you want the samples per episode for one channel, you must divide this by get_channel_count_recorded().
Experiment type: 0 = Voltage Clamp; 1 = Current Clamp.
Do not use: see Extended Environmental Information. Enable storage of autosample information: 0 = Disabled; 1 = Automatic; 2 = Manual.
Do not use: see Extended Environmental Information. Physical ADC channel number to which autosampled parameters apply.
Do not use: see Extended Environmental Information. Note: for most programs this is an information-only field. For example, in Clampex the autosample instrument is chosen as a configuration item and copied into this field.
Do not use: see Extended Environmental Information. Additional gain multiplier of Instrument connected to nAutosampleADCNum. (Optionally autosampled by some acquisition programs.) (Default = 1.)
Do not use: see Extended Environmental Information. Lowpass filter cutoff frequency of Instrument connected to nAutosampleADCNum. (Optionally autosampled by some acquisition programs.) (Default = 100000.)
Do not use: see Extended Environmental Information. Patch-clamp membrane capacitance compensation. (Optionally autosampled by some acquisition programs.)
Strategy for writing the manually entered information: 0 = Do not write; 1 = Write each trial; 2 = Prompt each trial.
Numeric identifier #1, e.g. cell identifier.
Numeric identifier #2, e.g. temperature in °C.
Numeric identifier #3.
Name and version of program used to create the file. For example, “AxoTape 2.0” or “Clampex 6.0”.
Do not use: see Extended Environmental Information. 56 byte ASCII comment string.
ADC physical-to-logical channel map. The entries are in the physical order 0, 1, 2,…, 14, 15. If there are fewer than 16 logical channels in the system, the array is padded with -1. All channels supported by the hardware are present, even if only a subset is used. For example, for the TL-2 the entries would be 7, 6, 5, 4, 3, 2, 1, 0, -1,…, -1.
ADC channel sampling sequence. This is the order in which the physical ADC channels are sampled. If fewer than the maximum number of channels are sampled, pad with -1. For example, if two channels are sampled on the TL-2, this array will contain 6, 7, -1,…, -1. If two channels are sampled on the TL-1, this array will contain 14, 15, -1,…, -1.
ADC channel name in physical channel number order. Default = spaces.
The user units for ADC channels in physical channel number order. Default = spaces.
ADC programmable gain in physical channel number order (dimensionless). Default = 1.
ADC channel display amplification in physical channel number order (dimensionless). Default = 1.
ADC channel display offset in physical channel number order (user units). Default = 0.
Instrument scale factor in physical ADC channel number order (Volts at ADC / user unit). (Programs would normally display this information to the user as user units / volt at ADC).
Instrument offset in physical ADC channel number order (user units corresponding to 0 V at the ADC). Default is zero.
Signal conditioner gain in physical ADC channel number order (dimensionless). Default = 1.
Signal conditioner offset in physical ADC channel number order (user units). Default = 0.
Signal-conditioner lowpass filter corner frequency in physical ADC channel number order (Hz). 100000 means lowpass filter is bypassed (i.e. wideband). Default = 100000.
Signal-conditioner highpass filter corner frequency in physical ADC channel number order (Hz). 0 means highpass filter is bypassed (i.e. DC coupled). -1 means inputs are grounded. Default = 0.
DAC channel name. Default = spaces.
The user units for this DAC channel. Default = spaces.
DAC channel gain (user units / V at DAC). Default = 1.
Synchronous timer outputs were dropped from pCLAMP version 6. These parameters
have been kept in the ABF 1.0 specification for compatibility when reading old
data files. New programs should write zeros to all of the parameters in this
char sUnavailable1866; // Was nAutopeakSaveStrategy, use nStatisticsSaveStrategy
Do not use: see Extended Variable Parameter User List. Parameter list activation status: 0 = Disable; 1 = Enable.
Auditory tone activation status: 0 = Disable; 1 = Enable.
Location of bell relative to trial: 0 = Before; 1 = After.
Number of sounds to produce.
Amount of level hysteresis to use when detecting events. This is the amount that the data has to go past the trigger level before it is considered triggered. Re-arming of the trigger level is always done at the actual nominated trigger level (see fTriggerThreshold).
Amount of time hysteresis to use when detecting events. This is the number of samples that have to be below the trigger point before the trigger is said to be rearmed.
0 = Do not scan for external tags during acquisition. 1 = Scan for external tags.
Type of Low Pass filter for each ADC channel: 0 = None; 1 = External; 2 = Simple RC; 3 = Bessell; 4 = Butterworth.
Type of High Pass filter for each ADC channel: 0 = None; 1 = External; 2 = Simple RC; 3 = Bessell; 4 = Butterworth.
Algorithm used for calculating averages: 0 = Cumulative Averaging; 1 = Most Recent Averaging (uses fAverageWeighting below).
Weighting Factor for Most Recent Averaging. This is the proportion of the incoming sweep to include in the average.
Strategy for Prompting to create an Undo file: 0 = On Abort; 1 = Always.
Parameter list activation status: 0 = Disable; 1 = Enable.
Holds the index of the parameter that varies from sweep to sweep in one run.
List of comma-separated values. If the number of entries in the list is fewer than the requested number of sweeps, the last list value is re-used. If there are more values in the list, the excess list values are ignored.
Repeat the list when the current sweep exceeds the number of entries in the list. 0 = Disable, 1 = Repeat the list.
unsignedshort nStatsActiveChannels; // Active stats channel bit flag
unsignedshort nStatsSearchRegionFlags; // Active stats region bit flag
ABFLONG lStatsMeasurements[ABF_STATS_REGIONS]; // Measurement bit flag for each region ABF_STATS_REGIONS == 8
short nStatsSearchMode[ABF_STATS_REGIONS]; // Stats mode per region: mode is cursor region, epoch etc
IHS-1 telegraphs are not supported. Note: for most programs this is an
information-only field. For example, in Clampex the autosample instrument is
chosen as a configuration item and copied into this field.
The ABF Synch array is an important array that stores the start time and length
of each portion of the data if the data are not part of a continuous gap-free
acquisition. The data section might contain equal length or variable length
sweeps of data. The Synch Array contains a record to indicate the start time
and length of every sweep or Event in the data file. The ABF reading routines
automatically decode the Synch Array when providing information about the data.
A Synch array is created and used in the following acquisition modes:
ABF_VARLENEVENTS, ABF_FIXLENEVENTS & ABF_HIGHSPEEDOSC. The acquisition modes
ABF_GAPFREEFILE and ABF_WAVEFORMFILE do not always use a Synch array.
During an acquisition, some programs allow the user to tag points of interest
in the input data stream. These tags are saved in the Tag Section. Each tag
consists of a time stamp, a text comment, and a tag type identifier. If the tag
is a voice tag, the data is held in an ABFVoiceTagInfo struct.
Header Entry Name
Time at which the tag was entered in fSynchTimeUnit units.
Optional comment to describe the tag.
Type of tag. Valid types are ABF_TIMETAG=0, ABF_COMMENTTAG=1, ABF_EXTERNALTAG=2, ABF_VOICETAG=3.
If nTagType=ABF_VOICETAG, this is the number of this voice tag.
When acquisition parameters are changed during an acquisition, the changes are
tracked and entered in the ABF deltas section. Each entry is time stamped in
fSynchTimeUnit units, so that the value of the parameter can be determined at
any point during the acquisition.
Header Entry Name
Time at which the parameter was changed in fSynchTimeUnit units.
Identifier for the parameter changed. Legal parameter values are: ABF_DELTA_XXXXXXXX.
Depending on the value of lParameterID this entry may be either a float or a long.