View Javadoc

1   /*
2    * @(#)$Id: RubineConfiguration.java 732 2009-08-05 22:22:05Z kurmannu $
3    *
4    * Author		:	Ueli Kurmann, igesture@uelikurmann.ch
5    *                  
6    *
7    * Purpose		:   Configuration for the Rubine algorithm.
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date				Who			Reason
14   *
15   * 11.06.2008		ukurmann	Initial Release
16   * 29.09.2008       bsigner     Cleanup
17   *
18   * -----------------------------------------------------------------------
19   *
20   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
21   *
22   * This software is the proprietary information of ETH Zurich.
23   * Use is subject to license terms.
24   * 
25   */
26  
27  package org.ximtec.igesture.algorithm.rubinebd;
28  
29  import java.util.HashMap;
30  import java.util.Map;
31  import java.util.logging.Level;
32  import java.util.logging.Logger;
33  
34  import org.sigtec.util.Constant;
35  import org.ximtec.igesture.algorithm.AlgorithmTool;
36  import org.ximtec.igesture.algorithm.feature.F1;
37  import org.ximtec.igesture.algorithm.feature.F10;
38  import org.ximtec.igesture.algorithm.feature.F11;
39  import org.ximtec.igesture.algorithm.feature.F12;
40  import org.ximtec.igesture.algorithm.feature.F13;
41  import org.ximtec.igesture.algorithm.feature.F14;
42  import org.ximtec.igesture.algorithm.feature.F15;
43  import org.ximtec.igesture.algorithm.feature.F16;
44  import org.ximtec.igesture.algorithm.feature.F17;
45  import org.ximtec.igesture.algorithm.feature.F18;
46  import org.ximtec.igesture.algorithm.feature.F19;
47  import org.ximtec.igesture.algorithm.feature.F2;
48  import org.ximtec.igesture.algorithm.feature.F20;
49  import org.ximtec.igesture.algorithm.feature.F3;
50  import org.ximtec.igesture.algorithm.feature.F4;
51  import org.ximtec.igesture.algorithm.feature.F5;
52  import org.ximtec.igesture.algorithm.feature.F6;
53  import org.ximtec.igesture.algorithm.feature.F7;
54  import org.ximtec.igesture.algorithm.feature.F8;
55  import org.ximtec.igesture.algorithm.feature.F9;
56  import org.ximtec.igesture.algorithm.feature.Feature;
57  import org.ximtec.igesture.algorithm.feature.FeatureTool;
58  import org.ximtec.igesture.configuration.Configuration;
59  
60  /**
61   * Comment
62   * 
63   * @version 1.0 11.06.2008
64   * @author Ueli Kurmann
65   * @author Beat Signer, signer@inf.ethz.ch
66   */
67  public class RubineConfiguration {
68  
69    private static final Logger LOGGER = Logger.getLogger(RubineConfiguration.class.getName());
70  
71    private static final String DEFAULT_MAHALANOBIS_DISTANCE = "100000";
72  
73    private static final String DEFAULT_PROBABILITY = "0.95";
74  
75    private static final String DEFAULT_MIN_DISTANCE = "1";
76  
77    protected static Map<String, String> DEFAULT_CONFIGURATION = new HashMap<String, String>();
78  
79    public enum Config {
80      MIN_DISTANCE, FEATURE_LIST, MAHALANOBIS_DISTANCE, PROBABILITY
81    }
82  
83    /**
84     * Set default parameter values
85     */
86    static {
87      /**
88       * Parameter default values
89       */
90      DEFAULT_CONFIGURATION.put(Config.MIN_DISTANCE.name(), DEFAULT_MIN_DISTANCE);
91      DEFAULT_CONFIGURATION.put(Config.MAHALANOBIS_DISTANCE.name(), DEFAULT_MAHALANOBIS_DISTANCE);
92      DEFAULT_CONFIGURATION.put(Config.PROBABILITY.name(), DEFAULT_PROBABILITY);
93      
94      StringBuilder sb = new StringBuilder();
95      for(Class<?> clazz:new Class<?>[]{F1.class, F2.class, F3.class, F4.class, F5.class, F6.class, F7.class, F8.class, F9.class, F10.class, F11.class, F12.class, F13.class, F14.class, F15.class, F16.class, F17.class, F18.class, F19.class, F20.class}){
96        sb.append(clazz.getName());
97        sb.append(Constant.COMMA);
98      }
99      
100     
101     DEFAULT_CONFIGURATION.put(Config.FEATURE_LIST.name(), sb.toString());
102     LOGGER.setLevel(Level.SEVERE);
103   }
104 
105   protected Feature[] featureList;
106 
107   protected double minDistance;
108 
109   protected double mahalanobisDistance;
110 
111   protected double probability;
112 
113   protected int minimalNumberOfPoints;
114 
115   public RubineConfiguration(Configuration config) {
116     init(config);
117   }
118 
119   private void init(Configuration config) {
120     Map<String, String> parameters = config.getParameters(RubineAlgorithmBigDecimal.class.getCanonicalName());
121     minDistance = AlgorithmTool.getDoubleParameterValue(Config.MIN_DISTANCE.name(), parameters, DEFAULT_CONFIGURATION);
122     LOGGER.info(Config.MIN_DISTANCE + Constant.COLON_BLANK + minDistance);
123 
124     mahalanobisDistance = AlgorithmTool.getDoubleParameterValue(Config.MAHALANOBIS_DISTANCE.name(), parameters,
125         DEFAULT_CONFIGURATION);
126     LOGGER.info(Config.MAHALANOBIS_DISTANCE + Constant.COLON_BLANK + mahalanobisDistance);
127 
128     String featureNames = AlgorithmTool
129         .getParameterValue(Config.FEATURE_LIST.name(), parameters, DEFAULT_CONFIGURATION);
130     LOGGER.info(Config.FEATURE_LIST + Constant.COLON_BLANK + featureNames);
131 
132     featureList = FeatureTool.createFeatureList(featureNames).toArray(new Feature[0]);
133 
134     minimalNumberOfPoints = FeatureTool.computeMinimalNumberOfRequiredPoints(featureList);
135     LOGGER.info("Minimal required points: " + minimalNumberOfPoints);
136 
137     probability = AlgorithmTool.getDoubleParameterValue(Config.PROBABILITY.name(), parameters, DEFAULT_CONFIGURATION);
138     LOGGER.info(Config.PROBABILITY + Constant.COLON_BLANK + probability);
139   } // init
140 
141   public Feature[] getFeatureList() {
142     return featureList;
143   } // getFeatureList
144 
145   public double getMinDistance() {
146     return minDistance;
147   } // getMinDistance
148 
149   public double getMahalanobisDistance() {
150     return mahalanobisDistance;
151   } // getMahalanobisDistance
152 
153   public double getProbability() {
154     return probability;
155   } // getProbability
156 
157   public int getMinimalNumberOfPoints() {
158     return minimalNumberOfPoints;
159   } // getMinimalNumberOfPoints
160 
161   public int getNumberOfFeatures() {
162     return featureList.length;
163   } // getNumberOfFeatures
164 
165   public static Map<String, String> getDefaultConfiguration() {
166     return DEFAULT_CONFIGURATION;
167   } // getDefaultConfiguration
168 
169 }