diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java index 3720a15cafe134f661fc1b06283f41292e2f9546..7794f12ee8b40c846ca82ac3fb96fc0a7be69933 100644 --- a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java +++ b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java @@ -38,11 +38,11 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu super(); importer = new Var<PositionedSequenceFileImporter>("Importer", PositionedSequenceFileImporter.class); - series = new VarInteger("Series", 0); + series = new VarInteger("Series", -1); resolution = new VarInteger("Resolution (0=full, 1=1/2, ..)", 0); region = new VarROIArray("XY region (ROI)", null); - zIndex = new VarInteger("Z (slice) index", 0); - tIndex = new VarInteger("T (frame) index", 0); + zIndex = new VarInteger("Z (slice) index", -1); + tIndex = new VarInteger("T (frame) index", -1); cIndex = new VarInteger("C (channel) index", -1); image = new Var<IcyBufferedImage>("Image", IcyBufferedImage.class); @@ -71,7 +71,7 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu Rectangle rect = ((rois != null) && (rois.length > 0)) ? rois[0].getBounds5D().toRectangle2D().getBounds() : null; - // default values ? use internal position if any defined + // undefined values ? use internal position if any defined if ((s == 0) && (pi.s != -1)) s = pi.s; if ((z == 0) && (pi.z != -1)) @@ -83,6 +83,10 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu if ((rect == null) && (pi.xyRegion != null)) rect = pi.xyRegion; + // still undefined ? --> set default value for series + if (s == -1) + s = 0; + try { image.setValue(imp.getImage(s, res, rect, z, t, c)); diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java index 34c8ba2d6a387750d1b97aef4b1300a5f8c6dda8..666f65cc710b68cabe97b37fd1ecaaf4b2c604b5 100644 --- a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java +++ b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java @@ -43,7 +43,7 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock, importer = new Var<PositionedSequenceFileImporter>("Importer", PositionedSequenceFileImporter.class); - series = new VarInteger("Series", 0); + series = new VarInteger("Series", -1); resolution = new VarInteger("Resolution (0=full, 1=1/2, ..)", 0); region = new VarROIArray("XY region (ROI)", null); minZIndex = new VarInteger("Z min (slice)", -1); @@ -80,8 +80,8 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock, Rectangle rect = ((rois != null) && (rois.length > 0)) ? rois[0].getBounds5D().toRectangle2D().getBounds() : null; - // default values ? use internal position if any defined - if ((s == 0) && (pi.s != -1)) + // undefined values ? use internal position if any defined + if ((s == -1) && (pi.s != -1)) s = pi.s; if ((minZ == -1) && (maxZ == -1) && (pi.z != -1)) { @@ -93,10 +93,14 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock, minT = pi.t; maxT = pi.t; } - if ((c == 0) && (pi.c != -1)) + if ((c == -1) && (pi.c != -1)) c = pi.c; if ((rect == null) && (pi.xyRegion != null)) rect = pi.xyRegion; + + // still undefined ? --> set default value for series + if (s == -1) + s = 0; try { diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java index 782c76cf22a1fcc65214f96af01bd64148f79d4c..134d9af71ed8971b8503e86dc944698a857de19c 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java +++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java @@ -1,11 +1,15 @@ package plugins.tprovoost.sequenceblocks.loop; +import java.util.List; + import icy.file.SequenceFileImporter; import icy.plugin.interface_.PluginBundled; import icy.plugin.interface_.PluginLibrary; import plugins.adufour.blocks.lang.Batch; import plugins.adufour.blocks.tools.sequence.SequenceBlock; +import plugins.adufour.blocks.util.VarList; import plugins.adufour.vars.lang.Var; +import plugins.adufour.vars.lang.VarInteger; import plugins.adufour.vars.util.VarException; import plugins.tprovoost.sequenceblocks.SequenceBlocks; import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter; @@ -18,11 +22,21 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter; public abstract class SequenceFileImporterBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled { // important to not initialize and create them in getBatchSource() and getBatchElement() - protected Var<PositionedSequenceFileImporter> positionedImporter; - protected Var<PositionedSequenceFileImporter> element; + protected Var<PositionedSequenceFileImporter> positionedImporter = null; + protected Var<PositionedSequenceFileImporter> element = null; + protected VarInteger series = null; // internal protected int limit; + protected boolean showSeriesField; + + public SequenceFileImporterBatch() + { + super(); + + // we want it by default + showSeriesField = true; + } @Override public Var<PositionedSequenceFileImporter> getBatchSource() @@ -58,8 +72,52 @@ public abstract class SequenceFileImporterBatch extends Batch implements Sequenc if (imp.getOpened() == null) throw new VarException(positionedImporter, "Importer is not opened !"); - // init element with a copy of current positioned importer - element.setValue(new PositionedSequenceFileImporter(value)); + // create new positioned importer for element initialization + final PositionedSequenceFileImporter pi = new PositionedSequenceFileImporter(value); + + // series field active ? + if (showSeriesField) + { + final int s = series.getValue().intValue(); + + // defined series ? --> set series position + if (s != -1) + pi.s = s; + } + + // init element with a copy of current positioned importer (and eventually set serie position) + element.setValue(pi); + } + + @Override + public void declareInput(VarList inputMap) + { + super.declareInput(inputMap); + + if (showSeriesField) + { + // lazy creation + if (series == null) + series = new VarInteger("Series", -1); + + inputMap.add("series", series); + } + } + + @Override + public void declareLoopVariables(List<Var<?>> loopVariables) + { + if (showSeriesField) + { + // lazy creation + if (series == null) + series = new VarInteger("Series", -1); + + loopVariables.add(series); + } + + // need to be called after + super.declareLoopVariables(loopVariables); } @Override diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java index 46640c56371c0c1eade6faae2c6d3a23d531ce35..afc3b0405731be0aab4532d1fec43677f797bbe9 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java +++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java @@ -17,7 +17,8 @@ public class SequenceFileImporterChannelBatch extends SequenceFileImporterBatch { super.initializeLoop(); - final PositionedSequenceFileImporter pi = positionedImporter.getValue(); + // can take position from element which should have been initialized here + final PositionedSequenceFileImporter pi = element.getValue(); try { diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java index e91d5f4ff98aba478bb7aa82b97957726f288141..ba8bf1066324d59de57918deaf474eb654dae72b 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java +++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java @@ -17,7 +17,8 @@ public class SequenceFileImporterFrameBatch extends SequenceFileImporterBatch { super.initializeLoop(); - final PositionedSequenceFileImporter pi = positionedImporter.getValue(); + // can take position from element which should have been initialized here + final PositionedSequenceFileImporter pi = element.getValue(); try { diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java index 0bbd8bb263a02730c16eb1c2aa4fac2fd7dad8cd..98ab352ebf2a023456d4109e83fe45150b073fc6 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java +++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java @@ -24,9 +24,9 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter; */ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch { - protected VarROIArray rois; - protected VarInteger inputRoisResolution; - protected VarInteger inputRoisMargin; + protected VarROIArray rois = null; + protected VarInteger inputRoisResolution = null; + protected VarInteger inputRoisMargin = null; protected List<Rectangle> regions; @Override @@ -34,7 +34,8 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch { super.initializeLoop(); - final PositionedSequenceFileImporter pi = positionedImporter.getValue(); + // can take position from element which should have been initialized here + final PositionedSequenceFileImporter pi = element.getValue(); // can iterate over XY dimension ? if ((pi.xyRegion == null) && (rois.getValue() != null)) diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java index 255c14ceb98dbccc3ec8b09e5a4db47f420a240f..c08970f3bfc25a3dabeae22bd5489de1ab988f26 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java +++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java @@ -12,17 +12,29 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter; */ public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch { + public SequenceFileImporterSeriesBatch() + { + super(); + + // add series field here + showSeriesField = false; + } + @Override public void initializeLoop() { super.initializeLoop(); - final PositionedSequenceFileImporter pi = positionedImporter.getValue(); + // can take position from element which should have been initialized here + final PositionedSequenceFileImporter pi = element.getValue(); try { - // force series iteration as by default series is set to 0 - limit = MetaDataUtil.getNumSeries(pi.getMetadata()); + // can iterate over S dimension ? + if (pi.s == -1) + limit = MetaDataUtil.getNumSeries(pi.getMetadata()); + else + limit = 1; } catch (Exception e) { @@ -35,9 +47,12 @@ public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch public void beforeIteration() { // set current position S - element.getValue().s = getIterationCounter().getValue().intValue(); - // force element changed event so loop get correctly executed - element.valueChanged(element, element.getValue(), element.getValue()); + if (positionedImporter.getValue().s == -1) + { + element.getValue().s = getIterationCounter().getValue().intValue(); + // force element changed event so loop get correctly executed + element.valueChanged(element, element.getValue(), element.getValue()); + } } @Override diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java index 061b76de2ce25f577b22617ab6d0e5ec2b1049a7..93a5514285f7563ec343e5d173322757dc65f535 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java +++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java @@ -17,7 +17,8 @@ public class SequenceFileImporterSliceBatch extends SequenceFileImporterBatch { super.initializeLoop(); - final PositionedSequenceFileImporter pi = positionedImporter.getValue(); + // can take position from element which should have been initialized here + final PositionedSequenceFileImporter pi = element.getValue(); try { diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java index 5386fb6de960654e2274d0f96aebebc51482b1a6..b831e80c1a090fc5333e150300b372bf4caf1827 100644 --- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java +++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java @@ -6,7 +6,10 @@ import java.util.List; import icy.file.SequenceFileImporter; import icy.image.ImageUtil; import icy.sequence.MetaDataUtil; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.Var; import plugins.adufour.vars.lang.VarInteger; +import plugins.adufour.vars.lang.VarROIArray; import plugins.adufour.vars.util.VarException; import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter; @@ -17,25 +20,18 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter; */ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch { - protected final VarInteger tileW; - protected final VarInteger tileH; + protected VarInteger tileW; + protected VarInteger tileH; protected List<Rectangle> tiles; - public SequenceFileImporterTileBatch() - { - super(); - - tileW = new VarInteger("Tile width (-1 = auto)", 0); - tileH = new VarInteger("Tile height (-1 = auto)", 0); - } - @Override public void initializeLoop() { super.initializeLoop(); - final PositionedSequenceFileImporter pi = positionedImporter.getValue(); + // can take position from element which should have been initialized here + final PositionedSequenceFileImporter pi = element.getValue(); // can iterate over XY dimension ? if (pi.xyRegion == null) @@ -63,7 +59,7 @@ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch } catch (Exception e) { - throw new VarException(positionedImporter, + throw new VarException(element, "Error while initializing SequenceFileImporter tile batch: " + e.getMessage()); } @@ -88,6 +84,37 @@ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch else limit = 1; } + + @Override + public void declareInput(VarList inputMap) + { + super.declareInput(inputMap); + + // lazy creation + if (tileW == null) + tileW = new VarInteger("Tile width (-1 = auto)", 0); + if (tileH == null) + tileH = new VarInteger("Tile height (-1 = auto)", 0); + + inputMap.add("tileWidht", tileW); + inputMap.add("tileHeight", tileH); + } + + @Override + public void declareLoopVariables(List<Var<?>> loopVariables) + { + // lazy creation + if (tileW == null) + tileW = new VarInteger("Tile width (-1 = auto)", 0); + if (tileH == null) + tileH = new VarInteger("Tile height (-1 = auto)", 0); + + loopVariables.add(tileW); + loopVariables.add(tileH); + + // need to be called after + super.declareLoopVariables(loopVariables); + } @Override public void beforeIteration()