CellProfiler / CellProfiler-plugins

Community-contributed and experimental CellProfiler modules.
http://plugins.cellprofiler.org/
56 stars 67 forks source link

Speed up and clean up callbarcodes #143

Closed bethac07 closed 2 years ago

bethac07 commented 2 years ago

Implements an initial check for a perfect barcode match rather than score checking all barcodes, which has only a moderate impact when the barcode list is small but can lead to a 250X speedup when the barcode list is 30K barcodes.

Also adds a few things from a branch too old to be worth rebasing (and which had some features we've since decided we don't want) - 1) allowing the user to set an empty vector barcode and 2) reporting a mean quality score for each barcode foci. It also now exports to the Image measurement table the mean score and the mean quality score for all barcodes in each image, which should make life easier when wanting to do quick checks on how processing went.

bethac07 commented 2 years ago

Is it easy/possible to try them out on an example set just to make sure I didn't do anything dumb?

ErinWeisbart commented 2 years ago

For sure.

ErinWeisbart commented 2 years ago

Fresh pull on CellProfiler and CellProfiler-plugins. On master branch of CellProfiler-plugins my test pipeline opens fine, but on barcode cleanup branch I get Error while loading CallBarcodes: Could not find the CallBarcodes module

ErinWeisbart commented 2 years ago

Works in both test mode and analysis mode if CallBarcodes module does NOT display results. If display is on in either test mode or analysis mode nothing shows in GUI and:

Failed to run module CallBarcodes
Traceback (most recent call last):
  File "/Users/eweisbar/Desktop/github/CellProfiler/cellprofiler/gui/pipelinecontroller.py", line 3397, in do_step
    module.display(workspace_model, fig)
  File "/Users/eweisbar/Desktop/github/CellProfiler-plugins/callbarcodes.py", line 475, in display
    figure.subplot_table(0, 0, statistics)
  File "/Users/eweisbar/Desktop/github/CellProfiler/cellprofiler/gui/figure/_figure.py", line 2194, in subplot_table
    ncols = 0 if nrows == 0 else len(statistics[0])
TypeError: object of type 'numpy.float64' has no len()
bethac07 commented 2 years ago

Thanks for looking into that! Since it hasn't had a functional display until now, no point holding it for one at this point.

Can you make sure though to add/push the changes you needed to make to get it to run? My recollection is that they were small but nonzero.