diff --git a/bin/fws2dot b/bin/fws2dot new file mode 100755 index 0000000000000000000000000000000000000000..67f36948ce054826100e4cb47b60f925661cc5ac --- /dev/null +++ b/bin/fws2dot @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""converter from fireworks to graphviz dot for visualization purposes""" +import argparse +from fireworks.fw_config import LAUNCHPAD_LOC +from fireworks.fw_config import CONFIG_FILE_DIR +from fireworks.scripts.lpad_run import get_lp +from fireworks.utilities.dagflow import DAGFlow + + +def id_type(value): + """check the type of fw_id""" + rvalue = int(value) + if rvalue < 0: + msg = f'{value} must have non-negative int value' + raise argparse.ArgumentTypeError(msg) + return rvalue + + +def parse_clargs(): + """parse the command line arguments for the script""" + m_description = 'Converts a FireWorks workflow to graphviz DOT format' + parser = argparse.ArgumentParser(description=m_description) + parser.add_argument('-c', '--config_dir', + help='path to configuration file (if -l unspecified)', + default=CONFIG_FILE_DIR) + parser.add_argument('-l', '--launchpad_file', + help='path to launchpad file', default=LAUNCHPAD_LOC) + parser.add_argument('-f', '--filename', required=False, + help='filename for output', default='wf.dot') + parser.add_argument('-v', '--view', default='combined', required=False, + help='View: one of controlflow, dataflow, combined') + parser.add_argument('-i', '--fw_id', default=False, required=True, + help='firework id', type=id_type) + return parser.parse_args() + + +def main(): + """main function""" + clargs = parse_clargs() + dag = DAGFlow.from_fireworks(get_lp(clargs).get_wf_by_fw_id(clargs.fw_id)) + dag.to_dot(filename=clargs.filename, view=clargs.view) + + +if __name__ == '__main__': + main() diff --git a/docs/basics.rst b/docs/basics.rst index 1330a0952e3092d6f7d2542e3a5bbb91e6da0acb..6717bac07ecb453a6818fd152c8711c05fb1fd9e 100644 --- a/docs/basics.rst +++ b/docs/basics.rst @@ -126,6 +126,21 @@ If a workflow has been added without such a check, it can be checked later with: **NOTE:** The correctness check is recommended for all exercises in this tutorial. +Visualize workflows +------------------- + +Already added workflows can be converted into graphviz DOT format and viewed +graphically using the tool provided in this tutorial in the **bin** folder:: + + fws2dot -i <firework ID> [-v <controlflow | dataflow | combined>] [-f <filename>] + +After the dot file is produced it can be converted to PDF and the workflow graph +can be viewed:: + + dot -Tpdf -o workflow.pdf workflow.dot + evince workflow.pdf + + Launch fireworks ----------------