-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtodo.txt
80 lines (67 loc) · 8.21 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
implementations:
- cluster merging
- works in a certain fashion. Left to do: make system take colors from the cluster and not the initial load
- FIXED!
- select points
- display number of points in each cluster
- FIXED!
- display mean waveform
- show Xcorr between clusters
- show isi
- show pair of waveforms with minimum ISI
- compare waveforms
- compare real and fake waveforms
- sorting clusters
- L-ratio
- WORKS
- Isolation distance
(- Fix problem with glMapBuffer returning NULL. Could be related to low system memory, but could also be something else. The only thing I changed
was to change cluster indexing from normal GLUint arrays to NSIndexSet. The reason for this is that it will make things like intersection and
set differences easier.)
- FIXED (Cause: I wasn't unmapping the buffer if new_size==0)
- Change Array Controller such that only valid clusters are drawn. This amounts to given each cluster an additional boolean property indicating
whether the cluster is valid or not. To get the Array Controller to only display valid clusters, we can create a predicate which checks the valid
property of each cluster, filters the clusters accordingly.
- Something a bit strange.. apparently, I can't merge clusters that are already merged..
- FIXED! (Not too sure what the problem was)
- In the process of rewriting the feature loading to be more general. Make sure a single group is selected, by explicitly selecting the file, rather than just the directory.
-FIXED!
- Look into Using NSUndoManager to manage the cluster manipulation. This can be used to e.g. undo a cluster merge.
- Implement a method for deleting a cluster; if a base cluster, i.e. a cluster that was part of the original klustakwik output, the points formerly assigned to this cluster
-FIXED!
should be put into cluster 0. If deleting a cluster that was the result of some manipulation in FeatureViewer, return the points in those clusters to the original KlustaKwik cluster, alternative, the managed clusters that resulting in the deleted cluster. This is where the undoManager comes in. Since merging a cluster reassigns the colors of the corresponding feature points, deleting that cluster should restore the original color assignment. In other words, if clusters 18 and 19 are merged in the cluster "18+19", the union of points in those two clusters receive the same coloring as the points in cluster 18. If we now undo the merging action, the points formerly belonging to cluster 19 should be re-colored using the color of cluster 19. This can most easily be achieved by a recolorPoints method in FeatureView that takes as an argument the cluster containing the points to be recolored. In other words, this would be similar to showCluster, except that in addition to resetting the indices, we are also restting the colors
- Add text rendering to the system. For this, look into the GLString object and NSAttributedString object. This is less critical for the feature space, but if I want to add things like ISI-histogram and waveforms view, I would need to at the very least add some labels to the axis.
- Started working on a simple waveforms view, whereby if requested, the waveforms fo the currently selected custer(s) can be viewed. I created an NSPanel class for this, containing a custom NSOpenGLView. The idea, then, is that a number of such panels can be opened, depending on the currenly activated clusters. Typically, the waveforms of two clusters will need to be compared. Is this the best way of doing it, or should I instead put both waveforms in one panel?
- This is more complicated than anticipated. Because multiple views will now have to support OpenGL drawing, I cannot use NSopenGlView. Rather, I need to create my own custom view. This is quite a project, so maybe I'll get someone else to do this.
- I should refactor the code, so that only drawing related functions are in the view classes, while event handlers and such are in a window controller class
- Sometimes the scaling of the axis is very different; perhaps we should use normalized coordinates
- FIXED!
- Implement a way to filter the clusters, e.g. only show clusters with more than 100 points, etc. This could be achieved by opening up a predicate panel ala what Finder search uses, so that we can specify multiple filter criteria
- STARTED!
- Well underway
- Implement a way to read the time stamps as well. This would be useful if we want to look at ISI violations.
- FIXED!
- Add a way to compute Chi2 CDF. This means importing the GSL library. I need this to compute the L-ratio of the clusters
-FIXED, although there appears to be clusters with non-positive definite matrices
- After I started using NSOperationQueue and blocks for doing the L-ratio calculation, the program crashes all thet ime
- FIXED (I think...)
- Store the clusters in HDF5 format. I think saving the clusters in terms of boolean indices will be useful, as set operations between clusters can then be performed very efficiently.
- Implement text for axes. This is most relevant for the waveformsview, where we would like to know the amplitudes. I think the best way of doing this is to draw text into a bitmap context, and then render this bitmap as a glTexture. Use graphicsContextWithBitmapImageRep for this, then the drawAtPoint method of the NSString class
- Implement offline drawing. Since speed is less of a concern here, I'm thinking I could do this by re-drawing the current view using quartz, on a separate thread.
- One remaining issue now is that when the waveformsview is resized, calling the [Cluster image] method returns the image of the previously drawn cluster instead of the current cluster. FIXED (sort of; more like cirumvented by drawing everything once as the clusters are loaded)
- Implement drag and drop; this is especially useful for waveforms, but could also be handy for feature space views. If a drag in initiated, create a pdf of the view which is then placed on the clipboard. The receiving application should then be able to open the pdf in its own view
- Rotation in feature space should always happen around the centroid of the cluster currently displayed, or teh combined centroid of many clusters. Right now, rotation always happens around an axis centered in feature space, which looks weird for peripheral clusters
- There some weirdness going on with the rotation. I think that if I allow events to be sent to the display without them needing to have gained focus, I sometimes end up rotation the waveformsview instead of the feature view - FIXED
- Implement zoom for waveforms view. This is especially useful for zooming in on channels when displaying polytrode data - Almost FIXED
- Allow several clusters to be super-imposed in the waveformsview
- There is currently no easy way of comparing clusters
- For polytrode data, it would be interesting to be able to automatically load features on channels for which the cluster is active. Right now, I have no way of telling which are a cluster's active channels, though
- Add a progress meter to the loading of Features
- Notification sent from WaveformsView is not received by FeatureViewerController - FIXED
- Ability to select waveforms larger than a certain threshold. This could take the form of a horizontal line that could be moved up and down; waveforms that exceed the threshold are highlighted.
- It would be really cool to have an interactive "cell classifier" running, such that, as waveforms are added or removed from a cluster, a tenative classification is attempted. This could be based on burst frequency, spike width, ISI shape, etc, etc. There should also be a away to calibrate the algorithm if the cell type of a cluster is know.
- Cluster colors are not reflected in the feature view if features are loaded after the clusters
- Allow use of model to cluster data. This would be useful for sorting of multiple sessions, where the session with the most number of spikes can be used to create the model, and subsequent sessions can be automatically sorted by apply the model, i.e. by assigning each waveoform to the cluster to which is has the smallest mahalanobis distance
- Allow running KlustaKwik directly on a selected feature set
- Read descriptor files to get groups from polytrodes
- Allow pruning of waveforms larger than/smaller than a certain (confidence) interval around the mean