Wiki

Clone wiki

ieeg / Montaging

Montages - where we are and where we're going

The object model for montages:

Montage, Layer, MontagedChannel, ReferenceChannel, and MontagedChAnnotation. These classes all have - or will have - entities and dtos in the standard locations. The entities are named XEntity, the dto's XDto, and the web service client-side code named X.

A Dataset contains Montages.

Montages contain MontagedChannels and Layers

MontagedChannels hold a reference to TimeSeriesEntity and contain ReferenceChannels.

A Montage's optimistic version changes if any piece of the montage proper changes - layers are not included. We have also excluded the Montage label from optimistic locking. This is all but implemented: the only remaining piece is that DataSnapshotServer must take extra care to update the version of the Montage if any MontagedChannel's version changes. I was planning on leveraging Session.isDirty for this. The idea here is to block concurrent updates to montages because they are like documents to be taken as a whole. It is intended that the Montage version be used as the ETag in the web services, and that the viewer's optimistic locking follow the same pattern.

MontagedChAnnotations point at one or more MontagedChannels.

MontageChAnnotations point at exactly one Layer.

As Is

So far we've implemented web services which live in IDatasetResource, IMontageResource, and ILayerResource. The etags should reflect that database's optimistic locking. The database work is there in back of that.

To Do

  1. Performance of the actual montaging of channels needs to be evaluated. If it turns out it's too slow, something else will need to be done. Maybe premontaging akin to the old predownsampled files? Maybe predownsampling? Maybe not including them in the web viewer and only supporting them in the matlab viewer? Maybe implementing some sort persistent caching of data on the serverside - for example a dedicated mongodb server?
  2. A Reference montage needs to be associated with every dataset.
  3. All annotations need to be ported to the new annotations.
  4. A default montage needs to associated with every dataset.
  5. All time series data access will need to be in terms of Montage id's instead of dataset id's.
  6. Viewer needs to be updated to support defining, modifiying, and retrieving montage definitions.
  7. Viewer needs to be updated to support viewing the montages.
  8. MATLAB code needs to be written to interact with the montages.
  9. There is a class called Montager in a branch for client-side montage calculation for the MATLAB toolbox. It needs to be finished and merged in.
  10. Before we return the data to the client, the voltage conversion factors will have to be multiplied by 1000 for all channels since ReferenceChannel's coefficient can go out to .00X.
  11. Need to work out how dataset permissions need to interact with montages - who will be able to create montages on datasets, read them, modify them.

Updated