Skip to content

Commit 452d128

Browse files
author
Stefan Hahmann
committed
Add cancellation support to LinkPrediction, RegionPropsComputation, and TrackastraLinker.
1 parent ee936c9 commit 452d128

3 files changed

Lines changed: 37 additions & 9 deletions

File tree

src/main/java/org/mastodon/mamut/linking/trackastra/TrackastraLinker.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ public void mutate1( final ReadOnlyGraph< V, E > graph, final SpatioTemporalInde
4949
try
5050
{
5151
List< SingleTimepointRegionProps > regionProps = computeRegionProps( index );
52-
runLinkPrediction( index, regionProps );
52+
if ( !isCanceled() )
53+
runLinkPrediction( index, regionProps );
5354
ok = true;
5455
}
5556
catch ( TrackastraLinkingException e )
@@ -86,7 +87,7 @@ private List< SingleTimepointRegionProps > computeRegionProps( final SpatioTempo
8687
throw new IllegalArgumentException(
8788
String.format( "Window size (%d) exceeds time range (%d). Adjust window size or time range.", windowSize, timeRange ) );
8889

89-
try (RegionPropsComputation computation = new RegionPropsComputation( logger, model ))
90+
try (RegionPropsComputation computation = new RegionPropsComputation( logger, model, this ))
9091
{
9192
return computation.computeRegionPropsForSource( source, level, Cast.unchecked( index ), minTimepoint, maxTimepoint );
9293
}
@@ -102,7 +103,7 @@ private void runLinkPrediction( final SpatioTemporalIndex< V > index, final List
102103
log.info( "Performing Trackastra link prediction" );
103104
try (RegionProps props = new RegionProps( regionProps );
104105
LinkPrediction prediction =
105-
new LinkPrediction( settings, Cast.unchecked( index ), Cast.unchecked( edgeCreator ), props, logger ))
106+
new LinkPrediction( settings, Cast.unchecked( index ), Cast.unchecked( edgeCreator ), props, logger, this ))
106107
{
107108
prediction.predictAndCreateLinks();
108109
}

src/main/java/org/mastodon/mamut/linking/trackastra/appose/computation/LinkPrediction.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.mastodon.mamut.util.ResourceUtils;
3434
import org.mastodon.spatial.SpatioTemporalIndex;
3535
import org.mastodon.tracking.linking.EdgeCreator;
36+
import org.scijava.Cancelable;
3637
import org.slf4j.Logger;
3738
import org.slf4j.LoggerFactory;
3839

@@ -49,8 +50,11 @@ public class LinkPrediction extends ApposeProcess
4950

5051
private final RegionProps regionProps;
5152

53+
private final Cancelable cancelable;
54+
5255
public LinkPrediction( final Map< String, Object > settings, final SpatioTemporalIndex< Spot > index,
53-
final EdgeCreator< Spot > edgeCreator, final RegionProps regionProps, final org.scijava.log.Logger uiLogger
56+
final EdgeCreator< Spot > edgeCreator, final RegionProps regionProps, final org.scijava.log.Logger uiLogger,
57+
final Cancelable cancelable
5458
) throws IOException
5559
{
5660
super();
@@ -59,6 +63,7 @@ public LinkPrediction( final Map< String, Object > settings, final SpatioTempora
5963
this.edgeCreator = edgeCreator;
6064
this.regionProps = regionProps;
6165
this.uiLogger = uiLogger;
66+
this.cancelable = cancelable;
6267
}
6368

6469
public void predictAndCreateLinks() throws IOException
@@ -80,6 +85,11 @@ public void predictAndCreateLinks() throws IOException
8085
inputs.put( BORDER_DIST, NDArrays.asNDArray( regionProps.borderDists ) );
8186

8287
Service.Task result = runScript();
88+
if ( cancelable.isCanceled() )
89+
{
90+
uiLogger.info( "Link prediction canceled by user.\n" );
91+
return;
92+
}
8393
writeEdges( result );
8494
}
8595
finally
@@ -107,6 +117,11 @@ private void writeEdges( final Service.Task task )
107117

108118
for ( int row = 0; row < rows; row++ )
109119
{
120+
if ( cancelable.isCanceled() )
121+
{
122+
uiLogger.info( "Link creation canceled by user.\n" );
123+
return;
124+
}
110125
int startFrame = getInt( randomAccess, 0, row );
111126
int startId = getInt( randomAccess, 1, row ) - 1; // Trackastra uses 1-based labels
112127
int endFrame = getInt( randomAccess, 2, row );

src/main/java/org/mastodon/mamut/linking/trackastra/appose/computation/RegionPropsComputation.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import java.text.NumberFormat;
1717
import java.util.ArrayList;
1818
import java.util.List;
19-
import java.util.function.Consumer;
2019

2120
import net.imglib2.RandomAccessibleInterval;
2221
import net.imglib2.appose.NDArrays;
@@ -38,6 +37,7 @@
3837
import org.mastodon.mamut.util.ImgUtils;
3938
import org.mastodon.mamut.util.ResourceUtils;
4039
import org.mastodon.spatial.SpatioTemporalIndex;
40+
import org.scijava.Cancelable;
4141
import org.slf4j.Logger;
4242
import org.slf4j.LoggerFactory;
4343

@@ -51,11 +51,15 @@ public class RegionPropsComputation extends ApposeProcess
5151

5252
private final String model;
5353

54-
public RegionPropsComputation( final org.scijava.log.Logger uiLogger, final String model ) throws IOException
54+
private final Cancelable cancelable;
55+
56+
public RegionPropsComputation( final org.scijava.log.Logger uiLogger, final String model, final Cancelable cancelable )
57+
throws IOException
5558
{
5659
super();
5760
this.uiLogger = uiLogger;
5861
this.model = model;
62+
this.cancelable = cancelable;
5963
}
6064

6165
public List< SingleTimepointRegionProps > computeRegionPropsForSource( final Source< ? > source, final int level,
@@ -70,15 +74,23 @@ public List< SingleTimepointRegionProps > computeRegionPropsForSource( final Sou
7074
List< SingleTimepointRegionProps > singleTimepointRegionProps = new ArrayList<>();
7175
for ( int timepoint = minTimepoint; timepoint <= maxTimepoint; timepoint++, done++ )
7276
{
77+
if ( cancelable.isCanceled() )
78+
{
79+
log.info( "Region props computation canceled at timepoint: {}", timepoint );
80+
uiLogger.info( "Region props computation canceled at timepoint: " + timepoint + "\n" );
81+
break;
82+
}
7383
if ( spatioTemporalIndex.getSpatialIndex( timepoint ).isEmpty() )
7484
{
7585
log.info( "No spots. Adding empty region props for timepoint: {}", timepoint );
7686
uiLogger.info( "No spots. Adding empty region props for timepoint: " + timepoint + "\n" );
7787
singleTimepointRegionProps.add( null );
78-
continue;
7988
}
80-
SingleTimepointRegionProps regionProps = computeSingleTimepointProps( source, timepoint, level, spatioTemporalIndex );
81-
singleTimepointRegionProps.add( regionProps );
89+
else
90+
{
91+
SingleTimepointRegionProps regionProps = computeSingleTimepointProps( source, timepoint, level, spatioTemporalIndex );
92+
singleTimepointRegionProps.add( regionProps );
93+
}
8294
formatProgress( done + 1, todo );
8395
}
8496
return singleTimepointRegionProps;

0 commit comments

Comments
 (0)