From 7a1090587e14d3461704640b33596a09a1cc6e56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Tue, 23 Oct 2012 10:21:51 +0000
Subject: [PATCH] - added parameterised measure

---
 .../inrialpes/exmo/align/cli/GroupOutput.java | 53 +++++++++++++++++--
 1 file changed, 50 insertions(+), 3 deletions(-)

diff --git a/src/fr/inrialpes/exmo/align/cli/GroupOutput.java b/src/fr/inrialpes/exmo/align/cli/GroupOutput.java
index 49d9a19f..a619da3e 100644
--- a/src/fr/inrialpes/exmo/align/cli/GroupOutput.java
+++ b/src/fr/inrialpes/exmo/align/cli/GroupOutput.java
@@ -72,6 +72,7 @@ import fr.inrialpes.exmo.align.parser.AlignmentParser;
  *  -c --color
  *  -v --value
  *  -e --labels
+ *  -m --measure
  *  -d debug --debug=level
  *  -l list of compared algorithms
  *  -t output --type=output: xml/tex/html/ascii
@@ -85,6 +86,7 @@ import fr.inrialpes.exmo.align.parser.AlignmentParser;
  * requested (<CODE>-o</CODE> flags), then output will be written to
  *  <CODE>output</CODE> if present, stdout by default. In case of the Latex output, there are numerous files generated (regardless the <CODE>-o</CODE> flag).
  *
+ *
  * <pre>
  * $Id$
  * </pre>
@@ -92,6 +94,35 @@ import fr.inrialpes.exmo.align.parser.AlignmentParser;
  * @author Jérôme Euzenat
  */
 
+/*
+Generating Spider/Radar view in TikZ is very easy.
+The code below works.
+But it is less informative than the above presentation.
+
+\begin{tikzpicture}
+
+% JE: experiment to draw radar/spider plots in TikZ
+% n= number of dimensions (here 5)
+% w=radius if the graph (here 2)
+% p=number of isovalue lines (here 2)
+
+% grid 
+% (for i=1 to n do \draw[black!50] (0,0) -- (i*360/n:w);
+\draw[black!50] (0,0) -- (0:2) node {instances};
+\draw[black!50] (0,0) -- (72:2) node {properties};
+\draw[black!50] (0,0) -- (144:2) node {label};
+\draw[black!50] (0,0) -- (216:2) node {hierarchy};
+\draw[black!50] (0,0) -- (288:2);
+% (for i=1 to p do \draw[black!50] (0,0) -- (i*360/n:w/i);
+\draw[black!50] (0:2) -- (72:2) -- (144:2) -- (216:2) -- (288:2) -- (360:2);
+\draw[black!50] (0:1) -- (72:1) -- (144:1) -- (216:1) -- (288:1) -- (360:1);
+
+% any curve can be displayed in the same way
+\draw (0:1) -- (72:1.22) -- (144:1.56) -- (216:.78) -- (288:.6) -- (360:1);
+
+\end{tikzpicture} 
+*/
+
 public class GroupOutput {
 
     static int SIZE = 16;// Nb of cells = 2^ = 16
@@ -120,6 +151,7 @@ public class GroupOutput {
     boolean labels = false;
     boolean value = false;
     int debug = 0;
+    int measure = 0;
     PrintWriter output = null;
 
     public static void main(String[] args) {
@@ -128,7 +160,7 @@ public class GroupOutput {
     }
 
     public void run(String[] args) throws Exception {
-	LongOpt[] longopts = new LongOpt[9];
+	LongOpt[] longopts = new LongOpt[10];
 
  	longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h');
 	longopts[1] = new LongOpt("output", LongOpt.REQUIRED_ARGUMENT, null, 'o');
@@ -138,8 +170,9 @@ public class GroupOutput {
 	longopts[6] = new LongOpt("list", LongOpt.REQUIRED_ARGUMENT, null, 'l');
 	longopts[7] = new LongOpt("value", LongOpt.NO_ARGUMENT, null, 'v');
 	longopts[8] = new LongOpt("labels", LongOpt.NO_ARGUMENT, null, 'e');
+	longopts[9] = new LongOpt("measure", LongOpt.REQUIRED_ARGUMENT, null, 'm');
 
-	Getopt g = new Getopt("", args, "hveo:c::d::l:t:", longopts);
+	Getopt g = new Getopt("", args, "hveo:c::d::l:t:m:", longopts);
 	int c;
 	String arg;
 
@@ -173,6 +206,13 @@ public class GroupOutput {
 		/* List of filename */
 		fileNames = g.getOptarg();
 		break;
+	    case 'm' :
+		/* measure to be used */
+		String s = g.getOptarg();
+		if ( s.equals("p") ) measure = 1;
+		else if ( s.equals("r") ) measure = 2;
+		else if ( s.equals("o") ) measure = 3;
+		break;
 	    case 'd' :
 		/* Debug level  */
 		arg = g.getOptarg();
@@ -253,7 +293,7 @@ public class GroupOutput {
 	    String prefix = dir.toURI().toString()+"/"+tests[i]+"/";
 	    try {
 		PRecEvaluator evaluator = (PRecEvaluator)eval( prefix+"refalign.rdf", prefix+algo+".rdf");
-		result = result + evaluator.getFmeasure();
+		result += getMeasure( evaluator );
 		nbtests++; // Only the tests that succeed
 	    } catch ( AlignmentException aex ) { // simple error message
 		if ( aex.getCause() != null ) 
@@ -369,6 +409,13 @@ public class GroupOutput {
 	return result;
     }
 
+    public double getMeasure( PRecEvaluator evaluator ) {
+	if ( measure == 1 ) return evaluator.getPrecision();
+	if ( measure == 2 ) return evaluator.getRecall();
+	if ( measure == 3 ) return evaluator.getOverall();
+	return evaluator.getFmeasure();
+    }
+
     public String colorFormat(double f){
 	if ( color == null ) return "";
 	else return ",fill="+color+"!"+(int)(f*100);
-- 
GitLab