Skip to content

Commit d7d973c

Browse files
committed
Update to v1.0.0 of TrackMate-Cellpose
1 parent 409bca6 commit d7d973c

5 files changed

Lines changed: 113 additions & 90 deletions

File tree

src/main/java/fiji/plugin/trackmate/helper/ctc/TrackMateCTCUtils.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929

3030
import fiji.plugin.trackmate.Settings;
3131
import fiji.plugin.trackmate.TrackMatePlugIn;
32-
import fiji.plugin.trackmate.helper.model.detector.CellposeOpt;
33-
import fiji.plugin.trackmate.helper.model.detector.OmniposeOpt;
3432
import ij.ImagePlus;
3533

3634
public class TrackMateCTCUtils
@@ -84,10 +82,6 @@ else if ( isEmptyMap( str ) )
8482
obj = Collections.emptyMap();
8583
else if ( isMap( str ) )
8684
obj = toMap( str );
87-
else if ( key.equals( "CELLPOSE_MODEL" ) || key.equals( "ADVANCED_CELLPOSE_MODEL" ) )
88-
obj = CellposeOpt.castPretrainedModel( str );
89-
else if ( key.equals( "OMNIPOSE_MODEL" ) || key.equals( "ADVANCED_OMNIPOSE_MODEL" ) )
90-
obj = OmniposeOpt.castPretrainedModel( str );
9185
else
9286
obj = str;
9387
out.put( key, obj );

src/main/java/fiji/plugin/trackmate/helper/model/detector/AdvancedCellposeOpt.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,22 @@
88
* it under the terms of the GNU General Public License as
99
* published by the Free Software Foundation, either version 3 of the
1010
* License, or (at your option) any later version.
11-
*
11+
*
1212
* This program is distributed in the hope that it will be useful,
1313
* but WITHOUT ANY WARRANTY; without even the implied warranty of
1414
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1515
* GNU General Public License for more details.
16-
*
16+
*
1717
* You should have received a copy of the GNU General Public
1818
* License along with this program. If not, see
1919
* <http://www.gnu.org/licenses/gpl-3.0.html>.
2020
* #L%
2121
*/
2222
package fiji.plugin.trackmate.helper.model.detector;
2323

24+
import static fiji.plugin.trackmate.cellpose.advanced.AdvancedCellposeCLI.KEY_CELL_PROB_THRESHOLD;
25+
import static fiji.plugin.trackmate.cellpose.advanced.AdvancedCellposeCLI.KEY_FLOW_THRESHOLD;
26+
2427
import java.util.Map;
2528

2629
import fiji.plugin.trackmate.Dimension;
@@ -53,8 +56,8 @@ private AdvancedCellposeOpt()
5356
.min( -6. )
5457
.max( 6. );
5558

56-
models.put( AdvancedCellposeDetectorFactory.KEY_FLOW_THRESHOLD, flowThreshold );
57-
models.put( AdvancedCellposeDetectorFactory.KEY_CELL_PROB_THRESHOLD, cellProbabilityThreshold );
59+
models.put( KEY_FLOW_THRESHOLD, flowThreshold );
60+
models.put( KEY_CELL_PROB_THRESHOLD, cellProbabilityThreshold );
5861
return models;
5962
}
6063

src/main/java/fiji/plugin/trackmate/helper/model/detector/AdvancedOmniposeOpt.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,25 @@
88
* it under the terms of the GNU General Public License as
99
* published by the Free Software Foundation, either version 3 of the
1010
* License, or (at your option) any later version.
11-
*
11+
*
1212
* This program is distributed in the hope that it will be useful,
1313
* but WITHOUT ANY WARRANTY; without even the implied warranty of
1414
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1515
* GNU General Public License for more details.
16-
*
16+
*
1717
* You should have received a copy of the GNU General Public
1818
* License along with this program. If not, see
1919
* <http://www.gnu.org/licenses/gpl-3.0.html>.
2020
* #L%
2121
*/
2222
package fiji.plugin.trackmate.helper.model.detector;
2323

24+
import static fiji.plugin.trackmate.cellpose.advanced.AdvancedCellposeCLI.KEY_CELL_PROB_THRESHOLD;
25+
import static fiji.plugin.trackmate.cellpose.advanced.AdvancedCellposeCLI.KEY_FLOW_THRESHOLD;
26+
2427
import java.util.Map;
2528

2629
import fiji.plugin.trackmate.Dimension;
27-
import fiji.plugin.trackmate.cellpose.advanced.AdvancedCellposeDetectorFactory;
2830
import fiji.plugin.trackmate.detection.SpotDetectorFactoryBase;
2931
import fiji.plugin.trackmate.helper.model.parameter.AbstractParamSweepModel;
3032
import fiji.plugin.trackmate.helper.model.parameter.DoubleParamSweepModel;
@@ -54,8 +56,8 @@ private AdvancedOmniposeOpt()
5456
.min( -6. )
5557
.max( 6. );
5658

57-
models.put( AdvancedCellposeDetectorFactory.KEY_FLOW_THRESHOLD, flowThreshold );
58-
models.put( AdvancedCellposeDetectorFactory.KEY_CELL_PROB_THRESHOLD, maskThreshold );
59+
models.put( KEY_FLOW_THRESHOLD, flowThreshold );
60+
models.put( KEY_CELL_PROB_THRESHOLD, maskThreshold );
5961
return models;
6062
}
6163

src/main/java/fiji/plugin/trackmate/helper/model/detector/CellposeOpt.java

Lines changed: 58 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,29 @@
2121
*/
2222
package fiji.plugin.trackmate.helper.model.detector;
2323

24+
import static fiji.plugin.trackmate.cellpose.CellposeCLI.KEY_CELLPOSE_MODEL;
25+
import static fiji.plugin.trackmate.cellpose.CellposeCLI.KEY_CELLPOSE_PRETRAINED_OR_CUSTOM;
26+
import static fiji.plugin.trackmate.cellpose.CellposeCLI.KEY_CELL_DIAMETER;
27+
import static fiji.plugin.trackmate.cellpose.CellposeCLI.KEY_OPTIONAL_CHANNEL_2;
28+
import static fiji.plugin.trackmate.cellpose.CellposeCLIBase.KEY_CELLPOSE_CUSTOM_MODEL_FILEPATH;
29+
import static fiji.plugin.trackmate.cellpose.CellposeCLIBase.KEY_USE_GPU;
30+
2431
import java.util.LinkedHashMap;
2532
import java.util.Map;
2633

2734
import fiji.plugin.trackmate.Dimension;
28-
import fiji.plugin.trackmate.cellpose.AbstractCellposeSettings.PretrainedModel;
35+
import fiji.plugin.trackmate.cellpose.CellposeCLIBase;
2936
import fiji.plugin.trackmate.cellpose.CellposeDetectorFactory;
30-
import fiji.plugin.trackmate.cellpose.CellposeSettings.PretrainedModelCellpose;
3137
import fiji.plugin.trackmate.detection.DetectorKeys;
3238
import fiji.plugin.trackmate.detection.SpotDetectorFactoryBase;
3339
import fiji.plugin.trackmate.detection.ThresholdDetectorFactory;
3440
import fiji.plugin.trackmate.helper.model.parameter.AbstractArrayParamSweepModel.ArrayRangeType;
3541
import fiji.plugin.trackmate.helper.model.parameter.AbstractParamSweepModel;
42+
import fiji.plugin.trackmate.helper.model.parameter.ArrayParamSweepModel;
3643
import fiji.plugin.trackmate.helper.model.parameter.BooleanParamSweepModel;
3744
import fiji.plugin.trackmate.helper.model.parameter.BooleanParamSweepModel.BooleanRangeType;
45+
import fiji.plugin.trackmate.helper.model.parameter.CondaEnvParamSweepModel;
3846
import fiji.plugin.trackmate.helper.model.parameter.DoubleParamSweepModel;
39-
import fiji.plugin.trackmate.helper.model.parameter.EnumParamSweepModel;
40-
import fiji.plugin.trackmate.helper.model.parameter.IntParamSweepModel;
4147
import fiji.plugin.trackmate.helper.model.parameter.NumberParamSweepModel.RangeType;
4248
import fiji.plugin.trackmate.helper.model.parameter.StringRangeParamSweepModel;
4349

@@ -49,53 +55,77 @@ private CellposeOpt()
4955

5056
static Map< String, AbstractParamSweepModel< ? > > createModels()
5157
{
52-
final StringRangeParamSweepModel cellposePath = new StringRangeParamSweepModel()
53-
.paramName( "Cellpose Python path" )
54-
.isFile( true )
55-
.add( System.getProperty( "user.home" ) );
56-
final EnumParamSweepModel< PretrainedModelCellpose > cellposeModel = new EnumParamSweepModel<>( PretrainedModelCellpose.class )
57-
.paramName( "Cellpose model" )
58-
.rangeType( ArrayRangeType.FIXED )
59-
.addValue( PretrainedModelCellpose.CYTO )
60-
.addValue( PretrainedModelCellpose.CYTO2 )
61-
.fixedValue( PretrainedModelCellpose.CYTO );
58+
final CondaEnvParamSweepModel condaEnv = new CondaEnvParamSweepModel()
59+
.paramName( "Cellpose conda environment" );
60+
61+
final ArrayParamSweepModel< String > pretrainedOrCustom = new ArrayParamSweepModel<>( new String[] {
62+
KEY_CELLPOSE_MODEL,
63+
KEY_CELLPOSE_CUSTOM_MODEL_FILEPATH } )
64+
.paramName( "Use pretrained or custom model" )
65+
.addValue(KEY_CELLPOSE_MODEL )
66+
.fixedValue( KEY_CELLPOSE_MODEL );
67+
68+
final ArrayParamSweepModel< String > pretrainedModel = new ArrayParamSweepModel<>( new String[] {
69+
"cyto3",
70+
"nucleitorch_0",
71+
"tissuenet_cp3" ,
72+
"livecell_cp3" ,
73+
"yeast_PhC_cp3" ,
74+
"yeast_BF_cp3" ,
75+
"bact_phase_cp3" ,
76+
"bact_fluor_cp3" ,
77+
"deepbacs_cp3" ,
78+
"cyto2torch_0",
79+
"cytotorch_0" } )
80+
.paramName( "Pretrained model" )
81+
.addValue( "cyto3" )
82+
.fixedValue( "cyto3" );
83+
6284
final StringRangeParamSweepModel cellposeCustomModelPath = new StringRangeParamSweepModel()
6385
.paramName( "Cellpose custom model path" )
6486
.isFile( true )
6587
.add( System.getProperty( "user.home" ) );
66-
final IntParamSweepModel channel1 = new IntParamSweepModel()
88+
89+
final String[] chans1 = new String[] { "0", "1", "2", "3", "4" };
90+
final ArrayParamSweepModel< String > channel1 = new ArrayParamSweepModel<>( chans1 )
91+
.rangeType( ArrayRangeType.FIXED )
6792
.paramName( "Channel to segment" )
68-
.rangeType( RangeType.FIXED )
69-
.min( 0 )
70-
.max( 4 );
71-
final IntParamSweepModel channel2 = new IntParamSweepModel()
93+
.fixedValue( "0" )
94+
.addValue( "0" );
95+
96+
final String[] chans2 = new String[] { "0", "1", "2", "3", "4" };
97+
final ArrayParamSweepModel< String > channel2 = new ArrayParamSweepModel<>( chans2 )
98+
.rangeType( ArrayRangeType.FIXED )
7299
.paramName( "Optional second channel" )
73-
.rangeType( RangeType.FIXED )
74-
.min( 0 )
75-
.max( 4 );
100+
.fixedValue( "0" )
101+
.addValue( "0" );
102+
76103
final DoubleParamSweepModel cellDiameter = new DoubleParamSweepModel()
77104
.paramName( "Cell diameter" )
78105
.dimension( Dimension.LENGTH )
79106
.rangeType( RangeType.FIXED )
80107
.min( 0. )
81108
.max( 50. );
109+
82110
final BooleanParamSweepModel useGPU = new BooleanParamSweepModel()
83111
.paramName( "Use GPU" )
84112
.rangeType( BooleanRangeType.FIXED )
85113
.fixedValue( true );
114+
86115
final BooleanParamSweepModel simplifyContours = new BooleanParamSweepModel()
87116
.paramName( "Simplify contours" )
88117
.rangeType( BooleanRangeType.FIXED )
89118
.fixedValue( true );
90119

91120
final Map< String, AbstractParamSweepModel< ? > > models = new LinkedHashMap<>();
92-
models.put( CellposeDetectorFactory.KEY_CELLPOSE_PYTHON_FILEPATH, cellposePath );
93-
models.put( CellposeDetectorFactory.KEY_CELLPOSE_MODEL, cellposeModel );
94-
models.put( CellposeDetectorFactory.KEY_CELLPOSE_CUSTOM_MODEL_FILEPATH, cellposeCustomModelPath );
95-
models.put( CellposeDetectorFactory.KEY_CELL_DIAMETER, cellDiameter );
121+
models.put( CellposeCLIBase.KEY_CONDA_ENV, condaEnv );
122+
models.put( KEY_CELLPOSE_PRETRAINED_OR_CUSTOM, pretrainedOrCustom );
123+
models.put( KEY_CELLPOSE_MODEL, pretrainedModel );
124+
models.put( KEY_CELLPOSE_CUSTOM_MODEL_FILEPATH, cellposeCustomModelPath );
125+
models.put( KEY_CELL_DIAMETER, cellDiameter );
96126
models.put( DetectorKeys.KEY_TARGET_CHANNEL, channel1 );
97-
models.put( CellposeDetectorFactory.KEY_OPTIONAL_CHANNEL_2, channel2 );
98-
models.put( CellposeDetectorFactory.KEY_USE_GPU, useGPU );
127+
models.put( KEY_OPTIONAL_CHANNEL_2, channel2 );
128+
models.put( KEY_USE_GPU, useGPU );
99129
models.put( ThresholdDetectorFactory.KEY_SIMPLIFY_CONTOURS, simplifyContours );
100130
return models;
101131
}
@@ -104,13 +134,4 @@ private CellposeOpt()
104134
{
105135
return new CellposeDetectorFactory<>();
106136
}
107-
108-
public static Object castPretrainedModel( final String str )
109-
{
110-
for ( final PretrainedModel e : PretrainedModelCellpose.values() )
111-
if ( e.toString().equals( str ) )
112-
return e;
113-
114-
return null;
115-
}
116137
}

src/main/java/fiji/plugin/trackmate/helper/model/detector/OmniposeOpt.java

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,30 @@
2121
*/
2222
package fiji.plugin.trackmate.helper.model.detector;
2323

24+
import static fiji.plugin.trackmate.cellpose.CellposeCLI.KEY_CELLPOSE_PRETRAINED_OR_CUSTOM;
25+
import static fiji.plugin.trackmate.cellpose.CellposeCLI.KEY_CELL_DIAMETER;
26+
import static fiji.plugin.trackmate.cellpose.CellposeCLIBase.KEY_CELLPOSE_CUSTOM_MODEL_FILEPATH;
27+
import static fiji.plugin.trackmate.cellpose.CellposeCLIBase.KEY_USE_GPU;
28+
import static fiji.plugin.trackmate.omnipose.OmniposeCLI.KEY_OMNIPOSE_MODEL;
29+
2430
import java.util.LinkedHashMap;
2531
import java.util.Map;
2632

2733
import fiji.plugin.trackmate.Dimension;
28-
import fiji.plugin.trackmate.cellpose.AbstractCellposeSettings.PretrainedModel;
34+
import fiji.plugin.trackmate.cellpose.CellposeCLIBase;
2935
import fiji.plugin.trackmate.detection.DetectorKeys;
3036
import fiji.plugin.trackmate.detection.SpotDetectorFactoryBase;
3137
import fiji.plugin.trackmate.detection.ThresholdDetectorFactory;
3238
import fiji.plugin.trackmate.helper.model.parameter.AbstractArrayParamSweepModel.ArrayRangeType;
3339
import fiji.plugin.trackmate.helper.model.parameter.AbstractParamSweepModel;
40+
import fiji.plugin.trackmate.helper.model.parameter.ArrayParamSweepModel;
3441
import fiji.plugin.trackmate.helper.model.parameter.BooleanParamSweepModel;
3542
import fiji.plugin.trackmate.helper.model.parameter.BooleanParamSweepModel.BooleanRangeType;
43+
import fiji.plugin.trackmate.helper.model.parameter.CondaEnvParamSweepModel;
3644
import fiji.plugin.trackmate.helper.model.parameter.DoubleParamSweepModel;
37-
import fiji.plugin.trackmate.helper.model.parameter.EnumParamSweepModel;
38-
import fiji.plugin.trackmate.helper.model.parameter.IntParamSweepModel;
3945
import fiji.plugin.trackmate.helper.model.parameter.NumberParamSweepModel.RangeType;
4046
import fiji.plugin.trackmate.helper.model.parameter.StringRangeParamSweepModel;
4147
import fiji.plugin.trackmate.omnipose.OmniposeDetectorFactory;
42-
import fiji.plugin.trackmate.omnipose.OmniposeSettings.PretrainedModelOmnipose;
4348

4449
public class OmniposeOpt
4550
{
@@ -49,53 +54,60 @@ private OmniposeOpt()
4954

5055
static Map< String, AbstractParamSweepModel< ? > > createModels()
5156
{
52-
final StringRangeParamSweepModel cellposePath = new StringRangeParamSweepModel()
53-
.paramName( "Omnipose Python path" )
54-
.isFile( true )
55-
.add( System.getProperty( "user.home" ) );
56-
final EnumParamSweepModel< PretrainedModelOmnipose > omniposeModel = new EnumParamSweepModel<>( PretrainedModelOmnipose.class )
57-
.paramName( "Omnipose model" )
58-
.rangeType( ArrayRangeType.FIXED )
59-
.addValue( PretrainedModelOmnipose.BACT_PHASE )
60-
.addValue( PretrainedModelOmnipose.BACT_FLUO )
61-
.fixedValue( PretrainedModelOmnipose.BACT_PHASE );
57+
final CondaEnvParamSweepModel condaEnv = new CondaEnvParamSweepModel()
58+
.paramName( "Omnipose conda environment" );
59+
60+
final ArrayParamSweepModel< String > pretrainedOrCustom = new ArrayParamSweepModel<>( new String[] {
61+
KEY_OMNIPOSE_MODEL,
62+
KEY_CELLPOSE_CUSTOM_MODEL_FILEPATH } )
63+
.paramName( "Use pretrained or custom model" )
64+
.addValue( KEY_OMNIPOSE_MODEL )
65+
.fixedValue( KEY_OMNIPOSE_MODEL );
66+
67+
final ArrayParamSweepModel< String > pretrainedModel = new ArrayParamSweepModel<>( new String[] {
68+
"bact_phase_omni",
69+
"bact_fluor_omni" } )
70+
.paramName( "Pretrained model" )
71+
.addValue( "bact_phase_omni" )
72+
.fixedValue( "bact_phase_omni" );
73+
6274
final StringRangeParamSweepModel omniposeCustomModelPath = new StringRangeParamSweepModel()
6375
.paramName( "Omnipose custom model path" )
6476
.isFile( true )
6577
.add( System.getProperty( "user.home" ) );
66-
final IntParamSweepModel channel1 = new IntParamSweepModel()
78+
79+
final String[] chans = new String[] { "1", "2", "3", "4" };
80+
final ArrayParamSweepModel< String > channel1 = new ArrayParamSweepModel<>( chans )
6781
.paramName( "Channel to segment" )
68-
.rangeType( RangeType.FIXED )
69-
.min( 0 )
70-
.max( 4 );
71-
final IntParamSweepModel channel2 = new IntParamSweepModel()
72-
.paramName( "Optional second channel" )
73-
.rangeType( RangeType.FIXED )
74-
.min( 0 )
75-
.max( 4 );
82+
.rangeType( ArrayRangeType.FIXED )
83+
.fixedValue( "1" )
84+
.addValue( "1" );
85+
7686
final DoubleParamSweepModel cellDiameter = new DoubleParamSweepModel()
7787
.paramName( "Cell diameter" )
7888
.dimension( Dimension.LENGTH )
7989
.rangeType( RangeType.FIXED )
8090
.min( 0. )
8191
.max( 50. );
92+
8293
final BooleanParamSweepModel useGPU = new BooleanParamSweepModel()
8394
.paramName( "Use GPU" )
8495
.rangeType( BooleanRangeType.FIXED )
8596
.fixedValue( true );
97+
8698
final BooleanParamSweepModel simplifyContours = new BooleanParamSweepModel()
8799
.paramName( "Simplify contours" )
88100
.rangeType( BooleanRangeType.FIXED )
89101
.fixedValue( true );
90102

91103
final Map< String, AbstractParamSweepModel< ? > > models = new LinkedHashMap<>();
92-
models.put( OmniposeDetectorFactory.KEY_OMNIPOSE_PYTHON_FILEPATH, cellposePath );
93-
models.put( OmniposeDetectorFactory.KEY_OMNIPOSE_MODEL, omniposeModel );
94-
models.put( OmniposeDetectorFactory.KEY_OMNIPOSE_CUSTOM_MODEL_FILEPATH, omniposeCustomModelPath );
95-
models.put( OmniposeDetectorFactory.KEY_CELL_DIAMETER, cellDiameter );
104+
models.put( CellposeCLIBase.KEY_CONDA_ENV, condaEnv );
105+
models.put( KEY_CELLPOSE_PRETRAINED_OR_CUSTOM, pretrainedOrCustom );
106+
models.put( KEY_OMNIPOSE_MODEL, pretrainedModel );
107+
models.put( KEY_CELLPOSE_CUSTOM_MODEL_FILEPATH, omniposeCustomModelPath );
108+
models.put( KEY_CELL_DIAMETER, cellDiameter );
96109
models.put( DetectorKeys.KEY_TARGET_CHANNEL, channel1 );
97-
models.put( OmniposeDetectorFactory.KEY_OPTIONAL_CHANNEL_2, channel2 );
98-
models.put( OmniposeDetectorFactory.KEY_USE_GPU, useGPU );
110+
models.put( KEY_USE_GPU, useGPU );
99111
models.put( ThresholdDetectorFactory.KEY_SIMPLIFY_CONTOURS, simplifyContours );
100112
return models;
101113
}
@@ -104,13 +116,4 @@ private OmniposeOpt()
104116
{
105117
return new OmniposeDetectorFactory<>();
106118
}
107-
108-
public static Object castPretrainedModel( final String str )
109-
{
110-
for ( final PretrainedModel e : PretrainedModelOmnipose.values() )
111-
if ( e.toString().equals( str ) )
112-
return e;
113-
114-
return null;
115-
}
116119
}

0 commit comments

Comments
 (0)