My name is Luke Johnson, a graduate student at Southern Oregon University. I spent my summer interning with FlowJo, LLC. My first assignment here was to develop a population plugin that performs a clustering algorithm. I had to do some quick research into clustering algorithms, and eventually settled on the OPTICS algorithm—primarily because the algorithm is well-documented and relatively simple to implement.
The OPTICS plugin is an implementation of the OPTICS algorithm, which reorders events to reveal the hierarchical structure of clusters. The plugin can then separate the events into clusters based on the results of the OPTICS algorithm run.
Plotting the resulting parameters, orderNum vs. reachability, reveals what is called a reachability plot. The plugin can seek out the clusters based on the peaks in this plot, or the user can gate manually from this view.
Understanding how the Population Plugin interface works was the first step. What goes into the implementation of this interface is minimal, because it should only need to get user options from another class when FlowJo calls promptForOptions(), then call out to yet another class when FlowJo calls invokeAlgorithm(). From there, most of the work is on the algorithm itself.
FlowJo’s PluginHelper class has a number of helper methods that make getting data back to your workspace easy. The PluginHelper.createClusterParameter() method was used to add the orderNum and reachability parameters to the results, while ExternalAlgorithmResults has its own method, setCSV(), to assign events to clusters.