Files
Jungfraujoch/RUGNUX_CALIBRATION.html
T
2026-10-06 20:38:39 +00:00

4 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html> <html lang=en data-content_root="./"> <meta charset=utf-8 /> <meta name=viewport content="width=device-width, initial-scale=1.0" /><meta name=viewport content="width=device-width, initial-scale=1" /> <meta name=viewport content="width=device-width,initial-scale=1"> <meta http-equiv=x-ua-compatible content="ie=edge"> <meta name="lang:clipboard.copy" content="Copy to clipboard"> <meta name="lang:clipboard.copied" content="Copied to clipboard"> <meta name="lang:search.language" content=en > <meta name="lang:search.pipeline.stopwords" content=True > <meta name="lang:search.pipeline.trimmer" content=True > <meta name="lang:search.result.none" content="No matching documents"> <meta name="lang:search.result.one" content="1 matching document"> <meta name="lang:search.result.other" content="# matching documents"> <meta name="lang:search.tokenizer" content="[\s\-]+"> <link href="https://fonts.gstatic.com/" rel=preconnect crossorigin> <link href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,500,700|Roboto:300,400,400i,700&display=fallback" rel=stylesheet > <style> body, input { font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif } code, kbd, pre { font-family: "Roboto Mono", "Courier New", Courier, monospace } </style> <link rel=stylesheet href="_static/stylesheets/application.css"/> <link rel=stylesheet href="_static/stylesheets/application-palette.css"/> <link rel=stylesheet href="_static/stylesheets/application-fixes.css"/> <link rel=stylesheet href="_static/fonts/material-icons.css"/> <meta name=theme-color content="#3f51b5"> <script src="_static/javascripts/modernizr.js"></script> <title>Detector calibration from powder rings (rugnux --mode calibration) &#8212; 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="CPU-side crystallographic data analysis (Jungfraujoch)" href=CPU_DATA_ANALYSIS.html /> <link rel=prev title="Advanced Rugnux" href=RUGNUX_ADVANCED.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_CALIBRATION" 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 >&#xe30d</i> </a> </div> <div class="md-flex__cell md-flex__cell--shrink"> <label class="md-icon md-icon--menu md-header-nav__button" for=__drawer ></label> </div> <div class="md-flex__cell md-flex__cell--stretch"> <div class="md-flex__ellipsis md-header-nav__title" data-md-component=title > <span class=md-header-nav__topic >PSI Jungfraujoch</span> <span class=md-header-nav__topic > Detector calibration from powder rings (rugnux --mode calibration) </span> </div> </div> <div class="md-flex__cell md-flex__cell--shrink"> <label class="md-icon md-icon--search md-header-nav__button" for=__search ></label> <div class=md-search data-md-component=search role=dialog > <label class=md-search__overlay for=__search ></label> <div class=md-search__inner role=search > <form class=md-search__form action=search.html method=get name=search > <input type=text class=md-search__input name=q placeholder=""Search"" autocapitalize=off autocomplete=off spellcheck=false data-md-component=query data-md-state=active > <label class="md-icon md-search__icon" for=__search ></label> <button type=reset class="md-icon md-search__icon" data-md-component=reset tabindex=-1 > &#xE5CD; </button> </form> <div class=md-search__output > <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=result > <div class=md-search-result__meta > Type to start searching </div> <ol class=md-search-result__list ></ol> </div> </div> </div> </div> </div> </div> <div class="md-flex__cell md-flex__cell--shrink"> <div class=md-header-nav__source > <a href="https://gitea.psi.ch/mx/jungfraujoch" title="Go to repository" class=md-source data-md-source=github > <div class=md-source__icon > <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width=28 height=28 > <use xlink:href="#__gitlab" width=24 height=24 ></use> </svg> </div> <div class=md-source__repository > Jungfraujoch </div> </a> </div> </div> <script src="_static/javascripts/version_dropdown.js"></script> <script> var json_loc = ""versions.json"", target_loc = "../", text = "Versions"; $( document ).ready( add_version_dropdown(json_loc, target_loc, text)); </script> </div> </nav> </header> <div class=md-container > <nav class=md-tabs data-md-component=tabs > <div class="md-tabs__inner md-grid"> <ul class=md-tabs__list > <li class=md-tabs__item ><a href=index.html class=md-tabs__link >Jungfraujoch 1.0.0-rc.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 >&#xe30d</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 > <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 > <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 > 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>) </label> <a href="#" class="md-nav__link md-nav__link--active">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> <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="#what-it-writes" class=md-nav__link >What it writes</a> </ul> <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=detector-calibration-from-powder-rings-rugnux-mode-calibration > <h1 id=rugnux-calibration--page-root >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 class=headerlink href="#rugnux-calibration--page-root" title="Link to this heading"></a></h1> <p>The <code class="docutils literal notranslate"><span class=pre >calibration</span></code> mode determines the detector geometry — PONI <em>x</em>/<em>y</em>, the two tilts rot1/rot2 and the distance — from the powder rings of a calibrant, and writes it as a pyFAI <strong><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.poni</span></code></strong> file and a machine-readable <strong><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.json</span></code></strong>, alongside a printed report of how far each parameter moved from the header. Bragg data pin the beam centre worst (it is gauge-coupled to the crystal orientation); a powder ring has no orientation to be coupled to, so this is the measurement that fixes it.</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >rugnux</span> <span class=o >--</span><span class=n >mode</span> <span class=n >calibration</span> <span class=o >--</span><span class=n >calibrant</span> <span class=n >lab6</span> <span class=o >-</span><span class=n >o</span> <span class=n >det</span> <span class=n >LaB6_master</span><span class=o >.</span><span class=n >h5</span>
</pre></div> </div> <section id=what-it-writes > <h2 id=what-it-writes >What it writes<a class=headerlink href="#what-it-writes" title="Link to this heading"></a></h2> <p><code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.poni</span></code> is for pyFAI and the tools that read its format. <code class="docutils literal notranslate"><span class=pre >&lt;prefix&gt;.json</span></code> is for everything else, and has two members:</p> <ul> <li><p><strong><code class="docutils literal notranslate"><span class=pre >dataset_settings</span></code></strong> — the geometry under the property names <a class="reference external" href="https://jungfraujoch.readthedocs.io"><code class="docutils literal notranslate"><span class=pre >dataset_settings</span></code></a> gives them in <code class="docutils literal notranslate"><span class=pre >jfjoch_broker</span></code>’s OpenAPI schema, and nothing else. It is a valid <code class="docutils literal notranslate"><span class=pre >dataset_settings</span></code> body as it stands, so it can be POSTed or merged into one without translating a field:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >curl</span> <span class=o >-</span><span class=n >X</span> <span class=n >POST</span> <span class=o >-</span><span class=n >H</span> <span class=s1 >'Content-Type: application/json'</span> \
<span class=o >-</span><span class=n >d</span> <span class=s2 >"$(jq -c .dataset_settings det.json)"</span> <span class=n >http</span><span class=p >:</span><span class=o >//</span><span class=n >broker</span><span class=p >:</span><span class=mi >5232</span><span class=o >/</span><span class=n >start</span>
</pre></div> </div> <p><code class="docutils literal notranslate"><span class=pre >beam_x_pxl</span></code>/<code class="docutils literal notranslate"><span class=pre >beam_y_pxl</span></code> is the <strong>PONI</strong>, as everywhere in this system — on a tilted detector it is not where the direct beam lands. The three <code class="docutils literal notranslate"><span class=pre >poni_rot*_rad</span></code> are written whenever any of them is non-zero, and left out when all are zero: a body that omits them states a <em>flat</em> detector, so they travel together or not at all.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >calibration</span></code></strong> — what the run knows about that geometry: the residual, the fit’s own sigmas and the correlation between the tilt and the beam centre, whether the tilt cleared its significance test or was declined and pinned, where the direct beam lands, and where the spots independently put the beam. A calibration that has gone wrong looks exactly like one that has not until those are read.</p> </ul> <p><code class="docutils literal notranslate"><span class=pre >--calibrant</span></code> takes <code class="docutils literal notranslate"><span class=pre >lab6</span></code>, <code class="docutils literal notranslate"><span class=pre >agbh</span></code> (silver behenate), <code class="docutils literal notranslate"><span class=pre >ceo2</span></code>, <code class="docutils literal notranslate"><span class=pre >si</span></code> or <code class="docutils literal notranslate"><span class=pre >ice</span></code>, case-insensitively. <strong><code class="docutils literal notranslate"><span class=pre >ice</span></code></strong> calibrates a real experiment against its own ice rings — no calibrant exposure needed — and is the reason a calibrant is a list of ring positions rather than a unit cell: hexagonal ice is P6<sub>3</sub>/mmc, so rings enumerated from its cell would include systematically absent ones.</p> <p><code class="docutils literal notranslate"><span class=pre >--calibration</span></code> picks how the rings are measured, and <strong>both aggregate over every processed image</strong> — <code class="docutils literal notranslate"><span class=pre >-s</span></code>/<code class="docutils literal notranslate"><span class=pre >-e</span></code>/<code class="docutils literal notranslate"><span class=pre >-t</span></code> select which images:</p> <ul class=simple > <li><p><strong><code class="docutils literal notranslate"><span class=pre >rings</span></code></strong> (default) sums the (<em>q</em> × azimuth) azimuthal profile over every processed image into one map and fits the ring arcs in it. A powder ring is an arc, not a set of spots, and the summed profile measures it at every azimuth with all the run’s counts behind it. It needs the profile to be binned in azimuth, so this mode defaults <code class="docutils literal notranslate"><span class=pre >--azim-phi-bins</span></code> to 32.</p> <li><p><strong><code class="docutils literal notranslate"><span class=pre >spots</span></code></strong> pools the found spots of every processed image and fits those. It determines the centre from scratch (a Hough circle vote, which quantises it to a whole pixel) and then refines.</p> </ul> <p>Both routes read the ring position out of a binned profile or a spot centroid, so the radial sampling matters: at a long detector distance the default 0.01 Å⁻¹ <em>q</em> bin is several pixels wide and quantises the <code class="docutils literal notranslate"><span class=pre >rings</span></code> route accordingly — pass a finer <code class="docutils literal notranslate"><span class=pre >--azim-q-spacing</span></code> there (the total <em>q</em> × azimuth bin count must stay under 65534).</p> <p>The report prints the fitted geometry, the scatter of the ring points about the fitted rings and the standard error that implies on the centre. That error is <em>formal</em>: it measures the scatter of the points, not whether the rings themselves are trustworthy, so it stays small when a fit goes wrong for a structural reason — one visible ring, or ice that is textured rather than smooth.</p> <p>A calibration is run because the header is in doubt, so a fit that quietly hands part of that header back has answered nothing — and it looks exactly like a fit that worked, down to the residual and the sigmas around it. <strong><code class="docutils literal notranslate"><span class=pre >calibration.converged</span></code></strong> in the JSON says which of the two a file is. It is false when the tilt was declined and pinned at a <em>non-zero</em> header value — the rings said they could not tell a tilt from a shift of the beam centre, and the angle written in its place has no more support than the one refused — or when the fit’s covariance never conditioned, so it cannot say what it determined. In either case Rugnux prints the reason, writes the <code class="docutils literal notranslate"><span class=pre >.json</span></code> with <code class="docutils literal notranslate"><span class=pre >converged</span></code> false and <code class="docutils literal notranslate"><span class=pre >not_converged_reason</span></code> beside it, exits non-zero, and writes <strong>no <code class="docutils literal notranslate"><span class=pre >.poni</span></code></strong>: a PONI file states where the detector is and has no field in which to say that it does not know. A declined tilt over a header that states <em>no</em> tilt is not this — reporting no tilt is then exactly what the fit measured.</p> <p>A <code class="docutils literal notranslate"><span class=pre >.poni</span></code> is refused for a second reason, whatever the fit found: a detector whose <strong>image orientation</strong> is not the identity — the stored image mirrored in Y, or turned by a multiple of 90° about the beam. That comes either from <code class="docutils literal notranslate"><span class=pre >--detector-mirror-y</span></code> / <code class="docutils literal notranslate"><span class=pre >--detector-quarter-turns</span></code> or from the file itself (a PILATUS miniCBF axis table, an NXmx module’s pixel directions). A PONI states the detector in five numbers — two offsets, a distance and three rotations — and has no field for how the image is stored, so one written here would describe a different geometry from the one that was measured. The run says so and exits non-zero.</p> <p><code class="docutils literal notranslate"><span class=pre >--no-refine-tilt</span></code> holds rot1/rot2 where the header put them and fits only the centre and the distance. The tilt is real and worth measuring, but a program that has nowhere to put one — XDS takes a detector normal to the beam — is better given a geometry that was measured with the tilt pinned than one that was measured tilted and then flattened, because in the tilted fit the centre and the distance have already absorbed the tilt.</p> <p>Both the PONI (the point of normal incidence, which is what a <code class="docutils literal notranslate"><span class=pre >.poni</span></code> file stores) and the direct beam (where the beam lands, which is what most other programs call the beam centre) are printed. They differ by <em>distance</em> × tan(rot) once the detector is tilted, which on a 0.3° tilt at 300 mm is several pixels — enough to look like a disagreement with another program when there is none.</p> </section> </section> </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_ADVANCED.html title="Advanced 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> Advanced Rugnux </span> </div> </a> <a href=CPU_DATA_ANALYSIS.html title="CPU-side crystallographic data analysis (Jungfraujoch)" 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> CPU-side crystallographic data analysis (Jungfraujoch) </span> </div> <div class="md-flex__cell md-flex__cell--shrink"><i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> </div> </a> </nav> </div> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-footer-copyright > <div class=md-footer-copyright__highlight > &#169; Copyright 2024, Paul Scherrer Institute. </div> Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 8.1.3. and <a href="https://github.com/bashtage/sphinx-material/">Material for Sphinx</a> </div> </div> </div> </footer> <script src="_static/javascripts/application.js"></script> <script>app.initialize({version: "1.0.4", url: {base: ".."}})</script>