FlowJo, FACSDiva and Gating-ML

Bring an analysis over from FlowJo or FACSDiva and see, population by population, that it gives the same counts; send one back to FlowJo; exchange gates with other tools through Gating-ML.

Importing a FlowJo workspace

CytoWeave reads FlowJo 10 workspaces (.wsp, also written by FlowJo 11), FlowJo 11 workbenches (.flowjo, below) and FACSDiva experiments (below): their samples, gates, compensation matrices and scales. FlowJo 9 workspaces are not read.

  1. Open the .wsp or .flowjo file: drop it on the window, or use Import a FlowJo workspace or Gating-ML… in the sample list's + menu.
  2. The import dialog lists every population as exact, approximated or not imported, and says why: a curly quadrant, for example, imports with straight dividers. Gates FlowJo drew on uncompensated data keep uncompensated values, time and linear axes with a gain are converted from FlowJo's units, and ellipses are read from FlowJo's display space.
  3. Match the FCS files: CytoWeave finds the workspace's files among the samples already open; Add the FCS files… or Add a folder… adds the rest.
  4. Choose the Options:
    • Axis scales: use FlowJo's scales, only for channels without one, or keep the current scales. Each gate keeps the scale it was drawn on either way; this only sets how plots draw the axes.
    • Apply FlowJo's compensation to the matched samples.
    • Then load the matched samples and compare every population count with FlowJo's.
  5. Click Import (or Import gates only when no FCS file is matched).

The Moving from FlowJo example opens straight into this dialog, with the FlowJo 10 workspace made for its four samples.

The migration report

The FlowJo migration report: 56 of 56 population counts agree exactly, with FlowJo's count, CytoWeave's count, the difference and the status of every population in every sampleThe FlowJo migration report: 56 of 56 population counts agree exactly, with FlowJo's count, CytoWeave's count, the difference and the status of every population in every sample
The bundled FlowJo workspace: every count agrees exactly.

After an import with the comparison, the FlowJo migration report recomputes every imported population from the FCS data and lists, for each population and sample, FlowJo's count, CytoWeave's count, the difference, a status (exact, within 1%, differs or not compared) and the likely cause of a difference. Show opens that population on that sample; Export CSV saves the table for your records; Recompute runs the comparison again. The report stays available from the workspace menu.

Small differences are expected. FlowJo evaluates gates at its display resolution, which moves events near gate boundaries: typically well under 1% of a large population, more for populations of a few dozen events. CytoWeave evaluates gates exactly. Larger differences usually mean different compensation, a different FCS file, or a population whose parent already differs.

FlowJo's biexponential scale is reproduced exactly, from FlowJo's own table algorithm, and checked against BD's published lookup tables. On FlowJo's own test workspaces CytoWeave reproduces the counts FlowJo saved; on real workspaces it matches them exactly at least as often as FlowKit does, and within 0.1–0.3% for large populations.

Limits. Curly quadrants import with straight dividers. Template group gates import as per-sample copies, merged where samples agree.

FlowJo 11 workbenches

A FlowJo 11 workbench (.flowjo) imports like a .wsp file, with the same dialog and report. CytoWeave reads its polygons, rectangles, ellipses, ranges and quadrant gates (including a quadrant whose arm was moved off center, which becomes the rectangles each quadrant covers), Boolean populations, gates adjusted for one sample, compensation matrices and linear, log and biexponential scales. FlowJo stores its count of every population in the workbench, so the report compares with FlowJo's own counts. The FlowJo example comes with a workbench to try (Files that came with this example… in the workspace menu).

FlowJo 11 counts events on its display grid: an event is in a polygon when the grid point it falls on is, and in an ellipse when the center of its grid cell is. Evaluated that way, CytoWeave's reading of the gates gives FlowJo 11's own count for every population of twelve workbenches saved by FlowJo 11.2 (quadrants drawn in FlowJo 11 within 3 events); the validation suite checks this. CytoWeave itself evaluates the exact gate geometry, so its counts differ slightly near gate edges: well under 1% of large populations, a few percent for a small gate drawn on a dense population.

Limits. FlowJo 11 logicle and arcsinh axes are read but not yet checked against FlowJo 11's counts (they are marked approximated). Spectral unmixing matrices in a workbench are not applied. When FlowJo 11.2 opens a FlowJo 10 workspace it leaves out its Boolean populations, so a workbench made that way has none.

FACSDiva experiments

Export the experiment from FACSDiva as XML (FACSDiva's experiment export) and open the .xml file in CytoWeave with the experiment's FCS files. Each tube is a sample (named after its specimen and tube, matched to its FCS file by the file name Diva recorded) and each specimen a group; Diva's count of every population is compared in the report. The index-sort example comes with its sort's FACSDiva experiment to try.

On the FACSDiva experiment CytoML is tested with, CytoWeave's counts equal CytoML's for every population. FACSDiva counts events on a 256-step display grid; evaluated that way, gates on linear axes give Diva's own counts exactly, and gates on biexponential axes are within 0.3%.

FACSChorus gates (FACSDiscover S8 and A8)

FACSChorus records the gates of a recording in every FCS file it writes, and has no other way to export them. When such files open, CytoWeave offers Import the gates (also in the workspace menu: Import → Gates FACSChorus recorded in the files…). The same import dialog lists every population; files with the same gates share them, each with its own position.

Exporting to FlowJo

Export as a FlowJo workspace: 135 population-sample pairs written exactly and 27 traced (the Live gate, a polygon on a logicle channel), none left out, with options to include the counts, the FCS files and to remove identifying keywordsExport as a FlowJo workspace: 135 population-sample pairs written exactly and 27 traced (the Live gate, a polygon on a logicle channel), none left out, with options to include the counts, the FCS files and to remove identifying keywords
The export's report for the PBMC example: the Live gate, a polygon drawn on a logicle scale, is traced to follow its outline on FlowJo's biexponential scale; every other population is exact.

To hand an analysis to a FlowJo user, or to keep a copy in FlowJo's format, choose Workspace → Export → FlowJo workspace (.wsp)…. CytoWeave writes a FlowJo 10 workspace, which FlowJo 11 also opens:

Before exporting, the dialog lists every population as one of:

StatusMeaning
ExactFlowJo evaluates the same gate. Rectangles, ranges, quadrants and splits are always exact; polygons and ellipses are when they were drawn on the scale written for their channels (linear, logarithmic or biexponential).
TracedA polygon or ellipse drawn on another scale than the one written, which includes every polygon and ellipse on a logicle or arcsinh channel. FlowJo draws gate edges straight on its own axes, so the outline is written with enough vertices to follow the original; counts stay within 0.5% of CytoWeave's.
Not exportedGates FlowJo cannot evaluate: category gates (QC pass, barcodes, clusters), gates on channels CytoWeave computed (unmixed, normalized, ratios), and gates of three or more dimensions. Their children are left out too.

How the export is checked

Opening an export in FlowJo 11:

FlowJo 10 has not been tried. It reads the same format, and the biexponential is its own default scale; please report how it goes if you open an export in it.

Gating-ML 2.0

Gating-ML is ISAC's standard for gates, transformations and compensation. Open a Gating-ML .xml file like any other file, and export with Workspace → Export → Gates as Gating-ML 2.0. Import and export cover:

All 190 gates of ISAC's Gating-ML 2.0 compliance suite select exactly the expected events. Re-importing a CytoWeave export restores names, colors and scales exactly. Gating-ML has no biexponential, so biexponential axes are written as their closest logicle, with the gate coordinates converted; the export warns when it does this.

Classification results (CLR)

Population memberships (CLR)… exports, for every event of a sample, a column per population or cluster saying whether the event belongs to it, for tools that read memberships. Choose the populations and the column names (population names, or paths when names repeat).

Where to go next