Files
Jungfraujoch/RUGNUX.html
T
2026-08-28 00:42:58 +00:00

86 lines
209 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html> <html lang=en data-content_root="./"> <meta charset=utf-8 /> <meta name=viewport content="width=device-width, initial-scale=1.0" /><meta name=viewport content="width=device-width, initial-scale=1" /> <meta name=viewport content="width=device-width,initial-scale=1"> <meta http-equiv=x-ua-compatible content="ie=edge"> <meta name="lang:clipboard.copy" content="Copy to clipboard"> <meta name="lang:clipboard.copied" content="Copied to clipboard"> <meta name="lang:search.language" content=en > <meta name="lang:search.pipeline.stopwords" content=True > <meta name="lang:search.pipeline.trimmer" content=True > <meta name="lang:search.result.none" content="No matching documents"> <meta name="lang:search.result.one" content="1 matching document"> <meta name="lang:search.result.other" content="# matching documents"> <meta name="lang:search.tokenizer" content="[\s\-]+"> <link href="https://fonts.gstatic.com/" rel=preconnect crossorigin> <link href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,500,700|Roboto:300,400,400i,700&display=fallback" rel=stylesheet > <style> body, input { font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif } code, kbd, pre { font-family: "Roboto Mono", "Courier New", Courier, monospace } </style> <link rel=stylesheet href="_static/stylesheets/application.css"/> <link rel=stylesheet href="_static/stylesheets/application-palette.css"/> <link rel=stylesheet href="_static/stylesheets/application-fixes.css"/> <link rel=stylesheet href="_static/fonts/material-icons.css"/> <meta name=theme-color content="#3f51b5"> <script src="_static/javascripts/modernizr.js"></script> <title>rugnux &#8212; Jungfraujoch 1.0.0-rc.165 documentation</title> <link rel=stylesheet type="text/css" href="_static/pygments.css?v=83e35b93" /> <link rel=stylesheet type="text/css" href="_static/material.css?v=79c92029" /> <script src="_static/documentation_options.js?v=fd7baf7d"></script> <script src="_static/doctools.js?v=9bcbadda"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel=icon href="_static/jfjoch.png"/> <link rel=index title=Index href=genindex.html /> <link rel=search title=Search href=search.html /> <link rel=next title=jfjoch_viewer href=JFJOCH_VIEWER.html /> <link rel=prev title=jfjoch_writer href=JFJOCH_WRITER.html /> <body dir=ltr data-md-color-primary=indigo data-md-color-accent=lime> <svg class=md-svg > <defs data-children-count=0 > <svg xmlns="http://www.w3.org/2000/svg" width=500 height=500 viewBox="0 0 500 500" id=__gitlab ><path fill=currentColor d="M93.667 473.347l90.684-279.097H2.983l90.684 279.097z" transform="translate(156.198 1.16)"/><path fill=currentColor d="M221.333 473.345L130.649 194.25H3.557l217.776 279.095z" transform="translate(28.531 1.16)" opacity=.7 /><path fill=currentColor d="M32 195.155L4.441 279.97a18.773 18.773 0 0 0 6.821 20.99l238.514 173.29L32 195.155z" transform="translate(.089 .256)" opacity=.5 /><path fill=currentColor d="M2.667-84.844h127.092L75.14-252.942c-2.811-8.649-15.047-8.649-17.856 0L2.667-84.844z" transform="translate(29.422 280.256)"/><path fill=currentColor d="M2.667 473.345L93.351 194.25h127.092L2.667 473.345z" transform="translate(247.198 1.16)" opacity=.7 /><path fill=currentColor d="M221.334 195.155l27.559 84.815a18.772 18.772 0 0 1-6.821 20.99L3.557 474.25l217.777-279.095z" transform="translate(246.307 .256)" opacity=.5 /><path fill=currentColor d="M130.667-84.844H3.575l54.618-168.098c2.811-8.649 15.047-8.649 17.856 0l54.618 168.098z" transform="translate(336.974 280.256)"/></svg> </defs> </svg> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer > <input class=md-toggle data-md-toggle=search type=checkbox id=__search > <label class=md-overlay data-md-component=overlay for=__drawer ></label> <a href="#RUGNUX" tabindex=1 class=md-skip > Skip to content </a> <header class=md-header data-md-component=header > <nav class="md-header-nav md-grid"> <div class="md-flex navheader"> <div class="md-flex__cell md-flex__cell--shrink"> <a href=index.html title="Jungfraujoch 1.0.0-rc.165 documentation" class="md-header-nav__button md-logo"> <i class=md-icon >&#xe30d</i> </a> </div> <div class="md-flex__cell md-flex__cell--shrink"> <label class="md-icon md-icon--menu md-header-nav__button" for=__drawer ></label> </div> <div class="md-flex__cell md-flex__cell--stretch"> <div class="md-flex__ellipsis md-header-nav__title" data-md-component=title > <span class=md-header-nav__topic >PSI Jungfraujoch</span> <span class=md-header-nav__topic > rugnux </span> </div> </div> <div class="md-flex__cell md-flex__cell--shrink"> <label class="md-icon md-icon--search md-header-nav__button" for=__search ></label> <div class=md-search data-md-component=search role=dialog > <label class=md-search__overlay for=__search ></label> <div class=md-search__inner role=search > <form class=md-search__form action=search.html method=get name=search > <input type=text class=md-search__input name=q placeholder=""Search"" autocapitalize=off autocomplete=off spellcheck=false data-md-component=query data-md-state=active > <label class="md-icon md-search__icon" for=__search ></label> <button type=reset class="md-icon md-search__icon" data-md-component=reset tabindex=-1 > &#xE5CD; </button> </form> <div class=md-search__output > <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=result > <div class=md-search-result__meta > Type to start searching </div> <ol class=md-search-result__list ></ol> </div> </div> </div> </div> </div> </div> <div class="md-flex__cell md-flex__cell--shrink"> <div class=md-header-nav__source > <a href="https://gitea.psi.ch/mx/jungfraujoch" title="Go to repository" class=md-source data-md-source=github > <div class=md-source__icon > <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width=28 height=28 > <use xlink:href="#__gitlab" width=24 height=24 ></use> </svg> </div> <div class=md-source__repository > Jungfraujoch </div> </a> </div> </div> <script src="_static/javascripts/version_dropdown.js"></script> <script> var json_loc = ""versions.json"", target_loc = "../", text = "Versions"; $( document ).ready( add_version_dropdown(json_loc, target_loc, text)); </script> </div> </nav> </header> <div class=md-container > <nav class=md-tabs data-md-component=tabs > <div class="md-tabs__inner md-grid"> <ul class=md-tabs__list > <li class=md-tabs__item ><a href=index.html class=md-tabs__link >Jungfraujoch 1.0.0-rc.165 documentation</a> </ul> </div> </nav> <main class=md-main > <div class="md-main__inner md-grid" data-md-component=container > <div class="md-sidebar md-sidebar--primary" data-md-component=navigation > <div class=md-sidebar__scrollwrap > <div class=md-sidebar__inner > <nav class="md-nav md-nav--primary" data-md-level=0 > <label class="md-nav__title md-nav__title--site" for=__drawer > <a href=index.html title="Jungfraujoch 1.0.0-rc.165 documentation" class="md-nav__button md-logo"> <i class=md-icon >&#xe30d</i> </a> <a href=index.html title="Jungfraujoch 1.0.0-rc.165 documentation">PSI Jungfraujoch</a> </label> <div class=md-nav__source > <a href="https://gitea.psi.ch/mx/jungfraujoch" title="Go to repository" class=md-source data-md-source=github > <div class=md-source__icon > <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width=28 height=28 > <use xlink:href="#__gitlab" width=24 height=24 ></use> </svg> </div> <div class=md-source__repository > Jungfraujoch </div> </a> </div> <ul class=md-nav__list > <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >General</span></span> <li class=md-nav__item > <a href=ACKNOWLEDGEMENT.html class=md-nav__link >Acknowledgements</a> <li class=md-nav__item > <a href=LICENSE.html class=md-nav__link >License</a> <li class=md-nav__item > <a href=THIRD_PARTY_NOTICES.html class=md-nav__link >Third-party software notices</a> <li class=md-nav__item > <a href=DETECTORS.html class=md-nav__link >Supported detectors</a> <li class=md-nav__item > <a href="DETECTORS.html#dectris-detectors" class=md-nav__link >DECTRIS detectors</a> <li class=md-nav__item > <a href=HARDWARE.html class=md-nav__link >Hardware requirements</a> <li class=md-nav__item > <a href=SOFTWARE.html class=md-nav__link >Software requirements</a> <li class=md-nav__item > <a href=VERSIONING.html class=md-nav__link >Semantic versioning</a> <li class=md-nav__item > <a href=DEPLOYMENT.html class=md-nav__link >Deployment</a> <li class=md-nav__item > <a href=SECURITY.html class=md-nav__link >Security</a> <li class=md-nav__item > <a href=RELEASE_CONTENTS.html class=md-nav__link >Release contents</a> <li class=md-nav__item > <a href=REPOSITORIES.html class=md-nav__link >Linux package repositories</a> <li class=md-nav__item > <a href=NAMING.html class=md-nav__link >Naming</a> <li class=md-nav__item > <a href=CHANGELOG.html class=md-nav__link >Changelog</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >Software</span></span> <li class=md-nav__item > <a href=JFJOCH_BROKER.html class=md-nav__link >jfjoch_broker</a> <li class=md-nav__item > <a href=JFJOCH_WRITER.html class=md-nav__link >jfjoch_writer</a> <li class=md-nav__item > <input class="md-toggle md-nav__toggle" data-md-toggle=toc type=checkbox id=__toc > <label class="md-nav__link md-nav__link--active" for=__toc > rugnux </label> <a href="#" class="md-nav__link md-nav__link--active">rugnux</a> <nav class="md-nav md-nav--secondary"> <ul class=md-nav__list data-md-scrollfix=""> </ul> </nav> <ul class=md-nav__list > <li class=md-nav__item > <a href="#quick-start" class=md-nav__link >Quick start</a> <li class=md-nav__item > <a href="#installation" class=md-nav__link >Installation</a> <li class=md-nav__item > <a href="#where-it-fits-among-the-three-analysis-tools" class=md-nav__link >Where it fits among the three analysis tools</a> <li class=md-nav__item > <a href="#hardware" class=md-nav__link >Hardware</a> <li class=md-nav__item > <a href="#running-rugnux" class=md-nav__link >Running rugnux</a> <li class=md-nav__item > <a href="#input-and-output" class=md-nav__link >Input and output</a> <li class=md-nav__item > <a href="#the-unmerged-export" class=md-nav__link >The unmerged export</a> <li class=md-nav__item > <a href="#the-results-report" class=md-nav__link >The results report</a> <li class=md-nav__item > <a href="#reference-data-and-the-indexing-ambiguity" class=md-nav__link >Reference data and the indexing ambiguity</a> <li class=md-nav__item > <a href="#validating-against-a-model-rugnux-model" class=md-nav__link >Validating against a model (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--model</span></code>)</a> <li class=md-nav__item > <a href="#re-scaling-and-re-merging-rugnux-mode-scale" class=md-nav__link >Re-scaling and re-merging (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--mode</span> <span class=pre >scale</span></code>)</a> <li class=md-nav__item > <a href="#detector-calibration-from-powder-rings-rugnux-mode-calibration" class=md-nav__link >Detector calibration from powder rings (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--mode</span> <span class=pre >calibration</span></code>)</a> <li class=md-nav__item > <a href="#comparing-the-geometry-with-xds" class=md-nav__link >Comparing the geometry with XDS</a> <li class=md-nav__item > <a href="#command-line-options" class=md-nav__link >Command-line options</a> </ul> <li class=md-nav__item > <a href=JFJOCH_VIEWER.html class=md-nav__link >jfjoch_viewer</a> <li class=md-nav__item > <a href=SOFTWARE_INTEGRATION.html class=md-nav__link >Integration with MX data processing software</a> <li class=md-nav__item > <a href=TOOLS.html class=md-nav__link >Tools</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >FPGA</span></span> <li class=md-nav__item > <a href=FPGA.html class=md-nav__link >FPGA smartNIC</a> <li class=md-nav__item > <a href=FPGA_LICENSE.html class=md-nav__link >FPGA license</a> <li class=md-nav__item > <a href=FPGA_DESIGN.html class=md-nav__link >FPGA data flow</a> <li class=md-nav__item > <a href=FPGA_NETWORK.html class=md-nav__link >FPGA network</a> <li class=md-nav__item > <a href=FPGA_PCIE_DRIVER.html class=md-nav__link >FPGA PCIe driver</a> <li class=md-nav__item > <a href=FPGA_SETTINGS.html class=md-nav__link >FPGA advanced reference</a> <li class=md-nav__item > <a href=FPGA_DATA_ANALYSIS.html class=md-nav__link >FPGA data analysis</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >Reference</span></span> <li class=md-nav__item > <a href=DETECTOR_GEOMETRY.html class=md-nav__link >Detector geometry</a> <li class=md-nav__item > <a href=CPU_DATA_ANALYSIS.html class=md-nav__link >CPU-side crystallographic data analysis (Jungfraujoch)</a> <li class=md-nav__item > <a href=OPENAPI.html class=md-nav__link >OpenAPI</a> <li class=md-nav__item > <a href=OPENAPI_SPECS.html class=md-nav__link >OpenAPI specification</a> <li class=md-nav__item > <a href=CBOR.html class=md-nav__link >CBOR messages</a> <li class=md-nav__item > <a href=HDF5.html class=md-nav__link >HDF5 / NeXus data format</a> <li class=md-nav__item > <a href=IMAGE_STREAM.html class=md-nav__link >Data streams</a> <li class=md-nav__item > <a href=PIXEL_MASK.html class=md-nav__link >Pixel mask</a> <li class=md-nav__item > <a href=WEB_FRONTEND.html class=md-nav__link >Web frontend</a> <li class=md-nav__item > <a href=TESTS.html class=md-nav__link >Tests</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >OpenAPI Python client</span></span> <li class=md-nav__item > <a href="python_client/README.html" class=md-nav__link >jfjoch-client</a> <li class=md-nav__item > <a href="python_client/README.html#license-clarification" class=md-nav__link >License Clarification</a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html" class=md-nav__link >jfjoch_client.DefaultApi</a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#cancel-post" class=md-nav__link ><strong>cancel_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-azim-int-get" class=md-nav__link ><strong>config_azim_int_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-azim-int-put" class=md-nav__link ><strong>config_azim_int_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-bragg-integration-get" class=md-nav__link ><strong>config_bragg_integration_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-bragg-integration-put" class=md-nav__link ><strong>config_bragg_integration_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-dark-mask-get" class=md-nav__link ><strong>config_dark_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-dark-mask-put" class=md-nav__link ><strong>config_dark_mask_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-detector-get" class=md-nav__link ><strong>config_detector_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-detector-put" class=md-nav__link ><strong>config_detector_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-file-writer-get" class=md-nav__link ><strong>config_file_writer_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-file-writer-put" class=md-nav__link ><strong>config_file_writer_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-conversion-post" class=md-nav__link ><strong>config_image_format_conversion_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-get" class=md-nav__link ><strong>config_image_format_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-put" class=md-nav__link ><strong>config_image_format_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-raw-post" class=md-nav__link ><strong>config_image_format_raw_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-indexing-get" class=md-nav__link ><strong>config_indexing_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-indexing-put" class=md-nav__link ><strong>config_indexing_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-instrument-get" class=md-nav__link ><strong>config_instrument_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-instrument-put" class=md-nav__link ><strong>config_instrument_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-internal-generator-image-put" class=md-nav__link ><strong>config_internal_generator_image_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-internal-generator-image-tiff-put" class=md-nav__link ><strong>config_internal_generator_image_tiff_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-mask-get" class=md-nav__link ><strong>config_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-mask-tiff-get" class=md-nav__link ><strong>config_mask_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-roi-get" class=md-nav__link ><strong>config_roi_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-roi-put" class=md-nav__link ><strong>config_roi_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-select-detector-get" class=md-nav__link ><strong>config_select_detector_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-select-detector-put" class=md-nav__link ><strong>config_select_detector_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-spot-finding-get" class=md-nav__link ><strong>config_spot_finding_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-spot-finding-put" class=md-nav__link ><strong>config_spot_finding_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-get" class=md-nav__link ><strong>config_user_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-put" class=md-nav__link ><strong>config_user_mask_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-tiff-get" class=md-nav__link ><strong>config_user_mask_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-tiff-put" class=md-nav__link ><strong>config_user_mask_tiff_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-metadata-get" class=md-nav__link ><strong>config_zeromq_metadata_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-metadata-put" class=md-nav__link ><strong>config_zeromq_metadata_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-preview-get" class=md-nav__link ><strong>config_zeromq_preview_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-preview-put" class=md-nav__link ><strong>config_zeromq_preview_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#deactivate-post" class=md-nav__link ><strong>deactivate_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#detector-status-get" class=md-nav__link ><strong>detector_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#fpga-status-get" class=md-nav__link ><strong>fpga_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-clear-post" class=md-nav__link ><strong>image_buffer_clear_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-cbor-get" class=md-nav__link ><strong>image_buffer_image_cbor_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-jpeg-get" class=md-nav__link ><strong>image_buffer_image_jpeg_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-tiff-get" class=md-nav__link ><strong>image_buffer_image_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-start-cbor-get" class=md-nav__link ><strong>image_buffer_start_cbor_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-status-get" class=md-nav__link ><strong>image_buffer_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-pusher-status-get" class=md-nav__link ><strong>image_pusher_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#initialize-post" class=md-nav__link ><strong>initialize_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#pedestal-post" class=md-nav__link ><strong>pedestal_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-pedestal-tiff-get" class=md-nav__link ><strong>preview_pedestal_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-plot-bin-get" class=md-nav__link ><strong>preview_plot_bin_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-plot-get" class=md-nav__link ><strong>preview_plot_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#result-scan-get" class=md-nav__link ><strong>result_scan_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#start-post" class=md-nav__link ><strong>start_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-calibration-get" class=md-nav__link ><strong>statistics_calibration_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-data-collection-get" class=md-nav__link ><strong>statistics_data_collection_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-get" class=md-nav__link ><strong>statistics_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#status-get" class=md-nav__link ><strong>status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#trigger-post" class=md-nav__link ><strong>trigger_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#version-get" class=md-nav__link ><strong>version_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#wait-till-done-post" class=md-nav__link ><strong>wait_till_done_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#wait-until-running-post" class=md-nav__link ><strong>wait_until_running_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#xfel-event-code-get" class=md-nav__link ><strong>xfel_event_code_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#xfel-pulse-id-get" class=md-nav__link ><strong>xfel_pulse_id_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/AzimIntSettings.html" class=md-nav__link >AzimIntSettings</a> <li class=md-nav__item > <a href="python_client/docs/BraggIntegrationSettings.html" class=md-nav__link >BraggIntegrationSettings</a> <li class=md-nav__item > <a href="python_client/docs/BrokerStatus.html" class=md-nav__link >BrokerStatus</a> <li class=md-nav__item > <a href="python_client/docs/CalibrationStatisticsInner.html" class=md-nav__link >CalibrationStatisticsInner</a> <li class=md-nav__item > <a href="python_client/docs/DarkMaskSettings.html" class=md-nav__link >DarkMaskSettings</a> <li class=md-nav__item > <a href="python_client/docs/DatasetSettings.html" class=md-nav__link >DatasetSettings</a> <li class=md-nav__item > <a href="python_client/docs/DatasetSettingsSmargon.html" class=md-nav__link >DatasetSettingsSmargon</a> <li class=md-nav__item > <a href="python_client/docs/DatasetSettingsXrayFluorescenceSpectrum.html" class=md-nav__link >DatasetSettingsXrayFluorescenceSpectrum</a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html" class=md-nav__link >jfjoch_client.DefaultApi</a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#cancel-post" class=md-nav__link ><strong>cancel_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-azim-int-get" class=md-nav__link ><strong>config_azim_int_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-azim-int-put" class=md-nav__link ><strong>config_azim_int_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-bragg-integration-get" class=md-nav__link ><strong>config_bragg_integration_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-bragg-integration-put" class=md-nav__link ><strong>config_bragg_integration_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-dark-mask-get" class=md-nav__link ><strong>config_dark_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-dark-mask-put" class=md-nav__link ><strong>config_dark_mask_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-detector-get" class=md-nav__link ><strong>config_detector_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-detector-put" class=md-nav__link ><strong>config_detector_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-file-writer-get" class=md-nav__link ><strong>config_file_writer_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-file-writer-put" class=md-nav__link ><strong>config_file_writer_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-conversion-post" class=md-nav__link ><strong>config_image_format_conversion_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-get" class=md-nav__link ><strong>config_image_format_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-put" class=md-nav__link ><strong>config_image_format_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-raw-post" class=md-nav__link ><strong>config_image_format_raw_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-indexing-get" class=md-nav__link ><strong>config_indexing_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-indexing-put" class=md-nav__link ><strong>config_indexing_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-instrument-get" class=md-nav__link ><strong>config_instrument_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-instrument-put" class=md-nav__link ><strong>config_instrument_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-internal-generator-image-put" class=md-nav__link ><strong>config_internal_generator_image_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-internal-generator-image-tiff-put" class=md-nav__link ><strong>config_internal_generator_image_tiff_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-mask-get" class=md-nav__link ><strong>config_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-mask-tiff-get" class=md-nav__link ><strong>config_mask_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-roi-get" class=md-nav__link ><strong>config_roi_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-roi-put" class=md-nav__link ><strong>config_roi_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-select-detector-get" class=md-nav__link ><strong>config_select_detector_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-select-detector-put" class=md-nav__link ><strong>config_select_detector_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-spot-finding-get" class=md-nav__link ><strong>config_spot_finding_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-spot-finding-put" class=md-nav__link ><strong>config_spot_finding_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-get" class=md-nav__link ><strong>config_user_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-put" class=md-nav__link ><strong>config_user_mask_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-tiff-get" class=md-nav__link ><strong>config_user_mask_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-tiff-put" class=md-nav__link ><strong>config_user_mask_tiff_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-metadata-get" class=md-nav__link ><strong>config_zeromq_metadata_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-metadata-put" class=md-nav__link ><strong>config_zeromq_metadata_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-preview-get" class=md-nav__link ><strong>config_zeromq_preview_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-preview-put" class=md-nav__link ><strong>config_zeromq_preview_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#deactivate-post" class=md-nav__link ><strong>deactivate_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#detector-status-get" class=md-nav__link ><strong>detector_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#fpga-status-get" class=md-nav__link ><strong>fpga_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-clear-post" class=md-nav__link ><strong>image_buffer_clear_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-cbor-get" class=md-nav__link ><strong>image_buffer_image_cbor_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-jpeg-get" class=md-nav__link ><strong>image_buffer_image_jpeg_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-tiff-get" class=md-nav__link ><strong>image_buffer_image_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-start-cbor-get" class=md-nav__link ><strong>image_buffer_start_cbor_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-status-get" class=md-nav__link ><strong>image_buffer_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-pusher-status-get" class=md-nav__link ><strong>image_pusher_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#initialize-post" class=md-nav__link ><strong>initialize_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#pedestal-post" class=md-nav__link ><strong>pedestal_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-pedestal-tiff-get" class=md-nav__link ><strong>preview_pedestal_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-plot-bin-get" class=md-nav__link ><strong>preview_plot_bin_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-plot-get" class=md-nav__link ><strong>preview_plot_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#result-scan-get" class=md-nav__link ><strong>result_scan_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#start-post" class=md-nav__link ><strong>start_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-calibration-get" class=md-nav__link ><strong>statistics_calibration_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-data-collection-get" class=md-nav__link ><strong>statistics_data_collection_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-get" class=md-nav__link ><strong>statistics_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#status-get" class=md-nav__link ><strong>status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#trigger-post" class=md-nav__link ><strong>trigger_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#version-get" class=md-nav__link ><strong>version_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#wait-till-done-post" class=md-nav__link ><strong>wait_till_done_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#wait-until-running-post" class=md-nav__link ><strong>wait_until_running_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#xfel-event-code-get" class=md-nav__link ><strong>xfel_event_code_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#xfel-pulse-id-get" class=md-nav__link ><strong>xfel_pulse_id_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/Detector.html" class=md-nav__link >Detector</a> <li class=md-nav__item > <a href="python_client/docs/DetectorList.html" class=md-nav__link >DetectorList</a> <li class=md-nav__item > <a href="python_client/docs/DetectorListElement.html" class=md-nav__link >DetectorListElement</a> <li class=md-nav__item > <a href="python_client/docs/DetectorModule.html" class=md-nav__link >DetectorModule</a> <li class=md-nav__item > <a href="python_client/docs/DetectorModuleDirection.html" class=md-nav__link >DetectorModuleDirection</a> <li class=md-nav__item > <a href="python_client/docs/DetectorPowerState.html" class=md-nav__link >DetectorPowerState</a> <li class=md-nav__item > <a href="python_client/docs/DetectorSelection.html" class=md-nav__link >DetectorSelection</a> <li class=md-nav__item > <a href="python_client/docs/DetectorSettings.html" class=md-nav__link >DetectorSettings</a> <li class=md-nav__item > <a href="python_client/docs/DetectorState.html" class=md-nav__link >DetectorState</a> <li class=md-nav__item > <a href="python_client/docs/DetectorStatus.html" class=md-nav__link >DetectorStatus</a> <li class=md-nav__item > <a href="python_client/docs/DetectorTiming.html" class=md-nav__link >DetectorTiming</a> <li class=md-nav__item > <a href="python_client/docs/DetectorType.html" class=md-nav__link >DetectorType</a> <li class=md-nav__item > <a href="python_client/docs/ErrorMessage.html" class=md-nav__link >ErrorMessage</a> <li class=md-nav__item > <a href="python_client/docs/FileWriterFormat.html" class=md-nav__link >FileWriterFormat</a> <li class=md-nav__item > <a href="python_client/docs/FileWriterSettings.html" class=md-nav__link >FileWriterSettings</a> <li class=md-nav__item > <a href="python_client/docs/FpgaStatusInner.html" class=md-nav__link >FpgaStatusInner</a> <li class=md-nav__item > <a href="python_client/docs/GeomRefinementAlgorithm.html" class=md-nav__link >GeomRefinementAlgorithm</a> <li class=md-nav__item > <a href="python_client/docs/GridScan.html" class=md-nav__link >GridScan</a> <li class=md-nav__item > <a href="python_client/docs/ImageBufferStatus.html" class=md-nav__link >ImageBufferStatus</a> <li class=md-nav__item > <a href="python_client/docs/ImageFormatSettings.html" class=md-nav__link >ImageFormatSettings</a> <li class=md-nav__item > <a href="python_client/docs/ImagePusherStatus.html" class=md-nav__link >ImagePusherStatus</a> <li class=md-nav__item > <a href="python_client/docs/ImagePusherType.html" class=md-nav__link >ImagePusherType</a> <li class=md-nav__item > <a href="python_client/docs/IndexingAlgorithm.html" class=md-nav__link >IndexingAlgorithm</a> <li class=md-nav__item > <a href="python_client/docs/IndexingSettings.html" class=md-nav__link >IndexingSettings</a> <li class=md-nav__item > <a href="python_client/docs/InstrumentMetadata.html" class=md-nav__link >InstrumentMetadata</a> <li class=md-nav__item > <a href="python_client/docs/IntegrationModel.html" class=md-nav__link >IntegrationModel</a> <li class=md-nav__item > <a href="python_client/docs/JfjochSettings.html" class=md-nav__link >JfjochSettings</a> <li class=md-nav__item > <a href="python_client/docs/JfjochStatistics.html" class=md-nav__link >JfjochStatistics</a> <li class=md-nav__item > <a href="python_client/docs/MeasurementStatistics.html" class=md-nav__link >MeasurementStatistics</a> <li class=md-nav__item > <a href="python_client/docs/PcieDevicesInner.html" class=md-nav__link >PcieDevicesInner</a> <li class=md-nav__item > <a href="python_client/docs/PixelMaskStatistics.html" class=md-nav__link >PixelMaskStatistics</a> <li class=md-nav__item > <a href="python_client/docs/Plot.html" class=md-nav__link >Plot</a> <li class=md-nav__item > <a href="python_client/docs/PlotUnitX.html" class=md-nav__link >PlotUnitX</a> <li class=md-nav__item > <a href="python_client/docs/Plots.html" class=md-nav__link >Plots</a> <li class=md-nav__item > <a href="python_client/docs/RoiAzimList.html" class=md-nav__link >RoiAzimList</a> <li class=md-nav__item > <a href="python_client/docs/RoiAzimuthal.html" class=md-nav__link >RoiAzimuthal</a> <li class=md-nav__item > <a href="python_client/docs/RoiBox.html" class=md-nav__link >RoiBox</a> <li class=md-nav__item > <a href="python_client/docs/RoiBoxList.html" class=md-nav__link >RoiBoxList</a> <li class=md-nav__item > <a href="python_client/docs/RoiCircle.html" class=md-nav__link >RoiCircle</a> <li class=md-nav__item > <a href="python_client/docs/RoiCircleList.html" class=md-nav__link >RoiCircleList</a> <li class=md-nav__item > <a href="python_client/docs/RoiDefinitions.html" class=md-nav__link >RoiDefinitions</a> <li class=md-nav__item > <a href="python_client/docs/RotationAxis.html" class=md-nav__link >RotationAxis</a> <li class=md-nav__item > <a href="python_client/docs/ScanResult.html" class=md-nav__link >ScanResult</a> <li class=md-nav__item > <a href="python_client/docs/ScanResultImagesInner.html" class=md-nav__link >ScanResultImagesInner</a> <li class=md-nav__item > <a href="python_client/docs/SpotFindingSettings.html" class=md-nav__link >SpotFindingSettings</a> <li class=md-nav__item > <a href="python_client/docs/StandardDetectorGeometry.html" class=md-nav__link >StandardDetectorGeometry</a> <li class=md-nav__item > <a href="python_client/docs/TcpSettings.html" class=md-nav__link >TcpSettings</a> <li class=md-nav__item > <a href="python_client/docs/UnitCell.html" class=md-nav__link >UnitCell</a> <li class=md-nav__item > <a href="python_client/docs/ZeromqMetadataSettings.html" class=md-nav__link >ZeromqMetadataSettings</a> <li class=md-nav__item > <a href="python_client/docs/ZeromqPreviewSettings.html" class=md-nav__link >ZeromqPreviewSettings</a> <li class=md-nav__item > <a href="python_client/docs/ZeromqSettings.html" class=md-nav__link >ZeromqSettings</a> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=toc > <div class=md-sidebar__scrollwrap > <div class=md-sidebar__inner > <nav class="md-nav md-nav--secondary"> <ul class=md-nav__list data-md-scrollfix=""> </ul> </nav> </div> </div> </div> <div class=md-content > <article class="md-content__inner md-typeset" role=main > <section class="tex2jax_ignore mathjax_ignore" id=rugnux > <h1 id=rugnux--page-root >rugnux<a class=headerlink href="#rugnux--page-root" title="Link to this heading"></a></h1> <p><code class="docutils literal notranslate"><span class=pre >rugnux</span></code> is the <strong>offline</strong> crystallographic data-analysis tool of Jungfraujoch — the data-processing half of the system (see <a class="reference internal" href=NAMING.html ><span class="std std-doc">Naming</span></a> for where the name comes from). It takes an existing HDF5 dataset, runs the full analysis pipeline — spot finding, indexing, geometry refinement, Bragg integration and (optionally) scaling and merging — and writes the results to a <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code> file, plus reflection files (<code class="docutils literal notranslate"><span class=pre >.mtz</span></code>/<code class="docutils literal notranslate"><span class=pre >.cif</span></code>/<code class="docutils literal notranslate"><span class=pre >.hkl</span></code>) when merging is requested.</p> <p>It runs the <em>same</em> analysis code as the online and interactive tools, just driven from the command line over a file rather than a live detector stream.</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >rugnux</span> <span class=p >{</span><span class=o >&lt;</span><span class=n >options</span><span class=o >&gt;</span><span class=p >}</span> <span class=o >&lt;</span><span class=nb >input</span><span class=o >.</span><span class=n >h5</span><span class=o >&gt;</span>
</pre></div> </div> <p>Run it with no arguments to print the usage.</p> <blockquote> <div><p><strong>Note.</strong> <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> is under very active development. This page describes the tool and its options at a high level; the authoritative, always-current list of options is the programs own usage message — run <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> with no arguments.</p> </div></blockquote> <nav class="contents local" id=on-this-page > <p class=topic-title >On this page</p> <ul class=simple > <li><p><a class="reference internal" href="#quick-start" id=id1 >Quick start</a></p> <li><p><a class="reference internal" href="#installation" id=id2 >Installation</a></p> <ul> <li><p><a class="reference internal" href="#from-the-package-repositories-rhel-rocky-ubuntu" id=id3 >From the package repositories (RHEL / Rocky / Ubuntu)</a></p> <li><p><a class="reference internal" href="#from-the-release-archive" id=id4 >From the release archive</a></p> <li><p><a class="reference internal" href="#gpu-support" id=id5 >GPU support</a></p> <li><p><a class="reference internal" href="#building-from-source" id=id6 >Building from source</a></p> </ul> <li><p><a class="reference internal" href="#where-it-fits-among-the-three-analysis-tools" id=id7 >Where it fits among the three analysis tools</a></p> <li><p><a class="reference internal" href="#hardware" id=id8 >Hardware</a></p> <li><p><a class="reference internal" href="#running-rugnux" id=id9 >Running rugnux</a></p> <ul> <li><p><a class="reference internal" href="#a-first-run-in-detail" id=id10 >A first run in detail</a></p> <li><p><a class="reference internal" href="#rotation-data" id=id11 >Rotation data</a></p> <li><p><a class="reference internal" href="#still-serial-data" id=id12 >Still / serial data</a></p> </ul> <li><p><a class="reference internal" href="#input-and-output" id=id13 >Input and output</a></p> <ul> <li><p><a class="reference internal" href="#reflection-file-conventions" id=id14 >Reflection-file conventions</a></p> </ul> <li><p><a class="reference internal" href="#the-unmerged-export" id=id15 >The unmerged export</a></p> <li><p><a class="reference internal" href="#the-results-report" id=id16 >The results report</a></p> <ul> <li><p><a class="reference internal" href="#format" id=id17 >Format</a></p> <li><p><a class="reference internal" href="#sweep-quality-and-the-reason-vocabulary" id=id18 >Sweep quality and the reason vocabulary</a></p> <li><p><a class="reference internal" href="#diffraction-anisotropy" id=id19 >Diffraction anisotropy</a></p> </ul> <li><p><a class="reference internal" href="#reference-data-and-the-indexing-ambiguity" id=id20 >Reference data and the indexing ambiguity</a></p> <ul> <li><p><a class="reference internal" href="#what-a-reference-mtz-does-z" id=id21 >What a reference MTZ does (<code class="docutils literal notranslate"><span class=pre >-z</span></code>)</a></p> <li><p><a class="reference internal" href="#the-indexing-ambiguity" id=id22 >The indexing ambiguity</a></p> </ul> <li><p><a class="reference internal" href="#validating-against-a-model-rugnux-model" id=id23 >Validating against a model (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--model</span></code>)</a></p> <li><p><a class="reference internal" href="#re-scaling-and-re-merging-rugnux-mode-scale" id=id24 >Re-scaling and re-merging (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--mode</span> <span class=pre >scale</span></code>)</a></p> <li><p><a class="reference internal" href="#detector-calibration-from-powder-rings-rugnux-mode-calibration" id=id25 >Detector calibration from powder rings (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--mode</span> <span class=pre >calibration</span></code>)</a></p> <li><p><a class="reference internal" href="#comparing-the-geometry-with-xds" id=id26 >Comparing the geometry with XDS</a></p> <li><p><a class="reference internal" href="#command-line-options" id=id27 >Command-line options</a></p> </ul> </nav> <section id=quick-start > <h2 id=quick-start ><a class=toc-backref href="#id1" role=doc-backlink >Quick start</a><a class=headerlink href="#quick-start" title="Link to this heading"></a></h2> <p>Four commands cover most of what people ask of <code class="docutils literal notranslate"><span class=pre >rugnux</span></code>. Each takes the <strong>master</strong> file of a Jungfraujoch dataset and names its output files from <code class="docutils literal notranslate"><span class=pre >-o</span></code>:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=c1 ># 1. everything from the data - index, integrate, scale and merge with the defaults</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># 2. with a reference dataset of the same crystal form: it fixes the space group and the cell,</span>
<span class=c1 ># resolves the indexing ambiguity, and hands over its R-free set</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >-</span><span class=n >z</span> <span class=n >reference</span><span class=o >.</span><span class=n >mtz</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># 3. with a known structure: R-work / R-free and 2Fo-Fc / Fo-Fc maps on top of the merge</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >--</span><span class=n >model</span> <span class=n >model</span><span class=o >.</span><span class=n >pdb</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># 4. with the space group and the cell pinned (-S takes either spelling: P43212 or 96)</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >-</span><span class=n >S</span> <span class=n >P43212</span> <span class=o >-</span><span class=n >C</span> <span class=mi >79</span><span class=p >,</span><span class=mi >79</span><span class=p >,</span><span class=mi >38</span><span class=p >,</span><span class=mi >90</span><span class=p >,</span><span class=mi >90</span><span class=p >,</span><span class=mi >90</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
</pre></div> </div> <p>Parallelism needs no asking for: a run already uses the machines threads. <code class="docutils literal notranslate"><span class=pre >-N</span></code> is there to <em>limit</em> that, or to lift the per-image loops default ceiling of 16 workers per GPU.</p> <p>Nothing more is needed to pick the workflow: a dataset carrying a <strong>goniometer axis</strong> is processed as a rotation sweep, one without as <strong>independent stills</strong>, and scaling and merging run by default in both. A run that merges — the default — leaves five files next to each other:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span> <span class=n >merged</span> <span class=n >intensities</span> <span class=o >+</span> <span class=n >French</span><span class=o >-</span><span class=n >Wilson</span> <span class=n >amplitudes</span><span class=p >,</span> <span class=k >for</span> <span class=n >CCP4</span> <span class=o >/</span> <span class=n >phenix</span>
<span class=n >myrun</span><span class=o >.</span><span class=n >cif</span> <span class=n >the</span> <span class=n >same</span><span class=p >,</span> <span class=k >as</span> <span class=n >mmCIF</span> <span class=o >-</span> <span class=n >the</span> <span class=bp >self</span><span class=o >-</span><span class=n >describing</span> <span class=nb >format</span><span class=p >,</span> <span class=ow >and</span> <span class=n >what</span> <span class=n >to</span> <span class=n >deposit</span>
<span class=n >myrun</span><span class=o >.</span><span class=n >hkl</span> <span class=n >the</span> <span class=n >same</span><span class=p >,</span> <span class=k >as</span> <span class=n >SHELX</span> <span class=n >HKLF</span> <span class=mi >4</span> <span class=o >-</span> <span class=n >feed</span> <span class=n >this</span> <span class=n >to</span> <span class=n >SHELXC</span> <span class=o >/</span> <span class=n >SHELXD</span> <span class=o >/</span> <span class=n >ANODE</span>
<span class=n >myrun_report</span><span class=o >.</span><span class=n >txt</span> <span class=n >what</span> <span class=n >the</span> <span class=n >run</span> <span class=n >determined</span><span class=p >:</span> <span class=n >cell</span><span class=p >,</span> <span class=n >space</span> <span class=n >group</span><span class=p >,</span> <span class=n >statistics</span><span class=p >,</span> <span class=n >warnings</span>
<span class=n >myrun_image</span><span class=o >.</span><span class=n >dat</span> <span class=n >one</span> <span class=n >row</span> <span class=n >per</span> <span class=n >image</span><span class=p >,</span> <span class=k >for</span> <span class=n >plotting</span> <span class=n >how</span> <span class=n >the</span> <span class=n >crystal</span> <span class=n >behaved</span> <span class=n >over</span> <span class=n >the</span> <span class=n >sweep</span>
</pre></div> </div> <p>Read <code class="docutils literal notranslate"><span class=pre >myrun_report.txt</span></code> first: it says which space group was chosen and on what evidence, how far the data go, and anything that needs attention.</p> <p>A few things worth knowing before reaching for more flags:</p> <ul class=simple > <li><p><strong>Rotation data are best left de novo.</strong> Pinning the cell and space group (recipe 4) is the normal thing to do for <strong>serial stills</strong>, where the <code class="docutils literal notranslate"><span class=pre >ffbidx</span></code> indexer needs a cell; on a rotation sweep it tends to <em>degrade</em> low-symmetry cases, so prefer recipe 1 and let the run determine both (see <a class="reference internal" href="#rotation-data">Rotation data</a>). <code class="docutils literal notranslate"><span class=pre >-S</span></code> takes a Hermann-Mauguin symbol (<code class="docutils literal notranslate"><span class=pre >P43212</span></code>) or a space-group number (<code class="docutils literal notranslate"><span class=pre >96</span></code>), whichever is to hand.</p> <li><p><strong>A model names the enantiomorph.</strong> Where the model is isomorphous with the data, <code class="docutils literal notranslate"><span class=pre >--model</span></code> settles which of P4<sub>1</sub>2<sub>1</sub>2 and P4<sub>3</sub>2<sub>1</sub>2 the merged reflections are <em>labelled</em> with — a choice no merged intensity can make. It is a label and nothing more: the two groups have the same rotation operations, so no reflection moves, and in particular I(+) and I(-) are left exactly as measured. Whether the model agrees with the data about the hand is then a real question, and the anomalous difference map answers it — a run says so when the density at the models atoms comes out inverted.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >-z</span></code> and <code class="docutils literal notranslate"><span class=pre >--model</span></code> overlap but are not the same.</strong> A reference MTZ steers the processing from the start; a model scores the merge and settles the frame it is written in. Either resolves an <a class="reference internal" href="#the-indexing-ambiguity">indexing ambiguity</a>, which on serial data decides whether the merged intensities are usable at all.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >--scaling-high-resolution</span> <span class=pre >&lt;d&gt;</span></code></strong>, where the resolution is already known, sharpens both the space-group search and the error model.</p> <li><p>Everything else is in <a class="reference internal" href="#running-rugnux">Running rugnux</a> and the full <a class="reference internal" href="#command-line-options">Command-line options</a>.</p> </ul> </section> <section id=installation > <h2 id=installation ><a class=toc-backref href="#id2" role=doc-backlink >Installation</a><a class=headerlink href="#installation" title="Link to this heading"></a></h2> <p><code class="docutils literal notranslate"><span class=pre >rugnux</span></code> is a <strong>single self-contained executable</strong>. It needs no CUDA toolkit, no Qt, and no Jungfraujoch service running anywhere; on a machine with an NVIDIA GPU it needs the NVIDIA <strong>driver</strong>, and without one it still runs on the CPU.</p> <section id=from-the-package-repositories-rhel-rocky-ubuntu > <h3 id=from-the-package-repositories-rhel-rocky-ubuntu ><a class=toc-backref href="#id3" role=doc-backlink >From the package repositories (RHEL / Rocky / Ubuntu)</a><a class=headerlink href="#from-the-package-repositories-rhel-rocky-ubuntu" title="Link to this heading"></a></h3> <p>On a distribution covered by the <a class="reference internal" href=REPOSITORIES.html ><span class="std std-doc">package repositories</span></a>, <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> is a package of its own:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >sudo</span> <span class=n >dnf</span> <span class=n >install</span> <span class=n >rugnux</span> <span class=c1 ># RHEL / Rocky 8 and 9</span>
<span class=n >sudo</span> <span class=n >apt</span> <span class=n >install</span> <span class=n >rugnux</span> <span class=c1 ># Ubuntu 22.04 / 24.04</span>
</pre></div> </div> <p>It installs <code class="docutils literal notranslate"><span class=pre >/usr/bin/rugnux</span></code> and depends on nothing from the acquisition side — no broker, no detector libraries, no Qt — so it can go on a machine that only processes data.</p> <blockquote> <div><p><strong>Upgrading from rc.163 or earlier.</strong> <code class="docutils literal notranslate"><span class=pre >/usr/bin/rugnux</span></code> used to belong to the <code class="docutils literal notranslate"><span class=pre >jfjoch-viewer</span></code> package. The <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> package declares that the file has moved, so installing it upgrades an old <code class="docutils literal notranslate"><span class=pre >jfjoch-viewer</span></code> in the same transaction instead of failing on the duplicate path. If your <code class="docutils literal notranslate"><span class=pre >jfjoch-viewer</span></code> is pinned to an old version, unpin it or remove it first.</p> </div></blockquote> </section> <section id=from-the-release-archive > <h3 id=from-the-release-archive ><a class=toc-backref href="#id4" role=doc-backlink >From the release archive</a><a class=headerlink href="#from-the-release-archive" title="Link to this heading"></a></h3> <p>For a machine no package manager covers — or for Windows and Arm, which have no repository — take the archive for your architecture from the Gitea release page:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Archive</p> <th class=head ><p>For</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >rugnux-&lt;version&gt;-linux-x86_64-cuda12.tgz</span></code></p> <td><p>64-bit Intel/AMD Linux. Built on RHEL 8, so it runs on any newer Linux</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >rugnux-&lt;version&gt;-linux-aarch64-cuda13.tgz</span></code></p> <td><p>64-bit Arm Linux — NVIDIA GH200 and DGX Spark. Built on Ubuntu 24.04, so it needs glibc 2.39 or newer. Cross-compiled and <strong>not yet exercised on Arm hardware</strong></p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >rugnux-&lt;version&gt;-win64-cuda13.zip</span></code></p> <td><p>64-bit Windows</p> </table> <p><strong>The archive has no top-level directory</strong> — it unpacks straight into <code class="docutils literal notranslate"><span class=pre >bin/</span></code> and <code class="docutils literal notranslate"><span class=pre >share/</span></code>. Always give <code class="docutils literal notranslate"><span class=pre >tar</span></code> a destination of its own, or it will scatter those into whatever directory you are in:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >mkdir</span> <span class=o >-</span><span class=n >p</span> <span class=o >/</span><span class=n >opt</span><span class=o >/</span><span class=n >rugnux</span><span class=o >-</span><span class=mf >1.0.0</span>
<span class=n >tar</span> <span class=n >xzf</span> <span class=n >rugnux</span><span class=o >-</span><span class=mf >1.0.0</span><span class=o >-</span><span class=n >linux</span><span class=o >-</span><span class=n >x86_64</span><span class=o >-</span><span class=n >cuda12</span><span class=o >.</span><span class=n >tgz</span> <span class=o >-</span><span class=n >C</span> <span class=o >/</span><span class=n >opt</span><span class=o >/</span><span class=n >rugnux</span><span class=o >-</span><span class=mf >1.0.0</span>
<span class=o >/</span><span class=n >opt</span><span class=o >/</span><span class=n >rugnux</span><span class=o >-</span><span class=mf >1.0.0</span><span class=o >/</span><span class=nb >bin</span><span class=o >/</span><span class=n >rugnux</span> <span class=c1 ># prints the usage</span>
</pre></div> </div> <p>What you get is:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=nb >bin</span><span class=o >/</span><span class=n >rugnux</span> <span class=n >the</span> <span class=n >program</span>
<span class=n >share</span><span class=o >/</span><span class=n >doc</span><span class=o >/</span><span class=n >jfjoch_rugnux</span><span class=o >/</span><span class=n >LICENSE</span> <span class=n >GPLv3</span>
<span class=n >share</span><span class=o >/</span><span class=n >doc</span><span class=o >/</span><span class=n >jfjoch_rugnux</span><span class=o >/</span><span class=n >THIRD_PARTY_NOTICES</span><span class=o >.</span><span class=n >md</span>
<span class=n >share</span><span class=o >/</span><span class=n >doc</span><span class=o >/</span><span class=n >jfjoch_rugnux</span><span class=o >/</span><span class=n >licenses</span><span class=o >/</span> <span class=n >verbatim</span> <span class=n >licence</span> <span class=n >texts</span> <span class=n >of</span> <span class=n >the</span> <span class=n >bundled</span> <span class=n >dependencies</span>
</pre></div> </div> <p>Nothing is written outside that directory, nothing needs root, and several versions can sit side by side. To remove it, delete the directory. Put <code class="docutils literal notranslate"><span class=pre >bin/</span></code> on your <code class="docutils literal notranslate"><span class=pre >PATH</span></code> if you want to type <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> rather than the full path.</p> <blockquote> <div><p><strong>Mixing the two.</strong> If a <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> package is also installed, <code class="docutils literal notranslate"><span class=pre >/usr/bin/rugnux</span></code> will normally win on <code class="docutils literal notranslate"><span class=pre >PATH</span></code>. Put the archives <code class="docutils literal notranslate"><span class=pre >bin/</span></code> first, or call it by its full path, to be sure which one you are running — <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> prints its version on every run.</p> </div></blockquote> </section> <section id=gpu-support > <h3 id=gpu-support ><a class=toc-backref href="#id5" role=doc-backlink >GPU support</a><a class=headerlink href="#gpu-support" title="Link to this heading"></a></h3> <p>The released archives are CUDA builds. They need only an NVIDIA <strong>driver</strong> on the host — 525.60.13 or newer for the CUDA 12 archive, 580.65.06 or newer for the CUDA 13 ones — and no CUDA toolkit, because everything CUDA is linked statically. With no GPU or no driver, <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> reports zero CUDA devices and falls back to the CPU path, which works but is far slower and offers only the <code class="docutils literal notranslate"><span class=pre >fftw</span></code> indexer. A <strong>V100 needs the CUDA 12 archive</strong>; which generations each build covers is in <a class="reference internal" href="RELEASE_CONTENTS.html#gpu-generations-and-the-nvidia-driver"><span class="std std-ref">Release contents ▸ GPU generations and the NVIDIA driver</span></a>.</p> </section> <section id=building-from-source > <h3 id=building-from-source ><a class=toc-backref href="#id6" role=doc-backlink >Building from source</a><a class=headerlink href="#building-from-source" title="Link to this heading"></a></h3> <p><code class="docutils literal notranslate"><span class=pre >rugnux</span></code> alone, without the server stack or Qt:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>cmake -S . -B build -DJFJOCH_RUGNUX_ONLY=ON -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS="-march=x86-64-v3" -DCMAKE_C_FLAGS="-march=x86-64-v3"
cmake --build build -j$(nproc) --target rugnux
</pre></div> </div> <p>The binary lands in <code class="docutils literal notranslate"><span class=pre >build/rugnux/rugnux</span></code>. Two dependencies must come from the system — <strong>zlib</strong> and <strong>Eigen ≥ 3.4</strong> (<code class="docutils literal notranslate"><span class=pre >zlib-devel</span></code> and <code class="docutils literal notranslate"><span class=pre >eigen3-devel</span></code>, or their Debian equivalents); everything else is downloaded during the first configure, which therefore needs network access. <code class="docutils literal notranslate"><span class=pre >cmake</span> <span class=pre >--build</span> <span class=pre >build</span> <span class=pre >--target</span> <span class=pre >package</span></code> produces the same <code class="docutils literal notranslate"><span class=pre >.tgz</span></code> the release ships. The <code class="docutils literal notranslate"><span class=pre >-march</span></code> flag is not set by the build system on purpose, so a plain build is slower than the released one on the CPU-bound stages — see the note in <code class="docutils literal notranslate"><span class=pre >CMakeLists.txt</span></code>.</p> </section> </section> <section id=where-it-fits-among-the-three-analysis-tools > <h2 id=where-it-fits-among-the-three-analysis-tools ><a class=toc-backref href="#id7" role=doc-backlink >Where it fits among the three analysis tools</a><a class=headerlink href="#where-it-fits-among-the-three-analysis-tools" title="Link to this heading"></a></h2> <table> <thead> <tr class=row-odd ><th class=head ><p>Tool</p> <th class=head ><p>Mode</p> <th class=head ><p>Driven by</p> <th class=head ><p>Output</p> <tr class=row-even ><td><p><a class="reference internal" href=JFJOCH_BROKER.html ><span class="std std-doc"><code class="docutils literal notranslate"><span class=pre >jfjoch_broker</span></code></span></a></p> <td><p>Online, real-time streaming analysis on FPGA + GPU</p> <td><p>HTTP/REST + ZeroMQ</p> <td><p>Live results and statistics, images streamed to <a class="reference internal" href=JFJOCH_WRITER.html ><span class="std std-doc"><code class="docutils literal notranslate"><span class=pre >jfjoch_writer</span></code></span></a></p> <tr class=row-odd ><td><p><a class="reference internal" href=JFJOCH_VIEWER.html ><span class="std std-doc"><code class="docutils literal notranslate"><span class=pre >jfjoch_viewer</span></code></span></a></p> <td><p>Interactive, on-screen exploration</p> <td><p>Qt desktop application</p> <td><p>On screen; a processing job can write the same files as <code class="docutils literal notranslate"><span class=pre >rugnux</span></code></p> <tr class=row-even ><td><p><strong><code class="docutils literal notranslate"><span class=pre >rugnux</span></code></strong></p> <td><p><strong>Offline batch processing of a stored dataset</strong></p> <td><p><strong>Command-line interface</strong></p> <td><p><strong><code class="docutils literal notranslate"><span class=pre >_process.h5</span></code>, and <code class="docutils literal notranslate"><span class=pre >.mtz</span></code>/<code class="docutils literal notranslate"><span class=pre >.cif</span></code>/<code class="docutils literal notranslate"><span class=pre >.hkl</span></code> when merging</strong></p> </table> <p>Use <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> to re-analyse data after acquisition, to experiment with processing parameters, or to produce merged intensities for downstream structure solution.</p> </section> <section id=hardware > <h2 id=hardware ><a class=toc-backref href="#id8" role=doc-backlink >Hardware</a><a class=headerlink href="#hardware" title="Link to this heading"></a></h2> <p>As with the rest of Jungfraujoch, <strong>serious performance requires an NVIDIA GPU</strong>. The CUDA build provides the GPU fast-feedback indexer (<code class="docutils literal notranslate"><span class=pre >ffbidx</span></code>) and the GPU FFT indexer (<code class="docutils literal notranslate"><span class=pre >fft</span></code>); without CUDA only the CPU <code class="docutils literal notranslate"><span class=pre >fftw</span></code> indexer is available. With a GPU present most of the per-image pipeline runs on the device — bitshuffle+LZ4 decompression, image preprocessing, azimuthal integration, spot finding, prediction and Bragg integration — as does rotation scaling and merging, with CPU implementations as the fallback where there is no GPU. The thread count (<code class="docutils literal notranslate"><span class=pre >-N</span></code>) governs the CPU side of all of it.</p> <p>The released CUDA builds need only an NVIDIA <strong>driver</strong> on the host, no CUDA toolkit: 525.60.13 or newer for the CUDA 12 artefacts (RHEL 8 packages, the x86_64 <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> archive) and 580.65.06 or newer for the CUDA 13 ones (RHEL 9, Ubuntu, the aarch64 and Windows <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> archives). Which GPU generations each artefact supports — a V100 in particular works only with the CUDA 12 build — is in <a class="reference internal" href="RELEASE_CONTENTS.html#gpu-generations-and-the-nvidia-driver"><span class="std std-ref">Release contents ▸ GPU generations and the NVIDIA driver</span></a>.</p> </section> <section id=running-rugnux > <h2 id=running-rugnux ><a class=toc-backref href="#id9" role=doc-backlink >Running rugnux</a><a class=headerlink href="#running-rugnux" title="Link to this heading"></a></h2> <section id=a-first-run-in-detail > <h3 id=a-first-run-in-detail ><a class=toc-backref href="#id10" role=doc-backlink >A first run in detail</a><a class=headerlink href="#a-first-run-in-detail" title="Link to this heading"></a></h3> <p>The <a class="reference internal" href="#quick-start">Quick start</a> command is the whole of it:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >/</span><span class=n >path</span><span class=o >/</span><span class=n >to</span><span class=o >/</span><span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
</pre></div> </div> <p><code class="docutils literal notranslate"><span class=pre >-o</span> <span class=pre >myrun</span></code> is the prefix every output file is named from and the last argument is the <strong>master</strong> file of a Jungfraujoch dataset; <code class="docutils literal notranslate"><span class=pre >-N</span></code> would set the worker-thread count, which otherwise follows the machine. Nothing is assumed about the crystal — the goniometer axis in the file tells rugnux this is a rotation sweep, the unit cell comes from indexing the data, the space group from its systematic absences, and the resolution limit from where CC1/2 falls off. Progress, statistics and timing go to the terminal, and the five output files land next to each other.</p> <p><code class="docutils literal notranslate"><span class=pre >myrun_report.txt</span></code> is written for a person, top to bottom: it says which space group was chosen and on what evidence, how far the data go, and anything that needs attention. To pull one number out of it in a script, every value is a <code class="docutils literal notranslate"><span class=pre >KEY=</span> <span class=pre >value</span></code> line:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >grep</span> <span class=s1 >'^SPACE_GROUP_NUMBER= '</span> <span class=n >myrun_report</span><span class=o >.</span><span class=n >txt</span>
<span class=n >grep</span> <span class=s1 >'^UNIT_CELL_CONSTANTS= '</span> <span class=n >myrun_report</span><span class=o >.</span><span class=n >txt</span>
<span class=n >grep</span> <span class=s1 >'^INCLUDE_RESOLUTION_RANGE= '</span> <span class=n >myrun_report</span><span class=o >.</span><span class=n >txt</span>
<span class=n >grep</span> <span class=s1 >'^ISA= '</span> <span class=n >myrun_report</span><span class=o >.</span><span class=n >txt</span>
<span class=n >grep</span> <span class=s1 >'^WARNING:'</span> <span class=n >myrun_report</span><span class=o >.</span><span class=n >txt</span>
</pre></div> </div> <p><strong>Useful variations</strong>, each independent of the others:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=c1 ># tell it where the data really stop, if you already know - this sharpens the</span>
<span class=c1 ># space-group search and the error model</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >--</span><span class=n >scaling</span><span class=o >-</span><span class=n >high</span><span class=o >-</span><span class=n >resolution</span> <span class=mf >1.4</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># keep Friedel pairs apart, for anomalous work</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >-</span><span class=n >A</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># a quick look at the first 200 images only</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >quicklook</span> <span class=o >-</span><span class=n >e</span> <span class=mi >200</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># merge as usual, but also keep the per-image file so the data can be re-merged later</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >--</span><span class=n >write</span><span class=o >-</span><span class=n >process</span><span class=o >-</span><span class=n >h5</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># also write the unmerged MTZ, to scale and merge the observations with another program</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >--</span><span class=n >export</span><span class=o >-</span><span class=n >unmerged</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
<span class=c1 ># check the merged data against a known structure: R-work / R-free and maps</span>
<span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >--</span><span class=n >model</span> <span class=n >model</span><span class=o >.</span><span class=n >pdb</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span>
</pre></div> </div> <p>Re-merging is cheap and does not re-read the images. Ask the full run to keep its per-image file with <code class="docutils literal notranslate"><span class=pre >--write-process-h5</span></code>, and <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span></code> will then re-scale and re-merge the reflections already integrated in it — seconds rather than minutes:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >rugnux</span> <span class=o >-</span><span class=n >o</span> <span class=n >myrun</span> <span class=o >--</span><span class=n >write</span><span class=o >-</span><span class=n >process</span><span class=o >-</span><span class=n >h5</span> <span class=n >dataset_master</span><span class=o >.</span><span class=n >h5</span> <span class=c1 ># integrate and merge once</span>
<span class=n >rugnux</span> <span class=o >--</span><span class=n >mode</span> <span class=n >scale</span> <span class=o >-</span><span class=n >o</span> <span class=n >remerged</span> <span class=o >-</span><span class=n >A</span> <span class=n >myrun_process</span><span class=o >.</span><span class=n >h5</span> <span class=c1 ># re-merge, here anomalously</span>
</pre></div> </div> <p>Use it to try a different resolution limit, anomalous setting or outlier rejection without paying for integration again. <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span></code> merges in the space group and cell the file records, so the second command needs no <code class="docutils literal notranslate"><span class=pre >-S</span></code>. Note that <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> also writes a <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code>, but a run that never merged never determined a space group either, so re-merging that file lands in P1 unless you pass <code class="docutils literal notranslate"><span class=pre >-S</span></code> yourself — <code class="docutils literal notranslate"><span class=pre >--write-process-h5</span></code> is the one to use.</p> </section> <section id=rotation-data > <h3 id=rotation-data ><a class=toc-backref href="#id11" role=doc-backlink >Rotation data</a><a class=headerlink href="#rotation-data" title="Link to this heading"></a></h3> <p>Index, integrate, scale and merge a rotation sweep, fully de novo:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >rugnux</span> <span class=n >rotation_master</span><span class=o >.</span><span class=n >h5</span> \
<span class=o >-</span><span class=n >o</span> <span class=n >rotation_run</span> \
<span class=o >--</span><span class=n >scaling</span><span class=o >-</span><span class=n >high</span><span class=o >-</span><span class=n >resolution</span> <span class=mf >1.4</span>
</pre></div> </div> <p>Because the dataset carries a rotation goniometer axis, it is processed as <strong>rotation data by default</strong>: two-pass rotation indexing (index the sweep once, then process every frame against that lattice) with the <strong><code class="docutils literal notranslate"><span class=pre >rot3d</span></code></strong> partiality model (rotation partials combined into 3D fulls). Scaling and merging run <strong>by default</strong> (for both rotation and stills; <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> turns them off); the unit cell is taken from the rotation indexer and the space group is determined from systematic absences, and both are written into the merged <code class="docutils literal notranslate"><span class=pre >.cif</span></code>.</p> <p>Run <strong>fully de novo</strong> (no <code class="docutils literal notranslate"><span class=pre >-C</span></code>/<code class="docutils literal notranslate"><span class=pre >-S</span></code>) for the best result — supplying a cell or space group up front tends to <em>degrade</em> low-symmetry cases. A <code class="docutils literal notranslate"><span class=pre >-S</span></code> group whose Bravais lattice the crystal turns out not to have stops the run and names the cell that was indexed, rather than merging in a frame the reflections are not in; where the lattice does have that groups setting, the reflections are reindexed into it. <code class="docutils literal notranslate"><span class=pre >--scaling-high-resolution</span></code> (set it to your expected resolution) sharpens both the space-group search and the error model. To tune the first pass use <code class="docutils literal notranslate"><span class=pre >--two-pass-rotation=100</span></code> (or <code class="docutils literal notranslate"><span class=pre >-R100</span></code> — the first-pass image count); to force the sweep to be treated as independent stills use <code class="docutils literal notranslate"><span class=pre >--force-still</span></code>.</p> <p>By default a rotation run also <strong>post-refines the geometry</strong> in a second pass: the first pass integrates and merges at the header geometry, then the detector distance + beam centre and the crystal cell / rotation-axis are refined against the merged fulls (cross-validated, and committed only for a small &lt; 1 % move, with the gauge-weak beam centre restrained toward the header), and the second pass re-indexes de novo and re-integrates at the refined geometry. The refined pass is the canonical <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_*</span></code> output; the header-geometry pass merges only to choose the space group and to judge the refined pass against, and writes no merged files of its own — no <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_01.mtz</span></code>, <code class="docutils literal notranslate"><span class=pre >.cif</span></code>, <code class="docutils literal notranslate"><span class=pre >.hkl</span></code> or <code class="docutils literal notranslate"><span class=pre >_01_image.dat</span></code>. (Where a process file is asked for at all, with <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> or <code class="docutils literal notranslate"><span class=pre >--write-process-h5</span></code>, each pass still writes its own, so <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_01_process.h5</span></code> appears beside <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_process.h5</span></code>.) Disable it with <code class="docutils literal notranslate"><span class=pre >--rotation-no-postrefine</span></code>.</p> <p>After the per-frame scale-fulls step, rotation scaling applies three <strong>correction surfaces</strong>, <strong>on by default</strong> (<code class="docutils literal notranslate"><span class=pre >--no-scaling-corrections</span></code> disables all):</p> <ul class=simple > <li><p><strong>Decay</strong> — a global DebyeWaller relative-<em>B</em> over the run, for the radiation damage that weakens later frames more at high resolution (a resolution×time systematic the resolution-flat per-frame scale cannot remove). It only engages when the total relative-<em>B</em> exceeds a physical floor (2 Ų). An optional <code class="docutils literal notranslate"><span class=pre >--relative-b[=deg]</span></code> extends this single global rate to a smooth per-batch relative-<em>B</em> curve (default 10°-of-rotation batches when bare, off otherwise), cross-validated like the surfaces here, for crystals whose decay is non-linear in dose.</p> <li><p><strong>Absorption</strong> — a smooth multiplicative factor over the diffracted-beam direction in the goniometer frame (path length through the crystal). Negligible at hard X-rays / thin crystals; it matters at low photon energy. Its benefit shows up most on model-based metrics: a smooth absorption error largely cancels among symmetry mates (little effect on the error model / ISa) but still biases the intensities, so it measurably lowers <em>R</em><sub>free</sub>.</p> <li><p><strong>Modulation</strong> — a smooth multiplicative factor over the position where a reflection lands on the detector (a flat-field: detector-response and geometric systematics that vary across the detector plane). Symmetry-equivalents of one reflection land at different detector positions as the crystal rotates, which over-determines the surface. Because it lives in the detector frame (not the rotation) the same correction concept applies to stills. This is the largest of the three on JUNGFRAU data — it lowers <em>R</em><sub>meas</sub> by several to tens of percent on datasets that carry a detector systematic, while holding or improving CC<sub>1/2</sub> and the anomalous signal.</p> </ul> <p>All three are <strong>cross-validated</strong> — fitted on even-numbered frames and kept only if they improve the held-out odd-frame symmetry-equivalent agreement by a clear margin (and vice versa). The agreement is scored as a σ-independent, <em>R</em><sub>meas</sub>-like fractional deviation, so a surface can never pass cross-validation by merely reshaping the sigmas; where the systematic is absent the surface is a no-op rather than a source of added noise, which is why they are safe to leave on.</p> <p>Independently of any correction, a rotation run prints a <strong>radiation-damage report</strong> — the per-image scale correlation-to-merge and mosaicity versus dose, and the relative <em>B</em>-factor change over the run (first→last) together with a per-batch relative-<em>B</em> curve, also written to the merged mmCIF. It is a data-quality-vs-dose diagnostic and never alters the merged intensities. A batch whose data cannot support a measurement prints <code class="docutils literal notranslate"><span class=pre >-</span></code> instead of a value, and the first→last number is printed only where a straight line describes the curve — damage is progressive, so a curve that dips and recovers is a disturbance of the sweep, not dose, and the report says so and points at the sweep-quality section (<code class="docutils literal notranslate"><span class=pre >RADIATION_DAMAGE_RELATIVE_B=</span> <span class=pre >NOT_A_TREND</span></code>).</p> </section> <section id=still-serial-data > <h3 id=still-serial-data ><a class=toc-backref href="#id12" role=doc-backlink >Still / serial data</a><a class=headerlink href="#still-serial-data" title="Link to this heading"></a></h3> <p>A dataset with <strong>no goniometer axis</strong> (e.g. a serial grid scan) is processed as <strong>independent stills automatically</strong> — no flag needed. Known-cell indexing with the GPU fast-feedback indexer, then merge against a reference structure:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >rugnux</span> <span class=n >serial_master</span><span class=o >.</span><span class=n >h5</span> \
<span class=o >-</span><span class=n >o</span> <span class=n >serial_run</span> \
<span class=o >-</span><span class=n >X</span> <span class=n >ffbidx</span> <span class=o >-</span><span class=n >C</span> <span class=mi >79</span><span class=p >,</span><span class=mi >79</span><span class=p >,</span><span class=mi >38</span><span class=p >,</span><span class=mi >90</span><span class=p >,</span><span class=mi >90</span><span class=p >,</span><span class=mi >90</span> <span class=o >-</span><span class=n >S</span> <span class=mi >96</span> \
<span class=o >-</span><span class=n >z</span> <span class=n >reference</span><span class=o >.</span><span class=n >mtz</span> \
<span class=o >--</span><span class=n >scaling</span><span class=o >-</span><span class=n >high</span><span class=o >-</span><span class=n >resolution</span> <span class=mf >1.8</span>
</pre></div> </div> <p>A crystal form with an <a class="reference internal" href="#the-indexing-ambiguity">indexing ambiguity</a> — P3, P4, P6 and their relatives — <strong>needs</strong> either the <code class="docutils literal notranslate"><span class=pre >-z</span></code> above or <code class="docutils literal notranslate"><span class=pre >--model</span> <span class=pre >model.pdb</span></code>, and needs it on the run that integrates: every crystal is indexed in its own hand, and the two are averaged together in the merge unless each image is put into the same hand as it is integrated.</p> <p><code class="docutils literal notranslate"><span class=pre >ffbidx</span></code> requires a known cell (<code class="docutils literal notranslate"><span class=pre >-C</span></code>) and is the indexer of choice for sparse serial stills. The self-calibrating spot finder is on by default for both workflows (<code class="docutils literal notranslate"><span class=pre >--no-adaptive-spots</span></code> turns it off), and for serial stills leave <code class="docutils literal notranslate"><span class=pre >--min-pix-per-spot</span></code> <strong>unset</strong> so it is chosen per image — across the still-target battery this combination raises the indexing rate and typically extends resolution over a fixed threshold and fixed min-pix, at equal or better CC½. (You can still pin a fixed threshold with <code class="docutils literal notranslate"><span class=pre >--spot-sigma</span></code> / <code class="docutils literal notranslate"><span class=pre >--spot-threshold</span></code> and a fixed min-pix with <code class="docutils literal notranslate"><span class=pre >--min-pix-per-spot</span></code>.) If a dataset <em>does</em> carry a goniometer axis but you want per-frame stills processing anyway, add <code class="docutils literal notranslate"><span class=pre >--force-still</span></code>.</p> </section> </section> <section id=input-and-output > <h2 id=input-and-output ><a class=toc-backref href="#id13" role=doc-backlink >Input and output</a><a class=headerlink href="#input-and-output" title="Link to this heading"></a></h2> <p><strong>Input</strong> is a single Jungfraujoch HDF5 master file (NXmx-based). Spots are always found by <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> itself, including for the two-pass rotation first pass — the spot lists a dataset may already carry were found online, at the acquisitions threshold and with its ice-band spots already discarded, so reusing them would hide the spot-finding settings from the lattice search.</p> <p><strong>Output</strong> (controlled by <code class="docutils literal notranslate"><span class=pre >-o,</span> <span class=pre >--output-prefix</span></code>, default <code class="docutils literal notranslate"><span class=pre >output</span></code>):</p> <ul> <li><p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_process.h5</span></code> — NXmx-compliant HDF5 with derived metadata (spots, indexing, integration, azimuthal integration, per-image statistics). See <a class="reference internal" href=HDF5.html ><span class="std std-doc">HDF5 / NeXus data format</span></a> for the layout. Written by default only when <strong>not</strong> merging (i.e. under <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code>); add <code class="docutils literal notranslate"><span class=pre >--write-process-h5</span></code> to also write it when merging. It does not copy the images: <code class="docutils literal notranslate"><span class=pre >/entry/data/data</span></code> is a virtual dataset over the <em>input</em> files, so the input has to stay where it was for the pictures to be readable, and the pixel metadata (<code class="docutils literal notranslate"><span class=pre >bit_depth_readout</span></code>, <code class="docutils literal notranslate"><span class=pre >underload_value</span></code>, the dataset type) describes those files rather than the signed 32-bit container rugnux processes in.</p> <li><p>Merging is <strong>on by default</strong> (<code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> disables it). The merged reflections are written in <strong>three</strong> formats — each has its uses downstream:</p> <ul class=simple > <li><p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.mtz</span></code> — CCP4 MTZ (<code class="docutils literal notranslate"><span class=pre >IMEAN</span></code>/<code class="docutils literal notranslate"><span class=pre >I(+)</span></code>/<code class="docutils literal notranslate"><span class=pre >I(-)</span></code>, FrenchWilson <code class="docutils literal notranslate"><span class=pre >F</span></code>, <code class="docutils literal notranslate"><span class=pre >FreeR_flag</span></code>) for the CCP4 / phenix reflection tools.</p> <li><p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.cif</span></code> — mmCIF, for deposition and as the self-describing native format (also carries the merging statistics, ISa, twinning and radiation-damage indicators).</p> <li><p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.hkl</span></code> — SHELX <strong>HKLF 4</strong> text (<code class="docutils literal notranslate"><span class=pre >h</span> <span class=pre >k</span> <span class=pre >l</span> <span class=pre >I</span> <span class=pre >σ(I)</span></code>, fixed <code class="docutils literal notranslate"><span class=pre >3I4,2F8.2</span></code>), the direct input for <strong>SHELXC / ANODE / SHELXD</strong>. Bijvoet mates are written separately (<code class="docutils literal notranslate"><span class=pre >I(+)</span></code> at <code class="docutils literal notranslate"><span class=pre >+hkl</span></code>, <code class="docutils literal notranslate"><span class=pre >I(-)</span></code> at <code class="docutils literal notranslate"><span class=pre >-hkl</span></code>) so the anomalous signal is preserved; intensities are put on a common scale so the largest value fits the fixed-width field (the absolute scale is irrelevant to SHELXC/ANODE), and the file ends with the <code class="docutils literal notranslate"><span class=pre >0</span> <span class=pre >0</span> <span class=pre >0</span></code> terminator record.</p> </ul> <p>All three carry the <strong>refined unit cell</strong> (from rotation indexing) and the <strong>space group determined from systematic absences</strong> (constrained to the indexed lattice symmetry).</p> <li><p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_unmerged.mtz</span></code> — the integrated observations <em>before</em> merging, as an unmerged MTZ in POINTLESSs column layout, so the data can be scaled and merged by <strong>aimless</strong>, <strong>pointless</strong>, <strong>careless</strong> or <code class="docutils literal notranslate"><span class=pre >iotbx.merging_statistics</span></code> instead of by rugnux. Written when <code class="docutils literal notranslate"><span class=pre >--export-unmerged</span></code> asks for it, alongside the merged files and with <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> too. See <a class="reference internal" href="#the-unmerged-export">The unmerged export</a> below. <code class="docutils literal notranslate"><span class=pre >--export-unmerged-partials</span></code> writes <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_unmerged_partials.mtz</span></code>, one row per image, instead of summing.</p> <li><p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_report.txt</span></code> — the <strong>results report</strong>: what the run determined, in a form both a person and a beamline script can read. Always written, next to the files above. See <a class="reference internal" href="#the-results-report">The results report</a> below.</p> </ul> <p>Merged statistics (⟨I/σ⟩, CC1/2, completeness, …), the error model and timing are printed to the console. By default the written resolution is trimmed automatically where CC1/2 falls off (<code class="docutils literal notranslate"><span class=pre >--resolution-cutoff</span> <span class=pre >cc-logistic</span></code>, CC1/2 target 0.30); set <code class="docutils literal notranslate"><span class=pre >--scaling-high-resolution</span></code> to fix the limit by hand, or <code class="docutils literal notranslate"><span class=pre >--resolution-cutoff</span> <span class=pre >off</span></code> to keep the full range.</p> <section id=reflection-file-conventions > <h3 id=reflection-file-conventions ><a class=toc-backref href="#id14" role=doc-backlink >Reflection-file conventions</a><a class=headerlink href="#reflection-file-conventions" title="Link to this heading"></a></h3> <p><strong>mmCIF.</strong> Standard items carry their standard meanings — <code class="docutils literal notranslate"><span class=pre >_refln.intensity_meas</span></code> / <code class="docutils literal notranslate"><span class=pre >_intensity_sigma</span></code>, the <code class="docutils literal notranslate"><span class=pre >pdbx_I_plus</span></code>/<code class="docutils literal notranslate"><span class=pre >pdbx_I_minus</span></code> and <code class="docutils literal notranslate"><span class=pre >pdbx_F_plus</span></code>/<code class="docutils literal notranslate"><span class=pre >pdbx_F_minus</span></code> anomalous pairs, <code class="docutils literal notranslate"><span class=pre >_reflns.*</span></code> and <code class="docutils literal notranslate"><span class=pre >_reflns_shell.*</span></code> for the merging statistics, <code class="docutils literal notranslate"><span class=pre >_reflns.B_iso_Wilson_estimate</span></code> for the Wilson B, and <code class="docutils literal notranslate"><span class=pre >_cell.*</span></code> / <code class="docutils literal notranslate"><span class=pre >_diffrn_radiation_wavelength.wavelength</span></code> for the geometry.</p> <p>Anything rugnux reports that has no standard item is written under a <strong><code class="docutils literal notranslate"><span class=pre >jfjoch_</span></code></strong> prefix, inside the standard category it belongs to. That is a deliberate choice: a reader that does not know these items ignores them, and one that does can find them without guessing.</p> <table> <thead> <tr class=row-odd ><th class=head ><p>item</p> <th class=head ><p>meaning</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_diffrn_ISa</span></code></p> <td><p>Asymptotic I/σ in <strong>XDSs sense</strong>: the whole-range <code class="docutils literal notranslate"><span class=pre >1/√(a·b)</span></code> of the error model, so it can be read directly against a <code class="docutils literal notranslate"><span class=pre >CORRECT.LP</span></code></p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_diffrn_ISa_asymptotic</span></code></p> <td><p>The <strong>strong-reflection</strong> tier — the counting-subtracted scatter of well-measured groups. XDS has no equivalent, and it can only ever be the more optimistic of the two. Rotation path only</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_error_model_a</span></code>, <code class="docutils literal notranslate"><span class=pre >_b</span></code></p> <td><p>The error model in XDSs convention, <code class="docutils literal notranslate"><span class=pre >σ²</span> <span class=pre >=</span> <span class=pre >a(σ₀²</span> <span class=pre >+</span> <span class=pre >b·I²)</span></code>, so the ISa above is re-derivable from the file rather than taken on trust</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_second_moment_I</span></code></p> <td><p>Twinning second moment ⟨I²⟩/⟨I⟩² — 2.00 untwinned, 1.50 for a perfect twin</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_L_test_mean_abs_L</span></code>, <code class="docutils literal notranslate"><span class=pre >_L_test_mean_L_squared</span></code></p> <td><p>PadillaYeates L-test. ⟨|L|⟩ is 0.500 untwinned / 0.375 for a perfect twin; ⟨L²⟩ is 0.333 / 0.200. Written only when the test found pairs</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_radiation_damage_relative_B</span></code></p> <td><p>Relative <em>B</em> from the first to the last rotation batch (Ų); positive is the usual direction, high-resolution intensity fading with dose</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >_jfjoch_radiation_damage_batch.*</span></code></p> <td><p>Per-batch loop: <code class="docutils literal notranslate"><span class=pre >id</span></code>, <code class="docutils literal notranslate"><span class=pre >rotation_start_deg</span></code>, <code class="docutils literal notranslate"><span class=pre >relative_B</span></code></p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >_diffrn_detector.jfjoch_distance_mm</span></code>, <code class="docutils literal notranslate"><span class=pre >_jfjoch_beam_center_x_pxl</span></code>, <code class="docutils literal notranslate"><span class=pre >_jfjoch_beam_center_y_pxl</span></code></p> <td><p>The refined detector geometry actually used, which is not otherwise recoverable from the reflection file</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.pdbx_aniso_B_tensor_eigenvalue_1..3</span></code>, <code class="docutils literal notranslate"><span class=pre >_pdbx_aniso_B_tensor_eigenvector_*</span></code></p> <td><p>The anisotropy tensor, eigen-decomposed. Eigenvalues are <strong>relative to the weakest direction</strong> (so the third is 0 and the first is the anisotropic Δ<em>B</em>), because only the deviatoric part is determined; eigenvectors are in the PDB orthogonalisation convention. Not written for a cubic Laue class, where symmetry forces Δ<em>B</em> to be zero</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_aniso_delta_B</span></code>, <code class="docutils literal notranslate"><span class=pre >_jfjoch_aniso_delta_B_linear</span></code></p> <td><p>The anisotropic Δ<em>B</em>, and the part of it that actually follows exp(−½ <strong>s</strong><em>B</em><strong>s</strong>). The second is what the verdict is gated on</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_aniso_d_min_1..3</span></code></p> <td><p>Diffraction limit (Å) along each principal direction. A comment marks a value that is the edge of the measured data rather than the crystals own limit</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_aniso_shape</span></code>, <code class="docutils literal notranslate"><span class=pre >_jfjoch_aniso_floor</span></code>, <code class="docutils literal notranslate"><span class=pre >_jfjoch_aniso_significance</span></code>, <code class="docutils literal notranslate"><span class=pre >_jfjoch_aniso_verdict</span></code></p> <td><p>The resolution signature of the deficit, the data sets own systematic-error floor, Δ<em>B</em><sub>linear</sub> over that floor, and the resulting verdict. Each carries its vocabulary as a comment</p> </table> <blockquote> <div><p><strong>Compatibility note.</strong> Before rc.161, <code class="docutils literal notranslate"><span class=pre >_reflns.jfjoch_diffrn_ISa</span></code> carried the <em>asymptote</em>, not the whole-range value. There is no version marker inside the file, so a number taken from an older <code class="docutils literal notranslate"><span class=pre >.cif</span></code> is not comparable with one taken from a newer one.</p> </div></blockquote> <p><strong>SHELX HKLF 4</strong> (<code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.hkl</span></code>). Fixed-format <code class="docutils literal notranslate"><span class=pre >3I4,2F8.2</span></code><code class="docutils literal notranslate"><span class=pre >h</span> <span class=pre >k</span> <span class=pre >l</span> <span class=pre >I</span> <span class=pre >σ(I)</span></code>, one record per reflection, terminated by a <code class="docutils literal notranslate"><span class=pre >0</span> <span class=pre >0</span> <span class=pre >0</span></code> record — which is what <strong>SHELXC</strong>, <strong>SHELXD</strong> and <strong>ANODE</strong> expect. Two properties worth knowing before using it:</p> <ul class=simple > <li><p><strong>Bijvoet mates are written separately</strong>, <code class="docutils literal notranslate"><span class=pre >I(+)</span></code> at <code class="docutils literal notranslate"><span class=pre >+hkl</span></code> and <code class="docutils literal notranslate"><span class=pre >I(-)</span></code> at <code class="docutils literal notranslate"><span class=pre >-hkl</span></code>, so the anomalous differences survive into SHELXC; a reflection with no anomalous split is written once, as its mean.</p> <li><p><strong>Intensities are rescaled</strong> by a single global factor so the largest value fits the <code class="docutils literal notranslate"><span class=pre >F8.2</span></code> field. <code class="docutils literal notranslate"><span class=pre >I</span></code> and <code class="docutils literal notranslate"><span class=pre >σ(I)</span></code> share that factor, so every ratio — and therefore the anomalous signal — is untouched, but the absolute scale is not meaningful. This matters only if you intend to compare magnitudes with another file; SHELXC and ANODE use ratios alone.</p> </ul> </section> </section> <section id=the-unmerged-export > <h2 id=the-unmerged-export ><a class=toc-backref href="#id15" role=doc-backlink >The unmerged export</a><a class=headerlink href="#the-unmerged-export" title="Link to this heading"></a></h2> <p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_unmerged.mtz</span></code> holds every integrated observation, before scaling and merging, in the column layout POINTLESS writes and <strong>aimless</strong>, <strong>pointless</strong>, <strong>careless</strong> and <code class="docutils literal notranslate"><span class=pre >iotbx.merging_statistics</span></code> read. <code class="docutils literal notranslate"><span class=pre >--export-unmerged</span></code> asks for it, in <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >mx</span></code> and <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span></code> alike and with <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> as well, and it replaces nothing — rugnux still writes its own merged files in the same run. It needs an output prefix (<code class="docutils literal notranslate"><span class=pre >-o</span></code>). It is off by default because it is the largest file a run produces, larger on a dense rotation dataset than the merged <code class="docutils literal notranslate"><span class=pre >.mtz</span></code>, <code class="docutils literal notranslate"><span class=pre >.cif</span></code> and <code class="docutils literal notranslate"><span class=pre >.hkl</span></code> put together.</p> <p>Use it to scale the data with a different program, to have pointless give an independent opinion on the space group, or to compare rugnuxs merge against another one on identical input.</p> <p><strong>Columns.</strong> <code class="docutils literal notranslate"><span class=pre >H</span> <span class=pre >K</span> <span class=pre >L</span> <span class=pre >M/ISYM</span> <span class=pre >BATCH</span> <span class=pre >I</span> <span class=pre >SIGI</span> <span class=pre >FRACTIONCALC</span> <span class=pre >XDET</span> <span class=pre >YDET</span> <span class=pre >ROT</span> <span class=pre >LP</span> <span class=pre >FLAG</span></code> — POINTLESSs own set — plus four rugnux extras, <code class="docutils literal notranslate"><span class=pre >DELPHI</span></code> (offset from the centre of the rocking curve), <code class="docutils literal notranslate"><span class=pre >ZETA</span></code> (the Lorentz geometry of that curve), <code class="docutils literal notranslate"><span class=pre >BGMEAN</span></code> and <code class="docutils literal notranslate"><span class=pre >BGVAR</span></code> (the background that was subtracted, and its variance). <code class="docutils literal notranslate"><span class=pre >BATCH</span></code> is the image ordinal plus one, and a batch header is written for every batch that carries an observation. <code class="docutils literal notranslate"><span class=pre >M/ISYM</span></code> records both the symmetry operation and the Friedel hand, so the index as measured is recoverable from the index as stored.</p> <p><strong>What has been applied to the intensities, and what has not.</strong> <code class="docutils literal notranslate"><span class=pre >I</span></code> and <code class="docutils literal notranslate"><span class=pre >SIGI</span></code> carry the <strong>Lorentz-polarization factor and nothing else</strong>; the factor itself is in the <code class="docutils literal notranslate"><span class=pre >LP</span></code> column, so raw counts are <code class="docutils literal notranslate"><span class=pre >I/LP</span></code>. LP is applied because it is per-observation geometry that varies by more than two orders of magnitude across a sweep and no reader can reconstruct it. Deliberately <em>not</em> applied: the <strong>partiality is not divided out</strong> (it is reported in <code class="docutils literal notranslate"><span class=pre >FRACTIONCALC</span></code>), and the <strong>per-image scale is not applied at all</strong> — those programs fit their own scale model, and handing them pre-scaled data would have them fit a correction to a correction. No resolution cut, outlier rejection or ice-ring filtering is applied either.</p> <p><strong>Partials.</strong> On a rotation run the partials of each reflection are summed into one full, using the same rule rugnuxs own 3D combine uses — consecutive frames no more than two apart — and the full is written at the batch its rocking curve is centred on, with the summed rocking-curve fraction in <code class="docutils literal notranslate"><span class=pre >FRACTIONCALC</span></code>. An event that caught less of its rocking curve than <code class="docutils literal notranslate"><span class=pre >--min-partiality</span></code> is not written, exactly as in the merge. Summing is the default because a downstream programs own partial handling is far more conservative than rugnuxs: given raw partials, aimless accepted a small fraction of the file and merged at a fraction of the multiplicity; given summed fulls it uses essentially all of it. <code class="docutils literal notranslate"><span class=pre >--export-unmerged-partials</span></code> writes the unsummed form to <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_unmerged_partials.mtz</span></code> for a program that would rather sum them itself. Stills have no rocking events and are the same either way.</p> <p><strong>Systematic absences.</strong> Lattice-<strong>centring</strong> absences are not written; <strong>screw and glide</strong> absences are. Prediction runs in a primitive setting so that the space-group search can test the centring, but the interstitial reflections that leaves make a reading program take the lattice for primitive and demote the group. Screw and glide absences are kept because they are the evidence the space group was chosen on — deleting them would turn a reading programs test into an assumption. XDS and DIALS draw the line in the same place.</p> <p><strong>Scan axis.</strong> The batch headers carry the goniometer axis <strong>negated</strong> relative to the one in the input file. This is not a correction to the file: rugnux brings an observation made at angle φ back to zero by rotating it by +φ, so the crystal itself turns by −φ, and an MTZ batch header records the axis a batchs own increasing <code class="docutils literal notranslate"><span class=pre >PHI</span></code> turns the crystal about. With the sign as exported, pointlesss independently determined orientation matrix agrees with rugnuxs to well under a degree.</p> </section> <section id=the-results-report > <h2 id=the-results-report ><a class=toc-backref href="#id16" role=doc-backlink >The results report</a><a class=headerlink href="#the-results-report" title="Link to this heading"></a></h2> <p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_report.txt</span></code> records <strong>what the run determined</strong>, next to the reflection files. It is written on every <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >mx</span></code> and <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span></code> run that has an output prefix — there is no option to enable or disable it. Two cases follow from that:</p> <ul class=simple > <li><p>An <strong>empty output prefix</strong> (<code class="docutils literal notranslate"><span class=pre >-o</span> <span class=pre >""</span></code>, the “compute the statistics, persist nothing” mode) writes nothing, the report included.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >--no-merge</span></code></strong> still writes a report. It determined an indexing and a geometry result, and those are recorded; the merging section then says <code class="docutils literal notranslate"><span class=pre >MERGE=</span> <span class=pre >NOT_PERFORMED</span></code> rather than being omitted, so the absence is a statement and not something a reader has to infer.</p> </ul> <p>The report is never allowed to fail a run: if it cannot be written (unwritable path, full disk) the failure is logged as a warning and the run finishes normally.</p> <section id=format > <h3 id=format ><a class=toc-backref href="#id17" role=doc-backlink >Format</a><a class=headerlink href="#format" title="Link to this heading"></a></h3> <p>The model is XDSs <code class="docutils literal notranslate"><span class=pre >CORRECT.LP</span></code>: prose and tables a crystallographer reads top to bottom, with a structure a script can consume without parsing prose.</p> <ul class=simple > <li><p><strong><code class="docutils literal notranslate"><span class=pre >KEY=</span> <span class=pre >value</span></code> assignment lines.</strong> Every number worth extracting is one, so a consumer gets it with a single <code class="docutils literal notranslate"><span class=pre >grep</span> <span class=pre >'^ISA=</span> <span class=pre >'</span></code> and never has to read a sentence. Key names are stable.</p> <li><p><strong>Fixed-width tables</strong> with a stable header row for anything that is genuinely tabular — the resolution shells, the space-group candidates, the sweep-quality ranges.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >WARNING:</span></code> lines</strong>, one per finding, in plain English: <code class="docutils literal notranslate"><span class=pre >WARNING:</span> <span class=pre >Frames</span> <span class=pre >500-600</span> <span class=pre >out</span> <span class=pre >of</span> <span class=pre >beam</span> <span class=pre >(10.1</span> <span class=pre >deg,</span> <span class=pre >scale</span> <span class=pre >0.12</span> <span class=pre >and</span> <span class=pre >CC</span> <span class=pre >0.30</span> <span class=pre >of</span> <span class=pre >the</span> <span class=pre >run,</span> <span class=pre >2%</span> <span class=pre >scaled)</span></code>. <code class="docutils literal notranslate"><span class=pre >grep</span> <span class=pre >'^WARNING:'</span></code> finds every one.</p> <li><p><strong>Section banners</strong> (<code class="docutils literal notranslate"><span class=pre >***…***</span></code> around a numbered title) delimiting the blocks.</p> </ul> <p><code class="docutils literal notranslate"><span class=pre >REPORT_VERSION=</span></code> is the formats own version. Key names, table columns and the reason vocabulary below are an interface other software may depend on: they do not change without that number moving. Adding a key does not move it — a consumer that greps for what it needs is unaffected by one more line.</p> <p>The header block above section 1 records <strong>how the result was produced</strong>: <code class="docutils literal notranslate"><span class=pre >RUGNUX_VERSION=</span></code> and <code class="docutils literal notranslate"><span class=pre >RUGNUX_GIT=</span></code>, <code class="docutils literal notranslate"><span class=pre >DATE=</span></code>, <code class="docutils literal notranslate"><span class=pre >INPUT_FILE=</span></code> and <code class="docutils literal notranslate"><span class=pre >OUTPUT_PREFIX=</span></code>, plus</p> <ul class=simple > <li><p><strong><code class="docutils literal notranslate"><span class=pre >COMMAND_LINE=</span></code></strong> — the invocation as one shell-ready line, arguments containing spaces quoted.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >WALL_TIME=</span></code></strong> — the whole invocation in seconds. It covers everything the process did, opening the file and setting up included, so it is a little larger than the <code class="docutils literal notranslate"><span class=pre >Processing</span> <span class=pre >time</span></code> printed on stdout, which starts once the analysis does.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >GPU_COUNT=</span></code></strong> and <strong><code class="docutils literal notranslate"><span class=pre >GPU=</span></code></strong> — how many GPUs were visible and what they are, e.g. <code class="docutils literal notranslate"><span class=pre >GPU=</span> <span class=pre >4x</span> <span class=pre >NVIDIA</span> <span class=pre >A100-SXM4-80GB</span></code>; several models on one machine are listed as separate groups. <code class="docutils literal notranslate"><span class=pre >GPU_COUNT=</span> <span class=pre >0</span></code> appears on its own, with no <code class="docutils literal notranslate"><span class=pre >GPU=</span></code> line, when nothing was visible — which is the first thing to check when a run took far longer than expected. rugnux prints the same line at startup, before the run, so a missing GPU can be caught while there is still time to stop.</p> </ul> <p>Rates, per-image costs and progress remain on stdout only.</p> <p>Sections, in order: <code class="docutils literal notranslate"><span class=pre >1.</span> <span class=pre >DATA</span> <span class=pre >SET</span></code>, <code class="docutils literal notranslate"><span class=pre >2.</span> <span class=pre >INDEXING</span></code>, <code class="docutils literal notranslate"><span class=pre >3.</span> <span class=pre >GEOMETRY</span> <span class=pre >POST-REFINEMENT</span></code> (rotation only), <code class="docutils literal notranslate"><span class=pre >4.</span> <span class=pre >SPACE</span> <span class=pre >GROUP</span> <span class=pre >DETERMINATION</span></code>, <code class="docutils literal notranslate"><span class=pre >5.</span> <span class=pre >SCALING</span> <span class=pre >AND</span> <span class=pre >MERGING</span></code>, <code class="docutils literal notranslate"><span class=pre >6.</span> <span class=pre >TWINNING</span></code>, <code class="docutils literal notranslate"><span class=pre >7.</span> <span class=pre >RADIATION</span> <span class=pre >DAMAGE</span></code>, <code class="docutils literal notranslate"><span class=pre >8.</span> <span class=pre >SWEEP</span> <span class=pre >QUALITY</span></code>, <code class="docutils literal notranslate"><span class=pre >9.</span> <span class=pre >DIFFRACTION</span> <span class=pre >ANISOTROPY</span></code>, <code class="docutils literal notranslate"><span class=pre >10.</span> <span class=pre >MODEL</span> <span class=pre >VALIDATION</span></code> (only with <code class="docutils literal notranslate"><span class=pre >--model</span></code>), <code class="docutils literal notranslate"><span class=pre >11.</span> <span class=pre >WARNINGS</span></code>. Numbers are fixed: a section that does not apply is left out and the ones after it keep their numbers.</p> <p><strong><code class="docutils literal notranslate"><span class=pre >SPOT_RESOLUTION_ESTIMATE=</span></code></strong> in section 1 is how far the merged data are expected to reach, read off the found spots alone — no lattice, no integration, no merge — so it is there on a run that never merges, and on a run that does it can be read against <code class="docutils literal notranslate"><span class=pre >INCLUDE_RESOLUTION_RANGE</span></code> in section 5. It is a prediction, good to about 0.2 Å on rotation data; nothing is cut on it.</p> <p><strong>Which pass.</strong> A rotation run integrates twice — once at the geometry in the input file, then again at the post-refined geometry — and can integrate a third time if a guard rejects the second pass. There is <strong>one</strong> report, for the pass that became the canonical output, and <code class="docutils literal notranslate"><span class=pre >PASS=</span></code> / <code class="docutils literal notranslate"><span class=pre >PASS_DECISION=</span></code> in section 1 say which pass that is and on what evidence, so no number in the file is ambiguous about which geometry produced it.</p> <p><strong>Not in the report:</strong> timing, frame rates, thread counts, per-image progress and library banners. Those are process, not result, and stay on stdout.</p> </section> <section id=sweep-quality-and-the-reason-vocabulary > <h3 id=sweep-quality-and-the-reason-vocabulary ><a class=toc-backref href="#id18" role=doc-backlink >Sweep quality and the reason vocabulary</a><a class=headerlink href="#sweep-quality-and-the-reason-vocabulary" title="Link to this heading"></a></h3> <p>Section 8 lists the stretches of the sweep over which the crystal delivered much less than the rest of the run — the feedback a beamline control system needs to tell an operator that a crystal should be recentred or recollected. Nothing is excluded on the strength of it; the frames still carry signal, and this is a message for the beamline, not a filter.</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >SWEEP_QUALITY_STATUS</span><span class=o >=</span> <span class=n >COMPUTED</span>
<span class=n >SWEEP_QUALITY_COUNT</span><span class=o >=</span> <span class=mi >1</span>
<span class=n >SWEEP_QUALITY_REASONS</span><span class=o >=</span> <span class=n >no_diffraction</span> <span class=n >crystal_out_of_beam</span> <span class=n >weak_diffraction</span> <span class=n >loss_of_centring</span> <span class=n >radiation_damage</span>
<span class=n >SWEEP_ROTATION</span><span class=o >=</span> <span class=mf >360.0</span>
<span class=n >FLUX_PEAK_TO_TROUGH</span><span class=o >=</span> <span class=mf >1.03</span>
<span class=n >SCALE_MODULATION_PEAK_TO_TROUGH</span><span class=o >=</span> <span class=mf >1.00</span>
<span class=n >FIRST_IMAGE</span> <span class=n >LAST_IMAGE</span> <span class=n >N_IMAGES</span> <span class=n >ROTATION</span> <span class=n >REASON</span> <span class=n >SEVERITY</span> <span class=n >SCALE</span> <span class=n >CC</span> <span class=n >INDEXED</span>
<span class=o >-----------</span> <span class=o >-----------</span> <span class=o >---------</span> <span class=o >--------</span> <span class=o >--------------------</span> <span class=o >--------</span> <span class=o >------</span> <span class=o >------</span> <span class=o >--------</span>
<span class=mi >500</span> <span class=mi >600</span> <span class=mi >101</span> <span class=mf >10.1</span> <span class=n >crystal_out_of_beam</span> <span class=mf >0.83</span> <span class=mf >0.12</span> <span class=mf >0.30</span> <span class=mf >0.02</span>
<span class=o >-----------</span> <span class=o >-----------</span> <span class=o >---------</span> <span class=o >--------</span> <span class=o >--------------------</span> <span class=o >--------</span> <span class=o >------</span> <span class=o >------</span> <span class=o >--------</span>
</pre></div> </div> <p><code class="docutils literal notranslate"><span class=pre >SWEEP_QUALITY_STATUS</span></code> distinguishes <strong><code class="docutils literal notranslate"><span class=pre >COMPUTED</span></code></strong> (the diagnostic ran; a count of 0 means the sweep was clean throughout) from <strong><code class="docutils literal notranslate"><span class=pre >NOT_COMPUTED</span></code></strong> (it did not run — no scaling and merging, or stills data). A consumer must not read a missing table or a zero count as “clean” without checking it. <code class="docutils literal notranslate"><span class=pre >SWEEP_QUALITY_REASONS</span></code> lists the whole vocabulary this version can emit, so an unknown code is distinguishable from a missing one.</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Reason code</p> <th class=head ><p>Meaning</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >no_diffraction</span></code></p> <td><p>The range recorded essentially no diffraction from the indexed lattice.</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >crystal_out_of_beam</span></code></p> <td><p>Frames were lost: over the range a per-image scale could be fitted far less often than over the run.</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >weak_diffraction</span></code></p> <td><p>The frames all still index, but with much less intensity — the cause was not determined.</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >loss_of_centring</span></code></p> <td><p>One cycle of modulation per revolution: the crystal is off the rotation axis.</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >radiation_damage</span></code></p> <td><p>The range runs to the end of a sweep whose quality was already decaying.</p> </table> <p>The vocabulary is <strong>closed and stable</strong>: a code is never renamed, and never reused for a different meaning. New codes are only ever added, and adding one moves <code class="docutils literal notranslate"><span class=pre >REPORT_VERSION</span></code>.</p> <p>The columns are: <code class="docutils literal notranslate"><span class=pre >FIRST_IMAGE</span></code>/<code class="docutils literal notranslate"><span class=pre >LAST_IMAGE</span></code> — inclusive, in processed-image ordinals (the numbering of <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_image.dat</span></code> and of every other per-image array <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> writes; with <code class="docutils literal notranslate"><span class=pre >-s</span></code>/<code class="docutils literal notranslate"><span class=pre >--stride</span></code> the source image is <code class="docutils literal notranslate"><span class=pre >start</span> <span class=pre >+</span> <span class=pre >ordinal</span> <span class=pre >*</span> <span class=pre >stride</span></code>); <code class="docutils literal notranslate"><span class=pre >ROTATION</span></code> — the width of the range in degrees; <code class="docutils literal notranslate"><span class=pre >SEVERITY</span></code> — the fraction of the runs typical diffracting power missing over the range, 0 (as good as the run) to 1 (nothing at all); <code class="docutils literal notranslate"><span class=pre >SCALE</span></code> and <code class="docutils literal notranslate"><span class=pre >CC</span></code> — the ranges mean per-image scale and CC-to-merge relative to the run median; <code class="docutils literal notranslate"><span class=pre >INDEXED</span></code> — the fraction of the ranges frames that were scaled at all. Every range also appears as a <code class="docutils literal notranslate"><span class=pre >WARNING:</span></code> sentence in section 9.</p> <p>The same finding is written <strong>per image</strong> into the <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code> as <code class="docutils literal notranslate"><span class=pre >/entry/MX/sweepQuality</span></code>, when one is written — see <a class="reference internal" href="HDF5.html#entry-mx-spot-finding-and-indexing-cxi-style"><span class="std std-ref">HDF5</span></a>.</p> </section> <section id=diffraction-anisotropy > <h3 id=diffraction-anisotropy ><a class=toc-backref href="#id19" role=doc-backlink >Diffraction anisotropy</a><a class=headerlink href="#diffraction-anisotropy" title="Link to this heading"></a></h3> <p>Section 9 reports how much the fall-off with resolution depends on <strong>direction</strong>, and whether that is established above the data sets own systematic error. It runs automatically on every merging run — there is no flag — and it is a <strong>description only</strong>: no intensity is corrected, no reflection is removed on a directional criterion, and the merged data and the written reflection files do not depend on direction at all. The algorithm is in <a class="reference internal" href=CPU_DATA_ANALYSIS.html ><span class="std std-doc">CPU/GPU data analysis ▸ Diffraction anisotropy</span></a>.</p> <p>Two different quantities are reported and they are not interchangeable. <code class="docutils literal notranslate"><span class=pre >ANISOTROPY_DELTA_B</span></code> is a <em>rate</em> — the range of the principal components of the anisotropy tensor, on the ordinary crystallographic <em>B</em> scale, so it is directly comparable with phenix.xtriages <code class="docutils literal notranslate"><span class=pre >B_cart</span></code>, ctruncates anisotropic <em>B</em> and AIMLESSs anisotropic Δ<em>B</em>. <code class="docutils literal notranslate"><span class=pre >ANISOTROPY_D_MIN_PRINCIPAL</span></code> is where the signal actually <em>runs out</em> along each principal direction. A crystal can have a large Δ<em>B</em> and almost no spread in directional limit, or the reverse.</p> <table> <thead> <tr class=row-odd ><th class=head ><p>key</p> <th class=head ><p>meaning</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_VERDICT</span></code></p> <td><p><code class="docutils literal notranslate"><span class=pre >DETECTED</span></code> | <code class="docutils literal notranslate"><span class=pre >NOT_DETECTED</span></code> | <code class="docutils literal notranslate"><span class=pre >CANNOT_DETERMINE</span></code></p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_FREE_DIRECTIONS</span></code></p> <td><p>Deviatoric directions the Laue class allows — 5 triclinic, 3 monoclinic, 2 orthorhombic, 1 tetragonal/trigonal/hexagonal, <strong>0 cubic</strong></p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_DELTA_B</span></code></p> <td><p>The anisotropic Δ<em>B</em> (Ų), fitted on intensities with nothing dropped</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_DELTA_B_LINEAR</span></code></p> <td><p>The part of it that follows exp(−½ <strong>s</strong><em>B</em><strong>s</strong>). <strong>This is the number the verdict is gated on</strong>, and the report says which of the two it is quoting</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_PRINCIPAL_B</span></code></p> <td><p>The three principal components, relative to the weakest</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_D_MIN_PRINCIPAL</span></code></p> <td><p>Diffraction limit (Å) along each principal direction — where ⟨I/σ(I)⟩ in a 20° cone about it falls through 2</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_D_MIN_CENSORED</span></code></p> <td><p>One flag per direction. <code class="docutils literal notranslate"><span class=pre >1</span></code> means ⟨I/σ(I)⟩ never fell through 2, so the limit is the <strong>edge of the measured data</strong>, a bound and not a measurement. The prose marks it with a <code class="docutils literal notranslate"><span class=pre >&lt;</span></code></p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_D_MIN_SPREAD</span></code></p> <td><p>Range of the three limits — itself a lower bound if any is censored</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_SHAPE</span></code></p> <td><p><code class="docutils literal notranslate"><span class=pre >LINEAR</span></code> (a real DebyeWaller <em>B</em>) | <code class="docutils literal notranslate"><span class=pre >FLAT</span></code> (the deficit does not follow a <em>B</em> at all, so Δ<em>B</em> may be an <strong>under</strong>-estimate) | <code class="docutils literal notranslate"><span class=pre >CONVEX</span></code> (grows faster than a <em>B</em> can) | <code class="docutils literal notranslate"><span class=pre >UNDETERMINED</span></code> (the verdict moved on rebinning)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_FLOOR</span></code>, <code class="docutils literal notranslate"><span class=pre >ANISOTROPY_SIGNIFICANCE</span></code></p> <td><p>The data sets own systematic-error floor (Ų) and Δ<em>B</em><sub>linear</sub> over it. Banded: below 2 not established, 23.5 marginal, above 3.5 established, above 5 strong</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_DETECTION_LIMIT</span></code></p> <td><p>The smallest Δ<em>B</em> that could have been established on these data. It is set by systematic error, not by counting, so it does <strong>not</strong> improve with more reflections or a longer exposure</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >ANISOTROPY_N_OBSERVATIONS</span></code>, <code class="docutils literal notranslate"><span class=pre >ANISOTROPY_FORBIDDEN_Z</span></code>, <code class="docutils literal notranslate"><span class=pre >ANISOTROPY_SIGMA_SYSTEMATIC</span></code></p> <td><p>The unmerged observations the floor was measured on, that measurement against its own counting noise, and the floor before the counting part is added back</p> </table> <p><strong><code class="docutils literal notranslate"><span class=pre >CANNOT_DETERMINE</span></code> is a real answer, not an evasion.</strong> The verdict is not measured against counting statistics — real data carry systematic error far larger than that, and gating on counting error reports anisotropy on data sets that have none. Instead the data set measures its own systematic error in the tensor directions its Laue class <em>forbids</em>, where the true value is exactly zero whatever the crystal is. Where that measurement cannot be made, the run says so and gives the reason: a <strong>triclinic</strong> Laue class (no forbidden direction exists), an observed rotation under about 90°, merged data at the noise floor, a scale model carrying no dose term (<code class="docutils literal notranslate"><span class=pre >--no-scaling-corrections</span></code>), or no unmerged observations. A <strong>cubic</strong> Laue class is different again — symmetry forces Δ<em>B</em> to be exactly zero, and the run says that rather than reporting a measurement.</p> <p>Where anisotropy is detected and the directional limits differ by more than 0.5 Å, a <code class="docutils literal notranslate"><span class=pre >WARNING:</span></code> line says so, since refinement and map interpretation should allow for it.</p> </section> </section> <section id=reference-data-and-the-indexing-ambiguity > <h2 id=reference-data-and-the-indexing-ambiguity ><a class=toc-backref href="#id20" role=doc-backlink >Reference data and the indexing ambiguity</a><a class=headerlink href="#reference-data-and-the-indexing-ambiguity" title="Link to this heading"></a></h2> <section id=what-a-reference-mtz-does-z > <h3 id=what-a-reference-mtz-does-z ><a class=toc-backref href="#id21" role=doc-backlink >What a reference MTZ does (<code class="docutils literal notranslate"><span class=pre >-z</span></code>)</a><a class=headerlink href="#what-a-reference-mtz-does-z" title="Link to this heading"></a></h3> <p><code class="docutils literal notranslate"><span class=pre >-z</span> <span class=pre >reference.mtz</span></code> supplies <strong>known intensities of the same crystal form</strong> — a previously merged dataset, or <code class="docutils literal notranslate"><span class=pre >F-model</span></code> amplitudes computed from a structure. It is read once, before processing starts, and used for four things:</p> <ul class=simple > <li><p><strong>It fixes the space group and the unit cell</strong> the run works in, unless <code class="docutils literal notranslate"><span class=pre >-S</span></code> / <code class="docutils literal notranslate"><span class=pre >-C</span></code> override them. The cell is a <em>soft</em> reference: indexing may still drift within tolerance, so a small mismatch between reference and data is absorbed rather than rejected.</p> <li><p><strong>It resolves the indexing ambiguity</strong> (below) — the one thing the data cannot settle for themselves.</p> <li><p><strong>It hands over its R-free test set</strong>, where the file carries one, so every dataset of a campaign is scored on the same free reflections.</p> <li><p><strong>It reports CC<sub>ref</sub></strong>, the correlation of the merged intensities against the reference, in the statistics table. Stills only — the rotation merge never scores itself against the reference, and its table shows <code class="docutils literal notranslate"><span class=pre >nan</span></code> in that column.</p> </ul> <p>A reference is <strong>not</strong> a scale anchor. Both workflows scale against their own data — scaling images against a foreign dataset injects that datasets systematics — so <code class="docutils literal notranslate"><span class=pre >-z</span></code> never puts the references errors into the intensities. <code class="docutils literal notranslate"><span class=pre >--reference-column</span></code> picks the column to read where the automatic choice (<code class="docutils literal notranslate"><span class=pre >F-model</span></code>, else <code class="docutils literal notranslate"><span class=pre >IMEAN</span></code>/<code class="docutils literal notranslate"><span class=pre >I</span></code>, else <code class="docutils literal notranslate"><span class=pre >FP</span></code>/<code class="docutils literal notranslate"><span class=pre >FOBS</span></code>/<code class="docutils literal notranslate"><span class=pre >F</span></code>) is not the right one.</p> <p>For the second of those four jobs — and only that one — an atomic model does as well: <code class="docutils literal notranslate"><span class=pre >--model</span></code> computes the intensities it needs from the structure. Where a reference dataset exists, prefer it; where only a model does, it resolves the ambiguity just the same.</p> </section> <section id=the-indexing-ambiguity > <h3 id=the-indexing-ambiguity ><a class=toc-backref href="#id22" role=doc-backlink >The indexing ambiguity</a><a class=headerlink href="#the-indexing-ambiguity" title="Link to this heading"></a></h3> <p>Some crystals can be indexed in <strong>more than one way, each equally valid geometrically, and each giving different merged intensities</strong>. This happens whenever the lattice is more symmetric than the crystal: in P3, P4, P6, P3<sub>1</sub>, C2 and their relatives (<em>merohedral</em>), and also where the cell is metrically more symmetric than the Laue class by accident (<em>pseudo-merohedral</em>, up to 2° of obliquity). The alternatives are related by the crystals <strong>twin laws</strong> — reindexing operators such as <code class="docutils literal notranslate"><span class=pre >k,h,-l</span></code>.</p> <p>Nothing in the data breaks the tie: the merge is equally self-consistent either way, so which solution comes out is arbitrary. What that costs depends on the workflow:</p> <ul class=simple > <li><p><strong>Rotation.</strong> The whole sweep is one lattice, so the whole dataset lands in one indexing, picked at random. The merge itself is sound; it may simply be the <em>other</em> solution from an earlier dataset of the same crystal form, and the two cannot be combined, compared or phased against the same model.</p> <li><p><strong>Serial stills.</strong> Every crystal is indexed independently, so a run mixes both indexings into one merge. That is not a labelling matter — reflections that are not symmetry mates get averaged together, and CC<sub>1/2</sub>, R<sub>meas</sub> and the anomalous signal all degrade.</p> </ul> <p>Every run that merges tests for the ambiguity, and where it exists and nothing resolves it, says so in the log and in the reports warnings:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >Indexing</span> <span class=n >ambiguity</span><span class=p >:</span> <span class=n >this</span> <span class=n >cell</span> <span class=o >/</span> <span class=n >space</span> <span class=n >group</span> <span class=n >admits</span> <span class=n >alternative</span> <span class=n >indexing</span> <span class=p >(</span><span class=n >reindex</span> <span class=n >operator</span><span class=p >(</span><span class=n >s</span><span class=p >):</span>
<span class=o >-</span><span class=n >h</span><span class=p >,</span><span class=o >-</span><span class=n >k</span><span class=p >,</span><span class=n >l</span><span class=p >)</span><span class=o >.</span> <span class=n >Serial</span><span class=o >-</span><span class=n >stills</span> <span class=n >crystals</span> <span class=n >are</span> <span class=n >indexed</span> <span class=ow >in</span> <span class=n >one</span> <span class=n >hand</span> <span class=n >at</span> <span class=n >random</span><span class=p >,</span> <span class=ow >and</span> <span class=n >rugnux</span> <span class=n >can</span> <span class=n >only</span> <span class=k >break</span> <span class=n >this</span>
<span class=n >against</span> <span class=n >an</span> <span class=n >external</span> <span class=n >reference</span><span class=o >.</span> <span class=n >WITHOUT</span> <span class=n >one</span> <span class=n >the</span> <span class=n >merge</span> <span class=n >mixes</span> <span class=n >the</span> <span class=n >hands</span> <span class=ow >and</span> <span class=n >CC1</span><span class=o >/</span><span class=mi >2</span> <span class=ow >is</span> <span class=n >degraded</span> <span class=o >-</span> <span class=n >supply</span>
<span class=n >a</span> <span class=n >reference</span> <span class=n >MTZ</span> <span class=p >(</span><span class=o >-</span><span class=n >z</span><span class=p >)</span> <span class=ow >or</span> <span class=n >a</span> <span class=n >model</span> <span class=p >(</span><span class=o >--</span><span class=n >model</span><span class=p >,</span> <span class=n >which</span> <span class=n >needs</span> <span class=o >-</span><span class=n >C</span> <span class=ow >and</span> <span class=o >-</span><span class=n >S</span> <span class=n >here</span><span class=p >)</span> <span class=n >to</span> <span class=n >resolve</span> <span class=n >it</span><span class=o >.</span>
</pre></div> </div> <p>Where something does resolve it, the run says so instead — <code class="docutils literal notranslate"><span class=pre >Indexing</span> <span class=pre >ambiguity</span> <span class=pre >present</span> <span class=pre >(reindex</span> <span class=pre >operator(s):</span> <span class=pre >-h,-k,l);</span> <span class=pre >resolved</span> <span class=pre >against</span> <span class=pre >the</span> <span class=pre >supplied</span> <span class=pre >model</span></code>.</p> <p>How to resolve it:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Situation</p> <th class=head ><p>What to do</p> <tr class=row-even ><td><p><strong>Rotation</strong>, a reference dataset exists</p> <td><p><code class="docutils literal notranslate"><span class=pre >-z</span> <span class=pre >reference.mtz</span></code>. Once the space group is settled, each candidate reindexing of the merged intensities is correlated with the reference and the best-correlating one is re-merged. Only the <em>hkl</em> labels change; the cell does not</p> <tr class=row-odd ><td><p><strong>Serial stills</strong>, a reference dataset exists</p> <td><p><code class="docutils literal notranslate"><span class=pre >-z</span> <span class=pre >reference.mtz</span></code>. Resolved <strong>per image</strong>, at integration time, by correlating each crystals intensities with the reference — so the merge never mixes hands in the first place</p> <tr class=row-even ><td><p><strong>Rotation</strong>, only a model</p> <td><p><code class="docutils literal notranslate"><span class=pre >--model</span> <span class=pre >model.pdb</span></code>. The merged data are fitted to the model in each candidate indexing and the lowest R-free wins; the written reflections are then reindexed into it, so the file, the R-factors and the maps agree. The log gives the winning R-free and the runner-up — a narrow margin means the data did not really decide</p> <tr class=row-odd ><td><p><strong>Serial stills</strong>, only a model</p> <td><p><code class="docutils literal notranslate"><span class=pre >--model</span> <span class=pre >model.pdb</span></code>, with the cell and space group given (<code class="docutils literal notranslate"><span class=pre >-C</span></code> / <code class="docutils literal notranslate"><span class=pre >-S</span></code>). Structure factors are computed from the model up front and used as the reference for the per-image test, exactly as a reference MTZ would be — the ambiguity has to be broken at integration time, and a model can supply the intensities to break it with</p> <tr class=row-even ><td><p>Neither</p> <td><p>The run warns and merges in whichever indexing it found: for rotation data a usable dataset in an arbitrary frame, for stills a degraded one</p> </table> <p>Two things to know about where the choice lands:</p> <ul class=simple > <li><p><strong><code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span></code> cannot repair a stills run after the fact.</strong> The per-image test happens at integration time, so a <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code> whose images were integrated without a reference — an MTZ or a model — has already lost the distinction, and no re-merge brings it back. On rotation data, where the ambiguity is one choice for the whole dataset, <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span> <span class=pre >--model</span> <span class=pre >model.pdb</span></code> does resolve it.</p> <li><p><strong>The choice reaches the written reflections</strong>, not only the R-factors and the maps: the merged <code class="docutils literal notranslate"><span class=pre >.mtz</span></code> / <code class="docutils literal notranslate"><span class=pre >.cif</span></code> / <code class="docutils literal notranslate"><span class=pre >.hkl</span></code> (and <code class="docutils literal notranslate"><span class=pre >_unmerged.mtz</span></code>, where it is asked for) are written in the indexing the model or the reference settled on, so the file can be refined against that model as it stands.</p> </ul> <p>Two things the indexing ambiguity is <strong>not</strong>:</p> <ul class=simple > <li><p><strong>Not the enantiomorph.</strong> P4<sub>1</sub>2<sub>1</sub>2 versus P4<sub>3</sub>2<sub>1</sub>2 (or P3<sub>1</sub> versus P3<sub>2</sub>) leaves the merged intensities <em>unchanged</em>, so no amount of data can choose between them and rugnux never tries — the run reports the pair it cannot separate. A model settles it, being the only evidence there is: with <code class="docutils literal notranslate"><span class=pre >--model</span></code> the written reflections take the models hand and its space group, which on anomalous data exchanges I(+) and I(-). The <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code>, whose per-image reflections were written as they were integrated, keeps the group the run determined and is left alone.</p> <li><p><strong>Not twinning.</strong> The twin laws are the same operators, but twinning is a property of the crystal — two orientations diffracting at once — and is reported separately in the reports twinning section. A crystal can have an indexing ambiguity without being twinned, and usually is.</p> </ul> <p>The algorithms behind both are in <a class="reference internal" href="CPU_DATA_ANALYSIS.html#reference-data-fixing-the-space-group-and-resolving-the-indexing-ambiguity"><span class="std std-ref">CPU/GPU data analysis ▸ Reference data</span></a>.</p> </section> </section> <section id=validating-against-a-model-rugnux-model > <h2 id=validating-against-a-model-rugnux-model ><a class=toc-backref href="#id23" role=doc-backlink >Validating against a model (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--model</span></code>)</a><a class=headerlink href="#validating-against-a-model-rugnux-model" title="Link to this heading"></a></h2> <p>Given an atomic model of the same structure, <code class="docutils literal notranslate"><span class=pre >--model</span> <span class=pre >model.pdb</span></code> scales the model structure factors to the merged amplitudes — fitting a flat bulk-solvent contribution and an overall anisotropic <em>B</em> — and reports <strong>R-work / R-free</strong> and the mean 2Fo-Fc density at the atom centres. It also writes <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_2fofc.ccp4</span></code>, <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_fofc.ccp4</span></code> and <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_maps.mtz</span></code> next to the merged reflections. Nothing about the model is refined; it is only re-fractionalized into the data cell, so a deposited model with a slightly different cell still lines up.</p> <p>The model may be <strong>PDB or mmCIF</strong>, gzipped or not, and the format is taken from the files own content rather than from its name — a model downloaded as <code class="docutils literal notranslate"><span class=pre >.cif</span></code>, <code class="docutils literal notranslate"><span class=pre >.pdb</span></code>, <code class="docutils literal notranslate"><span class=pre >.ent</span></code> or with no useful extension at all is read the same way. A model that cannot be read, or that has no atoms, no unit cell or no usable space group, does not fail the run: it is logged, and the results report carries a <code class="docutils literal notranslate"><span class=pre >WARNING:</span> <span class=pre >Model</span> <span class=pre >validation</span> <span class=pre >did</span> <span class=pre >not</span> <span class=pre >run:</span> <span class=pre ></span></code> line, so a run that silently produced no R-free and no maps cannot be mistaken for one that was never given <code class="docutils literal notranslate"><span class=pre >--model</span></code>.</p> <p>Either way the results report carries a <strong><code class="docutils literal notranslate"><span class=pre >10.</span> <span class=pre >MODEL</span> <span class=pre >VALIDATION</span></code></strong> section: <code class="docutils literal notranslate"><span class=pre >R_WORK=</span></code> / <code class="docutils literal notranslate"><span class=pre >R_FREE=</span></code> with their reflection counts, the bulk-solvent and overall scale parameters, the mean 2Fo-Fc density at the atom centres, the reindexing operators the written reflections were brought into the models frame with, and <code class="docutils literal notranslate"><span class=pre >MAPS_PREFIX=</span></code>; or <code class="docutils literal notranslate"><span class=pre >MODEL_VALIDATION=</span> <span class=pre >NOT_PERFORMED</span></code> with <code class="docutils literal notranslate"><span class=pre >MODEL_VALIDATION_REASON=</span></code> when the model could not be used. A run given no <code class="docutils literal notranslate"><span class=pre >--model</span></code> has no such section at all.</p> <p>It is a <em>data-quality lens</em>, independent of the internal statistics: R-free measures the merged intensities against external truth, where CC1/2 and R<sub>meas</sub> only measure them against themselves. It also settles the two things merged intensities alone cannot: the enantiomorph (data merged in P4<sub>1</sub>2<sub>1</sub>2 against a P4<sub>3</sub>2<sub>1</sub>2 model are reindexed into the models hand), and — when no reference MTZ has already fixed it — a merohedral <a class="reference internal" href="#the-indexing-ambiguity">indexing ambiguity</a>, by keeping the candidate reindexing with the lowest R-free. Both of those reindexings are applied to the <strong>written reflections</strong> as well as to the R-factors and the maps — validation runs before the reflection files, so the <code class="docutils literal notranslate"><span class=pre >.mtz</span></code> / <code class="docutils literal notranslate"><span class=pre >.cif</span></code> / <code class="docutils literal notranslate"><span class=pre >.hkl</span></code> come out in the models frame, and where the hand was adopted they carry the models space group. The log names the operator in each case, and for the indexing choice gives the winning R-free together with the runner-up.</p> </section> <section id=re-scaling-and-re-merging-rugnux-mode-scale > <h2 id=re-scaling-and-re-merging-rugnux-mode-scale ><a class=toc-backref href="#id24" role=doc-backlink >Re-scaling and re-merging (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--mode</span> <span class=pre >scale</span></code>)</a><a class=headerlink href="#re-scaling-and-re-merging-rugnux-mode-scale" title="Link to this heading"></a></h2> <p>The <code class="docutils literal notranslate"><span class=pre >scale</span></code> mode re-scales and merges the <em>already-integrated</em> reflections stored in a <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code> file, without re-running spot finding or integration. Use it to re-merge quickly with a different space group, resolution limit, anomalous setting or outlier rejection. It reuses the same <code class="docutils literal notranslate"><span class=pre >-o/-N/-s/-e/-S/-A/-B/-z/--scaling-*</span></code> options as the full run, and (unlike the full pipeline) does not run a space-group search: it merges in the space group and unit cell the file records, and <code class="docutils literal notranslate"><span class=pre >-S</span></code> / <code class="docutils literal notranslate"><span class=pre >-C</span></code> override them. A <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code> written before the group was stored carries none, and merges in P1 unless <code class="docutils literal notranslate"><span class=pre >-S</span></code> says otherwise.</p> <p>A reference MTZ (<code class="docutils literal notranslate"><span class=pre >-z</span></code>) is accepted here on <strong>stills</strong> data, where it fixes the space group and cell, reports CC<sub>ref</sub> and hands over its R-free flags; on rotation data the rotation scaler declines it and the run stops with a message saying so. What <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span></code> never does is reindex the reflections it writes: an <a class="reference internal" href="#the-indexing-ambiguity">indexing ambiguity</a> has to be resolved by the run that integrates (<code class="docutils literal notranslate"><span class=pre >--model</span></code> still picks an indexing for its own R-free and maps here, as in a full run).</p> <p>Where the full run re-seated the lattice — the space group it settled on is in a different setting from the one each image was indexed in — the file records the change of basis as <code class="docutils literal notranslate"><span class=pre >/entry/MX/reindexMatrix</span></code>, and <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> applies it on read, so the reflections and the stored cell describe the same frame. An older file that was affected by this cannot be repaired (the matrix is not recoverable after the fact); such a file now stops with a message naming both cells and the exact <code class="docutils literal notranslate"><span class=pre >-S</span></code>/<code class="docutils literal notranslate"><span class=pre >-C</span></code> override to merge it in its own setting, instead of failing inside the merge.</p> </section> <section id=detector-calibration-from-powder-rings-rugnux-mode-calibration > <h2 id=detector-calibration-from-powder-rings-rugnux-mode-calibration ><a class=toc-backref href="#id25" role=doc-backlink >Detector calibration from powder rings (<code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--mode</span> <span class=pre >calibration</span></code>)</a><a class=headerlink href="#detector-calibration-from-powder-rings-rugnux-mode-calibration" title="Link to this heading"></a></h2> <p>The <code class="docutils literal notranslate"><span class=pre >calibration</span></code> mode determines the detector geometry — PONI <em>x</em>/<em>y</em>, the two tilts rot1/rot2 and the distance — from the powder rings of a calibrant, and writes it as a pyFAI <strong><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.poni</span></code></strong> file alongside a printed report of how far each parameter moved from the header. Bragg data pin the beam centre worst (it is gauge-coupled to the crystal orientation); a powder ring has no orientation to be coupled to, so this is the measurement that fixes it.</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >rugnux</span> <span class=o >--</span><span class=n >mode</span> <span class=n >calibration</span> <span class=o >--</span><span class=n >calibrant</span> <span class=n >lab6</span> <span class=o >-</span><span class=n >o</span> <span class=n >det</span> <span class=n >LaB6_master</span><span class=o >.</span><span class=n >h5</span>
</pre></div> </div> <p><code class="docutils literal notranslate"><span class=pre >--calibrant</span></code> takes <code class="docutils literal notranslate"><span class=pre >lab6</span></code>, <code class="docutils literal notranslate"><span class=pre >agbh</span></code> (silver behenate), <code class="docutils literal notranslate"><span class=pre >ceo2</span></code>, <code class="docutils literal notranslate"><span class=pre >si</span></code> or <code class="docutils literal notranslate"><span class=pre >ice</span></code>, case-insensitively. <strong><code class="docutils literal notranslate"><span class=pre >ice</span></code></strong> calibrates a real experiment against its own ice rings — no calibrant exposure needed — and is the reason a calibrant is a list of ring positions rather than a unit cell: hexagonal ice is P6<sub>3</sub>/mmc, so rings enumerated from its cell would include systematically absent ones.</p> <p><code class="docutils literal notranslate"><span class=pre >--calibration</span></code> picks how the rings are measured, and <strong>both use the whole dataset</strong><code class="docutils literal notranslate"><span class=pre >-s</span></code>/<code class="docutils literal notranslate"><span class=pre >-e</span></code>/<code class="docutils literal notranslate"><span class=pre >-t</span></code> select which images:</p> <ul class=simple > <li><p><strong><code class="docutils literal notranslate"><span class=pre >rings</span></code></strong> (default) sums the (<em>q</em> × azimuth) azimuthal profile over every processed image into one map and fits the ring arcs in it. A powder ring is an arc, not a set of spots, and the summed profile measures it at every azimuth with all the runs counts behind it. It needs the profile to be binned in azimuth, so this mode defaults <code class="docutils literal notranslate"><span class=pre >--azim-phi-bins</span></code> to 32.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >spots</span></code></strong> pools the found spots of every processed image and fits those. It determines the centre from scratch (a Hough circle vote, which quantises it to a whole pixel) and then refines.</p> </ul> <p>Both routes read the ring position out of a binned profile or a spot centroid, so the radial sampling matters: at a long detector distance the default 0.01 Å⁻¹ <em>q</em> bin is several pixels wide and quantises the <code class="docutils literal notranslate"><span class=pre >rings</span></code> route accordingly — pass a finer <code class="docutils literal notranslate"><span class=pre >--azim-q-spacing</span></code> there (the total <em>q</em> × azimuth bin count must stay under 65534).</p> <p>The report prints the fitted geometry, the scatter of the ring points about the fitted rings and the standard error that implies on the centre. That error is <em>formal</em>: it measures the scatter of the points, not whether the rings themselves are trustworthy, so it stays small when a fit goes wrong for a structural reason — one visible ring, or ice that is textured rather than smooth.</p> <p>Both the PONI (the point of normal incidence, which is what a <code class="docutils literal notranslate"><span class=pre >.poni</span></code> file stores) and the direct beam (where the beam lands, which is what most other programs call the beam centre) are printed. They differ by <em>distance</em> × tan(rot) once the detector is tilted, which on a 0.3° tilt at 300 mm is several pixels — enough to look like a disagreement with another program when there is none.</p> </section> <section id=comparing-the-geometry-with-xds > <h2 id=comparing-the-geometry-with-xds ><a class=toc-backref href="#id26" role=doc-backlink >Comparing the geometry with XDS</a><a class=headerlink href="#comparing-the-geometry-with-xds" title="Link to this heading"></a></h2> <p>Every run logs the detector geometry a second time in <strong>XDSs convention</strong>, so it can be read straight across against the <code class="docutils literal notranslate"><span class=pre >IDXREF.LP</span></code> / <code class="docutils literal notranslate"><span class=pre >CORRECT.LP</span></code> of an XDS run on the same data:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >XDS</span> <span class=n >convention</span><span class=p >:</span> <span class=n >ORGX</span><span class=o >=</span> <span class=mf >1091.00</span> <span class=n >ORGY</span><span class=o >=</span> <span class=mf >1137.00</span> <span class=n >DETECTOR_DISTANCE</span><span class=o >=</span> <span class=mf >75.0000</span>
<span class=n >XDS</span> <span class=n >convention</span><span class=p >:</span> <span class=n >DIRECTION_OF_DETECTOR_X</span><span class=o >-</span><span class=n >AXIS</span><span class=o >=</span> <span class=mf >1.000000</span> <span class=mf >0.000000</span> <span class=mf >0.000000</span>
<span class=n >XDS</span> <span class=n >convention</span><span class=p >:</span> <span class=n >DIRECTION_OF_DETECTOR_Y</span><span class=o >-</span><span class=n >AXIS</span><span class=o >=</span> <span class=mf >0.000000</span> <span class=mf >1.000000</span> <span class=mf >0.000000</span>
<span class=n >XDS</span> <span class=n >convention</span><span class=p >:</span> <span class=n >INCIDENT_BEAM_DIRECTION</span><span class=o >=</span> <span class=mi >0</span> <span class=mi >0</span> <span class=mi >1</span> <span class=n >X</span><span class=o >-</span><span class=n >RAY_WAVELENGTH</span><span class=o >=</span> <span class=mf >1.000000</span> <span class=n >QX</span><span class=o >=</span> <span class=n >QY</span><span class=o >=</span> <span class=mf >0.075000</span>
<span class=n >XDS</span> <span class=n >convention</span><span class=p >:</span> <span class=n >ROTATION_AXIS</span><span class=o >=</span> <span class=o >-</span><span class=mf >1.000000</span> <span class=mf >0.000000</span> <span class=mf >0.000000</span>
</pre></div> </div> <p>XDS is never given this geometry — the <a class="reference internal" href=SOFTWARE_INTEGRATION.html ><span class="std std-doc">XDS plugin</span></a> supplies image data only, and XDS refines its own from <code class="docutils literal notranslate"><span class=pre >XDS.INP</span></code> — which is what makes the comparison worth having. The two laboratory frames coincide (x along increasing detector column, y along increasing row, z along the beam), so the numbers are directly comparable, and a tilt appears as the two detector axis vectors rather than as angles, which is how XDS reports it after refinement. Two things to keep in mind: <strong><code class="docutils literal notranslate"><span class=pre >ORGX</span></code>/<code class="docutils literal notranslate"><span class=pre >ORGY</span></code> are 1-based</strong>, because XDS counts pixels from 1 and Jungfraujoch from 0; and they are the <strong>PONI</strong>, the same quantity Jungfraujochs beam centre is — so no correction is needed — but not the direct beam once the detector is tilted (see above).</p> </section> <section id=command-line-options > <h2 id=command-line-options ><a class=toc-backref href="#id27" role=doc-backlink >Command-line options</a><a class=headerlink href="#command-line-options" title="Link to this heading"></a></h2> <p>General:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >-o,</span> <span class=pre >--output-prefix</span> <span class=pre >&lt;txt&gt;</span></code></p> <td><p>Output file prefix (default: <code class="docutils literal notranslate"><span class=pre >output</span></code>)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-N,</span> <span class=pre >--threads</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Number of worker threads (default, and for any value ≤ 0: all hardware threads). Some stages take fewer, because past a point more workers make them slower: the per-image loop of <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >mx</span></code> uses at most 16 per GPU unless <code class="docutils literal notranslate"><span class=pre >-N</span></code> was given a positive value, and first-pass spot finding and the beam-stop pre-scan have ceilings of their own that <code class="docutils literal notranslate"><span class=pre >-N</span></code> does not lift. Scaling, merging and the space-group search use the full count</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >-s,</span> <span class=pre >--start-image</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>First image to process (default: 0)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-e,</span> <span class=pre >--end-image</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Last image to process (default: all)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >-t,</span> <span class=pre >--stride</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Process every <em>n</em>-th image (default: 1)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-v,</span> <span class=pre >--verbose</span></code></p> <td><p>Verbose output</p> </table> <p>Mode — <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >&lt;name&gt;</span></code> (default <code class="docutils literal notranslate"><span class=pre >mx</span></code>):</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Value</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >mx</span></code></p> <td><p>Full analysis — spot finding, indexing, integration and merging</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >azint</span></code></p> <td><p>Only azimuthal integration (no spot finding/indexing); writes <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_process.h5</span></code></p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >scale</span></code></p> <td><p>Only re-scale/merge the already-integrated reflections in the input <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code> (no re-integration)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >calibration</span></code></p> <td><p>Determine the detector geometry from powder rings; writes <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.poni</span></code></p> </table> <p>Calibration (<code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >calibration</span></code>):</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--calibrant</span> <span class=pre >&lt;name&gt;</span></code></p> <td><p>Powder standard: <code class="docutils literal notranslate"><span class=pre >lab6</span></code> | <code class="docutils literal notranslate"><span class=pre >agbh</span></code> | <code class="docutils literal notranslate"><span class=pre >ceo2</span></code> | <code class="docutils literal notranslate"><span class=pre >si</span></code> | <code class="docutils literal notranslate"><span class=pre >ice</span></code> (default <code class="docutils literal notranslate"><span class=pre >lab6</span></code>, case-insensitive)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--calibration</span> <span class=pre >&lt;txt&gt;</span></code></p> <td><p>How the rings are measured: <code class="docutils literal notranslate"><span class=pre >rings</span></code> | <code class="docutils literal notranslate"><span class=pre >spots</span></code> (default <code class="docutils literal notranslate"><span class=pre >rings</span></code>; see above). <code class="docutils literal notranslate"><span class=pre >rings</span></code> defaults <code class="docutils literal notranslate"><span class=pre >--azim-phi-bins</span></code> to 32</p> </table> <p>Detector mask:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--detect-beam-stop[=N|off]</span></code></p> <td><p>Find the beam stop and its holder in a projection of N images and add them to the pixel mask as bit 9, so nothing shadowed by them is integrated. <strong>On by default</strong> (60 images); <code class="docutils literal notranslate"><span class=pre >=off</span></code> disables. Reflections behind the stop are attenuated but not flagged, so they integrate low with a plausible sigma and no existing rejection catches them</p> </table> <p>Geometry:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--estimate-beam-center</span></code></p> <td><p>Measure the direct beam before indexing, from the symmetry of the spots where the sweep reaches at least half a turn and from the radial background profile where it does not; the value in the file is kept where neither can measure it. Off by default</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--no-fit-spindle</span></code></p> <td><p>With the above, keep the rotation axis given in the file instead of fitting its skew about the beam</p> </table> <p>Spot finding:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--spot-sigma</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Noise sigma level for spot finding (default: 4.0)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--spot-threshold</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Photon-count threshold for spot finding (default: 10)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--adaptive-spots</span></code></p> <td><p>Self-calibrating detection (<strong>default</strong>, stills and rotation alike): the strong-pixel threshold comes from each images own per-resolution-ring noise instead of the fixed <code class="docutils literal notranslate"><span class=pre >--spot-threshold</span></code>, so one setting adapts across datasets (no per-dataset <code class="docutils literal notranslate"><span class=pre >--spot-threshold</span></code>/<code class="docutils literal notranslate"><span class=pre >--spot-sigma</span></code> tuning)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--no-adaptive-spots</span></code></p> <td><p>Turn adaptive detection off and use the fixed <code class="docutils literal notranslate"><span class=pre >--spot-threshold</span></code> / <code class="docutils literal notranslate"><span class=pre >--spot-sigma</span></code> finder</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--spot-false-pixels</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Adaptive-detection operating point: expected noise pixels tolerated per frame (default: 100; implies <code class="docutils literal notranslate"><span class=pre >--adaptive-spots</span></code>)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--spot-high-resolution</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>High-resolution limit for spot finding, Å. Omitted (or 0): no resolution clipping — spot finding extends as far as the detector reaches, for rotation data as well as stills</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--spot-low-resolution</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Low-resolution limit for spot finding, Å (default: 50; lower it, e.g. 24, to exclude the direct-beam halo on weak serial data; 0 removes the limit)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--min-pix-per-spot</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Minimum connected strong pixels per spot. <strong>If omitted, min-pix is chosen per image</strong> (stills indexing): the frame is indexed at min-pix 3/2/1 and the one maximising indexed-spot count × indexed fraction is kept. Give an explicit value to force a fixed min-pix instead.</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--max-spots</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Maximum spots kept per image (the strongest ones) and handed to indexing (default: 1000)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--detect-ice-rings[=on|off]</span></code></p> <td><p>Flag ice-ring spots (de-prioritised in indexing) and exclude ice-ring reflections from scaling. Default: the master files <code class="docutils literal notranslate"><span class=pre >detect_ice_rings</span></code>, or — where the file carries no such key — <strong>on for rotation and off for stills</strong></p> </table> <p>Azimuthal integration (the radial profile behind the per-image ice-ring score):</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >-q,</span> <span class=pre >--azim-q-spacing</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Q bin spacing, 1/Å (default: 0.01; finer resolves the narrow ice rings)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--azim-min-q</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Minimum Q, 1/Å</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--azim-max-q</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Maximum Q, 1/Å. Omitted: integration extends to the highest Q the detector reaches. The adaptive spot finder shares these Q bins, so this also sets how far self-calibrating detection can see</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--azim-phi-bins</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Number of azimuthal (phi) bins (default: 1)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--polarization-correction</span> <span class=pre >&lt;on|off&gt;</span></code></p> <td><p>Enable/disable the azimuthal polarization correction</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--solid-angle-correction</span> <span class=pre >&lt;on|off&gt;</span></code></p> <td><p>Enable/disable the azimuthal solid-angle correction</p> </table> <p>Indexing:</p> <p>A dataset with a <strong>rotation goniometer axis</strong> is processed as rotation data (two-pass rotation indexing) by default; a dataset without one is processed as independent stills. <code class="docutils literal notranslate"><span class=pre >--force-still</span></code> overrides the former; the <code class="docutils literal notranslate"><span class=pre >-R</span></code> / <code class="docutils literal notranslate"><span class=pre >--single-pass-rotation</span></code> / <code class="docutils literal notranslate"><span class=pre >--force-rotation-lattice</span></code> flags request rotation explicitly and pick the pass or lattice.</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--force-still</span></code></p> <td><p>Treat a rotation (goniometer) dataset as independent stills instead of rotation</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-X,</span> <span class=pre >--indexing-algorithm</span> <span class=pre >&lt;txt&gt;</span></code></p> <td><p><code class="docutils literal notranslate"><span class=pre >FFBIDX</span></code> | <code class="docutils literal notranslate"><span class=pre >FFT</span></code> | <code class="docutils literal notranslate"><span class=pre >FFTW</span></code> | <code class="docutils literal notranslate"><span class=pre >Auto</span></code> | <code class="docutils literal notranslate"><span class=pre >None</span></code></p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >-C,</span> <span class=pre >--unit-cell</span> <span class=pre >&lt;cell&gt;</span></code></p> <td><p>Reference unit cell <code class="docutils literal notranslate"><span class=pre >"a,b,c,alpha,beta,gamma"</span></code> (required by <code class="docutils literal notranslate"><span class=pre >ffbidx</span></code>)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-S,</span> <span class=pre >--space-group</span> <span class=pre >&lt;num|symbol&gt;</span></code></p> <td><p>Space group number (<code class="docutils literal notranslate"><span class=pre >92</span></code>) or Hermann-Mauguin symbol (<code class="docutils literal notranslate"><span class=pre >P43212</span></code>) — for indexing and scaling</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >-r,</span> <span class=pre >--refine</span> <span class=pre >&lt;txt&gt;</span></code></p> <td><p>Geometry refinement: <code class="docutils literal notranslate"><span class=pre >none</span></code> | <code class="docutils literal notranslate"><span class=pre >orientation</span></code> | <code class="docutils literal notranslate"><span class=pre >beam_and_lattice</span></code> (default) | <code class="docutils literal notranslate"><span class=pre >flex</span></code> (try all three per image, keep whichever indexes the most spots; alias <code class="docutils literal notranslate"><span class=pre >multi</span></code>)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-R,</span> <span class=pre >--two-pass-rotation[=num]</span></code></p> <td><p>Two-pass offline rotation indexing (default for goniometer data; optional first-pass image count, default 100)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--single-pass-rotation[=num]</span></code></p> <td><p>Online-like single-pass rotation indexing (optional min angular range, deg)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--force-rotation-lattice</span> <span class=pre >&lt;vec&gt;</span></code></p> <td><p>Force rotation lattice (9 floats, Å), skipping the first pass</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--rotation-no-postrefine</span></code></p> <td><p>Rotation: disable the default-on two-pass geometry post-refine (see the rotation section)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--refine-geometry[=N|off]</span></code></p> <td><p>Stills: extra first pass that bundle-adjusts the shared beam/distance/cell from N strongly-indexed frames (default 200) then re-indexes; default ON for stills with a reference cell (<code class="docutils literal notranslate"><span class=pre >-C</span></code> / <code class="docutils literal notranslate"><span class=pre >-z</span></code>), <code class="docutils literal notranslate"><span class=pre >=off</span></code> disables</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--index-ice-rings[=on|off]</span></code></p> <td><p>Index on the spots flagged as sitting on an ice ring too, instead of setting them aside (default: <strong>off</strong>; no effect without <code class="docutils literal notranslate"><span class=pre >--detect-ice-rings</span></code>, which does the flagging)</p> </table> <p>Indexer choice in brief: <code class="docutils literal notranslate"><span class=pre >ffbidx</span></code> (GPU) refines toward a <strong>known cell</strong> and is best for sparse serial stills; <code class="docutils literal notranslate"><span class=pre >fft</span></code> (GPU) / <code class="docutils literal notranslate"><span class=pre >fftw</span></code> (CPU) index <strong>de novo</strong> and suit strong rotation data. See the <a class="reference internal" href=CPU_DATA_ANALYSIS.html ><span class="std std-doc">CPU/GPU data-analysis reference</span></a> for the algorithms.</p> <p>Scaling and merging:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--no-merge</span></code></p> <td><p>Skip scaling and merging (on by default); write only the per-image <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code></p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-A,</span> <span class=pre >--anomalous</span></code></p> <td><p>Anomalous mode (keep Friedel pairs separate)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--scale-fulls</span></code> / <code class="docutils literal notranslate"><span class=pre >--no-scale-fulls</span></code></p> <td><p>rot3d: refit a per-frame scale on the combined fulls (XDS order, Unity model); on by default for rotation data, off for stills</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--smooth-g[=deg]</span></code></p> <td><p>rot3d: smooth the per-frame scale <em>G</em> over a degree range before the 3D combine (XDS DELPHI-like; default 5° for rotation, 0 = off)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--no-scaling-corrections</span></code></p> <td><p>rot3d: disable the default-on decay + absorption + modulation correction surfaces fitted on the fulls after scale-fulls (see below)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--relative-b[=deg]</span></code></p> <td><p>rot3d: fit a per-batch relative-<em>B</em> beyond the single decay slope over deg-degree batches, cross-validated (default 10° when bare; off otherwise)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--simple-stills</span></code></p> <td><p>Stills: treat every reflection as a full (<em>p</em> = 1, single-pass scale/merge) — disables the default-on physical partiality post-refinement</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--no-expected-variance-merge</span></code></p> <td><p>Stills: disable the default expected-variance merge weighting (which rebuilds each weak observations signal variance at the reflection mean to de-bias the inverse-variance merge); restores observed-sigma weighting</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--capture-uncertainty</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>rot3d: systematic sigma on under-captured fulls, ~num·(1captured_fraction)·I (default: 1.0 for rotation, 0 otherwise)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--min-captured-fraction</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>rot3d: drop a combined full whose rocking curve was captured below this fraction — edge-of-sweep truncated fulls (default: 0.7 for rotation, 0 otherwise; 0 = off)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--scaling-high-resolution</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>High-resolution limit for scaling, Å — manual override (default: no limit; disables the automatic cutoff below)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--scaling-low-resolution</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Low-resolution limit for scaling and merging, Å (default: 50, the value XDS configurations use; 0 removes the limit). Reflections coarser than this sit behind or beside the beam stop and are measured on a background it has eaten into</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--resolution-cutoff</span> <span class=pre >&lt;txt&gt;</span></code></p> <td><p>Automatic high-resolution cutoff for the written reflections and reported shells: <code class="docutils literal notranslate"><span class=pre >cc-logistic</span></code> | <code class="docutils literal notranslate"><span class=pre >off</span></code> (default: <code class="docutils literal notranslate"><span class=pre >cc-logistic</span></code>; ignored when <code class="docutils literal notranslate"><span class=pre >--scaling-high-resolution</span></code> is set)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--resolution-cc-target</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>CC1/2 target defining the <code class="docutils literal notranslate"><span class=pre >cc-logistic</span></code> fall-off (default: 0.30)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--resolution-shells</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Number of resolution shells in the reported statistics table (default: 9). The bins are equal steps in 1/d² between the lowest- and highest-resolution reflection merged, which is XDSs rule, and 9 is XDSs count — so at the same resolution limits the two tables have the same shells and can be read row for row</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--min-partiality</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Minimum partiality to accept a reflection (default: 0.02)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--ice-min-score</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Ice-presence gate: the measured per-run ice score (1 = no ice) a dataset must reach before <strong>any</strong> ice handling is applied — the flagging and the exclusion from scaling (default: 1.5; 0 = no gate). The eleven fixed hexagonal bands cover 1626 % of the unique reflections whether or not the crystal has ice, so handling ice on a clean crystal only costs completeness</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--ice-min-spot-ratio</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>The second ice-presence channel: found <strong>spots</strong> on the hexagonal rings over the same q width of ice-free flanks beside them (1 = spots spread evenly). Ice in large crystallites diffracts as discrete spots and leaves the radial profile flat, so <code class="docutils literal notranslate"><span class=pre >--ice-min-score</span></code> alone is blind to it (default: 2.0; 0 disables this channel)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--reject-outliers</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Per-observation outlier rejection, N σ from the per-reflection median (default: 6 for <code class="docutils literal notranslate"><span class=pre >rot3d</span></code>, off otherwise)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--min-image-cc</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Per-image CC limit, percent (default: no limit)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--search-min-zeta</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>De-novo space-group search only: also search a merge of just the observations whose Lorentz geometry |ζ| reaches this, and report both answers (default: 0.85 for rotation, 0 = single search). Reflections crossing the Ewald sphere near-tangentially are measured worst and can make a real symmetry operator look like a twin law. Where the two searches disagree, the merge of all the observations decides — as it always has for the systematic absences</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--mosaicity</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Diagnostic: fix the scaling mosaicity (°) instead of using the per-image seed</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--scaling-iterations</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Scaling iterations with no reference data (default: 3)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >-z,</span> <span class=pre >--reference-mtz</span> <span class=pre >&lt;file&gt;</span></code></p> <td><p>Reference MTZ of the same crystal form: fixes the space group and cell, resolves the <a class="reference internal" href="#the-indexing-ambiguity">indexing ambiguity</a>, hands over the R-free set and reports CC<sub>ref</sub>. Not a scale anchor</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--reference-column</span> <span class=pre >&lt;label&gt;</span></code></p> <td><p>Reference MTZ column to use (default: auto — F-model, else IMEAN/I/…)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--model</span> <span class=pre >&lt;file&gt;</span></code></p> <td><p>Validate the merged intensities against this atomic model (PDB or mmCIF, gzipped or not; the format is taken from the files content) — R-work / R-free and maps (see <a class="reference internal" href="#validating-against-a-model-rugnux-model"><span class="xref myst">Validating against a model</span></a>). It also settles the frame the reflections are written in: the enantiomorph, and the <a class="reference internal" href="#the-indexing-ambiguity">indexing ambiguity</a> where no <code class="docutils literal notranslate"><span class=pre >-z</span></code> did. For serial stills given <code class="docutils literal notranslate"><span class=pre >-C</span></code> / <code class="docutils literal notranslate"><span class=pre >-S</span></code>, the models structure factors become the per-image reference</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--write-process-h5</span></code></p> <td><p>Also write the (large) <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code> when merging (default: only <code class="docutils literal notranslate"><span class=pre >.mtz</span></code>/<code class="docutils literal notranslate"><span class=pre >.cif</span></code>)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--export-unmerged</span></code></p> <td><p>Write <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_unmerged.mtz</span></code>, an unmerged MTZ (POINTLESS column layout) of the integrated observations, for aimless / pointless / careless. Off by default. Rotation partials are summed into one full per reflection. Intensities carry the Lorentz-polarization factor and nothing else — the partiality is not divided out and the per-image scale is not applied. Written in <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >mx</span></code> and <code class="docutils literal notranslate"><span class=pre >--mode</span> <span class=pre >scale</span></code>, and with <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code>. See <a class="reference internal" href="#the-unmerged-export">The unmerged export</a></p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--export-unmerged-partials</span></code></p> <td><p>Write <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;_unmerged_partials.mtz</span></code>, the same observations with each partial as its own row (one batch per image) for the reading program to sum. Independent of <code class="docutils literal notranslate"><span class=pre >--export-unmerged</span></code></p> </table> <p>Integration:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--integrator</span> <span class=pre >&lt;txt&gt;</span></code></p> <td><p>Spot integrator: <code class="docutils literal notranslate"><span class=pre >gaussian</span></code> (profile-fit, default) | <code class="docutils literal notranslate"><span class=pre >empirical</span></code> | <code class="docutils literal notranslate"><span class=pre >boxsum</span></code> (classical fallback)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--integration-radius</span> <span class=pre >&lt;r&gt;</span></code></p> <td><p>Signal-box radius <code class="docutils literal notranslate"><span class=pre >r1</span></code>, or <code class="docutils literal notranslate"><span class=pre >r1,r2,r3</span></code> (px). One value ⇒ <code class="docutils literal notranslate"><span class=pre >r2=r1+2</span></code>, <code class="docutils literal notranslate"><span class=pre >r3=r1+4</span></code></p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--adaptive-integration-radius[=on|off]</span></code></p> <td><p>Set the signal radius <code class="docutils literal notranslate"><span class=pre >r1</span></code> from how wide this crystals spots actually are (default: <strong>on</strong> for rotation, off for stills). <code class="docutils literal notranslate"><span class=pre >r1</span></code> is not the integration domain — that is the profile-fit grid — but it <em>is</em> the aperture the profile <strong>width</strong> is learned over, and a second moment over a disk of radius <code class="docutils literal notranslate"><span class=pre >a</span></code> saturates at <code class="docutils literal notranslate"><span class=pre >a²/4</span></code>, so at the shipped <code class="docutils literal notranslate"><span class=pre >r1</span> <span class=pre >=</span> <span class=pre >4</span></code> the learned σ can never exceed 2 px and a broader spot is fitted with a profile the model cannot represent. The pre-scan reads <code class="docutils literal notranslate"><span class=pre >r80</span></code>, the radius holding 80 % of a spots flux, off isolated strong spots over a fixed 14 px aperture that owes nothing to <code class="docutils literal notranslate"><span class=pre >r1</span></code>, fits it against <code class="docutils literal notranslate"><span class=pre >1/d</span></code> and evaluates it at 5 Å; then <code class="docutils literal notranslate"><span class=pre >r1</span> <span class=pre >=</span> <span class=pre >clamp(round(2·r80),</span> <span class=pre >4,</span> <span class=pre >6)</span></code>, <code class="docutils literal notranslate"><span class=pre >r2</span> <span class=pre >=</span> <span class=pre >r1</span> <span class=pre >+</span> <span class=pre >2</span></code>, and <code class="docutils literal notranslate"><span class=pre >r3</span></code> is taken so the <code class="docutils literal notranslate"><span class=pre >r2..r3</span></code> background ring keeps the area it has at the default <code class="docutils literal notranslate"><span class=pre >4,6,13</span></code>. The ceiling of 6 is pattern density: <code class="docutils literal notranslate"><span class=pre >r2</span></code> also drives the neighbour-ownership radius and the rings inner edge, and past it a dense pattern starts losing reflections whose ring falls below six clean pixels. Ignored when <code class="docutils literal notranslate"><span class=pre >--integration-radius</span></code> is given. The widened radius applies to the <strong>final</strong> integration pass only — the two-pass geometry pre-pass keeps the radius the run started with, because the post-refinement fits the detector distance and beam to the observed reflection positions and those move with the signal disk (33 µm and 0.02 px between <code class="docutils literal notranslate"><span class=pre >r1</span> <span class=pre >=</span> <span class=pre >4</span></code> and <code class="docutils literal notranslate"><span class=pre >r1</span> <span class=pre >=</span> <span class=pre >6</span></code> on one crystal, enough for the second passs de-novo lattice search to settle on a different lattice and index a fifth fewer frames). And where the widened radius leaves more than 1.1 % of the predicted reflections without a background ring — a pattern too dense for it — the final pass is re-integrated at the fixed 4 px radius, and the log says so. Over the rotation regression battery it moves 12 of 38 crystals and leaves the merged intensities of the other 26 unchanged; where it moves them, per-shell ⟨I/σ⟩ improves by up to 31 % and R_meas by up to 24 %</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--integration-stencil</span> <span class=pre >&lt;k&gt;</span></code></p> <td><p>Push the <code class="docutils literal notranslate"><span class=pre >r2..r3</span></code> background ring out by <code class="docutils literal notranslate"><span class=pre >k</span></code> times the beams radial streak <code class="docutils literal notranslate"><span class=pre >bandwidth·R_px</span></code>, per reflection (default <code class="docutils literal notranslate"><span class=pre >0</span></code> = the fixed circular ring). A fixed ring otherwise ends up on a streaked reflections own tails at high resolution and measures them as background. Only the ring moves, and only radially — the <code class="docutils literal notranslate"><span class=pre >r1</span></code> signal box stays a circle — and the growth is capped at <code class="docutils literal notranslate"><span class=pre >2·r3</span></code>. The neighbour exclusion grows with it, so on a crowded pattern a few reflections can be left with too little background and dropped. Needs <code class="docutils literal notranslate"><span class=pre >--bandwidth</span></code>: on a monochromatic beam the streak is zero and this does nothing</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--background-clip</span> <span class=pre >&lt;n&gt;</span></code></p> <td><p>Monochromatic (rotation + still): high-side clip of the background ring at <code class="docutils literal notranslate"><span class=pre >mean</span> <span class=pre >+</span> <span class=pre >n·√mean</span></code> (default 4; 0 = off). The default background estimator — it rejects neighbour cores and zingers without the symmetric trims Poisson skew bias. Broadband data always clip, at 3σ; ignored by <code class="docutils literal notranslate"><span class=pre >--integrator</span> <span class=pre >boxsum</span></code></p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--background-trim</span> <span class=pre >&lt;f&gt;</span></code></p> <td><p>Use the old symmetric trimmed mean for the background ring instead of the clip, 0≤f&lt;0.5 (<code class="docutils literal notranslate"><span class=pre >0.10</span></code> was the former default). Switches <code class="docutils literal notranslate"><span class=pre >--background-clip</span></code> off. A symmetric trim is biased low on Poisson data and adds ~5 counts to every partial, so this is for back compatibility only; <code class="docutils literal notranslate"><span class=pre >0</span></code> = plain ring mean. Rings holding more than 512 pixels fall back to the plain mean (the GPU sorts the ring in shared memory and the CPU now matches it), which the default radii never reach but wide ones do</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--background-radial[=on|off|auto]</span></code></p> <td><p>Correct the background ring for the <strong>curvature</strong> of the radial background (default <strong>off</strong>). Disk and ring are concentric, so a background linear in position cancels between them and only curvature survives — which on a smooth ice ring reaches +26 counts on a single reflection. <code class="docutils literal notranslate"><span class=pre >auto</span></code> applies it per image where that images ice score shows a <em>smooth</em> powder ring, since the model is a function of radius alone: on ice made of discrete crystallite spots there is no smooth ring and the correction makes the bias worse. Ignored by <code class="docutils literal notranslate"><span class=pre >--integrator</span> <span class=pre >boxsum</span></code> (no clip pass to take the curve from)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--integration-high-resolution</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>High-resolution limit for prediction and integration. Omitted (or 0) means integration extends as far as the detector reaches — which is what the predictor can place on the detector anyway, since it rejects reflections that miss it. Set a value to integrate less than the detector offers</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--max-hkl</span> <span class=pre >&lt;n&gt;</span></code></p> <td><p>Predict reflections with |h|,|k|,|l| ≤ <code class="docutils literal notranslate"><span class=pre >n</span></code> (max 511). By default this is derived per crystal from the refined cell as <code class="docutils literal notranslate"><span class=pre >ceil(max(a,b,c)/d_min)</span> <span class=pre >+</span> <span class=pre >1</span></code>, which is the exact bound: the predictor keeps only |q| ≤ 1/d_min and <code class="docutils literal notranslate"><span class=pre >h</span> <span class=pre >=</span> <span class=pre >a·q</span></code>, so no reflection can lie outside it and no candidate inside it is wasted on a shorter axis. Set it only to override that</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--bandwidth</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Relative X-ray bandwidth FWHM (e.g. <code class="docutils literal notranslate"><span class=pre >0.01</span></code> for a 1% DMM); default from file or 0 (monochromatic)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--overlap</span> <span class=pre >&lt;txt&gt;</span></code></p> <td><p>What to do where two predicted reflections share signal pixels: <code class="docutils literal notranslate"><span class=pre >off</span></code> | <code class="docutils literal notranslate"><span class=pre >reject</span></code> | <code class="docutils literal notranslate"><span class=pre >exclude</span></code> (default <code class="docutils literal notranslate"><span class=pre >exclude</span></code>). A shared pixel belongs to the nearer centre; without this a crowded reflection reads high on a dense pattern. <code class="docutils literal notranslate"><span class=pre >exclude</span></code> drops the shared pixels from the profile fit, which renormalises itself, and keeps the reflection; <code class="docutils literal notranslate"><span class=pre >reject</span></code> instead drops the whole reflection when too little of its profile is cleanly its own. <code class="docutils literal notranslate"><span class=pre >--integrator</span> <span class=pre >boxsum</span></code> has no profile to renormalise, so only <code class="docutils literal notranslate"><span class=pre >reject</span></code> acts there</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--overlap-minpk</span> <span class=pre >&lt;f&gt;</span></code></p> <td><p>Least fraction of a reflections expected profile that must be usable for it to be kept (default 0.75, XDS <code class="docutils literal notranslate"><span class=pre >MINPK</span></code>). Governs both the fraction that must be <strong>readable</strong> — not masked, untrusted, in a gap or overloaded — in every profile mode, and, under <code class="docutils literal notranslate"><span class=pre >--overlap</span> <span class=pre >reject</span></code>, the fraction that must be cleanly its own. Under <code class="docutils literal notranslate"><span class=pre >--integrator</span> <span class=pre >boxsum</span></code> any unreadable pixel discards the disk outright and the reject fraction goes by disk <em>area</em>, which cuts harder</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--prediction-mosaicity</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Diagnostic: fix the rocking width (deg) the <strong>prediction</strong> window opens to, leaving partiality on the per-image σ_M. The two are one number by default, so a σ_M that moves takes the integrated reflection population with it</p> </table> <p>Geometry overrides (defaults are taken from the input file; override them to reprocess with a corrected geometry):</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Option</p> <th class=head ><p>Description</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--beam-x</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Beam centre X (pixel)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--beam-y</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Beam centre Y (pixel)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--detector-distance</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Detector distance (mm)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--wavelength</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Wavelength (Å)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--rot1</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>PONI detector rotation 1 (rad)</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--rot2</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>PONI detector rotation 2 (rad)</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >--polarization</span> <span class=pre >&lt;num&gt;</span></code></p> <td><p>Polarization factor</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >--rotation-scale</span> <span class=pre >&lt;k&gt;</span></code></p> <td><p>Goniometer rotation scale: the stage turned <code class="docutils literal notranslate"><span class=pre >k</span></code> times the angle stored in the file (the commanded one). Applied to both passes, and overrides the scale rugnux fits for itself</p> </table> </section> </section> </article> </div> </div> </main> </div> <footer class=md-footer > <div class=md-footer-nav > <nav class="md-footer-nav__inner md-grid"> <a href=JFJOCH_WRITER.html title=jfjoch_writer class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel=prev > <div class="md-flex__cell md-flex__cell--shrink"> <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> </div> <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> <span class=md-flex__ellipsis > <span class=md-footer-nav__direction > "Previous" </span> jfjoch_writer </span> </div> </a> <a href=JFJOCH_VIEWER.html title=jfjoch_viewer class="md-flex md-footer-nav__link md-footer-nav__link--next" rel=next > <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"><span class=md-flex__ellipsis > <span class=md-footer-nav__direction > "Next" </span> jfjoch_viewer </span> </div> <div class="md-flex__cell md-flex__cell--shrink"><i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> </div> </a> </nav> </div> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-footer-copyright > <div class=md-footer-copyright__highlight > &#169; Copyright 2024, Paul Scherrer Institute. </div> Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 8.1.3. and <a href="https://github.com/bashtage/sphinx-material/">Material for Sphinx</a> </div> </div> </div> </footer> <script src="_static/javascripts/application.js"></script> <script>app.initialize({version: "1.0.4", url: {base: ".."}})</script>