From a5fadde8df6d7eab51df1bf5a53dc1c1472400ce Mon Sep 17 00:00:00 2001
From: Thomas <thomas.musset@pasteur.fr>
Date: Thu, 4 Jul 2024 16:47:08 +0200
Subject: [PATCH] updated pom to v2.0.0-a.1, fix classes accordingly to new
 architecture, added icon, updated .gitignore

---
 .gitignore                                    |  43 +++-
 pom.xml                                       |  16 +-
 .../WaveletSpotDetectorBlock.java             | 239 +++++++++---------
 src/main/resources/spot-detector-block.png    | Bin 0 -> 19179 bytes
 4 files changed, 163 insertions(+), 135 deletions(-)
 create mode 100644 src/main/resources/spot-detector-block.png

diff --git a/.gitignore b/.gitignore
index bf678dd..57f16fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,41 @@
-.idea/
+/build*
+/workspace
+setting.xml
+release/
 target/
-bin/
-.settings/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
+.idea/
+*.iws
 *.iml
-.project
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
-SpotDetectorBlock.jar
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+**/.DS_Store
+Icon?
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 09473f6..09d1871 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,13 +7,11 @@
     <parent>
 		<artifactId>pom-icy</artifactId>
         <groupId>org.bioimageanalysis.icy</groupId>
-        <version>2.1.2</version>
+        <version>3.0.0-a.1</version>
 	</parent>
 
     <artifactId>spot-detector-block</artifactId>
-    <version>1.0.0</version>
-
-    <packaging>jar</packaging>
+    <version>2.0.0-a.1</version>
 
     <name>Spot Detector block</name>
     <description>
@@ -21,6 +19,14 @@
     </description>
 
     <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>ezplug</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>protocols</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>spot-detector</artifactId>
@@ -30,7 +36,7 @@
     <repositories>
         <repository>
             <id>icy</id>
-            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+            <url>https://nexus-icy.pasteur.cloud/repository/icy/</url>
         </repository>
     </repositories>
 </project>
\ No newline at end of file
diff --git a/src/main/java/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java b/src/main/java/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java
index 2b51f70..fb6d307 100644
--- a/src/main/java/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java
+++ b/src/main/java/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java
@@ -1,70 +1,91 @@
-package plugins.fab.waveletspotdetectorblock;
+/*
+ * Copyright (c) 2010-2024. Institut Pasteur.
+ *
+ * This file is part of Icy.
+ * Icy is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Icy is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Icy. If not, see <https://www.gnu.org/licenses/>.
+ */
 
-import java.util.ArrayList;
+package plugins.fab.waveletspotdetectorblock;
 
-import icy.plugin.abstract_.Plugin;
-import icy.roi.ROI;
-import icy.roi.ROI2D;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
-import icy.system.thread.ThreadUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.roi.ROI2D;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.system.logging.IcyLogger;
+import org.bioimageanalysis.icy.system.thread.ThreadUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.lang.Block;
 import plugins.adufour.blocks.util.VarList;
-import plugins.adufour.vars.lang.VarBoolean;
-import plugins.adufour.vars.lang.VarEnum;
-import plugins.adufour.vars.lang.VarInteger;
-import plugins.adufour.vars.lang.VarROIArray;
-import plugins.adufour.vars.lang.VarSequence;
+import plugins.adufour.vars.lang.*;
 import plugins.adufour.vars.util.VarException;
 import plugins.fab.spotDetector.DetectionSpot;
 import plugins.fab.spotDetector.detector.DetectionToROI;
 import plugins.fab.spotDetector.detector.UDWTScale;
 import plugins.fab.spotDetector.detector.UDWTWaveletCore;
 
-public class WaveletSpotDetectorBlock extends Plugin implements Block
-{
+import java.util.ArrayList;
 
-    enum detectionMethodEnum
-    {
+@IcyPluginName("Wavelet Spot Detector")
+@IcyPluginIcon(path = "/spot-detector-block.png")
+public class WaveletSpotDetectorBlock extends Plugin implements Block {
+    enum detectionMethodEnum {
         BRIGHT_SPOT, DARK_SPOT
     }
 
-    VarSequence inputSequenceVar = new VarSequence("input Sequence", null);
-    VarEnum<detectionMethodEnum> detectionMethod = new VarEnum<detectionMethodEnum>("Spot to detect",
-        detectionMethodEnum.BRIGHT_SPOT);
+    VarSequence inputSequenceVar = new VarSequence("Input Sequence", null);
+    VarEnum<detectionMethodEnum> detectionMethod = new VarEnum<>("Spot to detect", detectionMethodEnum.BRIGHT_SPOT);
     VarBoolean computeWATConsideringROIBoolean = new VarBoolean("Compute WAT considering ROI", false);
     VarSequence inputSequenceROIVar = new VarSequence("ROIs from sequence for WAT", null);
     VarBoolean force2DWaveletVar = new VarBoolean("Force 2D Wavelets", false);
     VarROIArray inputROIForMask = new VarROIArray("ROIs for detection mask", null);
 
-    VarBoolean[] useScaleBoolean = {new VarBoolean("Scale 1", false), new VarBoolean("Scale 2", true),
-        new VarBoolean("Scale 3", false), new VarBoolean("Scale 4", false), new VarBoolean("Scale 5", false)};
-
-    VarInteger[] scaleParameter = {new VarInteger("Th. scale 1:", 100), new VarInteger("Th. scale 2:", 100),
-        new VarInteger("Th. scale 3:", 100), new VarInteger("Th. scale 4:", 100), new VarInteger("Th. scale 5:", 100)};
-
-    VarSequence outSequence = new VarSequence("output Sequence", null);
-    VarSequence denoisedSequence = new VarSequence("denoised Sequence", null);
+    VarBoolean[] useScaleBoolean = {
+            new VarBoolean("Scale 1", false),
+            new VarBoolean("Scale 2", true),
+            new VarBoolean("Scale 3", false),
+            new VarBoolean("Scale 4", false),
+            new VarBoolean("Scale 5", false)
+    };
+
+    VarInteger[] scaleParameter = {
+            new VarInteger("Th. scale 1:", 100),
+            new VarInteger("Th. scale 2:", 100),
+            new VarInteger("Th. scale 3:", 100),
+            new VarInteger("Th. scale 4:", 100),
+            new VarInteger("Th. scale 5:", 100)
+    };
+
+    //VarSequence outSequence = new VarSequence("output Sequence", null);
+    //VarSequence denoisedSequence = new VarSequence("denoised Sequence", null);
     VarSequence binarySpotSequence = new VarSequence("binary Spot Sequence", null);
     VarROIArray detectionAsROIOut = new VarROIArray("detection as ROIs", null);
 
     @Override
-    public void run()
-    {
-
+    public void run() {
         // test if input sequence has only 1 channel.
 
         Sequence inputSequence = inputSequenceVar.getValue();
 
-        if (inputSequence == null)
-        {
-            throw new VarException("The input sequence must be set");
+        if (inputSequence == null) {
+            throw new VarException(inputSequenceVar, "The input sequence must be set");
         }
 
-        if (inputSequence.getSizeC() != 1)
-        {
-            throw new VarException(
-                "The input sequence must contain only 1 channel. Please use 'Extract Channel' prior to the WaveletBlock");
+        if (inputSequence.getSizeC() != 1) {
+            throw new VarException(inputSequenceVar, "The input sequence must contain only 1 channel. Please use 'Extract Channel' prior to the WaveletBlock");
         }
 
         // inputChannelVar
@@ -75,38 +96,26 @@ public class WaveletSpotDetectorBlock extends Plugin implements Block
 
         boolean detectNegative;
 
-        if (detectionMethod.getValue() == detectionMethodEnum.BRIGHT_SPOT)
-        {
-            detectNegative = false;
-        }
-        else
-        {
-            detectNegative = true;
-        }
+        detectNegative = detectionMethod.getValue() != detectionMethodEnum.BRIGHT_SPOT;
 
         boolean computeWATwithROI = computeWATConsideringROIBoolean.getValue();
 
         // copy ROI from input sequence to the computation sequence
         Sequence inputComputationSequence;
 
-        try
-        {
+        try {
             inputComputationSequence = SequenceUtil.getCopy(inputSequence);
         }
-        catch (InterruptedException ex)
-        {
+        catch (InterruptedException ex) {
             // interrupt process
             return;
         }
 
-        if (inputSequenceROIVar.getValue() != null)
-        {
-            for (ROI2D roi : inputSequenceROIVar.getValue().getROI2Ds())
-            {
+        if (inputSequenceROIVar.getValue() != null) {
+            for (ROI2D roi : inputSequenceROIVar.getValue().getROI2Ds()) {
                 ROI2D roiCopy = (ROI2D) roi.getCopy();
 
-                if (roiCopy != null)
-                {
+                if (roiCopy != null) {
                     inputComputationSequence.addROI(roiCopy);
                 }
             }
@@ -116,73 +125,63 @@ public class WaveletSpotDetectorBlock extends Plugin implements Block
 
         // create UDWTScale Parameter list.
 
-        final ArrayList<UDWTScale> UDWTScaleArrayList = new ArrayList<UDWTScale>();
+        final ArrayList<UDWTScale> UDWTScaleArrayList = new ArrayList<>();
 
         // System.out.println("Block debug.");
 
-        ThreadUtil.invokeNow(new Runnable()
-        {
-
-            @Override
-            public void run()
-            {
-
-                for (int i = 0; i < 5; i++)
-                {
-                    // System.out.println( "Scale enabled #" +i +" : " + useScaleBoolean[i].getValue() );
-                    UDWTScale scale = new UDWTScale(i + 1, useScaleBoolean[i].getValue(), scaleParameter[i].getValue());
-                    UDWTScaleArrayList.add(scale);
-                }
+        ThreadUtil.invokeNow(() -> {
+            for (int i = 0; i < 5; i++) {
+                // System.out.println( "Scale enabled #" +i +" : " + useScaleBoolean[i].getValue() );
+                UDWTScale scale = new UDWTScale(i + 1, useScaleBoolean[i].getValue(), scaleParameter[i].getValue());
+                UDWTScaleArrayList.add(scale);
             }
         });
 
         // Perform detection.
 
-        try
-        {
-            ArrayList<DetectionSpot> detectionResult = waveletCore.computeDetection(true, UDWTScaleArrayList, inputComputationSequence,
-                detectNegative, computeWATwithROI, force2DWaveletVar.getValue());
+        try {
+            ArrayList<DetectionSpot> detectionResult = waveletCore.computeDetection(
+                    true,
+                    UDWTScaleArrayList,
+                    inputComputationSequence,
+                    detectNegative,
+                    computeWATwithROI,
+                    force2DWaveletVar.getValue()
+            );
 
-        // System.out.println( "ROI Mask : " + inputROIForMask.getValue() );
+            // System.out.println( "ROI Mask : " + inputROIForMask.getValue() );
 
-        // Filter spot with ROIs.
-            if (inputROIForMask.getValue().length != 0)
-            {
-                ArrayList<DetectionSpot> detectionResultCopy = new ArrayList<DetectionSpot>(detectionResult);
+            // Filter spot with ROIs.
+            if (inputROIForMask.getValue().length != 0) {
+                ArrayList<DetectionSpot> detectionResultCopy = new ArrayList<>(detectionResult);
 
                 detectionList:
-                for (DetectionSpot spot : detectionResultCopy)
-                {
+                for (DetectionSpot spot : detectionResultCopy) {
                     // Point2D spotCoordinates = new Point2D.Double( spot.getMassCenter().x , spot.getMassCenter().y );
                     // spot.getMassCenter()
 
                     ROI detectionAsROI = null;
 
-                    try
-                    {
-                        ArrayList<DetectionSpot> detectionList = new ArrayList<DetectionSpot>();
+                    try {
+                        ArrayList<DetectionSpot> detectionList = new ArrayList<>();
                         detectionList.add(spot);
-                        detectionAsROI = DetectionToROI.convertDetectionToROI(detectionList).get(0);
+                        detectionAsROI = DetectionToROI.convertDetectionToROI(detectionList).getFirst();
                     }
-                    catch (NullPointerException e)
-                    {
-                        System.err.println("Error in spot to ROI conversion");
+                    catch (NullPointerException e) {
+                        IcyLogger.error(this.getClass(), "Error in spot to ROI conversion.");
                     }
 
-                    if (detectionAsROI == null)
-                    {
-                        System.err.println("Can't convert spot to ROI. spot=" + spot);
+                    if (detectionAsROI == null) {
+                        IcyLogger.error(this.getClass(), "Can't convert spot to ROI. spot=" + spot);
                         continue;
                     }
 
                     // System.out.println( "spot as ROI to test: " + detectionAsROI.getBounds5D() );
 
-                    for (ROI roi : inputROIForMask.getValue())
-                    {
+                    for (ROI roi : inputROIForMask.getValue()) {
                         // System.out.println( "roi contenant: " + roi.getBounds5D() );
 
-                        if (roi.contains(detectionAsROI))
-                        {
+                        if (roi.contains(detectionAsROI)) {
                             // System.out.println("contains");
                             continue detectionList;
                         }
@@ -200,10 +199,8 @@ public class WaveletSpotDetectorBlock extends Plugin implements Block
             {
                 Sequence binarySequence = waveletCore.getBinarySequence();
 
-                if (inputSequenceROIVar.getValue() != null)
-                {
-                    for (ROI2D roi : inputSequenceROIVar.getValue().getROI2Ds())
-                    {
+                if (inputSequenceROIVar.getValue() != null) {
+                    for (ROI2D roi : inputSequenceROIVar.getValue().getROI2Ds()) {
                         // System.out.println("roi:"+roi);
                         String name = roi.getName();
 
@@ -221,52 +218,44 @@ public class WaveletSpotDetectorBlock extends Plugin implements Block
             // output detection as ROI
             {
                 ArrayList<ROI> roiList = DetectionToROI.convertDetectionToROI(detectionResult);
-                ROI roi[] = new ROI[roiList.size()];
+                ROI[] roi = new ROI[roiList.size()];
                 int i = 0;
-                for (ROI roiCandidate : roiList)
-                {
+                for (ROI roiCandidate : roiList) {
                     roi[i] = roiCandidate;
                     i++;
                 }
                 detectionAsROIOut.setValue(roi);
             }
         }
-        catch (InterruptedException e)
-        {
+        catch (InterruptedException e) {
             // protocols process interrupted
             Thread.currentThread().interrupt();
         }
     }
 
     @Override
-    public void declareInput(VarList inputMap)
-    {
-
-        inputMap.add(inputSequenceVar);
-        inputMap.add(detectionMethod);
-        inputMap.add("input Sequence ROIs", inputSequenceROIVar);
-        inputMap.add(computeWATConsideringROIBoolean);
-        inputMap.add(inputROIForMask);
-
-        for (int i = 0; i < 5; i++)
-        {
-            inputMap.add(useScaleBoolean[i]);
+    public void declareInput(@NotNull VarList inputMap) {
+        inputMap.add("input-sequence", inputSequenceVar);
+        inputMap.add("detection-method", detectionMethod);
+        inputMap.add("input-sequence-rois", inputSequenceROIVar);
+        inputMap.add("compute-wat-considering-roi", computeWATConsideringROIBoolean);
+        inputMap.add("input-roi-for-mask", inputROIForMask);
+
+        for (int i = 0; i < 5; i++) {
+            inputMap.add("use-scale-" + i, useScaleBoolean[i]);
         }
-        for (int i = 0; i < 5; i++)
-        {
-            inputMap.add(scaleParameter[i]);
+        for (int i = 0; i < 5; i++) {
+            inputMap.add("scale-value-" + i, scaleParameter[i]);
         }
-        inputMap.add(force2DWaveletVar);
+        inputMap.add("force-2d-wavelet", force2DWaveletVar);
     }
 
     @Override
-    public void declareOutput(VarList outputMap)
-    {
-
+    public void declareOutput(@NotNull VarList outputMap) {
         // outputMap.add( outSequence );
         // outputMap.add( denoisedSequence );
-        outputMap.add(binarySpotSequence);
-        outputMap.add(detectionAsROIOut);
+        outputMap.add("Binary Spot Sequence", binarySpotSequence);
+        outputMap.add("Detection as ROI", detectionAsROIOut);
 
     }
 
diff --git a/src/main/resources/spot-detector-block.png b/src/main/resources/spot-detector-block.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc0a7455a4c58ab68ab497d0e1ad058e45c28cc4
GIT binary patch
literal 19179
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
T3C!Da00000NkvXXu0mjfa#c^<

literal 0
HcmV?d00001

-- 
GitLab