1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.ximtec.igesture.algorithm.rubine;
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
62
63
64
65
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
85
86 static {
87
88
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(RubineAlgorithm.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 }
140
141 public Feature[] getFeatureList() {
142 return featureList;
143 }
144
145 public double getMinDistance() {
146 return minDistance;
147 }
148
149 public double getMahalanobisDistance() {
150 return mahalanobisDistance;
151 }
152
153 public double getProbability() {
154 return probability;
155 }
156
157 public int getMinimalNumberOfPoints() {
158 return minimalNumberOfPoints;
159 }
160
161 public int getNumberOfFeatures() {
162 return featureList.length;
163 }
164
165 public static Map<String, String> getDefaultConfiguration() {
166 return DEFAULT_CONFIGURATION;
167 }
168
169 }