# From Eiger HDF5 to CBF frames This tutorial shows the CBF conversion path provided by `ewoksscxrd` through `fabio.app.eiger2cbf`, with bundled `XDS.INP` generation. ## 1. Choose the bundled workflow Use: - `src/ewoksscxrd/workflows/demo_eiger2cbf.json` ## 2. Inspect task inputs ```bash ewoks show src/ewoksscxrd/workflows/demo_eiger2cbf.json ``` The main runtime inputs are: - `images`: list of Eiger or LImA HDF5 files - `output`: CBF filename template such as `frame_{index}.cbf` Useful optional inputs include `offset`, `mask`, `pilatus`, `energy` or `wavelength`, `distance`, `beam`, goniometer angles, and the image transform flags (`rotation`, `transpose`, `flip_ud`, `flip_lr`). Because the workflow also runs `CreateXDSInp`, you must also provide the XDS geometry inputs such as `detector`, `nx`, `ny`, `qx`, `qy`, `data_range`, and `oscillation_range`. Provide `starting_angle` only if you want `STARTING_ANGLE` and `STARTING_FRAME` written into `XDS.INP`. ## 3. Execute the workflow from Python ```python import json from pathlib import Path from ewoks import execute_graph workflow_path = Path("src/ewoksscxrd/workflows/demo_eiger2cbf.json") workflow = json.loads(workflow_path.read_text()) inputs = [ { "name": "images", "value": ["/data/.../scan0001/eiger_0000.h5"], "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "output", "value": "/data/.../scan0001/cbf/frame_{index:04d}.cbf", "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "offset", "value": 1, "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "wavelength", "value": 0.2846, "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "distance", "value": 0.1518, "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "beam", "value": [1052, 1102], "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "rotation", "value": 180, "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "flip_lr", "value": True, "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, { "name": "omega", "value": "-36.000000-index*-0.500000", "task_identifier": "ewoksscxrd.tasks.eiger2cbf.Eiger2CBF", }, ] execute_graph( workflow, inputs=inputs, convert_destination="executed_demo_eiger2cbf.json", merge_outputs=False, ) ``` ## 4. Execute the script ```bash python run_eiger2cbf.py ``` ## 5. Validate produced files The conversion creates one `.cbf` file per frame under the directory selected by the `output` template.