Feature Slate Harrier

Introduction

This document is designed to briefly detail new features to which we can choose to commit in Dawn Harrier 1.4. A discussion will follow as which features should be worked on in Dawn Harrier and features added to Jira sprints as decided later in the development cycle. The estimated development times quoted are not elapsed time, just hours coding; they do not allow for meetings etc. 


Large Features

Medium Features

Expose more of IPlottingSystem to the Jython layer

The IPlottingSystem API is rich and allows annotations and regions to be created with ease. These features are not available to the dnp.plot object in the python API. Using the JMXPlottingSystem the Jython later can support all these operations. 

ImageJ Plugin Support

It may be possible to support existing ImageJ plugins by reproducing DAWN bindings to the most commonly used parts of the ImageJ API. For instance an ImageJ PlotWindow would map to a DAWN window with a plot on it etc. There may be an import step in which DAWN replaces the import statements and recompiles the plugin.

Increased Options for Video Export

The video export could support more options such as:

  1. 1D slices
  2. Showing axis information in the caption of each frame
  3. 3D surface (with a constant colour map so that colour scheme is not lost)

Slice Tool API and Harmonization of Slicing Components

Currently you can add a plotting tool or create an ATab class which integrates directly into the DExplore perspective. Developers should be able to contribute slice tools just as they do plot tools using extension points. These tools should have access to the underlying data and get and set the current slice. They should have the ability to provide/replace the UI in the plot (contribute a custom plot part which uses the stack layout in plotting system). So for instance with the Hyper3D plot tool, an action would appear on the slice component toolbar which when pressed changes the plotting system to two plotting systems for the Hyper3D mathematics. The slice component would be moved to a new plugin called org.dawnsci.slicing and eventually the DExplore component will be moved there. They will then be gradually merged to a new universal design for slicing data.

Expression Based Fitting Tool

Add a tool which allows the user to enter free expressions (using JEXL) to fit functions in 1D (and 2D?).

Derivative Tool Upgrade and Fourier Transform Tool

Upgrade the derivative tool to use the new filter API or use the trace before plotting event. Using the same mechanism add a Fourier Transform Tool.

Filter By Expression Tool

Using JEXL and the new filter API create a tool which allows a free expression to process plotted data. The user many enter several filter expressions.

Zimba Style Slicing Tool

If the new slicing API, above task, is created this will be a slicing tool which runs the Zimba algorithm. This algorithm aligns stacks of images using a fourier transform. (TODO Check if Zimba is patented.)


Small Features

Plotting tool sub-menus

There should be an extension point to add sub-menus to plotting tools, for instance ‘Profile’ for the profile tools and ‘Function’ for Peak/Line fitting. This makes the large tool set slightly more scalable. We might add a searchable tools view for choosing tools too.

1D Plotting Scalability

1D plotting currently scales up to order hundreds of thousands of data points. These data can often resolve to a point at the same pixel. The plotting system should ignore points at pixels which have already been drawn. This will make very large datasets possible to plot.

Surface Plot Speed Up

The surface plot windowing could be speeded up in the same way we do with the profile tools (in fact maybe it even could be a kind of profile too…). This is by downsampling the updates during the drag and only doing the full update when they stop dragging.

Custom Code - User Defined Extensions to DAWN

As a developer you can easily add a file loader but users working inside DAWN cannot add code which will load arbitrary files.

See https://jira.diamond.ac.uk/browse/SCI-1421

Plot function should:

  1. Return a value for y given x and y original.

  2. Return a value for y[] given x[] and y[] original.

  3. Return a value for intensity given intensity, x and y original values.

Delivered using Jython or Python or Java interfaces with extension points (not sure what is more user friendly but ImageJ gets away with Java for extensions so might be ok and would be much easier to package/reuse and faster). Matt G can help if a Java interface with extension points is needed.

This would be similar in functionality to IGOR Pro:

http://www.wavemetrics.com/products/igorpro/dataanalysis/curvefitting/userdefined.htm

We already allow custom actors but the ability to create an actor on the fly inside Dawn and deploy it into the live version is required.