83 lines
89 KiB
HTML
83 lines
89 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>Rugnux with other programs — 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="The results report" href=RUGNUX_REPORT.html /> <link rel=prev title="Running Rugnux" href=RUGNUX_TUTORIAL.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_INTEGRATION" 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 > Rugnux with other programs </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 > <a href=RUGNUX_TUTORIAL.html class=md-nav__link >Running Rugnux</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 with other programs </label> <a href="#" class="md-nav__link md-nav__link--active">Rugnux with other programs</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="#reflection-file-conventions" class=md-nav__link >Reflection-file conventions</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="#taking-the-data-onward" class=md-nav__link >Taking the data onward</a> <li class=md-nav__item > <a href="#molecular-replacement-with-phaser" class=md-nav__link >Molecular replacement with Phaser</a> <li class=md-nav__item > <a href="#small-molecule-structures-with-shelxt-and-shelxl" class=md-nav__link >Small-molecule structures with SHELXT and SHELXL</a> <li class=md-nav__item > <a href="#experimental-phasing-with-shelx" class=md-nav__link >Experimental phasing with SHELX</a> <li class=md-nav__item > <a href="#comparing-the-geometry-with-xds" class=md-nav__link >Comparing the geometry with XDS</a> </ul> <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=rugnux-with-other-programs > <h1 id=rugnux-integration--page-root >Rugnux with other programs<a class=headerlink href="#rugnux-integration--page-root" title="Link to this heading">¶</a></h1> <p>What the reflection files promise to a reading program, and the minimum commands that get each downstream suite running on Rugnux output.</p> <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="#reflection-file-conventions" id=id1 >Reflection-file conventions</a></p> <li><p><a class="reference internal" href="#the-unmerged-export" id=id2 >The unmerged export</a></p> <li><p><a class="reference internal" href="#taking-the-data-onward" id=id3 >Taking the data onward</a></p> <li><p><a class="reference internal" href="#molecular-replacement-with-phaser" id=id4 >Molecular replacement with Phaser</a></p> <li><p><a class="reference internal" href="#small-molecule-structures-with-shelxt-and-shelxl" id=id5 >Small-molecule structures with SHELXT and SHELXL</a></p> <li><p><a class="reference internal" href="#experimental-phasing-with-shelx" id=id6 >Experimental phasing with SHELX</a></p> <li><p><a class="reference internal" href="#comparing-the-geometry-with-xds" id=id7 >Comparing the geometry with XDS</a></p> </ul> </nav> <section id=reflection-file-conventions > <h2 id=reflection-file-conventions ><a class=toc-backref href="#id1" role=doc-backlink >Reflection-file conventions</a><a class=headerlink href="#reflection-file-conventions" title="Link to this heading">¶</a></h2> <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>XDS’s 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 XDS’s 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>Padilla–Yeates 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 crystal’s 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 set’s 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 ><prefix>.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>, 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>SHELXL</strong>, <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>On rotation data it is unmerged</strong>: one record per full reflection (its partials summed), with the per-frame scale and every correction applied and the σ(I) the merge weighted it with, but not averaged with its symmetry equivalents, and at the index it was measured at — the chemical crystallographer’s convention, so SHELXL computes Rint and Rsigma itself and Friedel mates keep their own records. Observations the merge rejected as outliers or left out for an overloaded pixel, and those beyond its resolution cut, are not in the file. There is no batch number column (in HKLF 4 that selects a BASF scale factor). A <strong>stills</strong> run writes the merged reflections instead, 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>.</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> <p><strong>MTZ</strong> (<code class="docutils literal notranslate"><span class=pre ><prefix>.mtz</span></code>, and <code class="docutils literal notranslate"><span class=pre ><prefix>_P1.mtz</span></code> beside it). The CCP4 anomalous layout, with the column types CCP4 programs dispatch on:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >H</span> <span class=n >K</span> <span class=n >L</span> <span class=n >IMEAN</span> <span class=n >SIGIMEAN</span> <span class=n >I</span><span class=p >(</span><span class=o >+</span><span class=p >)</span> <span class=n >SIGI</span><span class=p >(</span><span class=o >+</span><span class=p >)</span> <span class=n >I</span><span class=p >(</span><span class=o >-</span><span class=p >)</span> <span class=n >SIGI</span><span class=p >(</span><span class=o >-</span><span class=p >)</span> <span class=n >F</span> <span class=n >SIGF</span> <span class=n >F</span><span class=p >(</span><span class=o >+</span><span class=p >)</span> <span class=n >SIGF</span><span class=p >(</span><span class=o >+</span><span class=p >)</span> <span class=n >F</span><span class=p >(</span><span class=o >-</span><span class=p >)</span> <span class=n >SIGF</span><span class=p >(</span><span class=o >-</span><span class=p >)</span> <span class=n >FreeR_flag</span>
|
||
<span class=n >H</span> <span class=n >H</span> <span class=n >H</span> <span class=n >J</span> <span class=n >Q</span> <span class=n >K</span> <span class=n >M</span> <span class=n >K</span> <span class=n >M</span> <span class=n >F</span> <span class=n >Q</span> <span class=n >G</span> <span class=n >L</span> <span class=n >G</span> <span class=n >L</span> <span class=n >I</span>
|
||
</pre></div> </div> <p><code class="docutils literal notranslate"><span class=pre >F</span></code> is the French–Wilson amplitude. The header carries the determined space group, the refined cell and the wavelength, on a dataset of its own behind the reserved <code class="docutils literal notranslate"><span class=pre >HKL_base</span></code>, which is where the MTZ format puts them. Older Rugnux wrote the data on dataset 0, the id reserved for <code class="docutils literal notranslate"><span class=pre >HKL_base</span></code>, and CCP4’s <code class="docutils literal notranslate"><span class=pre >mtzinfo</span></code> then reported its 1.54187 Å (Cu Kα) default instead of the real wavelength — every other reader tried, <code class="docutils literal notranslate"><span class=pre >mtzdmp</span></code>, <code class="docutils literal notranslate"><span class=pre >truncate</span></code>, <code class="docutils literal notranslate"><span class=pre >ctruncate</span></code>, gemmi, iotbx and <code class="docutils literal notranslate"><span class=pre >phenix.xtriage</span></code>, recovered the true value from those files as well, so the effect was confined to that one report. Note that <code class="docutils literal notranslate"><span class=pre ><prefix>_unmerged.mtz</span></code> still reads 1.54187 under <code class="docutils literal notranslate"><span class=pre >mtzinfo</span></code> and is not wrong: its columns sit on <code class="docutils literal notranslate"><span class=pre >HKL_base</span></code> deliberately, as POINTLESS expects, and the wavelength AIMLESS and POINTLESS read is the per-batch one, which is correct. The Bijvoet columns are present on any rotation merge, with or without <code class="docutils literal notranslate"><span class=pre >-A</span></code>; a stills merge has no Bijvoet split and the file then stops after <code class="docutils literal notranslate"><span class=pre >F</span> <span class=pre >SIGF</span> <span class=pre >FreeR_flag</span></code>.</p> <p>There is deliberately <strong>no <code class="docutils literal notranslate"><span class=pre >DANO</span></code>/<code class="docutils literal notranslate"><span class=pre >SIGDANO</span></code></strong> pair, the anomalous difference columns a CCP4 merged file usually carries. They are a restatement rather than a measurement: checked column against column on a <code class="docutils literal notranslate"><span class=pre >ctruncate</span></code> file, <code class="docutils literal notranslate"><span class=pre >DANO</span></code> is <code class="docutils literal notranslate"><span class=pre >F(+)</span> <span class=pre >−</span> <span class=pre >F(-)</span></code> to the last bit and <code class="docutils literal notranslate"><span class=pre >SIGDANO</span></code> is <code class="docutils literal notranslate"><span class=pre >√(σ(+)²</span> <span class=pre >+</span> <span class=pre >σ(−)²)</span></code> to the last bit, on every reflection — the quadrature sum is the convention whether or not the two mates came from one scale model, and no correlation correction is applied by anybody. Every program in the phasing routes below reads the Bijvoet columns directly and forms the difference itself, and CCP4’s own phasing engines prefer them: <code class="docutils literal notranslate"><span class=pre >bp3</span></code> and <code class="docutils literal notranslate"><span class=pre >afro</span></code> want <code class="docutils literal notranslate"><span class=pre >F+/SF+/F-/SF-</span></code> and tell a user holding <code class="docutils literal notranslate"><span class=pre >F</span></code>/<code class="docutils literal notranslate"><span class=pre >DANO</span></code> to convert <em>to</em> that form, and <code class="docutils literal notranslate"><span class=pre >mtz2sca</span></code> ranks <code class="docutils literal notranslate"><span class=pre >I(+/-)</span></code> over <code class="docutils literal notranslate"><span class=pre >F(+/-)</span></code> over <code class="docutils literal notranslate"><span class=pre >F/DANO</span></code>. Where the pair is genuinely wanted — <code class="docutils literal notranslate"><span class=pre >fft</span></code>’s anomalous-difference Fourier takes a <code class="docutils literal notranslate"><span class=pre >DANO</span></code> label and has no other spelling — one command makes it, with the <code class="docutils literal notranslate"><span class=pre >ISYM</span></code> column that belongs beside it:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >ctruncate</span> <span class=o >-</span><span class=n >hklin</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span> <span class=o >-</span><span class=n >hklout</span> <span class=n >myrun_ct</span><span class=o >.</span><span class=n >mtz</span> \
|
||
<span class=o >-</span><span class=n >colin</span> <span class=s1 >'/*/*/[IMEAN,SIGIMEAN]'</span> <span class=o >-</span><span class=n >colano</span> <span class=s1 >'/*/*/[I(+),SIGI(+),I(-),SIGI(-)]'</span>
|
||
</pre></div> </div> </section> <section id=the-unmerged-export > <h2 id=the-unmerged-export ><a class=toc-backref href="#id2" 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 ><prefix>_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. It is written by default, 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 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, so a run that only wants the merged numbers — a regression battery, or a throughput pipeline — turns it off with <code class="docutils literal notranslate"><span class=pre >--no-export-unmerged</span></code>.</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 Rugnux’s merge against another one on identical input. Each sweep’s file is self-contained, so several of them can be handed to pointless and aimless as separate <code class="docutils literal notranslate"><span class=pre >HKLIN</span></code>s to merge sweeps Rugnux does not combine itself.</p> <blockquote> <div><p><strong>Trap when combining a wild-carded series.</strong> For an <code class="docutils literal notranslate"><span class=pre >HKLIN</span></code> given with wild-cards, POINTLESS accepts the files in order and <strong>terminates acceptance at the first file out of chronological order</strong>, then merges what it kept and prints a plausible result. Its own keyword lifts the check — <code class="docutils literal notranslate"><span class=pre >ALLOW</span> <span class=pre >OUTOFSEQUENCEFILES</span></code> — or name each file as its own <code class="docutils literal notranslate"><span class=pre >HKLIN</span></code>, which is not a series; either way, check the file count in its log against the number you meant to give.</p> </div></blockquote> <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 >QE</span> <span class=pre >FLIGHT</span> <span class=pre >FLAG</span></code> — POINTLESS’s own set down to <code class="docutils literal notranslate"><span class=pre >FLAG</span></code>, plus <code class="docutils literal notranslate"><span class=pre >QE</span></code> and <code class="docutils literal notranslate"><span class=pre >FLIGHT</span></code> (the sensor-efficiency and flight-path divisors described above; <code class="docutils literal notranslate"><span class=pre >QE</span></code> is DIALS’s column) — then 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>Header symmetry and order.</strong> The file’s MTZ header carries the <strong>space group the run determined</strong> (P1 where none was), and the rows are <strong>sorted on <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></code></strong> — the order POINTLESS leaves an unmerged file in, and the order AIMLESS requires of its input — so both programs take the file directly.</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>deterministic per-reflection corrections and nothing else</strong>. Three columns record them: <code class="docutils literal notranslate"><span class=pre >LP</span></code> is Lorentz x polarization; <code class="docutils literal notranslate"><span class=pre >QE</span></code> is the sensor’s quantum efficiency at the angle the diffracted beam meets the detector; and <code class="docutils literal notranslate"><span class=pre >FLIGHT</span></code> is the attenuation in the medium the reflection crossed on its way there. <code class="docutils literal notranslate"><span class=pre >QE</span></code> and <code class="docutils literal notranslate"><span class=pre >FLIGHT</span></code> are both <strong>divisors</strong> normalised to 1 at normal incidence, so raw counts are <code class="docutils literal notranslate"><span class=pre >I</span> <span class=pre >/</span> <span class=pre >LP</span> <span class=pre >*</span> <span class=pre >QE</span> <span class=pre >*</span> <span class=pre >FLIGHT</span></code>. They are applied because they are per-observation geometry that varies by more than two orders of magnitude across a sweep and no reader can reconstruct them. <code class="docutils literal notranslate"><span class=pre >QE</span></code> is at least 1 and <code class="docutils literal notranslate"><span class=pre >FLIGHT</span></code> at most 1: an oblique reflection crosses more sensor, which makes it read high, and more of the medium, which makes it read low. <code class="docutils literal notranslate"><span class=pre >FLIGHT</span></code> is a column of ones under <code class="docutils literal notranslate"><span class=pre >--flight-path</span> <span class=pre >vacuum</span></code>.</p> <p><code class="docutils literal notranslate"><span class=pre >QE</span></code> is kept out of <code class="docutils literal notranslate"><span class=pre >LP</span></code> because that is what the field means by <code class="docutils literal notranslate"><span class=pre >LP</span></code>: XDS’s <code class="docutils literal notranslate"><span class=pre >RLP</span></code> is Lorentz x polarization alone (its own column is flat to 0.1% across a detector over which the efficiency term spans 7%), and DIALS fills <code class="docutils literal notranslate"><span class=pre >LP</span></code> from lorentz/polarization only and writes <code class="docutils literal notranslate"><span class=pre >QE</span></code> as a separate column — a column of ones where it has no correction. Rugnux normalises <code class="docutils literal notranslate"><span class=pre >QE</span></code> to normal incidence where DIALS stores the un-normalised absorbed fraction; the two differ by a per-dataset constant, i.e. by an overall scale. 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 Rugnux’s 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-captured-fraction</span></code> (or <code class="docutils literal notranslate"><span class=pre >--min-partiality</span></code>) is not written, and neither is one with an overloaded pixel on any of its frames, exactly as in the merge. Summing is the default because a downstream program’s own partial handling is far more conservative than Rugnux’s: 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 ><prefix>_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 program’s 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 batch’s own increasing <code class="docutils literal notranslate"><span class=pre >PHI</span></code> turns the crystal about. With the sign as exported, pointless’s independently determined orientation matrix agrees with Rugnux’s to well under a degree.</p> </section> <section id=taking-the-data-onward > <h2 id=taking-the-data-onward ><a class=toc-backref href="#id3" role=doc-backlink >Taking the data onward</a><a class=headerlink href="#taking-the-data-onward" title="Link to this heading">¶</a></h2> <p>The reflection files are inputs to other suites, and the handover has a few conventions worth one line each. These are the minimum commands that get each program running on Rugnux output.</p> <p><strong>phenix.</strong> The merged files carry both the mean intensity and the Bijvoet pairs, and a phenix program that has not said which it wants stops on the pair of them — from the MTZ and from the mmCIF alike, each listing its own format’s labels:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >Sorry</span><span class=p >:</span> <span class=n >Multiple</span> <span class=n >equally</span> <span class=n >suitable</span> <span class=n >arrays</span> <span class=n >of</span> <span class=n >observed</span> <span class=n >xray</span> <span class=n >data</span> <span class=n >found</span><span class=o >.</span>
|
||
|
||
<span class=n >Possible</span> <span class=n >choices</span><span class=p >:</span>
|
||
<span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span><span class=p >:</span><span class=n >IMEAN</span><span class=p >,</span><span class=n >SIGIMEAN</span>
|
||
<span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span><span class=p >:</span><span class=n >I</span><span class=p >(</span><span class=o >+</span><span class=p >),</span><span class=n >SIGI</span><span class=p >(</span><span class=o >+</span><span class=p >),</span><span class=n >I</span><span class=p >(</span><span class=o >-</span><span class=p >),</span><span class=n >SIGI</span><span class=p >(</span><span class=o >-</span><span class=p >)</span>
|
||
</pre></div> </div> <p>Two things are worth knowing before reading that as a fault in the file. The tie is between the two <strong>intensity</strong> arrays and nothing else: iotbx scores <code class="docutils literal notranslate"><span class=pre >F</span></code>/<code class="docutils literal notranslate"><span class=pre >SIGF</span></code> and <code class="docutils literal notranslate"><span class=pre >F(+)</span></code>/<code class="docutils literal notranslate"><span class=pre >F(-)</span></code> below them, so they are never in the running and writing amplitudes as well as intensities is not what causes this. And <strong>ctruncate’s own output ties in the same place</strong> — put any merged data through CCP4’s truncate step and phenix asks the same question of the result, because a mean intensity array and an anomalous one score equally whenever the calling program has expressed no preference. The only file change that removes the tie is dropping one of the two, and dropping the Bijvoet columns would take the anomalous signal — and the whole <a class="reference internal" href="#experimental-phasing-with-shelx">SHELX route</a> — with it.</p> <p>So the answer is a label. The parameter name differs by program, which is the part that catches people out:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >phenix</span><span class=o >.</span><span class=n >xtriage</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span> <span class=n >xray_data</span><span class=o >.</span><span class=n >obs_labels</span><span class=o >=</span><span class=n >IMEAN</span>
|
||
<span class=n >phenix</span><span class=o >.</span><span class=n >xtriage</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span> <span class=s2 >"xray_data.obs_labels=I(+)"</span> <span class=c1 ># the Bijvoet array instead</span>
|
||
<span class=n >phenix</span><span class=o >.</span><span class=n >refine</span> <span class=n >model</span><span class=o >.</span><span class=n >pdb</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span> <span class=n >miller_array</span><span class=o >.</span><span class=n >labels</span><span class=o >.</span><span class=n >name</span><span class=o >=</span><span class=n >IMEAN</span>
|
||
</pre></div> </div> <p><code class="docutils literal notranslate"><span class=pre >IMEAN</span></code> on its own is enough — the match is on a substring — and <code class="docutils literal notranslate"><span class=pre >IMEAN,SIGIMEAN</span></code> and the fully-qualified <code class="docutils literal notranslate"><span class=pre >scaling.input.xray_data.obs_labels=</span></code> work equally. Quote the anomalous one: the parentheses are shell syntax otherwise. The same behaviour appears on the mmCIF in that format’s own vocabulary, and a label from one format does not work on the other (<code class="docutils literal notranslate"><span class=pre >Sorry:</span> <span class=pre >No</span> <span class=pre >matching</span> <span class=pre >array</span></code>):</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >phenix</span><span class=o >.</span><span class=n >xtriage</span> <span class=n >myrun</span><span class=o >.</span><span class=n >cif</span> <span class=n >xray_data</span><span class=o >.</span><span class=n >obs_labels</span><span class=o >=</span><span class=n >intensity_meas</span>
|
||
<span class=n >phenix</span><span class=o >.</span><span class=n >xtriage</span> <span class=n >myrun</span><span class=o >.</span><span class=n >cif</span> <span class=n >xray_data</span><span class=o >.</span><span class=n >obs_labels</span><span class=o >=</span><span class=n >pdbx_I_plus</span>
|
||
</pre></div> </div> <p><strong>A program that states a preference needs none of this.</strong> <code class="docutils literal notranslate"><span class=pre >phenix.hyss</span></code>, <code class="docutils literal notranslate"><span class=pre >phenix.find_peaks_holes</span></code>, <code class="docutils literal notranslate"><span class=pre >phenix.molprobity</span></code> and the data import behind <code class="docutils literal notranslate"><span class=pre >phenix.autosol</span></code> ask for anomalous data by preference, which breaks the tie for them. <code class="docutils literal notranslate"><span class=pre >phenix.hyss</span> <span class=pre >myrun.mtz</span> <span class=pre >n_sites=6</span> <span class=pre >scattering_type=S</span></code> opens the file with no labels given, reports <code class="docutils literal notranslate"><span class=pre >Miller</span> <span class=pre >array</span> <span class=pre >info:</span> <span class=pre >myrun.mtz:I(+),SIGI(+),I(-),SIGI(-)</span></code>, and forms the anomalous differences itself.</p> <p><strong>The R-free convention.</strong> <code class="docutils literal notranslate"><span class=pre >FreeR_flag</span></code> is <strong>0 = free, 1 = work</strong> — the CCP4 convention the column’s own name belongs to (5 % free by default). REFMAC5’s default <code class="docutils literal notranslate"><span class=pre >FREE</span> <span class=pre >0</span></code> reads it directly and phenix.refine detects the numbering on its own, so neither needs a keyword:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >refmac5</span> <span class=n >XYZIN</span> <span class=n >model</span><span class=o >.</span><span class=n >pdb</span> <span class=n >HKLIN</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span> <span class=n >XYZOUT</span> <span class=n >refined</span><span class=o >.</span><span class=n >pdb</span> <span class=n >HKLOUT</span> <span class=n >refined</span><span class=o >.</span><span class=n >mtz</span> <span class=o ><<</span><span class=n >eof</span>
|
||
<span class=n >LABIN</span> <span class=n >FP</span><span class=o >=</span><span class=n >F</span> <span class=n >SIGFP</span><span class=o >=</span><span class=n >SIGF</span> <span class=n >FREE</span><span class=o >=</span><span class=n >FreeR_flag</span>
|
||
<span class=n >NCYC</span> <span class=mi >10</span>
|
||
<span class=n >END</span>
|
||
<span class=n >eof</span>
|
||
</pre></div> </div> <p>(A merged MTZ written before rc.166 carried the opposite, phenix/CNS numbering — 0 = work — under the same column name; REFMAC5 stops on such a file with <code class="docutils literal notranslate"><span class=pre >more</span> <span class=pre >than</span> <span class=pre >half</span> <span class=pre >of</span> <span class=pre >reflections</span> <span class=pre >are</span> <span class=pre >in</span> <span class=pre >free</span> <span class=pre >R</span> <span class=pre >set</span></code> and <code class="docutils literal notranslate"><span class=pre >Cannot</span> <span class=pre >switch</span> <span class=pre >free</span> <span class=pre >R</span> <span class=pre >flag</span></code>, and the keyword <code class="docutils literal notranslate"><span class=pre >FREE</span> <span class=pre >1</span></code> is the cure for those files only.)</p> <p><strong>POINTLESS / AIMLESS.</strong> <code class="docutils literal notranslate"><span class=pre >myrun_unmerged.mtz</span></code> opens in both directly — it is sorted the way AIMLESS requires and its header carries the determined space group (see <a class="reference internal" href="#the-unmerged-export">The unmerged export</a>). Running pointless first remains the safe route, and its independent space-group opinion is what the file exists for:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >pointless</span> <span class=n >HKLIN</span> <span class=n >myrun_unmerged</span><span class=o >.</span><span class=n >mtz</span> <span class=n >HKLOUT</span> <span class=nb >sorted</span><span class=o >.</span><span class=n >mtz</span>
|
||
<span class=n >aimless</span> <span class=n >HKLIN</span> <span class=nb >sorted</span><span class=o >.</span><span class=n >mtz</span> <span class=n >HKLOUT</span> <span class=n >scaled</span><span class=o >.</span><span class=n >mtz</span>
|
||
</pre></div> </div> <p>Several sweeps of one crystal form go in as separate <code class="docutils literal notranslate"><span class=pre >HKLIN</span></code>s to the same pointless run — that is how sweeps Rugnux does not combine itself are merged.</p> <p><strong>careless</strong> wants exactly what the unmerged export is — unmerged, unscaled intensities carrying only the deterministic per-reflection corrections, with the partiality reported and not divided out. Against its published examples, two renames: <code class="docutils literal notranslate"><span class=pre >BG</span></code>/<code class="docutils literal notranslate"><span class=pre >SIGBG</span></code> are called <code class="docutils literal notranslate"><span class=pre >BGMEAN</span></code>/<code class="docutils literal notranslate"><span class=pre >BGVAR</span></code> here <strong>and <code class="docutils literal notranslate"><span class=pre >BGVAR</span></code> is a variance, not a sigma</strong>. A <code class="docutils literal notranslate"><span class=pre >QE</span></code> column is present, as in DIALS output (normalised to 1 at normal incidence where DIALS stores the absorbed fraction — a per-dataset overall scale). <code class="docutils literal notranslate"><span class=pre >Hobs</span></code>/<code class="docutils literal notranslate"><span class=pre >Kobs</span></code>/<code class="docutils literal notranslate"><span class=pre >Lobs</span></code> are reconstructed from <code class="docutils literal notranslate"><span class=pre >M/ISYM</span></code> by reciprocalspaceship, and <code class="docutils literal notranslate"><span class=pre >dHKL</span></code> careless computes from the cell, so the metadata string that names this file’s columns is</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >careless</span> <span class=n >mono</span> <span class=o >--</span><span class=n >anomalous</span> <span class=s2 >"BATCH,dHKL,Hobs,Kobs,Lobs,XDET,YDET,BGMEAN,BGVAR,LP,FRACTIONCALC"</span> \
|
||
<span class=n >myrun_unmerged</span><span class=o >.</span><span class=n >mtz</span> <span class=n >out</span><span class=o >/</span><span class=n >myrun</span>
|
||
</pre></div> </div> <p><strong>Molecular replacement and experimental phasing</strong> each get a section of their own below — <a class="reference internal" href="#molecular-replacement-with-phaser">Phaser</a> and <a class="reference internal" href="#experimental-phasing-with-shelx">SHELXC/D/E</a>. Both are where Rugnux stops and the next program starts, and both meet the one thing the merged intensities could not decide: which of several space groups the data are in.</p> <p><strong><code class="docutils literal notranslate"><span class=pre >iotbx.merging_statistics</span> <span class=pre >myrun_unmerged.mtz</span></code></strong> needs no arguments or label choices at all.</p> </section> <section id=molecular-replacement-with-phaser > <h2 id=molecular-replacement-with-phaser ><a class=toc-backref href="#id4" role=doc-backlink >Molecular replacement with Phaser</a><a class=headerlink href="#molecular-replacement-with-phaser" title="Link to this heading">¶</a></h2> <p>rugnux does not do molecular replacement, so Phaser is the next program for anyone who has a search model. Both CCP4 and phenix ship it — <code class="docutils literal notranslate"><span class=pre >phaser</span></code> and <code class="docutils literal notranslate"><span class=pre >phenix.phaser</span></code>, the same 2.8.3 build in the versions this was checked against — and either takes the merged <code class="docutils literal notranslate"><span class=pre >myrun.mtz</span></code> as it is written.</p> <p><strong>No <code class="docutils literal notranslate"><span class=pre >LABIN</span></code>, no label choices.</strong> Phaser reads the cell, the space group and the resolution range out of the file and picks the intensity columns itself. Where phenix stops on a merged file because it cannot choose between two equally usable observation arrays (see above), Phaser simply announces what it took:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span> <span class=n >Data</span> <span class=n >read</span> <span class=kn >from</span> <span class=nn >mtz</span> <span class=n >file</span><span class=p >:</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span>
|
||
<span class=n >Space</span><span class=o >-</span><span class=n >Group</span> <span class=n >Name</span> <span class=p >(</span><span class=n >Hall</span> <span class=n >Symbol</span><span class=p >):</span> <span class=n >P</span> <span class=mi >41</span> <span class=mi >21</span> <span class=mi >2</span> <span class=p >(</span> <span class=n >P</span> <span class=mi >4</span><span class=n >abw</span> <span class=mi >2</span><span class=n >nw</span><span class=p >)</span>
|
||
<span class=n >Unit</span> <span class=n >Cell</span><span class=p >:</span> <span class=mf >78.06</span> <span class=mf >78.06</span> <span class=mf >37.70</span> <span class=mf >90.00</span> <span class=mf >90.00</span> <span class=mf >90.00</span>
|
||
<span class=n >Column</span> <span class=n >Labels</span> <span class=n >Selected</span><span class=p >:</span> <span class=n >IMEAN</span> <span class=n >SIGIMEAN</span>
|
||
<span class=n >Resolution</span> <span class=n >on</span> <span class=n >Mtz</span> <span class=n >file</span><span class=p >:</span> <span class=mf >0.99</span> <span class=mf >39.03</span>
|
||
</pre></div> </div> <p>So the whole run is the model and the cell contents:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >phaser</span> <span class=o ><<</span><span class=n >eof</span>
|
||
<span class=n >MODE</span> <span class=n >MR_AUTO</span>
|
||
<span class=n >HKLIN</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span>
|
||
<span class=n >ENSEMBLE</span> <span class=n >model</span> <span class=n >PDBFILE</span> <span class=n >model</span><span class=o >.</span><span class=n >pdb</span> <span class=n >IDENTITY</span> <span class=mf >1.0</span>
|
||
<span class=n >COMPOSITION</span> <span class=n >PROTEIN</span> <span class=n >MW</span> <span class=mi >14300</span> <span class=n >NUMBER</span> <span class=mi >1</span>
|
||
<span class=n >SEARCH</span> <span class=n >ENSEMBLE</span> <span class=n >model</span> <span class=n >NUMBER</span> <span class=mi >1</span>
|
||
<span class=n >ROOT</span> <span class=n >myrun_mr</span>
|
||
<span class=n >eof</span>
|
||
</pre></div> </div> <p>On a 1.0 Å dataset in a tetragonal point group that run placed one copy at TFZ 11.1, refining to TFZ== 80.3 and LLG 10247, in 54 s of wall clock, with no warnings about the file. The one trap in that script has nothing to do with Rugnux: <code class="docutils literal notranslate"><span class=pre >COMPOSITION</span> <span class=pre >PROTEIN</span> <span class=pre >SEQUENCE</span></code> wants a <strong>file name</strong>, and given a chain identifier instead it fails with <code class="docutils literal notranslate"><span class=pre >FILE</span> <span class=pre >OPENING</span> <span class=pre >ERROR:</span> <span class=pre >X</span></code> before it reads anything. Use <code class="docutils literal notranslate"><span class=pre >MW</span></code> unless you have the sequence file to hand.</p> <p><strong>The space group is the interesting part.</strong> <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_NAME</span></code> in the results report is a scalar and reads like a determination, but it is one of the groups the absences allow, chosen by convention — section 2 says which others it could not separate, as <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_ALTERNATIVES</span></code>, and whether the hand is open, as <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_ENANTIOMORPH=</span> <span class=pre >UNDETERMINED</span></code>. Merged intensities never name a hand: an enantiomorphic pair has the same absences and the same Laue class. Phaser is one of the few programs that can settle it, because a wrong hand simply fails to place the model.</p> <p>It does this <strong>without being asked</strong>. <code class="docutils literal notranslate"><span class=pre >MODE</span> <span class=pre >MR_AUTO</span></code> defaults to <code class="docutils literal notranslate"><span class=pre >SGALTERNATIVE</span> <span class=pre >SELECT</span> <span class=pre >HAND</span></code>, so the run above listed</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span> <span class=n >Space</span> <span class=n >Group</span><span class=p >(</span><span class=n >s</span><span class=p >)</span> <span class=n >to</span> <span class=n >be</span> <span class=n >tested</span><span class=p >:</span>
|
||
<span class=n >P</span> <span class=mi >43</span> <span class=mi >21</span> <span class=mi >2</span>
|
||
<span class=n >P</span> <span class=mi >41</span> <span class=mi >21</span> <span class=mi >2</span>
|
||
</pre></div> </div> <p>and returned a single solution in <code class="docutils literal notranslate"><span class=pre >P</span> <span class=pre >43</span> <span class=pre >21</span> <span class=pre >2</span></code> — the hand opposite the one in the MTZ header. Nothing in the command asked for that. The space group of the solution is the answer, whichever hand the file happened to carry, and it is on the <code class="docutils literal notranslate"><span class=pre >SOLU</span> <span class=pre >SPAC</span></code> line of the <code class="docutils literal notranslate"><span class=pre >.sol</span></code> file and in the <code class="docutils literal notranslate"><span class=pre >CRYST1</span></code> of the placed model.</p> <p><strong>When the alternative is not the hand</strong>, name it. <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_ALTERNATIVES</span></code> also carries screw variants that share a point group — <code class="docutils literal notranslate"><span class=pre >I</span> <span class=pre >2</span> <span class=pre >3</span></code> and <code class="docutils literal notranslate"><span class=pre >I</span> <span class=pre >21</span> <span class=pre >3</span></code> on a body-centred cubic lattice is the common one — and <code class="docutils literal notranslate"><span class=pre >SGALTERNATIVE</span> <span class=pre >SELECT</span> <span class=pre >ALL</span></code> searches every group Phaser derives from the input one by translation symmetry. On a <code class="docutils literal notranslate"><span class=pre >P</span> <span class=pre >41</span> <span class=pre >21</span> <span class=pre >2</span></code> input that is all eight of <code class="docutils literal notranslate"><span class=pre >P</span> <span class=pre >4</span> <span class=pre >2</span> <span class=pre >2</span></code> … <code class="docutils literal notranslate"><span class=pre >P</span> <span class=pre >43</span> <span class=pre >21</span> <span class=pre >2</span></code>, and it took the run above from 54 s to 65 s; on an <code class="docutils literal notranslate"><span class=pre >I</span> <span class=pre >2</span> <span class=pre >3</span></code> input it is <code class="docutils literal notranslate"><span class=pre >I</span> <span class=pre >2</span> <span class=pre >3</span></code>, <code class="docutils literal notranslate"><span class=pre >I</span> <span class=pre >21</span> <span class=pre >3</span></code> and an origin-shifted <code class="docutils literal notranslate"><span class=pre >I</span> <span class=pre >2</span> <span class=pre >3</span></code>. To see the list a given file would produce without searching it, <code class="docutils literal notranslate"><span class=pre >MODE</span> <span class=pre >CCA</span></code> prints it and stops:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >phaser</span> <span class=o ><<</span><span class=n >eof</span>
|
||
<span class=n >MODE</span> <span class=n >CCA</span>
|
||
<span class=n >HKLIN</span> <span class=n >myrun</span><span class=o >.</span><span class=n >mtz</span>
|
||
<span class=n >COMPOSITION</span> <span class=n >PROTEIN</span> <span class=n >MW</span> <span class=mi >14300</span> <span class=n >NUMBER</span> <span class=mi >1</span>
|
||
<span class=n >ROOT</span> <span class=n >myrun_cca</span>
|
||
<span class=n >eof</span>
|
||
</pre></div> </div> <p><strong>What Phaser cannot repair from this file</strong> is a wrong <em>point</em> group. <code class="docutils literal notranslate"><span class=pre >SGALTERNATIVE</span></code> moves within one, so a run whose report carries a non-<code class="docutils literal notranslate"><span class=pre >NONE</span></code> <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_REFUSED_POINT_GROUP</span></code>, or a point group you suspect is too high, has to be merged again rather than searched again — <code class="docutils literal notranslate"><span class=pre >myrun_P1.mtz</span></code> is written for exactly that, and <code class="docutils literal notranslate"><span class=pre >myrun_unmerged.mtz</span></code> will do it through pointless.</p> <p><strong>mmCIF is not a route into Phaser.</strong> <code class="docutils literal notranslate"><span class=pre >HKLIN</span> <span class=pre >myrun.cif</span></code> stops at <code class="docutils literal notranslate"><span class=pre >FILE</span> <span class=pre >OPENING</span> <span class=pre >ERROR:</span> <span class=pre >myrun.cif</span></code>, in both the CCP4 and the phenix build — 2.8.3 reads MTZ only. Convert rather than look for a keyword:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >gemmi</span> <span class=n >cif2mtz</span> <span class=n >myrun</span><span class=o >.</span><span class=n >cif</span> <span class=n >fromcif</span><span class=o >.</span><span class=n >mtz</span>
|
||
</pre></div> </div> <p>That file gives the same solution — same space group, same placement to a hundredth of a degree, LLG 10248 against 10247. Its amplitude columns come out as <code class="docutils literal notranslate"><span class=pre >FP</span></code>/<code class="docutils literal notranslate"><span class=pre >SIGFP</span></code> where Rugnux’s own MTZ writes <code class="docutils literal notranslate"><span class=pre >F</span></code>/<code class="docutils literal notranslate"><span class=pre >SIGF</span></code>, which matters only if you were naming columns by hand; the automatic choice is <code class="docutils literal notranslate"><span class=pre >IMEAN</span></code>/<code class="docutils literal notranslate"><span class=pre >SIGIMEAN</span></code> either way. Since Rugnux writes the MTZ and the mmCIF in the same run, the conversion is only worth knowing about for a file that arrived without its <code class="docutils literal notranslate"><span class=pre >.mtz</span></code>.</p> </section> <section id=small-molecule-structures-with-shelxt-and-shelxl > <h2 id=small-molecule-structures-with-shelxt-and-shelxl ><a class=toc-backref href="#id5" role=doc-backlink >Small-molecule structures with SHELXT and SHELXL</a><a class=headerlink href="#small-molecule-structures-with-shelxt-and-shelxl" title="Link to this heading">¶</a></h2> <p>A small-molecule sweep (see <a class="reference internal" href="RUGNUX_TUTORIAL.html#small-molecule-data"><span class="std std-ref">Small-molecule data</span></a>) goes to SHELX as <strong><code class="docutils literal notranslate"><span class=pre >xtal.hkl</span></code></strong>, the rotation run’s scaled reflections unmerged, in HKLF 4. <code class="docutils literal notranslate"><span class=pre >shelxt</span></code> and <code class="docutils literal notranslate"><span class=pre >shelxl</span></code> come with CCP4 as well as with the SHELX distribution. HKLF 4 carries no metadata, so the instruction file is written by hand: the wavelength and the cell from the report, the lattice and symmetry of the space group the report names, and the cell contents, which only the user knows.</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>cp xtal.hkl struct.hkl
|
||
w=$(grep '^WAVELENGTH= ' xtal_report.txt | cut -d' ' -f2)
|
||
cell=$(grep '^UNIT_CELL_CONSTANTS= ' xtal_report.txt | cut -d' ' -f2-)
|
||
cat > struct.ins <<eof
|
||
TITL struct
|
||
CELL $w $cell
|
||
ZERR 4 0.001 0.001 0.001 0.01 0.01 0.01
|
||
LATT 1
|
||
SYMM -X, 0.5+Y, 0.5-Z
|
||
SFAC C H N O
|
||
UNIT 40 48 4 8
|
||
END
|
||
eof
|
||
shelxt struct
|
||
</pre></div> </div> <p>The <code class="docutils literal notranslate"><span class=pre >LATT</span></code> and <code class="docutils literal notranslate"><span class=pre >SYMM</span></code> lines here are those of P2₁/c (<code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_NAME=</span> <span class=pre >P</span> <span class=pre >1</span> <span class=pre >21/c</span> <span class=pre >1</span></code>); write the ones of the group in the report, from International Tables or from a program that writes them. SHELXT takes the Laue group and the lattice from them and determines the space group itself, so where the report’s <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_CENTRE=</span></code> is <code class="docutils literal notranslate"><span class=pre >NOT_DETERMINED</span></code> its choice is a second opinion on the centre of symmetry. <code class="docutils literal notranslate"><span class=pre >ZERR</span></code> carries Z and the cell’s standard uncertainties; the values above are placeholders, since the report gives the cell without them. SHELXT writes its best solution as <code class="docutils literal notranslate"><span class=pre >struct_a.res</span></code>, with <code class="docutils literal notranslate"><span class=pre >struct_a.hkl</span></code> beside it in the setting it chose, and refinement continues from those:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >cp</span> <span class=n >struct_a</span><span class=o >.</span><span class=n >res</span> <span class=n >struct_a</span><span class=o >.</span><span class=n >ins</span>
|
||
<span class=n >shelxl</span> <span class=n >struct_a</span>
|
||
</pre></div> </div> <p>What SHELXL makes of the file:</p> <ul class=simple > <li><p><strong>It merges the equivalents itself</strong> (<code class="docutils literal notranslate"><span class=pre >MERG</span> <span class=pre >2</span></code>, its default) and prints R(int) and R(sigma) from them, which a merged file would hide. In a group without a centre of symmetry it keeps the Friedel opposites apart, so the absolute structure (the Flack parameter) comes from the same file, with no <code class="docutils literal notranslate"><span class=pre >-A</span></code> at processing.</p> <li><p><strong>The scale is arbitrary</strong>: the intensities were multiplied by one factor so the largest fits the <code class="docutils literal notranslate"><span class=pre >F8.2</span></code> field. SHELXL refines its own overall scale, so nothing has to be done about it.</p> <li><p><strong>There is no batch column</strong>, which in HKLF 4 would select a <code class="docutils literal notranslate"><span class=pre >BASF</span></code> scale factor; the reflections are on one scale already.</p> <li><p><strong>What the merge rejected is not in the file</strong>: the outliers, and the measurements left out for an overloaded pixel (<code class="docutils literal notranslate"><span class=pre >OBSERVATIONS_REJECTED_OVERLOAD=</span></code> in the report). A crystal whose strongest low-order reflections were overloaded is missing them, and SHELXL cannot say so; the report can.</p> <li><p><strong>The resolution stops at the run’s cut</strong>, as in every written file. Run with <code class="docutils literal notranslate"><span class=pre >--resolution-cutoff</span> <span class=pre >off</span></code> to hand SHELXL everything the detector recorded.</p> </ul> </section> <section id=experimental-phasing-with-shelx > <h2 id=experimental-phasing-with-shelx ><a class=toc-backref href="#id6" role=doc-backlink >Experimental phasing with SHELX</a><a class=headerlink href="#experimental-phasing-with-shelx" title="Link to this heading">¶</a></h2> <p><code class="docutils literal notranslate"><span class=pre >shelxc</span></code>, <code class="docutils literal notranslate"><span class=pre >shelxd</span></code> and <code class="docutils literal notranslate"><span class=pre >shelxe</span></code> come with CCP4 (phenix does not ship them). The input is <strong><code class="docutils literal notranslate"><span class=pre >myrun.hkl</span></code></strong>, and it is the only one of the three reflection files that works: SHELXC 2016/1 reads XDS and SHELX formats, not MTZ, and <code class="docutils literal notranslate"><span class=pre >SAD</span> <span class=pre >myrun.mtz</span></code> gets <code class="docutils literal notranslate"><span class=pre >**</span> <span class=pre >Cannot</span> <span class=pre >open</span> <span class=pre >file</span> <span class=pre >myrun.mtz</span> <span class=pre >**</span></code> — after which SHELXC exits <strong>0</strong> and writes nothing, so a script has to check for the <code class="docutils literal notranslate"><span class=pre >_fa.hkl</span></code> it should have produced rather than trust the exit status.</p> <p><strong>Nothing has to be switched on to get the anomalous signal.</strong> A default rotation merge keeps the Bijvoet split, whether or not <code class="docutils literal notranslate"><span class=pre >-A</span></code> was given: <code class="docutils literal notranslate"><span class=pre >myrun.mtz</span></code> carries <code class="docutils literal notranslate"><span class=pre >I(+)</span></code>/<code class="docutils literal notranslate"><span class=pre >I(-)</span></code> and <code class="docutils literal notranslate"><span class=pre >F(+)</span></code>/<code class="docutils literal notranslate"><span class=pre >F(-)</span></code> beside the means, and <code class="docutils literal notranslate"><span class=pre >myrun.hkl</span></code> holds every observation unmerged at the index it was measured at, so SHELXC sees both hands. <code class="docutils literal notranslate"><span class=pre >-A</span></code> changes what the merging statistics are counted over, not whether the signal is in the file. The one case with no anomalous signal at all is a <strong>stills</strong> run, which computes no Bijvoet split; there <code class="docutils literal notranslate"><span class=pre >myrun.hkl</span></code> holds means only and there is nothing for SHELXC to work with. <code class="docutils literal notranslate"><span class=pre >myrun_unmerged.mtz</span></code> is not part of this chain (it is unscaled), so a run with <code class="docutils literal notranslate"><span class=pre >--no-export-unmerged</span></code> is not missing a file SHELX needs.</p> <p><strong>HKLF 4 carries no metadata</strong>, so the cell and the space group have to be repeated on the SHELXC command — take them from <code class="docutils literal notranslate"><span class=pre >UNIT_CELL_CONSTANTS</span></code> and <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_NAME</span></code> in section 2 of the report, with the spaces taken out of the group’s name. (SHELXC also puts a wavelength in the <code class="docutils literal notranslate"><span class=pre >CELL</span></code> line of the <code class="docutils literal notranslate"><span class=pre >.ins</span></code> files it writes; that is its own 0.98 Å default, not anything read from the data, and neither SHELXD nor SHELXE uses it.) The whole chain, for a sulfur substructure — the cell and group here are tetragonal lysozyme’s, so substitute your own report’s:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >shelxc</span> <span class=n >sad</span> <span class=o ><<</span><span class=n >eof</span>
|
||
<span class=n >SAD</span> <span class=n >myrun</span><span class=o >.</span><span class=n >hkl</span>
|
||
<span class=n >CELL</span> <span class=mf >79.0</span> <span class=mf >79.0</span> <span class=mf >38.0</span> <span class=mi >90</span> <span class=mi >90</span> <span class=mi >90</span>
|
||
<span class=n >SPAG</span> <span class=n >P41212</span>
|
||
<span class=n >FIND</span> <span class=mi >10</span>
|
||
<span class=n >SFAC</span> <span class=n >S</span>
|
||
<span class=n >MAXM</span> <span class=mi >2</span>
|
||
<span class=n >eof</span>
|
||
<span class=n >shelxd</span> <span class=n >sad_fa</span>
|
||
</pre></div> </div> <p>SHELXC’s own table is the first honest look at whether this is worth continuing — <code class="docutils literal notranslate"><span class=pre ><d"/σ></span></code> should be about 0.80 where there is no anomalous signal. Two sweeps are quoted below, both collected at 5 keV for the sulfur signal: a cubic one that went all the way, and a tetragonal one that did not. The cubic one, 2.5 Å at 95 % completeness and multiplicity 30, reads:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span> <span class=n >Resl</span><span class=o >.</span> <span class=n >Inf</span><span class=o >.</span> <span class=mf >13.02</span> <span class=mf >8.01</span> <span class=mf >6.03</span> <span class=mf >4.93</span> <span class=mf >4.22</span> <span class=mf >3.71</span> <span class=mf >3.33</span> <span class=mf >3.04</span> <span class=mf >2.80</span> <span class=mf >2.60</span> <span class=mf >2.43</span>
|
||
<span class=o ><</span><span class=n >I</span><span class=o >/</span><span class=n >sig</span><span class=o >></span> <span class=mf >108.8</span> <span class=mf >91.4</span> <span class=mf >63.0</span> <span class=mf >64.7</span> <span class=mf >70.6</span> <span class=mf >61.8</span> <span class=mf >45.5</span> <span class=mf >34.7</span> <span class=mf >23.7</span> <span class=mf >12.4</span> <span class=mf >5.0</span>
|
||
<span class=o >%</span><span class=n >Complete</span> <span class=mf >96.2</span> <span class=mf >100.0</span> <span class=mf >100.0</span> <span class=mf >100.0</span> <span class=mf >100.0</span> <span class=mf >100.0</span> <span class=mf >100.0</span> <span class=mf >100.0</span> <span class=mf >100.0</span> <span class=mf >99.0</span> <span class=mf >72.7</span>
|
||
<span class=o ><</span><span class=n >d</span><span class=s2 >"/sig> 2.58 5.06 3.97 2.92 2.36 1.68 1.50 1.33 1.48 1.38 1.79</span>
|
||
</pre></div> </div> <p><strong>SHELXD will separate space groups the merged intensities could not.</strong> That sweep’s report named a body-centred cubic pair as indistinguishable, so SHELXC and SHELXD were run once per candidate — same reflections, same <code class="docutils literal notranslate"><span class=pre >FIND</span></code>, only <code class="docutils literal notranslate"><span class=pre >SPAG</span></code> different. One gave <code class="docutils literal notranslate"><span class=pre >CC</span> <span class=pre >37.93</span> <span class=pre >/</span> <span class=pre >CC(weak)</span> <span class=pre >14.05</span> <span class=pre >/</span> <span class=pre >CFOM</span> <span class=pre >51.98</span></code> and the other <code class="docutils literal notranslate"><span class=pre >CC</span> <span class=pre >46.76</span> <span class=pre >/</span> <span class=pre >CC(weak)</span> <span class=pre >22.61</span> <span class=pre >/</span> <span class=pre >CFOM</span> <span class=pre >69.37</span></code>. The substructure is where the screw axis shows itself, and the second group is the right one. This is the same handover as Phaser’s arrived at from the other side, and it is worth doing whenever <code class="docutils literal notranslate"><span class=pre >SPACE_GROUP_ALTERNATIVES</span></code> is not <code class="docutils literal notranslate"><span class=pre >NONE</span></code> — SHELXD takes seconds, and the pair of runs costs less than reprocessing anything.</p> <p><strong>SHELXE decides the hand</strong>, and says so. Run it twice, <code class="docutils literal notranslate"><span class=pre >-i</span></code> inverting the substructure. <code class="docutils literal notranslate"><span class=pre >-s</span></code> is the solvent fraction, <code class="docutils literal notranslate"><span class=pre >-h</span></code> says the substructure atoms belong to the native structure, as sulfur does, and <code class="docutils literal notranslate"><span class=pre >-a</span></code> turns on autotracing, which is what actually makes the two hands separate. The two runs write <code class="docutils literal notranslate"><span class=pre >sad.pdb</span></code> and <code class="docutils literal notranslate"><span class=pre >sad_i.pdb</span></code>, so they can share a directory:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >shelxe</span> <span class=n >sad</span> <span class=n >sad_fa</span> <span class=o >-</span><span class=n >h</span> <span class=o >-</span><span class=n >s0</span><span class=mf >.62</span> <span class=o >-</span><span class=n >m20</span> <span class=o >-</span><span class=n >a15</span> <span class=o >-</span><span class=n >q</span>
|
||
<span class=n >shelxe</span> <span class=n >sad</span> <span class=n >sad_fa</span> <span class=o >-</span><span class=n >h</span> <span class=o >-</span><span class=n >s0</span><span class=mf >.62</span> <span class=o >-</span><span class=n >m20</span> <span class=o >-</span><span class=n >a15</span> <span class=o >-</span><span class=n >q</span> <span class=o >-</span><span class=n >i</span>
|
||
</pre></div> </div> <p>At 63 % solvent the two hands came out at 42.93 % and 15.28 % for the autotrace CC against the native data — pseudo-free CC 66.49 against 37.12, map contrast 0.87 against 0.44, 215 traced atoms — which is a solved structure, from <code class="docutils literal notranslate"><span class=pre >myrun.hkl</span></code> and nothing else. Where the group is one of the 22 that come in enantiomorphic pairs, SHELXE makes the group change itself: the inverted run prints <code class="docutils literal notranslate"><span class=pre >**</span> <span class=pre >Space</span> <span class=pre >group</span> <span class=pre >converted</span> <span class=pre >to</span> <span class=pre >enantiomorph</span> <span class=pre >**</span></code> and writes the changed group into the <code class="docutils literal notranslate"><span class=pre >CRYST1</span></code> of its traced model, so the answer is readable off the output file the same way it is off Phaser’s.</p> <p><strong>A negative result, for calibration.</strong> A tetragonal dataset at the same wavelength with the same kind of substructure, but 87 % complete at multiplicity 20 rather than 95 % at 30, gave a plausible SHELXD <code class="docutils literal notranslate"><span class=pre >CFOM</span> <span class=pre >47.62</span></code> and then failed at the hand: 15.33 % against 15.60 % autotrace CC, map contrast 0.33 either way. That is not a discrimination and it is not a solution. Nothing about the file was the limit — the anomalous signal SHELXC measured on it was real, <code class="docutils literal notranslate"><span class=pre ><d"/σ></span></code> reaching 4.2 — so the reading is that sulfur phasing wants the completeness and the multiplicity, and a <code class="docutils literal notranslate"><span class=pre >.hkl</span></code> from a sweep that does not have them will get this far and no further.</p> </section> <section id=comparing-the-geometry-with-xds > <h2 id=comparing-the-geometry-with-xds ><a class=toc-backref href="#id7" 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>XDS’s 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 Jungfraujoch’s beam centre is — so no correction is needed — but not the direct beam once the detector is tilted (see above).</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_TUTORIAL.html title="Running Rugnux" 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> Running Rugnux </span> </div> </a> <a href=RUGNUX_REPORT.html title="The results report" 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> The results report </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> |