wheeler-microfluidics / dmf-control-board-firmware

Firmware for an Arduino-based DMF control board and a Python module for communicating with it over a serial connection.
http://microfluidics.utoronto.ca/trac/dropbot/wiki/ControlBoard
BSD 3-Clause "New" or "Revised" License
1 stars 2 forks source link

Filtering feedback results throws an exception #3

Closed ryanfobel closed 7 years ago

ryanfobel commented 7 years ago

You can reproduce the error by viewing the feedback results from an experiment log and clicking on the filter checkbox.

This is likely related to NaN values: see this issue.

Traceback is given below:

(<type 'exceptions.ValueError'>, ValueError('On entry to DGELSD parameter number 6 had an illegal value',), <traceback object at 0x0EA10FA8>) {}
  File "C:\Users\ryan\Documents\Microdrop-v1.0\plugins\dmf_control_board\feedback.py", line 1092, in on_checkbutton_filter_toggled
    self.update_plot()
  File "C:\Users\ryan\Documents\Microdrop-v1.0\plugins\dmf_control_board\feedback.py", line 1248, in update_plot
    t, dxdt = results.dxdt(filter_order=3)
  File "C:\Users\ryan\MicroDrop\envs\v1.0\lib\site-packages\dmf_control_board_firmware\__init__.py", line 648, in dxdt
    dx = savgol_filter(x, window_size, filter_order, 1)
  File "C:\Users\ryan\MicroDrop\envs\v1.0\lib\site-packages\scipy\signal\_savitzky_golay.py", line 344, in savgol_filter
    _fit_edges_polyfit(x, window_length, polyorder, deriv, delta, axis, y)
  File "C:\Users\ryan\MicroDrop\envs\v1.0\lib\site-packages\scipy\signal\_savitzky_golay.py", line 222, in _fit_edges_polyfit
    polyorder, deriv, delta, y)
  File "C:\Users\ryan\MicroDrop\envs\v1.0\lib\site-packages\scipy\signal\_savitzky_golay.py", line 192, in _fit_edge
    xx_edge, polyorder)
  File "C:\Users\ryan\MicroDrop\envs\v1.0\lib\site-packages\numpy\lib\polynomial.py", line 589, in polyfit
    c, resids, rank, s = lstsq(lhs, rhs, rcond)
  File "C:\Users\ryan\MicroDrop\envs\v1.0\lib\site-packages\numpy\linalg\linalg.py", line 1919, in lstsq
    0, work, lwork, iwork, 0)
ryanfobel commented 7 years ago

The workaround in 08ce8fe fills in missing values by linear interpolation. This is necessary because the Savitzky-Golay filter assumes data points are evenly spaced. Closing this issue for now.