private void addColliders( Graph graph, final SepsetProducer sepsetProducer, IKnowledge knowledge) { final Map<Triple, Double> collidersPs = findCollidersUsingSepsets(sepsetProducer, graph, verbose, knowledge); List<Triple> colliders = new ArrayList<>(collidersPs.keySet()); Collections.shuffle(colliders); Collections.sort( colliders, new Comparator<Triple>() { public int compare(Triple o1, Triple o2) { return -Double.compare(collidersPs.get(o1), collidersPs.get(o2)); } }); if (trueDag != null) { for (Triple collider : colliders) { Node a = collider.getX(); Node b = collider.getY(); Node c = collider.getZ(); List<Node> sep = trueDag.getSepset(a, c); System.out.println( "JJJ " + collider + " collider = " + (sep != null && !sep.contains(b)) + " p = " + collidersPs.get(collider)); } } for (Triple collider : colliders) { Node a = collider.getX(); Node b = collider.getY(); Node c = collider.getZ(); if (!(isArrowpointAllowed(a, b, knowledge) && isArrowpointAllowed(c, b, knowledge))) { continue; } if (!graph.getEdge(a, b).pointsTowards(a) && !graph.getEdge(b, c).pointsTowards(c)) { graph.setEndpoint(a, b, Endpoint.ARROW); graph.setEndpoint(c, b, Endpoint.ARROW); } } }