package circdesignagui.TripleSim; import java.io.PrintWriter; import circdesigna.TripleSim.ReactionGraph3X.BimolecularNode; import circdesigna.TripleSim.ReactionGraph3X.Graph; import circdesigna.TripleSim.ReactionGraph3X.GraphEdge; import circdesigna.TripleSim.ReactionGraph3X.GraphNode; public class TripleSimGraphVis { public TripleSimGraphVis(){ } public void write(Graph g, PrintWriter out){ out.println("digraph G{"); for(BimolecularNode pair : g.allDockings.values()){ if (pair.neighbors.isEmpty()){ continue; } for(GraphNode q : pair.associate){ out.println(q.index+" -> "+pair.index+" [dir=none, len=1]"); } out.println(pair.index+" [shape=square,label=\"\",height=.1,width=.1]"); } for(GraphNode p : g.allSingles.values()){ String color = "black"; if (p.initialConc > 0){ color = "purple"; } out.println(p.index+" [shape=point, color="+color+", label=\""+p.structure.getStructureString()+"\"]"); } for(GraphEdge p : g.edges){ //System.out.println(p.reverse.towards+" "+p.type); out.println(p.reverse.towards.index+" -> "+p.towards.index); String k1 = String.format("%.3e",p.k); String k2 = String.format("%.3e",p.reverse.k); if (p.type.startsWith("Branch Migration")){ String dir = "none"; if (p.k > 0){ dir = "forward"; if (p.reverse.k > 0){ dir = "both"; } } else { dir = "back"; } out.print(" [dir="+dir+", color=\"green\" label=\""+k1+"\"]"); } else { String addStr = ", label=\""+k1+":"+k2+"\""; out.print(" [dir=both, color=\"red:blue\""+addStr+"]"); } out.println(); } out.println("}"); } }