[Bioc-devel] Dependency on windowing systems in the flowCore package

Kieran O'Neill koneill at bccrc.ca
Thu Apr 10 23:03:41 CEST 2014


In Bioconductor, the core infrastructure for loading and representing
flow cytometry data is the flowCore package. It contains some very
useful structures, most notably the flowFrame and flowSet classes, as
well as read.FCS, which loads the (somewhat complicated, binary) FCS
file format.

However, at some stage flowCore gained functionality for performing
automated gating, and a dependency on the feature package from CRAN.
Feature depends on the tcltk C++ libraries, which in turn depend on
C++ libraries for a windowing system (X11 on *nix). This can make
compiling flowCore a massive pain on a headless server or compute
cluster. It can also be somewhat painful to more naive users on, say,
Ubuntu, who would have to install a number of development header
packages. I believe this would also be a problem on OSX.

I wrote about this issue on the list about a year ago, mostly as an
aside. But I am now in the position of reviewing a new flow cytometry
package, where the author does not want to use flowCore to represent
flow cytometry data. Their reasoning is that their package is very
basic, and they don't want to create complicated dependencies and
installation issues for their end users. I'm at least halfway inclined
to agree, but the guidelines do state that packages should "re-use
existing S4 classes and generics where possible".

And so I have a dilemma, which has two likely solutions:

1. The maintainers of flowCore change the package so it no longer has
Byzantine dependencies that include a windowing system.

2. The developer of the new package submits to CRAN instead.

I would very much prefer the first solution (not least of all because
it would make my and other flowCore users' lives much easier).

An easy way of handling it would be to remove the density gating
functionality in flowCore, which I believe is the culprit in terms of
dependencies, and which certainly goes beyond flowCore's purpose of
providing "vasic structures for flow cytometry data" and into the
realm of analysis. This density gating would probably exist better in
its own package.

This could be tricky, given that flowCore has over 30 downstream
packages now, but I suspect that few if any of them actually use the
density gating functionality, and that those which do could be
identified and their own dependencies changed concurrently with
splitting flowCore up.



More information about the Bioc-devel mailing list