# Flow Cytometry Standard

Flow Cytometry Standard (FCS) is a data file standard for the reading and writing of data from flow cytometry experiments. The FCS specification has traditionally been developed and maintained by the International Society for Advancement of Cytometry (ISAC). FCS used to be the only widely adopted file format in flow cytometry. Recently, additional standard file formats have been developed by ISAC.

## File Format

The FCS file format describes a file that is a combination of textual data followed by binary data. The order of the file layout is as follows:
* HEADER segment
* TEXT segment
* DATA segment
* Optional ANALYSIS segment
* CRC value
* Optional OTHER segments
The HEADER segment is an ASCII text string that begins by identifying the version of the FCS standard used, followed by three pairs of byte offsets that designate the positions of the TEXT, DATA, and ANALYSIS segments. An example header segment is given below
Because the field width of the header segment byte positions is constrained by 8 characters, the maximum position it is capable of storing is 99,999,999. Anything beyond that is encoded as a 0 for both the start and end position, and the corresponding TEXT segment keyword is used instead.
The text segment is an ASCII text string that is divided into a series of key-value pairs that are delimited by some chosen character, e.g. '|'. The first character immediately following the header segment is the delimiter. An example of a header and text segment is given below
To be a valid FCS file, the text segment must contain all required keywords, which describe the DATA segment format and encoding. For FCS version 3.1, the required FCS primary TEXT segment keywords are as follows:
| Keyword | Description |
| $BEGINANALYSIS | Byte-offset to the beginning of the ANALYSIS segment. |
| $BEGINDATA | Byte-offset to the beginning of the DATA segment. |
| $BEGINSTEXT | Byte-offset to the beginning of a supplemental TEXT segment. |
| $BYTEORD | Byte order for data acquisition computer. |
| $DATATYPE | Type of data in DATA segment (ASCII, integer, floating point). |
| $ENDANALYSIS | Byte-offset to the last byte of the ANALYSIS segment. |
| $ENDDATA | Byte-offset to the last byte of the DATA segment. |
| $ENDSTEXT | Byte-offset to the last byte of a supplemental TEXT segment. |
| $MODE | Data mode (list mode - preferred, histogram - deprecated). |
| $NEXTDATA | Byte offset to next data set in the file. |
| $PAR | Number of parameters in an event. |
| $PnB | Number of bits reserved for parameter number n. |
| $PnE | Amplification type for parameter n. |
| $PnN | Short name for parameter n. |
| $PnR | Range for parameter number n. |
| $TOT | Total number of events in the data set. |
The DATA segment of the FCS file follows after the TEXT segment and is laid out event-wise (row-wise) according to the order described in the parameters (a.k.a. channels) $P1N $P2N$...PnN. An event is either an actual biological cell or some other mass that was large enough to trigger the data acquisition capturing device of the flow cytometer instrument. Data segments hold the following layout:
Each event is laid out according to the number of bytes described by $PnB for each parameter. These bytes are to be interpreted according to the combination specified by $BYTEORD and $DATATYPE.

## Data structure

Flow cytometry data is typically saved for analysis in the form of an array, with fluorescence and scatter channels represented in columns, and individual "events" (most of which are cells) forming the rows. The number of events acquired from each sample usually ranges between the low thousands and the low millions.

## History

The first version of a Flow Cytometry Standard (FCS) was developed in 1984. Since then, FCS became the standard file format supported by all flow cytometry software and hardware vendors. FCS is a binary file format with three main segments: a text segment containing meta data in keyword/value pairs structures, a data segment usually containing a matrix of detected expression values (so called list mode format), and a rarely used analysis segment.
Over the years, updates were incorporated to adapt to technological advancements in both flow cytometry and computing technologies.
In 1990, FCS 2.0 was introduced. Features introduced in FCS 2.0 included the option of multiple data sets within a data file, the use of different byte orders accommodating hardware variations on different computing platforms, and basic compensation and scaling information. FCS 2.0 was followed by FCS 3.0 in 1997, which introduced the possibility of storing data sets larger than 100MB.
The latest version, FCS 3.1, was introduced in 2010. It retains the basic FCS file structure and most features of previous versions of the standard. Changes included in FCS 3.1 address potential ambiguities in the previous versions and provide a more robust standard. They include simplified support for international characters and improved support for storing compensation. The major additions are support for preferred display scale, a standardized way of capturing the sample volume, information about the origins of the data file, and support for plate and well identification in high throughput, plate based experiments.