Skip to content

Latest commit

 

History

History
90 lines (63 loc) · 6.64 KB

File metadata and controls

90 lines (63 loc) · 6.64 KB

OpenFlo

OpenFlo is an open source, Mac-first flow cytometry and single-cell analysis app prototype. The current v0.8.10 release focuses on FlowJo-like plot-window behavior (default gate naming, fixed plot sizing, clearer gate tools, and navigation that remembers your view), on top of consistent overlay/batch gating, FlowJo-accurate overlay plots and axis autoscaling, FlowJo-accurate pseudocolor plot rendering, responsive FlowJo-style plotting/gating, Seqtometry-style single-cell signature scoring, and a standalone preprocessing path for biological single-cell matrices.

  • If you are trying to install from the precompiled .dmg - you will need to put the app into your applications folder, and then type: xattr -dr com.apple.quarantine /Applications/OpenFlo.app
ChatGPT Image Apr 24, 2026, 10_18_49 PM

Current Release: v0.8.10

  • Default gate names follow FlowJo's heuristics from the drawn axes (FSC-A vs SSC-A → "Lymphocytes"; same-detector A/H/W pairs → "Single Cells"; otherwise "{X}, {Y} subset").
  • Plots render at a fixed FlowJo-style size by default, with an Auto-size checkbox to fill the window; the gate-tool strip is now a light, high-contrast FlowJo-style toolbar and the navigation arrows are FlowJo green.
  • Navigation remembers your view: going up restores the parent plot's mode, and going back into a gate restores the view you last had for it.
  • Fixed a workspace layout bug where a group-level gate applied to All Samples stretched to fill the pane.

Previous highlights (v0.8.9)

  • Overlays and batch reports now gate every sample the same way: dragging a bare sample onto a gated plot (or batching/iterating across samples) applies the base plot's gating to each sample, so tiles and overlays show the gated population instead of whole-sample data.
  • Rebuilt the main window toolbar as a FlowJo-style grouped ribbon with the real app icon, and tightened the Layout Editor to FlowJo proportions.

Previous highlights (v0.8.8)

  • Overlay histograms now match FlowJo: multi-population overlays default to Normalized To Mode, use FlowJo's exact cyan/red colors and 40% blended fills (reproduced pixel-for-pixel), and render at higher resolution. Overlay layers can be recolored and removed from the layer controls.
  • Axis autoscaling now matches FlowJo: an outlier-robust range keeps far-out debris events (e.g. FSC/SSC junk with extreme negative values) from stretching the axis, and linear scatter channels start at 0.
  • Fixed the per-axis channel-name selector so it renders visibly.

Previous highlights (v0.8.7)

  • Rewrote the default pseudocolor 2D plot as a per-event, density-colored dot renderer that closely matches FlowJo: FlowJo's exact color ramp, a two-scale local density (coarse for cluster warmth/gradient, single-pixel fine for the grainy blue-in-green / green-in-blue speckle), and a low render resolution that scales into distinct square pixels.
  • Polished plot axes (K/M abbreviated tick labels, superscript decade labels, minor ticks, visible channel-name axis selectors) and gate selection handles (clean corner handles instead of one per polygon vertex).
  • Denser workspace tree rows with indent guides, a drawn gate glyph, and tabular numerals.

Previous highlights (v0.8.6)

  • Added default-on single-cell preprocessing controls to the matrix import dialog: QC, normalization, and imputation now appear above the signature choices.
  • Added a standalone Swift preprocessing pipeline inspired by the Seqtometry vignette and MAGIC: mitochondrial/library-size/detected-gene QC, library-size log normalization, and adaptive graph diffusion imputation without requiring R or Python at runtime.
  • Improved Matrix Market import for larger single-cell datasets by preserving sparse data during preprocessing and signature scoring when dense materialization would be too large.
  • Restored default bundled signatures during matrix import and fixed signature axis controls so signatures can be switched without exposing thousands of raw genes in the selector.
  • Cleaned signature axis labels so signatures show the cell/signature name while gene counts open a scrollable gene list; standard flow channels still preserve marker/color labels such as APC.
  • Fixed quadrant gates so crosshair quadrants behave as quadrant gates instead of becoming a rectangle from the crosshair to the upper-right corner.
  • Added a SeqtometryGUI-inspired Rescore Gate action for gated single-cell populations, recalculating signature scores using only the cells in the selected gate and storing the branch-specific score table on that gate.
  • Added a Z/color selector for dot plots and contour plots so a third numeric channel can be overlaid as a continuous color scale, with low-cardinality integer-coded channels rendered categorically.
  • Improved responsiveness for contour, density, zebra, and heatmap-statistic plot modes by sampling/caching the rendered data paths.
  • Added loading progress text that explains whether OpenFlo is parsing raw counts, running QC, normalizing, imputing, scoring signatures, or keeping raw genes sparse.

Current Scope

  • Native macOS SwiftUI app targeting Apple Silicon.
  • Pure Swift core with a columnar event table.
  • Basic FCS reader for common FCS 2.0/3.x homogeneous numeric files.
  • Multi-core 2D density histogram renderer.
  • Rectangle, oval, polygon, and quadrant gate evaluation backed by compact bitset masks.
  • FlowJo-style workspace workflow with group-applied gates, plot windows, layout reports, table/statistic output, and JSON-backed .openflo workspace saves.
  • Layout Editor reports with draggable graph/text/shape/table items, sample iteration, batch layout generation, PNG export, and HTML image batches.
  • Table Editor output for counts, parent/total percentages, median, mean, and geometric mean with optional heat-map formatting and text/CSV/HTML export.
  • Single-cell Matrix Market and delimited matrix import with bundled immune signatures, custom signatures, Seqtometry-style scoring, and optional preprocessing.
  • Gated single-cell rescoring and continuous/categorical third-variable coloring for dot and contour plots.
  • DMG packaging script using SwiftPM and hdiutil.

Build

swift build -c release

Run During Development

swift run OpenFlo

Verify Core Logic

swift run OpenFloCoreSmokeTests

Create a DMG

./scripts/package_dmg.sh

The unsigned DMG is written to dist/OpenFlo.dmg. For public distribution outside the App Store, the .app and .dmg should be signed and notarized with an Apple Developer ID certificate.

Architecture Notes

See docs/ARCHITECTURE.md.