Updates 2018-03-26

Ran out of time on Friday to post this update, so here it goes...

Finally managed to sort my Java2D rendering issues (basically blocking my X11 session when displaying images with Java), by switching to OpenGL rendering by supplying this option to the JVM: -Dsun.java2d.opengl=true

The following modules were removed:

  • adams-imaging-imagej
  • adams-dl4j
  • adams-dl4j-insight
  • adams-dl4j-weka

Why remove deeplearning4j? Well, we just didn't have much luck with that framework and CNTK (despite being in Python) was much easier to work with (and the API didn't change all the time).


  • The DumpFile sink no longer attempts to write to disk if the output file is pointing to directory (eg due to an invalid variable)
  • PlaceholderFile/Directory: getAbsolutePath() now checks whether the path is a Windows one (X:...) and if that is that case, just returns it (otherwise the CWD gets prepended).
  • The following overlay paintlets now always use the panel's container manager: MeanOverlayPaintlet, MedianOverlayPaintlet, StdDevOverlayPaintlet, LimitPaintlet
  • When enclosing a referenced actor (eg below CallableActors) in the Flow editor, it now triggers the updating of the reference throughout the flow.
  • Fixed how the bin directory of JRE/JDK is determined, now works with Java 9+.
  • adams-weka and adams-weka-lts:
    • The Export output... functionality in the Weka Investigator no longer exports model files from the predictions or model tabs, but spreadsheets and text files.
    • The search panel of the WekaInstancesDisplay now shows up when used in conjunction with the DisplayPanelManager.
  • adams-spectral-2dim-core:
    • The RowWiseSpreadSheetSpectrumReader and ColumnWiseSpreadSheetReader are now more robust when parsing numeric values in the spreadsheet, in case there is incorrect data present. They can also process multiple sheets, in case the spreadsheet reader supports that.


  • When saving a flow, the modules that were present at that time will get stored in the comments. When loading a flow with the modules listed, these modules are then checked against the current environment now, outputting a warning if modules missing.
  • When editing an actor in the Flow editor, the children no longer get discarded when both actors, new and old, implement MutableActorHandler (like Tee and Trigger).
  • The gradient color generators BiColorGenerator and MultiColorGenerator now support a custom alpha value to obtain transparent colors.
  • adams-weka-lts: now uses 3.9.0-fork-0.0.4, which had a few classes backported from 3.9.2 in order to make it compile and work under Java 9.
  • adams-spreadsheet: moved cell rendering customization (ie neg/pos background colors) into CellRenderingCustomizer class hierarchy.
  • adams-imaging: The ImageObjectOverlay can store meta-data values in the outgoing report of the objects with the highest overlaps as well, e.g., associated labels.
  • adams-ml: The ConfusionMatrix transformer can take a column with probabilities now into account to generate the counts. Furthermore, instead of counts, it can also generate overall percentages or row percentages now.


  • The StringArraySplit transformer splits string array into sub-arrays using the specified regular expression. E.g., can be used to split log file into individual entries using the timestamp as split criterion.
  • Added a color based on the X11 color palette (https://en.wikipedia.org/wiki/X11_color_names), called X11ColorProvider.
  • With the PercentilePaintlet it is possible to plot a horizontal line at the specified percentile for each sequence.
  • adams-imaging: added the Objects sub-images generator, which uses the specified object finder to locate the sub-images of interest and then extracts them (available through the SubImages BufferedImageTransformer).
  • adams-spreadsheet:
    • added the Percentile row/column statistic.
    • added the NumericRangeCellRenderingCustomizer for highlighting cells in specified columns that fall in defined intervals.
  • adams-ml: added the ConfsionMatrixCellRenderingCustomizer to make confusion matrix spreadsheets more readable (as generated by the ConfusionMatrix transformer).
  • adams-weka and adams-weka-lts:
    • Investigator, Multi-Experimenter, WekaRandomSplit, WekaCrossValidationSplit and WekaCrossValidationEvaluator now allow you to select the type of split generator you want to use. You can either use Weka's default splitting mechanism (Default...) or you can use the new Grouped... ones. The latter one is useful when dealing with data that contains duplicates or near-duplicates that can be grouped via a regular expression applied to a nominal or string attribute. An example is scanning the same sample with multiple instruments. A sample should never be present in train and test, as it gives a way to optimistic estimate (in other words: you are sort of cheating).
    • The Investigator now offers confusion matrix output in the classify tab, which offers various display and highlighting options.
  • adams-python:
    • Added new module to adams-base, to make interaction with Python easier.
    • PythonEnvironment standalone allows you to specify python/pip commands to use (eg from a virtual environment).
    • The PythonExec source executes a Python script and forwards the output that the script generates.
    • With PipExec you can run pip commnands and post-process the output the command generates.
    • The PythonExpandScript transformer expands variables and placholders in a script template and saves it to a new file.