// Based on http://graphviz.org/content/cluster // Node types: // Rectangle: process // Oval: data // Diamond: debug/simulation data digraph G { //rankdir="LR"; // left to right layout // http://www.graphviz.org/content/color-names colorscheme=pastel13; subgraph cluster_0 { graph [ fontsize=24 ]; label = "Reporting"; style=filled; color=2; node [style=filled, color=white, fontsize=12]; gen_sim_input -> dist_csv -> rappor_sim; rappor_sim -> out; rappor_sim -> params; rappor_sim -> hist; rappor_sim -> true_inputs; // Process rappor_sim [label="rappor_sim"]; // Data dist_csv [shape=box, label="dist.csv"]; out [shape=box, label="dist_out.csv"]; params [shape=box, label="dist_params.csv"]; // simulation data hist [shape=box, style=dotted, color=black, label="dist_hist.csv"]; true_inputs [shape=box, style=dotted, color=black, label="dist_true_inputs.txt"]; } subgraph cluster_1 { graph [ fontsize=24 ]; label = "Analysis"; style = filled; color=3; node [style=filled, color=white, fontsize=12]; sum_bits -> counts; // sum_bits needs the params to construct the matrix. Technically it could // infer it, but this is simple. params -> sum_bits; // only in the simulation true_inputs -> demo_sh -> candidates [style=dotted]; candidates -> hash_candidates -> map; params -> hash_candidates; params -> analyze; map -> analyze; counts -> analyze; hist -> analyze [style=dotted]; // only for comparison analyze -> plot_png; // Processes analyze [label="analyze.R"]; demo_sh [label="demo.sh", style=dotted, color=black]; // Data counts [shape=box, label="dist_count.csv"]; candidates [shape=box, label="dist_candidates.txt"]; map [shape=box, label="dist_map.csv"]; plot_png [shape=box, label="dist.png"]; } out -> sum_bits; }