endrov.typeLineageAutoNucJH
Class AutolineageJHdic1.Algo

java.lang.Object
  extended by endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo
All Implemented Interfaces:
LineagingAlgorithm
Enclosing class:
AutolineageJHdic1

public static class AutolineageJHdic1.Algo
extends java.lang.Object
implements LineagingAlgorithm

Instance of the algorithm


Nested Class Summary
 class AutolineageJHdic1.Algo.BeforeAfterPair
          Pairing of cell from last frame to candidates
 
Nested classes/interfaces inherited from interface endrov.windowAutoLineaging.LineagingAlgorithm
LineagingAlgorithm.LineageAlgorithmDef, LineagingAlgorithm.LineageSession
 
Constructor Summary
AutolineageJHdic1.Algo()
           
 
Method Summary
 java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> chooseBeforeAfterGlobalMatch(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore, java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist, EvDecimal frameBefore, Lineage lin, java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList)
          Fit together cell in last frame with cell in this frame.
 java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> chooseBeforeAfterLocalMatch(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore, java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist, EvDecimal frameBefore, Lineage lin, java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList)
          Fit together cell in last frame with cell in this frame.
 java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> chooseBeforeAfterNoDiv(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore, java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist, EvDecimal frameBefore, Lineage lin, java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList)
          Fit together cell in last frame with cell in this frame.
 EvStack convertDICtoHisFluo(ProgressHandle ph, EvStack stackDIC)
          To use the his-algorithm, emulate his image using transformed DIC
static void createLinesFromCandDiv(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> pairs, EvContainer parentContainer, EvDecimal frame)
          Debugging: draw lines for candidate divisions
 void createNucFromBeforeAfter(java.util.Collection<AutolineageJHdic1.Algo.BeforeAfterPair> joiningNucBefore, Lineage lin, EvDecimal currentFrame)
          Create nuclei and add new coordinates for the next frame
 void dataChangedEvent()
           
 void estimateParameters(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
          Estimate parameters to be used for the next frame
 java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> filterCandDivHeuristic(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> candlist)
          Filter candidate division pairs using heuristics
 java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> filterCandDivWeightedOverlap(java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> pairs)
          Filter candidate divisions such that a nucleus is assigned to exactly 0 or 1 other candidate nucleus.
 java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> filterCandidatesStrongestIntensityOverlap(java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
          Filter candidate list by removing candidates overlapped by another candidate that has a stronger intensity.
 java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> filterCandidatesTake(java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist, int num)
          Take #num first entries in list.
 java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> findBestMatchingBeforeAfter(java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> baPairs, java.util.Set<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> usedBefore, java.util.Set<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> usedAfter)
          Given a list of (candidate before) - (candidates after), find the optimal match.
 java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> findCandidatesDoG(ProgressHandle ph, EvStack stackHis, Shell shell, double sigmaHis1)
          Find candidate nuclei.
 java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> generateAllBeforeAfter(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore, java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist, EvDecimal frame, Lineage lin)
          Generate complete list of candidate before-after matchings.
 java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> generateCandDivAll(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
          Generate every possible candidate division pair (except not the symmetric pair)
 java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> generateCandDivVoronoi(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
          Generate candidate division pairs as the Delaunay edges.
 javax.swing.JComponent getComponent()
          Get custom GUI component
 void reassignID(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
          Redo all ID assignments
 void run(ProgressHandle ph, LineagingAlgorithm.LineageSession session)
          Lineage one frame
 void setStopping(boolean b)
          Set if to stop the algorithm prematurely
static void sortBeforeAfter(java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> baList)
          Sort before-after list, best to worst
 void sortCandDiv(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divlist)
          Sort list of candidates best to worst
 Tuple<java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair>,java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate>> takeBestDivCandidates(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist, java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList, int numTake)
          Take the numTake best candidate dividing nuclei.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AutolineageJHdic1.Algo

public AutolineageJHdic1.Algo()
Method Detail

setStopping

public void setStopping(boolean b)
Set if to stop the algorithm prematurely

Specified by:
setStopping in interface LineagingAlgorithm

getComponent

public javax.swing.JComponent getComponent()
Get custom GUI component

Specified by:
getComponent in interface LineagingAlgorithm

sortCandDiv

public void sortCandDiv(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divlist)
Sort list of candidates best to worst


generateCandDivVoronoi

public java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> generateCandDivVoronoi(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
Generate candidate division pairs as the Delaunay edges. Turns out to be hypersensitive to false positives.


generateCandDivAll

public java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> generateCandDivAll(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
Generate every possible candidate division pair (except not the symmetric pair)


filterCandDivHeuristic

public java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> filterCandDivHeuristic(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> candlist)
Filter candidate division pairs using heuristics


filterCandDivWeightedOverlap

public java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> filterCandDivWeightedOverlap(java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> pairs)
Filter candidate divisions such that a nucleus is assigned to exactly 0 or 1 other candidate nucleus. It is done by finding (approximately) candidate pairs such that the sum of error is minimized. Also sort by error in fit.


createLinesFromCandDiv

public static void createLinesFromCandDiv(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> pairs,
                                          EvContainer parentContainer,
                                          EvDecimal frame)
Debugging: draw lines for candidate divisions


convertDICtoHisFluo

public EvStack convertDICtoHisFluo(ProgressHandle ph,
                                   EvStack stackDIC)
To use the his-algorithm, emulate his image using transformed DIC


findCandidatesDoG

public java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> findCandidatesDoG(ProgressHandle ph,
                                                                                                      EvStack stackHis,
                                                                                                      Shell shell,
                                                                                                      double sigmaHis1)
Find candidate nuclei. These are the only candidates considered, and the final selection is a filtered list. Candidates are found by looking for features at several frequencies using difference of gaussian (Rickert wavelet approximation). Candidates has to be within the shell.


filterCandidatesStrongestIntensityOverlap

public java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> filterCandidatesStrongestIntensityOverlap(java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
Filter candidate list by removing candidates overlapped by another candidate that has a stronger intensity. This is an extremely efficient filter and doesn't seem to make any mistakes


filterCandidatesTake

public java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> filterCandidatesTake(java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist,
                                                                                                               int num)
Take #num first entries in list. Assumes list is sorted best to worst


sortBeforeAfter

public static void sortBeforeAfter(java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> baList)
Sort before-after list, best to worst


generateAllBeforeAfter

public java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> generateAllBeforeAfter(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore,
                                                                                           java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist,
                                                                                           EvDecimal frame,
                                                                                           Lineage lin)
Generate complete list of candidate before-after matchings.


findBestMatchingBeforeAfter

public java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> findBestMatchingBeforeAfter(java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> baPairs,
                                                                                                java.util.Set<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> usedBefore,
                                                                                                java.util.Set<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> usedAfter)
Given a list of (candidate before) - (candidates after), find the optimal match. Assumes list of pairs is sorted best to worst Return which candidates were used


takeBestDivCandidates

public Tuple<java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair>,java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate>> takeBestDivCandidates(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist,
                                                                                                                                                                                                            java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList,
                                                                                                                                                                                                            int numTake)
Take the numTake best candidate dividing nuclei. Assumes divlist sorted best to worst

Returns:
Unused candidates and the best candidate divisions

chooseBeforeAfterNoDiv

public java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> chooseBeforeAfterNoDiv(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore,
                                                                                           java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist,
                                                                                           EvDecimal frameBefore,
                                                                                           Lineage lin,
                                                                                           java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList)
Fit together cell in last frame with cell in this frame. Assume no divisions


chooseBeforeAfterGlobalMatch

public java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> chooseBeforeAfterGlobalMatch(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore,
                                                                                                 java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist,
                                                                                                 EvDecimal frameBefore,
                                                                                                 Lineage lin,
                                                                                                 java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList)
Fit together cell in last frame with cell in this frame. Relies mainly on division candidate list to find matchings. Alternative not used strategy: virtual candidates, join 1-1. there will be tons of virtual cand, need to filter them aggressively. no guarantee that all nuclei are used; not very nice. if only 1 cell divides then hard to control aggression


chooseBeforeAfterLocalMatch

public java.util.LinkedList<AutolineageJHdic1.Algo.BeforeAfterPair> chooseBeforeAfterLocalMatch(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.NucBefore> joiningNucBefore,
                                                                                                java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist,
                                                                                                EvDecimal frameBefore,
                                                                                                Lineage lin,
                                                                                                java.util.LinkedList<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.CandDivPair> divList)
Fit together cell in last frame with cell in this frame. Relies mainly on distance before-after to find divisions.


createNucFromBeforeAfter

public void createNucFromBeforeAfter(java.util.Collection<AutolineageJHdic1.Algo.BeforeAfterPair> joiningNucBefore,
                                     Lineage lin,
                                     EvDecimal currentFrame)
Create nuclei and add new coordinates for the next frame


run

public void run(ProgressHandle ph,
                LineagingAlgorithm.LineageSession session)
Lineage one frame

Specified by:
run in interface LineagingAlgorithm

estimateParameters

public void estimateParameters(java.util.List<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
Estimate parameters to be used for the next frame


reassignID

public void reassignID(java.util.Collection<endrov.typeLineageAutoNucJH.AutolineageJHdic1.Algo.Candidate> candlist)
Redo all ID assignments


dataChangedEvent

public void dataChangedEvent()
Specified by:
dataChangedEvent in interface LineagingAlgorithm