private Set<Vertex> computeMinVertexCover(Set<Vertex> side1, Set<Vertex> side2) { Set<Vertex> konigSet = new HashSet<Vertex>(); Set<Vertex> unmatched = new TreeSet<Vertex>(side1); unmatched.removeAll(matches); // System.out.println("Matches: " + matches); // System.out.println("side 1 unmatched set: " + unmatched); for (Vertex v : unmatched) { konigDFS(konigSet, v, false); } // System.out.println("Konig set: " + konigSet); Set<Vertex> result = new HashSet<Vertex>(side2); result.retainAll(konigSet); // System.out.println("side 2 intersect konigSet: " + result); Set<Vertex> side1notInKonigSet = new HashSet<Vertex>(side1); side1notInKonigSet.removeAll(konigSet); // System.out.println("side 1 not in Konig set: " + side1notInKonigSet); result.addAll(side1notInKonigSet); return result; }
public static double repairAccuracy(Set<RepairedCell> truth, Set<RepairedCell> found) { if (found.size() != 0) { Set<RepairedCell> tAndF = new HashSet<RepairedCell>(); tAndF.addAll(truth); tAndF.retainAll(found); double precision = tAndF.size() * 1.0 / found.size(), recall = tAndF.size() * 1.0 / truth.size(); if (debug) System.out.println("repair precision = " + precision + ", repair recall = " + recall); return 2 * precision * recall / (precision + recall); } return 0; }
private void writeWeights( String orig, GeneBranch from, GeneBranch to, String edgeType, Writer writer) throws IOException { Set<String> dwstr = to.getAllGenes(); dwstr.retainAll(downstream.get(orig)); assert !dwstr.isEmpty(); double cumPval = calcPVal(orig, dwstr); boolean upreg = calcChangeDirection(orig, to.gene); String key = from.gene + " " + edgeType + " " + to.gene; writer.write("edge\t" + key + "\tcolor\t" + val2Color(cumPval, 0) + "\n"); writer.write("edge\t" + key + "\twidth\t2\n"); if (affectedDw.get(orig).contains(to.gene)) { double pval = calcPVal(orig, Collections.singleton(to.gene)); writer.write("node\t" + to.gene + "\tcolor\t" + val2Color(pval, upreg ? 1 : -1) + "\n"); } else { writer.write("node\t" + to.gene + "\tcolor\t255 255 255\n"); } }