First developed in the 1960s and 1970s, flow cytometry is a technique that utilizes a specialized fluid system to continuously pull individual cells into a narrow fluid stream from a much larger solution containing thousands or millions of cells. This fluid-based separation allows one to measure various properties of individual cells which is useful to tease out different cell types within the same single sample. It should be noted that while flow cytometry is most commonly used to study cells, it is certainly not limited to analyzing just cells. Any particles of sufficient size, be it beads, or anything else can theoretically be measured using this technique.
The key engineering breakthrough that made this technology possible is known as hydrodynamic focusing. It works by routing fluid flow into a chamber where it is then surrounded by a higher pressure liquid flowing in the same direction. This has the effect of compressing the inner, lower pressure fluid beam and narrowing it to the point where it is only wide enough to accomodate single particles. In a flow cytometer this effect is utilized to take a mix of cells and transform it into a steady stream where cells in single file as shown in the diagram below.
The most common type of flow cytometry uses lasers combined with fluorescent detectors to analyze cellular properties. In a basic setup, a single laser is used to illuminate cells as they move through the flow stream. Cells will scatter this incoming laser light differently based on factors such as their diameter and the complexity of their cytoplasm (how filled it is with organelles etc).
Cell size can be measured using forward scatter (FSC) which is light that is mildly deflected by the plasma membrane. The amount of forward scatter generated is proportional to the cell’s diameter. Cell complexity is measured using side scatter (SSC) which results from light that is severely deflected upon hitting objects within the cell cytoplasm. These two measurements in combination can be used to identify and count the number of morphologically distinct types of cells that occur in heterogenous biological samples such as blood plasma.
During a typical flow experiment, the goal is to measure individual cells that belong to one or more classes. Ideally, you would have a pure sample of only the single cells that you care about, but reality is more complex. Often there will be non-cellular debris in the mix and sometimes cells will stick together forming double cell agreggates (doublets) or even higher order clumps.
Analyzing these types of objects is unproductive and wasteful. This is where the concept of data filtering, commonly referred to as gating comes in. In essence it allows you to sort objects into distinct categories (“populations”) based on one of more of their recorded measurements. Let’s go back to the example of cells sticking together. Say we just ran a sample on the flow cytometry and want to count how many individual cells we measured. In other words, we want to eliminate any objects from our analysis that represent clumps of cells that stuck together during the run. How do we do this? One approach could be to use the FSC data. Presumably clumps of cells will be larger objects and generate a larger FSC signal than single cells? But then again, we must remember that this is a heterogenous sample and some large single cells might be as big as clumps of small cells. How do we get around this?
Let’s take a closer look at the FSC data that the instrument records. When cells pass through the laser beam, they do so very quickly, but not instantaneously. The cell’s travel time through the beam is long enough that the instrument can take numerous measurements of the FSC light signal.
These measurements over time can be graphed and result in a peak shaped distribution that has a height (overall strongest signal when the cell is in the center), width (time between measurements rather than just a single value.
This is where things get interesting. Going back to the clumped cell problem, we can use the relationship between these 3 parameters to filter the data and analyze only single cells. When a single cell passes through the beam, the peak recorded will be narrow with a height that is roughly proportional to the area.
When clumps pass through the beam, the peak will be the same height as before, but with a larger width and larger area. If we graph all the objects area (FSC-A) vs their height (FSC-H) on a scatter plot we will see something that resembles the following relationship:
The majority of recorded objects should be single cells that cluster around a line in the middle of the graph. Objects that are to the bottom right of this line (where the area/width is larger, but the height is the same) likely represent cell clumps. Now we can draw a polygonal region (a gate) around the cells of interest to tell the flow cytometry software that the object inside the region (single cells) are a distinct population from other objects that have been measured. The software can then tell you the percent of all objects that fall into that population and the total number that were counted during the run. From this we can finally determine how many single cell objects were recorded during our experiment.
What if we want to measure more than just cell morphology during an experiment? It would be nice for example to be able to categorize cells into populations based on the expression of one of more proteins. How would we do this with our flow cytometer set up given that it measures light? For this we can leverage fluorescent molecules that absorb light at specific wavelength and remit the absorbed energy as photons at a lower frequency/longer wavelength. These generally come in two flavors: small fluorescent dye molecules and fluorescent proteins.
Alright back to our protein measurement. We need to turn our protein abundance into a light signal that the flow cytometer can measure. Armed with the fluorescent molecules we have two options. The first is to use gene editing to alter the genome of our cells and insert the sequence that codes for a fluorescent protein like GFP at the end of our protein of interest. This will generate a new GFP-tagged fusion protein with fluorescence we can detect. The other approach is to use an antibody against the target protein that has been chemically linked to a fluorescent dye molecule such as FITC. In this case, the antibody will specifically bind the protein and act as a linker between the protein and the fluorescent signal. Both approaches have benefits and drawbacks that I won't discuss here.
Let’s now walk through a more concrete example where we assume we’ve decided to go with the antibody approach. Let’s say we have immune cells in culture, and we want to see how treating them with drug A will change their identify/behavior. We hypothesize that not all cells will respond equally to the treatment some will begin expressing a receptor protein (such as CD3) on their surface. How do we assess this? One approach would be to split up our immune culture into two groups: one that we treat with the drug’s solvent DMSO and the other where we add the actual drug. After treatment, we can incubate both groups of cells with an antibody against CD3 that is linked to FITC. This antibody will bind the CD3 cell surface receptor and make it fluorescent. We can the wash away any unbound antibody leaving only the cells with bound antibodies behind. The more CD3 proteins are on the cell surface, the more antibodies/FITC molecules will bind and the more fluorescent the cell will be. As a sidenote, in this example we are looking at a protein on the surface of a cell so it is freely accesible for our antibody to bind. If we were instead looking at an intracellular protein, before we add out antibody we would have to fix our cells (treat them with formaldehyde to crosslink all the proteins) and permeabilize the membranes using detergents so that our externally added antibodies can actually access and bind the target protein. Without permeabilization, antibodies cannot reach intracellular proteins and thus they cannot be labelled or measured.
After the antibody binding and wash steps, the cells can then be diluted in a buffer and some fraction of the two samples (control vs treatment) can be placed on a flow-cytometer. Now we must configure the instrument so that it can measure the signal generated FITC/CD3. This requires us to look up both the emission and absorption spectrum of FITC so we know which laser to excite the cells with and which detection channel we should measure the signal in.
Based on the profile we can see that we will need to use a blue laser (488 nm is typical) to excite FITC and we need a detector that detects in the green range. Once we’ve configured that in our instrument settings, we are ready to run the samples.
Let’s assume that drug A does in fact increase the number of CD3+ samples. If this is the case, after we run our samples we can graph the CD3/FITC signal as a histogram which should look something like what’s shown below:
We can clearly see that in the control condition roughly 3% of cells express high levels of CD3 (CD3+). In the experimental condition, however, this percentage jumps five-fold to 15% which suggests that indeed the drug causes an increase in the percentage of cells that are CD3+.
This example also illustrates why flow cytometry is such a powerful technique compared to other approaches that measure proteins such as western blotting. Here we see that the treatment caused some cells to become high expressing but remember that 85% of the cells are CD3- and still have low CD3 expression. Imagine if we did the same experiment, but instead we lysed the cells and ran a western blot to look at CD3 expression. We would see a slight increase of CD3 protein in the experimental condition, but because we’ve pooled all the cells, we don’t know if all cells in the sample expressed 15% more CD3+ or if a small percentage of cells expressed hundreds of times more CD3 on their surface. With flow cytometry, we can easily distinguish these two scenarios and understand the heterogeneity of the response.
Alright we’re on our way to the big leagues now. Obviously one protein marker is great, but some cell types might be characterized by having several proteins up or down. It sure would be awesome if we could extend the approach we just used and indeed we can! This is where multicolor flow cytometry comes in.
Let’s go back to our previous example and extend it just a bit. We saw that our treatment increased CD3+ cells in our samples, but we know that not all CD3+ cells are the same. There are subtypes of CD3+ cells, some express the cell surface protein/marker CD4 and some express the cell surface protein/marker CD8. These subtypes have different roles in the immune response and to understand our treatment better, we want to know which populations we’re getting in our experiments.
We already have a nice FITC antibody for CD3 so that part is covered, but now we need new antibodies to label CD4 and CD8. At this point we need to make some smart choices with regards to what fluorophores we add to our antibody panel. If we just used FITC antibodies, that wouldn’t work we would be unable to differentiate if the FITC signal is from CD3, CD4, or CD8 or some combination of the three. In other words, we need 3 fluorophores that have distinct emission profiles so that their signals can be detected in different detectors. We also need to keep in mind, that our instrument comes with a specific set of lasers and we need to ensure that these lasers have the correct wavelengths to excite the fluorophores we choose.
Typical flow instruments come with one or more ultraviolet (355 nm), violet (406 nm), blue (488 nm), green (532 nm), yellow (565nm), and red (640 nm) lasers. For the sake of our example lets assume our instrument has at least 3 lasers: one blue, one green, and one red. This will allow us to use the fluorochrome FITC (blue excitation=> green emission), the fluorochrome PE (green excitation => yellow emission), and the fluorochrome allophycocyanin APC (red excitation => red emission).
Let’s take a small detour to discuss laser arrangements in instruments and how that can affect our fluorophore selection. In some cases, laser are arranged co-linear and so they fire at the same time. An alternative setup is parallel where lasers are parallel to one another and are aimed at different points of the flow stream and fire at different times. The time delay introduced in the parallel setup has a distinct advantage over the colinear scenario where multiple lasers fire at once. If we have our cells labelled with two fluorophores A, and B with the same emission, but different excitations. Say laser 1 only excites A and laser 2 only excites B. Even though the signal produced by A and B are the same, we know that when laser 1 fires, that the signal is only from A because only A gets excited by laser 1. Similarly, when laser 2 fires, only B will light up and we can then assign the resulting signal to B. To summarize, distinct emission profiles aren’t always required to ensure that you can separate the source of a signal.
Back to our adventure in immune biology. We now have 3 antibodies with 3 different fluorochromes that have distinct excitation and emission profiles. Time for the experiment! Again, we’ll treat the cells with either DMSO or Drug A, then incubate both of them with the 3 different antibodies. So, assuming we do 3 biological replicates of each condition, we’ll end up with just 6 samples, right? Well not quite. A good experiment needs the appropriate controls and we’re missing some key ones that are necessary for flow cytometry. First, we need an unstained control which is just cells that have never been exposed to antibody. The purpose of this negative control is to serve as a baseline measurement of the background autofluorescence that cells will emit even if they don’t have any fluorophores on them. It will effectively tell us what “no signal” looks like so that we can the subtract that non-specific signal from our measurements to ensure we’re measuring only the fluorescence that is coming from our antibodies.
An unstained control is a great first step but we need more. For each fluorophore we selected, we need one sample where we only add that fluorophore and none of the others. These will be our single-color controls. These samples will allow us to measure how much signal from one fluorophore spills over into other channels (where we don’t want to detect it). This is necessary because fluorophores often have wide emission spectra that span many wavelengths and can be detected in multiple detectors. Armed with our single-color controls, we can measure the amount of spillover for each fluorophore and input these values into the flow cytometry software to generate a so-called compensation matrix. This matrix records how much each fluorophore contributes to each detector. These values are then used by the software to correct for the spillover signal from the other fluorophores and subtract it away to reveal the signal coming from the actual fluorophore we want to measure. In other words, it is “compensating” for the undesired signal.
Another set of controls often used in multicolor flow experiments are the so called FMO controls (fluorescence minus one). It sounds complicated, but the idea is simple. We prepare as many samples as we have fluorophores and in each we will leave out one of the fluorophores. In our case, we have 3 fluorophores so we will have 3 FMO samples. For each FMO, we leave out one of the fluorophores and add only 2 of the 3. Why? Because we need to know at what point we can consider a signal (truly positive) ie more than non-specific background plus fluorescent spillover. In essence, the FMO is the best negative control we can make because it is as close to our true mixed sampled as possible while still being negative for the signal we care about. This can then be used to determine our boundary beyond which we classify something as truly positive. We can then use this boundary determined via the FMO in our real samples to differentiate expression among the cells we measure.
Alright so after all that we’ll end up with something like 13 samples: 1 unstained control, 3 single color controls, 3 FMO samples, 3 control treated samples (biological replicates), and 3 drug treated samples (biological replicates). We can run these on the flow cytometer and once the run is done we’ll have a total of 13 data files, one per sample, in the standard flow data fcs format (.fcs files).
It’s now time to go through the data and figure out if our experiment worked. There are several flow cytometry analysis programs, but one of the most popular is Flowjo https://www.flowjo.com/solutions/flowjo. Using the program we can graph our data, set up gates to find populations, and count the number of cells of each type in the experiments. The first step is to input the single-color control samples into the software to calculate the compensation matrix to correct the values. After correcting the values, let’s turn to one of our FMO samples, the FMO-FIOTC samples where we left out the CDR/FITC antibody. It is typical to plot the FSC vs SSC values and draw a gate around the cell types of interest and to exclude debris and other unwanted objects from the analysis. In this case, the CD3+ cells belong to the lymphocyte class which form a specific, easily distinguishable population when graphed on a FSC vs SSC plot.
Once we’ve drawn the gate and defined this first population P1, lets pick out the cells that express CD3, ie are CD3+. To do this, we’ll plot the FITC(CD3) signal of only objects that belong to P1. Again, remember this is our FMO so no cells are truly positive for signal. The signal we do observe is all non-specific from the other fluorophores and autofluorescence. We can then draw a new gate (this time just a horizontal region) that goes from where the negative ends all the way to the right. We will consider any cells with FITC values in this region to be CD3+, and a part of P2, the CD3+ subset of P1.
Next, we will continue this process and plot a scatter plot of PE(CD4) and APC(CD8) values for all cells within P2. As before, we will use our FMO-PE to determine where to set the horizontal boundary for positivity (CD4+) and we will use our FMO-APC (CD8+) to determine where to set the vertical boundary. This will leave us with a scatter plot with 4 regions representing, CD4- CD8- cells, CD4+ CD8- cells, CD4- CD8+ cells, CD4+ CD8+ cells. Each of these regions defines a new population and so we now have 4 new populations that are a subset of P2, and its parent, P1. After all that we finally have defined our population of interest, CD3+ CD4+ positive cells and we can count them to determine if our drug affected their abundance.
In the previous example we went through how we can use flourescently labelled proteins to measure the percentage of cells that belong to a specific population of interest. While this type of experiment and analysis can be used to answer a wide range of biological questions, this only scratches the surface of what can be measured and accomplished with flow cytometry. Over the last several decades, all sorts of dyes and flourescent sensors have been developed that can be used to measure DNA content for cell cycle analysis, apoptosis, lipids, intracellular ion levels, membrane potentials, and much more. All of these options make flow cytometry an extremely versatile and powerful technique that can be utilized for a wide range of biological applications.
Woo there you go! That was a lot to cover, but hopefully you now have a sense of what goes into a flow experiment and how you can go about designing your own.