digraph stages {
        ranksep=".5 equally";
	nodesep=.45;
        node [fixedsize,width=2.0,height=1.0,fontname="Helvetica"];
		diffdata_in [style=filled,fillcolor=lightgrey,label="X-ray\ndiffraction\ndata"];
		datred [shape=box,label="Data\nReduction"];
		merged_data [label="merged\ndata"];
		exptphase [shape=box,label="Experimental\nPhasing"];
		molrepl [shape=box,label="Molecular\nReplacement"];
		initial_phases [label="initial\nphases"];
		model_cell [label="model in\nunit cell"];
		mask [label="(MASK)",fontname="Times-Italic"];
		improvement [shape=box,label="Density\nImprovement"];
		map [label="interpretable\nmap"];
		build [shape=box,style=filled,fillcolor=lightgrey,label="Model\nBuilding"];
		ref_model [label="refinable model\n(>~50% of coords)"];
		refinement [shape=box,label="Refinement"];
		final_model [label="final model"];
		analysis [shape=box,label="Structure analysis"];
		geom_anal [label="analysis of\ngeometry and\nfit with data"];
		validation [shape=box,width=2.1,label="Validation & Deposition"];
//
		diffdata_in -> datred -> merged_data;
		merged_data -> exptphase -> initial_phases [weight=8];
		merged_data -> molrepl -> model_cell [weight=8];
		merged_data -> improvement [weight=8,style=invis];
		initial_phases -> improvement;
		model_cell -> improvement [style=dashed];
		mask -> improvement [style=dashed,tailport=w];
		improvement -> map -> build -> ref_model -> refinement [weight=8];
		model_cell -> refinement;
		refinement -> build [style=dashed];
		refinement -> final_model -> analysis -> geom_anal -> validation;
		{rank=same;mask;improvement}
//
	blank [style=invis];
	blank2 [style=invis];
	blank3 [style=invis];
	blank -> blank2 -> blank3 [style=invis];
//
		mapmask [label="MAP/MASK",fontname="Times-Italic"];
		mtz [label="MTZ",fontname="Times-Italic"];
		pdb [label="PDB",fontname="Times-Italic"];
		maputils [shape=box,label="Map & Mask\nUtilities"];
		mtz_utils [shape=box,label="Reflection Data\nUtilities"];
		coord_utils [shape=box,label="Coordinate\nUtilities"];
		graphs [shape=box,label="Graphs,\nPlotting"];
//
		mapmask -> maputils [style=dashed,arrowhead=none];
		mtz -> mtz_utils [style=dashed,arrowhead=none];
		pdb -> coord_utils [style=dashed,arrowhead=none];
		maputils -> mtz_utils [style=invis];
		mtz_utils -> coord_utils [style=invis];
		coord_utils -> graphs [style=invis];
		{rank=same;mapmask;maputils}
		{rank=same;mtz;mtz_utils}
		{rank=same;pdb;coord_utils}
}
