changes: now Inference engine works fine with the EyeTracking benchmark.
[IRC.git] / Robust / src / Benchmarks / SSJava / EyeTracking / DeviationScanner.java
index aa09a483fb076eb0a4b3c14f5592f640a1a423e7..c635d89a9508558c793ec5fd7301cf5a0379046b 100644 (file)
  * along with LEA. If not, see <http://www.gnu.org/licenses/>.\r
  */\r
 \r
-\r
-import java.awt.geom.Rectangle2D;\r
-\r
 /**\r
  * No description given.\r
  * \r
  * @author Florian Frankenberger\r
  */\r
+@LATTICE("DEV<C,C<SIZE,SIZE*,C*,DEV*")\r
+@METHODDEFAULT("OUT<THIS,THIS<IN,THISLOC=THIS,RETURNLOC=OUT")\r
 public class DeviationScanner {\r
 \r
-       private StaticSizeArrayList<EyePosition> eyePositions = new StaticSizeArrayList<EyePosition>(3);\r
-       \r
-       public DeviationScanner() {\r
-       }\r
-\r
-       public void addEyePosition(EyePosition eyePosition) {\r
-               eyePositions.add(eyePosition);\r
-       }\r
-       \r
-       public Deviation scanForDeviation(Rectangle2D faceRect) {\r
-               Deviation deviation = Deviation.NONE;\r
-               if (eyePositions.size() >= 3) {\r
-                       double deviationX = 0;\r
-                       double deviationY = 0;\r
-                       \r
-                       EyePosition lastEyePosition = null;\r
-                       for (int i = 0; i < 3; ++i) {\r
-                               EyePosition eyePosition = this.eyePositions.get(i);\r
-                               if (lastEyePosition != null) {\r
-                                       deviationX += (eyePosition.getX() - lastEyePosition.getX());\r
-                                       deviationY += (eyePosition.getY() - lastEyePosition.getY());\r
-                               }\r
-                               lastEyePosition = eyePosition; \r
-                       }\r
-                       \r
-                       final double deviationPercentX = 0.04;\r
-                       final double deviationPercentY = 0.04;\r
-                       \r
-                       deviationX /= faceRect.getWidth();\r
-                       deviationY /= faceRect.getWidth();\r
-                       \r
-                       int deviationAbsoluteX = 0;\r
-                       int deviationAbsoluteY = 0;\r
-                       if (deviationX > deviationPercentX) deviationAbsoluteX = 1;\r
-                       if (deviationX < -deviationPercentX) deviationAbsoluteX = -1;\r
-                       if (deviationY > deviationPercentY) deviationAbsoluteY = 1;\r
-                       if (deviationY < -deviationPercentY) deviationAbsoluteY = -1;\r
-                       \r
-                       deviation = Deviation.getDirectionFor(deviationAbsoluteX, deviationAbsoluteY);\r
-                       if (deviation != Deviation.NONE) this.eyePositions.clear();\r
-                       //System.out.println(String.format("%.2f%% | %.2f%% => %d and %d >>> %s", deviationX*100, deviationY*100, deviationAbsoluteX, deviationAbsoluteY, deviation.toString()));\r
-                       \r
-               }\r
-               \r
-               return deviation;\r
-       }\r
-       \r
-       public void clear() {\r
-               System.out.println("CLEAR");\r
-               this.eyePositions.clear();\r
-       }\r
+  @LOC("DEV")\r
+  private int x[];\r
+  @LOC("DEV")\r
+  private int y[];\r
+\r
+  public static final int LEFT_UP = 0;\r
+  public static final int UP = 1;\r
+  public static final int RIGHT_UP = 2;\r
+  public static final int LEFT = 3;\r
+  public static final int NONE = 4;\r
+  public static final int RIGHT = 5;\r
+  public static final int LEFT_DOWN = 6;\r
+  public static final int DOWN = 7;\r
+  public static final int RIGHT_DOWN = 8;\r
+\r
+  public DeviationScanner() {\r
+    x = new int[3];\r
+    y = new int[3];\r
+    SSJAVA.arrayinit(x, -1);\r
+    SSJAVA.arrayinit(y, -1);\r
+  }\r
+\r
+  @LATTICE("THIS<IN,THISLOC=THIS")\r
+  public void addEyePosition(@LOC("IN") int inx, @LOC("IN") int iny) {\r
+    SSJAVA.append(x, inx);\r
+    SSJAVA.append(y, iny);\r
+  }\r
+\r
+  @LATTICE("THIS<C,THIS<IN,THISLOC=THIS,C*")\r
+  @RETURNLOC("THIS,DeviationScanner.DEV")\r
+  public int scanForDeviation(@LOC("IN") Rectangle2D faceRect) {\r
+\r
+    @LOC("THIS,DeviationScanner.DEV") int deviation = NONE;\r
+\r
+    for (@LOC("C") int i = 0; i < 3; i++) {\r
+      if (x[i] == -1) {\r
+        return deviation;\r
+      }\r
+    }\r
+\r
+    @LOC("THIS,DeviationScanner.DEV") double deviationX = 0;\r
+    @LOC("THIS,DeviationScanner.DEV") double deviationY = 0;\r
+\r
+    @LOC("THIS,DeviationScanner.DEV") int lastIdx = -1;\r
+    for (@LOC("THIS,DeviationScanner.DEV") int i = 0; i < 3; ++i) {\r
+      if (lastIdx != -1) {\r
+        deviationX += (x[i] - x[lastIdx]);\r
+        deviationY += (y[i] - y[lastIdx]);\r
+      }\r
+      lastIdx = i;\r
+    }\r
+\r
+    @LOC("THIS,DeviationScanner.DEV") final double deviationPercentX = 0.04;\r
+    @LOC("THIS,DeviationScanner.DEV") final double deviationPercentY = 0.04;\r
+\r
+    deviationX /= faceRect.getWidth();\r
+    deviationY /= faceRect.getWidth();\r
+\r
+    @LOC("THIS,DeviationScanner.DEV") int deviationAbsoluteX = 0;\r
+    @LOC("THIS,DeviationScanner.DEV") int deviationAbsoluteY = 0;\r
+    if (deviationX > deviationPercentX)\r
+      deviationAbsoluteX = 1;\r
+    if (deviationX < -deviationPercentX)\r
+      deviationAbsoluteX = -1;\r
+    if (deviationY > deviationPercentY)\r
+      deviationAbsoluteY = 1;\r
+    if (deviationY < -deviationPercentY)\r
+      deviationAbsoluteY = -1;\r
+\r
+    deviation = getDirectionFor(deviationAbsoluteX, deviationAbsoluteY);\r
+\r
+    if (deviation != NONE) {\r
+      SSJAVA.arrayinit(x, -1);\r
+      SSJAVA.arrayinit(y, -1);\r
+    }\r
+\r
+    return deviation;\r
+  }\r
+\r
+  @LATTICE("OUT<IN,OUT<THIS,THISLOC=THIS,RETURNLOC=OUT")\r
+  public int getDirectionFor(@LOC("IN") int directionX, @LOC("IN") int directionY) {\r
+\r
+    if (directionX == +1 && directionY == -1) {\r
+      return LEFT_UP;\r
+    } else if (directionX == 0 && directionY == -1) {\r
+      return UP;\r
+    } else if (directionX == -1 && directionY == -1) {\r
+      return RIGHT_UP;\r
+    } else if (directionX == +1 && directionY == 0) {\r
+      return LEFT;\r
+    } else if (directionX == 0 && directionY == 0) {\r
+      return NONE;\r
+    } else if (directionX == -1 && directionY == 0) {\r
+      return RIGHT;\r
+    } else if (directionX == +1 && directionY == +1) {\r
+      return LEFT_DOWN;\r
+    } else if (directionX == 0 && directionY == +1) {\r
+      return DOWN;\r
+    } else if (directionX == -1 && directionY == +1) {\r
+      return RIGHT_DOWN;\r
+    }\r
+\r
+    return -1;\r
+  }\r
+\r
+  public String toStringDeviation(@LOC("IN") int dev) {\r
+    if (dev == LEFT_UP) {\r
+      return "LEFT_UP";\r
+    } else if (dev == UP) {\r
+      return "UP";\r
+    } else if (dev == RIGHT_UP) {\r
+      return "RIGHT_UP";\r
+    } else if (dev == LEFT) {\r
+      return "LEFT";\r
+    } else if (dev == NONE) {\r
+      return "NONE";\r
+    } else if (dev == RIGHT) {\r
+      return "RIGHT";\r
+    } else if (dev == LEFT_DOWN) {\r
+      return "LEFT_DOWN";\r
+    } else if (dev == DOWN) {\r
+      return "DOWN";\r
+    } else if (dev == RIGHT_DOWN) {\r
+      return "RIGHT_DOWN";\r
+    }\r
+    return "ERROR";\r
+  }\r
+\r
 }\r