37 lines
61 KiB
HTML
37 lines
61 KiB
HTML
<!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>Running Rugnux — Jungfraujoch 1.0.0-rc.174 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=3dccfb20"></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="Rugnux with other programs" href=RUGNUX_INTEGRATION.html /> <link rel=prev title="What Rugnux reads" href=RUGNUX_FORMATS.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_TUTORIAL" 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.174 documentation" class="md-header-nav__button md-logo"> <i class=md-icon ></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 > Running 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 >  </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.174 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.174 documentation" class="md-nav__button md-logo"> <i class=md-icon ></i> </a> <a href=index.html title="Jungfraujoch 1.0.0-rc.174 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 >rugnux — data processing</span></span> <li class=md-nav__item > <a href=RUGNUX.html class=md-nav__link >Rugnux</a> <li class=md-nav__item > <a href=RUGNUX_OVERVIEW.html class=md-nav__link >What Rugnux does</a> <li class=md-nav__item > <a href=RUGNUX_INSTALL.html class=md-nav__link >Installing Rugnux</a> <li class=md-nav__item > <a href=RUGNUX_FORMATS.html class=md-nav__link >What Rugnux reads</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 > Running Rugnux </label> <a href="#" class="md-nav__link md-nav__link--active">Running 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="#a-first-run-in-detail" class=md-nav__link >A first run in detail</a> <li class=md-nav__item > <a href="#rotation-data" class=md-nav__link >Rotation data</a> <li class=md-nav__item > <a href="#still-serial-data" class=md-nav__link >Still / serial data</a> <li class=md-nav__item > <a href="#small-molecule-data" class=md-nav__link >Small-molecule data</a> <li class=md-nav__item > <a href="#output-files" class=md-nav__link >Output files</a> </ul> <li class=md-nav__item > <a href=RUGNUX_INTEGRATION.html class=md-nav__link >Rugnux with other programs</a> <li class=md-nav__item > <a href=RUGNUX_REPORT.html class=md-nav__link >The results report</a> <li class=md-nav__item > <a href=RUGNUX_ADVANCED.html class=md-nav__link >Advanced Rugnux</a> <li class=md-nav__item > <a href=RUGNUX_CALIBRATION.html 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=CPU_DATA_ANALYSIS.html class=md-nav__link >CPU-side crystallographic data analysis (Jungfraujoch)</a> <li class=md-nav__item > <a href=CPU_DATA_ANALYSIS_IMAGE.html class=md-nav__link >Data analysis: from images to spots (§0–§3)</a> <li class=md-nav__item > <a href=CPU_DATA_ANALYSIS_INDEXING.html class=md-nav__link >Data analysis: indexing and geometry (§4–§7)</a> <li class=md-nav__item > <a href=CPU_DATA_ANALYSIS_INTEGRATION.html class=md-nav__link >Data analysis: integration, scaling and merging (§8–§12)</a> <li class=md-nav__item > <a href=CPU_DATA_ANALYSIS_DECISIONS.html class=md-nav__link >Data analysis: space group and validation (§13–§14)</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >Jungfraujoch — acquisition</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 > <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 > <a href=DEPLOYMENT.html class=md-nav__link >Deployment</a> <li class=md-nav__item > <a href=DETECTORS.html class=md-nav__link >Supported 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 > <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=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=PYTHON_CLIENT.html class=md-nav__link >OpenAPI Python client</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 >Project</span></span> <li class=md-nav__item > <a href=ACKNOWLEDGEMENT.html class=md-nav__link >Acknowledgements</a> <li class=md-nav__item > <a href=EXTERNAL_TEST_DATA.html class=md-nav__link >External test data</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=VERSIONING.html class=md-nav__link >Semantic versioning</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> </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=running-rugnux > <h1 id=rugnux-tutorial--page-root >Running Rugnux<a class=headerlink href="#rugnux-tutorial--page-root" title="Link to this heading">¶</a></h1> <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="#a-first-run-in-detail" id=id1 >A first run in detail</a></p> <li><p><a class="reference internal" href="#rotation-data" id=id2 >Rotation data</a></p> <li><p><a class="reference internal" href="#still-serial-data" id=id3 >Still / serial data</a></p> <li><p><a class="reference internal" href="#small-molecule-data" id=id4 >Small-molecule data</a></p> <li><p><a class="reference internal" href="#output-files" id=id5 >Output files</a></p> </ul> </nav> <section id=a-first-run-in-detail > <h2 id=a-first-run-in-detail ><a class=toc-backref href="#id1" role=doc-backlink >A first run in detail</a><a class=headerlink href="#a-first-run-in-detail" title="Link to this heading">¶</a></h2> <p>The <a class="reference internal" href="RUGNUX.html#quick-start"><span class="std std-ref">Quick start</span></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 the dataset — any of the formats under <a class="reference internal" href=RUGNUX_FORMATS.html ><span class="std std-doc">What Rugnux reads</span></a>, not only one written by Jungfraujoch; <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 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 >'^SPACE_GROUP_NAME= '</span> <span class=n >myrun_report</span><span class=o >.</span><span class=n >txt</span> <span class=c1 ># the setting, which the number does not name</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>One caveat for a script reading those keys: where the space group is one of an <strong>enantiomorphic pair</strong>, <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_NUMBER=</span></code> / <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_NAME=</span></code> carry one member of the pair by convention, not by determination — the report says so beside them, in section 2, as <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_ALTERNATIVES=</span></code> naming the other hand and <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_ENANTIOMORPH=</span> <span class=pre >UNDETERMINED</span></code>. Treat the two hands as interchangeable until a model settles it: with <code class="docutils literal notranslate"><span class=pre >--model</span></code>, where the data accept the model (<code class="docutils literal notranslate"><span class=pre >MODEL_FIT=</span> <span class=pre >ACCEPTED</span></code>), the report carries <code class="docutils literal notranslate"><span class=pre >MODEL_ENANTIOMORPH_ADOPTED=</span> <span class=pre >TRUE</span></code> and the model’s group instead, and refining an isomorphous model against the wrong hand of the pair costs nothing subtler than an R factor near 0.55.</p> <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 ># skip the unmerged MTZ (written by default), when only the merged data is wanted</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 >no</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 > <h2 id=rotation-data ><a class=toc-backref href="#id2" role=doc-backlink >Rotation data</a><a class=headerlink href="#rotation-data" title="Link to this heading">¶</a></h2> <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 files.</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 group’s 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; the distance moves 1 % a step and a larger move is ratified by re-indexing, and the gauge-weak beam centre stays within 15 px of the centre the first pass ran at or of the run’s own measured centre, whichever is nearer), 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 ><prefix>_*</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 ><prefix>_01.mtz</span></code>, <code class="docutils literal notranslate"><span class=pre >.cif</span></code> or <code class="docutils literal notranslate"><span class=pre >.hkl</span></code>, and no <code class="docutils literal notranslate"><span class=pre >_01_plot.txt</span></code> or <code class="docutils literal notranslate"><span class=pre >_01_detector.jpg</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 ><prefix>_01_process.h5</span></code> appears beside <code class="docutils literal notranslate"><span class=pre ><prefix>_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 kinds of <strong>correction surface</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 Debye–Waller 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), offered as a grid, as spherical harmonics and as a surface that also varies with the rotation angle. Negligible at hard X-rays / thin crystals; it matters at low photon energy and on strongly absorbing crystals. 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 CC1/2 and the anomalous signal.</p> </ul> <p>All of them are <strong>cross-validated</strong> — fitted on even-numbered frames and used to merge the odd ones, and the other way round, and kept only if the correlation between the two half-set means, within resolution shells, rises over the same halves merged without the surface. The score does not involve the sigmas, so a surface can never pass by merely reshaping them; 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 (<a class="reference internal" href="CPU_DATA_ANALYSIS_INTEGRATION.html#rotation-datasets-combining-partials-into-fulls-3d-integration"><span class="std std-ref">§10.6</span></a>).</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 > <h2 id=still-serial-data ><a class=toc-backref href="#id3" role=doc-backlink >Still / serial data</a><a class=headerlink href="#still-serial-data" title="Link to this heading">¶</a></h2> <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="RUGNUX_ADVANCED.html#the-indexing-ambiguity"><span class="std std-ref">indexing ambiguity</span></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 CC1/2. (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 id=small-molecule-data > <h2 id=small-molecule-data ><a class=toc-backref href="#id4" role=doc-backlink >Small-molecule data</a><a class=headerlink href="#small-molecule-data" title="Link to this heading">¶</a></h2> <p>A rotation sweep of a small-molecule crystal is processed with the same command as any other, and needs no flag to say what it is:</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 >xtal</span> <span class=n >sweep_master</span><span class=o >.</span><span class=n >h5</span>
|
||
</pre></div> </div> <p>What differs from a protein is handled by the run itself:</p> <ul class=simple > <li><p><strong>Short cell axes.</strong> The FFT search’s floor is 10 Å, but a de-novo rotation run also tries a second first-pass hypothesis with the floor at 5 Å and takes it where the standing cell is an integer supercell of what it finds, so a cell with short axes is indexed on its true axes. An axis shorter than 5 Å needs <code class="docutils literal notranslate"><span class=pre >--fft-min-unit-cell</span></code> lowered, or the cell given with <code class="docutils literal notranslate"><span class=pre >-C</span></code>.</p> <li><p><strong>Wide and split spots.</strong> Spots far from the beam, at the high energies small-molecule data are often taken at, grow several times wider than the integration disk, and a crystal of slightly misaligned domains records each reflection as two or more spots. The pre-scan measures how wide the spots and their offsets from the predicted positions are across the detector, and the integration follows that footprint wherever it outgrows the disk (<a class="reference internal" href="CPU_DATA_ANALYSIS_INTEGRATION.html#regions-of-interest"><span class="std std-ref">§9.1</span></a>); on compact spots nothing changes.</p> <li><p><strong>Sparse patterns.</strong> A lattice that explains too few spots on most frames to pass the per-frame test is integrated on every frame rather than only on the frames that happen to carry more spots (<a class="reference internal" href="CPU_DATA_ANALYSIS_INDEXING.html#indexed-spot-decision-inlier-test"><span class="std std-ref">§4.1</span></a>). Where a sweep has few reflections per frame, the per-frame scale may be taken from the full reflections alone instead of from the partials; the merge decides that from the data and the log says which it took (<a class="reference internal" href="CPU_DATA_ANALYSIS_INTEGRATION.html#rotation-datasets-combining-partials-into-fulls-3d-integration"><span class="std std-ref">§10.6</span></a>).</p> <li><p><strong>Overloads.</strong> A measurement of a reflection with an overloaded pixel on any of its frames is left out, as XDS leaves it out: its brightest part is the part that was not measured. On a strongly diffracting crystal these are the strongest low-order reflections, and <code class="docutils literal notranslate"><span class=pre >OBSERVATIONS_REJECTED_OVERLOAD=</span></code> in the report counts them. Many of them mean the sweep wants a weaker beam, not different processing.</p> <li><p><strong>Space group.</strong> The search names glide planes, and groups without a centre of symmetry as well as centrosymmetric ones. Where the absences cannot separate the two (C2/c and Cc, Pnma and Pna2₁), the centrosymmetric group is written and the other is listed in <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_ALTERNATIVES=</span></code>, unless the intensity statistics read acentric and the lattice rules twinning out; <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_CENTRE=</span></code> says which of these happened (see <a class="reference internal" href="RUGNUX_REPORT.html#the-space-group-and-the-sohncke-answer-beside-it"><span class="std std-ref">The results report</span></a>). Structure solution and refinement settle it.</p> </ul> <p>Two settings are worth a look before running. The default polarization (<code class="docutils literal notranslate"><span class=pre >--polarization</span> <span class=pre >0.99</span></code>) is an undulator’s; a laboratory source is close to unpolarized, and no file format states it, so give the instrument’s value. And the written reflections stop where CC1/2 falls off (the default <code class="docutils literal notranslate"><span class=pre >--resolution-cutoff</span> <span class=pre >cc-logistic</span></code>, the same cut for every file, <code class="docutils literal notranslate"><span class=pre >.hkl</span></code> included); <code class="docutils literal notranslate"><span class=pre >--resolution-cutoff</span> <span class=pre >off</span></code> keeps everything to the edge of the detector, for a refinement that weights the weak data itself.</p> <p>The file for SHELX is <code class="docutils literal notranslate"><span class=pre >xtal.hkl</span></code>: on a rotation sweep it holds the scaled reflections <strong>unmerged</strong>, each at the index it was measured at, so SHELXL computes R(int) and R(sigma) itself and the Friedel opposites it needs for the absolute structure are all there — no <code class="docutils literal notranslate"><span class=pre >-A</span></code> is needed. How to take it into SHELXT and SHELXL is under <a class="reference internal" href="RUGNUX_INTEGRATION.html#small-molecule-structures-with-shelxt-and-shelxl"><span class="std std-ref">Small-molecule structures with SHELXT and SHELXL</span></a>. Absorption is corrected only by the empirical surface a rotation run fits and keeps where it helps (<a class="reference internal" href="#rotation-data">Rotation data</a>); there is no correction from the crystal’s measured faces. <code class="docutils literal notranslate"><span class=pre >--model</span></code> is for macromolecular models and plays no part here.</p> </section> <section id=output-files > <h2 id=output-files ><a class=toc-backref href="#id5" role=doc-backlink >Output files</a><a class=headerlink href="#output-files" title="Link to this heading">¶</a></h2> <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 ><prefix>_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 ><prefix>.mtz</span></code> — CCP4 MTZ for the CCP4 / phenix reflection tools. The columns are <code class="docutils literal notranslate"><span class=pre >H</span> <span class=pre >K</span> <span class=pre >L</span> <span class=pre >IMEAN</span> <span class=pre >SIGIMEAN</span> <span class=pre >I(+)</span> <span class=pre >SIGI(+)</span> <span class=pre >I(-)</span> <span class=pre >SIGI(-)</span> <span class=pre >F</span> <span class=pre >SIGF</span> <span class=pre >F(+)</span> <span class=pre >SIGF(+)</span> <span class=pre >F(-)</span> <span class=pre >SIGF(-)</span> <span class=pre >FreeR_flag</span></code> (<code class="docutils literal notranslate"><span class=pre >F</span></code> is the French–Wilson amplitude); the anomalous columns are present whenever any reflection carries a Bijvoet split — a rotation run always does, a stills run only with <code class="docutils literal notranslate"><span class=pre >-A</span></code>.</p> <li><p><code class="docutils literal notranslate"><span class=pre ><prefix>.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 ><prefix>.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>SHELXL</strong> and <strong>SHELXC / ANODE / SHELXD</strong>. On rotation data it holds the scaled full reflections <strong>unmerged</strong> — every correction applied, symmetry equivalents not averaged, each at the index it was measured at — so SHELXL reports Rint and Rsigma itself and the anomalous signal is all there; stills runs write the merged reflections (Bijvoet mates at <code class="docutils literal notranslate"><span class=pre >+hkl</span></code> and <code class="docutils literal notranslate"><span class=pre >-hkl</span></code>). Intensities are put on a common scale so the largest value fits the fixed-width field, 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 ><prefix>_unmerged.mtz</span></code> — the integrated observations <em>before</em> merging, as an unmerged MTZ in POINTLESS’s 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 by default, alongside the merged files and with <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> too; <code class="docutils literal notranslate"><span class=pre >--no-export-unmerged</span></code> skips it. See <a class="reference internal" href="RUGNUX_INTEGRATION.html#the-unmerged-export"><span class="std std-ref">The unmerged export</span></a>. <code class="docutils literal notranslate"><span class=pre >--export-unmerged-partials</span></code> writes <code class="docutils literal notranslate"><span class=pre ><prefix>_unmerged_partials.mtz</span></code>, one row per image, instead of summing.</p> <li><p><code class="docutils literal notranslate"><span class=pre ><prefix>_P1.mtz</span></code> — the <strong>P1 cross-check dataset</strong>: the same observations merged in P1 instead of the space group the run determined, so a wrong call can be re-merged, re-solved or re-refined without processing the images again. It is a full merge, not the degraded one the search itself runs on, and it is what <code class="docutils literal notranslate"><span class=pre >rugnux</span> <span class=pre >--mode</span> <span class=pre >scale</span> <span class=pre >-S</span> <span class=pre >P1</span></code> would make from a <code class="docutils literal notranslate"><span class=pre >_process.h5</span></code>. <strong>Every rotation run that determines its own space group writes it</strong> — including one that determined P1, where it simply repeats the merged output — so a script harvesting results can always expect the file rather than having to reproduce the search’s decision to know whether it exists. It is <strong>not</strong> written when <code class="docutils literal notranslate"><span class=pre >-S</span></code> fixed the space group: prediction then rejects that group’s centring absences, so those reflections were never integrated and a P1 merge of them would be missing whole classes of reflections. <code class="docutils literal notranslate"><span class=pre >--no-p1-crosscheck</span></code> declines it. Stills are not covered yet. Its <code class="docutils literal notranslate"><span class=pre >FreeR_flag</span></code> is drawn by the same index hash but over P1’s own asymmetric unit, so it is <strong>not</strong> the merged file’s test set: a re-refinement in P1 is a fresh cross-validation, and its R-free is not comparable with one against <code class="docutils literal notranslate"><span class=pre ><prefix>.mtz</span></code>.</p> <li><p>With <code class="docutils literal notranslate"><span class=pre >--model</span></code>, the validation outputs land beside the files above: the σ<sub>A</sub>-weighted maps <code class="docutils literal notranslate"><span class=pre ><prefix>_2fofc.ccp4</span></code> and <code class="docutils literal notranslate"><span class=pre ><prefix>_fofc.ccp4</span></code>, the map-coefficient MTZ <code class="docutils literal notranslate"><span class=pre ><prefix>_maps.mtz</span></code>, the anomalous difference map <code class="docutils literal notranslate"><span class=pre ><prefix>_anom.ccp4</span></code> (where the merge kept the Bijvoet split), and the model <strong>as placed</strong> against the data as <code class="docutils literal notranslate"><span class=pre ><prefix>_model.cif</span></code> <strong>and</strong> <code class="docutils literal notranslate"><span class=pre ><prefix>_model.pdb</span></code> — the coordinates that go with the maps, in the cell and space group of <code class="docutils literal notranslate"><span class=pre ><prefix>.mtz</span></code>. Mind the names: <code class="docutils literal notranslate"><span class=pre ><prefix>.cif</span></code> is merged <em>reflections</em>, <code class="docutils literal notranslate"><span class=pre ><prefix>_model.cif</span></code> is <em>coordinates</em>. The PDB is there because fragment-screening tools want a <code class="docutils literal notranslate"><span class=pre ><name>.pdb</span></code> beside a <code class="docutils literal notranslate"><span class=pre ><name>.mtz</span></code> — PanDDA’s per-dataset input layout, and the pair dimple produces — and it is skipped, with a log line, for a cell the PDB format cannot hold. See <a class="reference internal" href="RUGNUX_ADVANCED.html#validating-against-a-model-rugnux-model"><span class="std std-ref">Validating against a model</span></a>.</p> <li><p><code class="docutils literal notranslate"><span class=pre ><prefix>_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="RUGNUX_REPORT.html#the-results-report"><span class="std std-ref">The results report</span></a>.</p> <li><p><code class="docutils literal notranslate"><span class=pre ><prefix>_plot.txt</span></code> — <strong>the per-image table</strong>, one row per processed image, whitespace-separated, with a single <code class="docutils literal notranslate"><span class=pre >#</span></code> legend line over its own columns so gnuplot plots it as it stands (<code class="docutils literal notranslate"><span class=pre >plot</span> <span class=pre >'<prefix>_plot.txt'</span> <span class=pre >using</span> <span class=pre >1:4</span></code>). The columns are:</p> <table> <thead> <tr class=row-odd ><th class=head ><p>Column</p> <th class=head ><p>Meaning</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >image</span></code></p> <td><p>Processed-image ordinal, the numbering every per-image array <code class="docutils literal notranslate"><span class=pre >rugnux</span></code> writes uses; 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>.</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >angle_deg</span></code></p> <td><p>Spindle angle at mid-exposure.</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >bkg</span></code></p> <td><p>Background estimate from the azimuthal profile (the <code class="docutils literal notranslate"><span class=pre >bkgEstimate</span></code> of the HDF5 file).</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >resolution_A</span></code></p> <td><p>How far the image’s spots reach, from spot finding alone.</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >spots</span></code></p> <td><p>Spots found.</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >scale_G</span></code></p> <td><p>Per-image scale factor fitted by scaling.</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >sigma_M_deg</span></code></p> <td><p>Mosaicity as the rocking-curve <strong>standard deviation</strong> σ<sub>M</sub> in degrees — not a FWHM, and not XDS’s <code class="docutils literal notranslate"><span class=pre >REFLECTING_RANGE</span></code>. See the note below.</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >cc_to_merge</span></code></p> <td><p>Correlation of the image’s own observations with the merged data.</p> <tr class=row-even ><td><p><code class="docutils literal notranslate"><span class=pre >cc_n</span></code></p> <td><p>Observations that correlation was computed over; 0 where none was.</p> <tr class=row-odd ><td><p><code class="docutils literal notranslate"><span class=pre >merged</span></code></p> <td><p>1 where the image’s observations are in the merged data, 0 where they are not — an image that never indexed, one an earlier guard dropped, and one ΔCC<sub>1/2</sub> convicted all read 0. <code class="docutils literal notranslate"><span class=pre >nan</span></code> on a run that merged nothing, <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> included, where the question has no answer.</p> </table> <p>A quantity nothing measured for an image is written <code class="docutils literal notranslate"><span class=pre >nan</span></code>, which gnuplot and numpy both skip; the columns never shift and a row is never left out. A stills run writes the table too, with <code class="docutils literal notranslate"><span class=pre >nan</span></code> in the columns a sweep would fill; <code class="docutils literal notranslate"><span class=pre >--no-merge</span></code> writes it with the scaling columns <code class="docutils literal notranslate"><span class=pre >nan</span></code>.</p> <p><strong>Reading <code class="docutils literal notranslate"><span class=pre >sigma_M_deg</span></code>.</strong> It is fitted per image — a maximum-likelihood Gaussian rocking width over that image’s own indexed spots — but it is then <strong>smoothed in frame order</strong> over the same rotation window as the per-image scale (<code class="docutils literal notranslate"><span class=pre >--smooth-g</span></code>), and any frame too sparse to fit one of its own is given the run’s median. So the column varies only on the smoothing window’s scale, and on a weakly diffracting crystal it is close to, or exactly, a constant: that flatness is the honest statement that the run measured no per-frame variation, not a placeholder. The value is the one scaling used to recompute partialities. σ<sub>M</sub> here is the width of a Gaussian rocking curve and nothing more — it is not a physical crystal mosaic spread, it absorbs beam divergence and every other source of angular spread, and it reads systematically <strong>low</strong> against XDS’s <code class="docutils literal notranslate"><span class=pre >SIGMAR</span></code> (about 0.9× on the regression corpus). Use it to see whether the run’s rocking width moves across the sweep, not as a number to quote.</p> <li><p><code class="docutils literal notranslate"><span class=pre ><prefix>_detector.jpg</span></code> — <strong>the detector as the run saw it</strong>, so the beam stop and the module gaps can be checked by eye. Rotation runs only, and only where <code class="docutils literal notranslate"><span class=pre >--detect-beam-stop</span></code> was left on (it is by default). The picture is the mean projection over the frames the beam-stop detection sampled — the very image it tested — coloured with <code class="docutils literal notranslate"><span class=pre >jfjoch_viewer</span></code>’s default map: white to indigo for the counts, <strong>grey</strong> for the module and chip gaps, <strong>coral</strong> for the shadow the run detected, and <strong>magenta</strong> for everything else the pixel mask holds. The scale saturates at eight times the median measured pixel, not at the brightest pixels, so the background spans the ramp and the Bragg spots clip: it is the background the picture is read for, since a shadow is a place the background is missing. A shadow drawn where the background is unbroken, or a dark patch the run left uncoloured, is visible at a glance; read it against the <code class="docutils literal notranslate"><span class=pre >Beam</span> <span class=pre >stop</span> <span class=pre >shadow:</span> <span class=pre >N</span> <span class=pre >pixels</span> <span class=pre >...</span></code> line in the log.</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> </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=RUGNUX_FORMATS.html title="What Rugnux reads" 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> What Rugnux reads </span> </div> </a> <a href=RUGNUX_INTEGRATION.html title="Rugnux with other programs" 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> Rugnux with other programs </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 > © 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> |