package edu.usc.enl.dynamicmeasurement.algorithms.tasks.hhh.flow.multiswitch; import edu.usc.enl.dynamicmeasurement.data.ConfigReader; import edu.usc.enl.dynamicmeasurement.model.WildcardPattern; import edu.usc.enl.dynamicmeasurement.util.Util; import org.w3c.dom.Element; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.*; /** * Created with IntelliJ IDEA. * User: masoud * Date: 12/23/13 * Time: 2:29 PM <br/> * HHH algorithm that estimates accuracy using the groundtruth. */ public class MultiSwitch2GroundTruth extends MultiSwitch2 { private final String groundTruthFolder; private Map<Integer, Set<WildcardPattern>> groundTruth = new HashMap<>(); public MultiSwitch2GroundTruth(Element element) { super(element); Map<String, Element> childrenProperties = Util.getChildrenProperties(element, "Property"); groundTruthFolder = childrenProperties.get("GroundTruthFolder").getAttribute(ConfigReader.PROPERTY_VALUE); } @Override public void setFolder(String folder) { super.setFolder(folder); String name = new File(folder).getName(); try (BufferedReader br = new BufferedReader(new FileReader(groundTruthFolder + "/" + name + "/hhh.csv"))) { while (br.ready()) { String line = br.readLine(); String[] split = line.split(","); WildcardPattern hhh = new WildcardPattern(split[1], Double.parseDouble(split[2])); int step = Integer.parseInt(split[0]); Set<WildcardPattern> wildcardPatterns = groundTruth.get(step); if (wildcardPatterns == null) { wildcardPatterns = new HashSet<>(); groundTruth.put(step, wildcardPatterns); } wildcardPatterns.add(hhh); } } catch (IOException e) { e.printStackTrace(); } } protected Map<WildcardPattern, Double> getHHHPrecision(Collection<WildcardPattern> hhhList, Collection<WildcardPattern> monitors1) { Set<WildcardPattern> wildcardPatterns = groundTruth.get(getStep()); Map<WildcardPattern, Double> output = new HashMap<>(); for (WildcardPattern hhh : hhhList) { double precision; if (wildcardPatterns != null && wildcardPatterns.contains(hhh)) { precision = 1; } else { precision = 0; } output.put(hhh, precision); } return output; } }