TrackMate - Extract track stack and incorrect time values

I’ve just started using TrackMate, and I’ve been finding it incredibly useful, thank you very much! I’m having an issue with TrackMate that seems to be causing an error when I use the Extract track stack function. I have been using the semi-automatic tracking to selectively track mitotic nuclei, and it works very well. The tracking only picks up and tracks one of the daughter nuclei, so following cytokinesis, I manually create a new spot for the untracked daughter cell, and use semi-automatic tracking to continue tracking this cell. I then manually create a link between this daughter and the parent cell to create a branched track.

However, it seems that the second spot I create (the second daughter cell) has a time (T) value of 0, when it should be something higher. When I then export the track stack using the Extract track stack action, I get one of two errors depending on which two cells I select to define the stack. If I select the parent cell at the first time point and the daughter at the last time point, I will get a track stack that is truncated by 1, and is missing the first time point of the daughter cell, when I manually created a spot (which had a T of 0).

If I select the parent at the point just before the track branches, and the daughter at the last time point, the stack is not truncated, but the order of the images is incorrect. The spot that I manually created for the daughter cell (which should be second in the sequence) ends up being first in the sequence.

EDIT and TL:DR:
If I manually edit the spot T value from 0 to what it should be (e.g. 23 to match the frame number) in the TrackMate .xml file the problem is resolved. So it seems the issue is with new spots being assigned the wrong value for T if they are not created in the first frame.

I also sometimes get this error, but I’m not sure if it is related:

Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:711)
at java.util.LinkedHashMap$LinkedValueIterator.next(LinkedHashMap.java:739)
at com.mxgraph.swing.handler.mxSelectionCellsHandler.paintHandles(mxSelectionCellsHandler.java:457)
at com.mxgraph.swing.handler.mxSelectionCellsHandler$4.invoke(mxSelectionCellsHandler.java:146)
at com.mxgraph.util.mxEventSource.fireEvent(mxEventSource.java:179)
at com.mxgraph.util.mxEventSource.fireEvent(mxEventSource.java:151)
at com.mxgraph.swing.mxGraphComponent$mxGraphControl.paintComponent(mxGraphComponent.java:4276)
at javax.swing.JComponent.paint(JComponent.java:1056)
at com.mxgraph.swing.mxGraphComponent$mxGraphControl.paint(mxGraphComponent.java:4225)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JViewport.paint(JViewport.java:728)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Thanks very much

2 Likes