private void markExistingDirectionalLabels(Graph g, int prev, BitSet visited, Map<Edge, Edge> replacement, BitSet dbAtoms, int u) { visited.set(u); final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge e = g.edgeAt(u, j); int v = e.other(u); if (v == prev) continue; Edge f = replacement.get(e); if (f == null) { replacement.put(e, e); if (!visited.get(v)) { if (dbAtoms.get(v)) markExistingDirectionalLabels(g, u, visited, replacement, dbAtoms, v); } } } } }
private void invertExistingDirectionalLabels(Graph g, int prev, BitSet visited, Map<Edge, Edge> replacement, BitSet dbAtoms, int u) { visited.set(u); final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge e = g.edgeAt(u, j); int v = e.other(u); if (v == prev) continue; Edge f = replacement.get(e); if (f == null) { replacement.put(e, e.inverse()); if (!visited.get(v)) { if (dbAtoms.get(v)) invertExistingDirectionalLabels(g, u, visited, replacement, dbAtoms, v); } } } }
private boolean hasAdjDirectionalLabels(Graph g, int u) { final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge f = g.edgeAt(u, j); if (f.bond().directional()) return true; } return false; }
ordering[u] = i++; BitSet dbAtoms = new BitSet(); final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge e = g.edgeAt(u, j); final int d2 = g.degree(u); for (int j2 = 0; j2 < d2; ++j2) { adj.add(g.edgeAt(u, j2).other(u)); final int d3 = g.degree(v); for (int j2 = 0; j2 < d3; ++j2) { adj.add(g.edgeAt(v, j2).other(v));
boolean safeToClean(Graph g, int v, Map<Edge,Edge> replacements) { final int d = g.degree(v); for (int j = 0; j < d; ++j) { final Edge e = g.edgeAt(v, j); if (e.bond().order() == 2) { int w = e.other(v); final int d2 = g.degree(w); for (int j2 = 0; j2 < d2; ++j2) { final Edge f = g.edgeAt(w, j2); if (isDirectional(f, replacements)) return false; } } } return true; }
Edge firstDirectionalLabel(Graph g, int u) { Edge first = null; final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge f = g.edgeAt(u, j); if (f.bond() == Bond.UP || f.bond() == Bond.DOWN) { if (first == null || ordering[f.other(u)] < ordering[first.other(u)]) first = f; } } return first; }
final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge e = g.edgeAt(u, j); int v = e.other(u); if (v > u && e.bond() == Bond.DOUBLE) { if (g.degree(u) < 2 || g.degree(v) < 2) continue; if (g.degree(u) + g.degree(v) > 4) doublebonds.add(e); int u = e.either(); int v = e.other(u); final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge f = g.edgeAt(u, j); final int d2 = g.degree(v); for (int j = 0; j < d2; ++j) { final Edge f = g.edgeAt(v, j); final int d = g.degree(u); for (int j = 0; j < d; ++j) { Edge e = g.edgeAt(u, j);
public Graph apply(Graph g) { Graph h = new Graph(g.order()); for (int u = 0; u < g.order(); u++) { h.addAtom(fromSubset(g.atom(u), g.bondedValence(u), g.degree(u))); h.addTopology(g.topologyOf(u)); } // edges are unchanged for (Edge e : g.edges()) h.addEdge(e); return h; }
@Override public Graph apply(Graph g) { Traversal traversal = new Traversal(g); Graph h = new Graph(g.order()); h.addFlags(g.getFlags(0xffffffff)); // copy atom/topology information this is unchanged for (int u = 0; u < g.order(); u++) { h.addAtom(g.atom(u)); h.addTopology(g.topologyOf(u)); } // change edges (only changed added to replacement) for (int u = 0; u < g.order(); u++) { final int d = g.degree(u); for (int j = 0; j < d; ++j) { final Edge e = g.edgeAt(u, j); if (e.other(u) > u) { if (traversal.acc.containsKey(e)) { h.addEdge(traversal.acc.get(e)); } else { h.addEdge(e); } } } } return h.sort(new Graph.CanOrderFirst()); }
} else if (g.degree(v) == 2) { List<Edge> edges = new ArrayList<>(); edges.add(e);