{"id":25895597,"url":"https://github.com/diamondlightsource/diffcalc","last_synced_at":"2025-03-02T22:32:09.190Z","repository":{"id":2798635,"uuid":"3799098","full_name":"DiamondLightSource/diffcalc","owner":"DiamondLightSource","description":"Diffcalc: a diffraction condition calculator for X-ray or neutron diffractometer control","archived":false,"fork":false,"pushed_at":"2023-04-26T15:35:58.000Z","size":4826,"stargazers_count":17,"open_issues_count":7,"forks_count":14,"subscribers_count":9,"default_branch":"master","last_synced_at":"2023-10-20T19:19:08.694Z","etag":null,"topics":["diffraction","numpy","python","science","synchrotron"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"cgutman/ShieldProxyAndroid","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DiamondLightSource.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2012-03-22T15:23:03.000Z","updated_at":"2023-05-28T00:40:50.000Z","dependencies_parsed_at":"2023-07-05T19:01:46.588Z","dependency_job_id":null,"html_url":"https://github.com/DiamondLightSource/diffcalc","commit_stats":null,"previous_names":[],"tags_count":7,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fdiffcalc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fdiffcalc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fdiffcalc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fdiffcalc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DiamondLightSource","download_url":"https://codeload.github.com/DiamondLightSource/diffcalc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241582515,"owners_count":19985845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diffraction","numpy","python","science","synchrotron"],"created_at":"2025-03-02T22:32:08.575Z","updated_at":"2025-03-02T22:32:09.182Z","avatar_url":"https://github.com/DiamondLightSource.png","language":"Python","readme":"Diffcalc - A Diffraction Condition Calculator for Diffractometer Control\n========================================================================\n\nDiffcalc is a python/jython based diffraction condition calculator used for\ncontrolling diffractometers within reciprocal lattice space. It performs the\nsame task as the fourc, sixc, twoc, kappa, psic and surf macros from SPEC.\n\nThere is a `user guide \u003chttps://diffcalc.readthedocs.io/en/latest/youmanual.html\u003e`_ and `developer guide \u003chttps://diffcalc.readthedocs.io/en/latest/developer/contents.html\u003e`_, both at `diffcalc.readthedocs.io \u003chttps://diffcalc.readthedocs.io\u003e`_\n\n**IMPORTANT**: Python 3 version of diffcalc calculator code is available as ``diffcalc-core`` project https://github.com/DiamondLightSource/diffcalc-core/\n\n|GH Actions| |Read the docs|\n\n.. |GH Actions| image:: https://github.com/DiamondLightSource/diffcalc/actions/workflows/main.yml/badge.svg?branch=master\n    :target: https://github.com/DiamondLightSource/diffcalc/actions\n    :alt: Build Status\n\n.. |Read the docs| image:: https://readthedocs.org/projects/diffcalc/badge/?version=latest\n    :target: http://diffcalc.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n.. contents::\n\n.. section-numbering::\n\nSoftware compatibility\n----------------------\n\n- Written in Python using numpy\n- Works in Jython using Jama\n- Runs directly in `OpenGDA\u003chttp://www.opengda.org\u003e`\n- Runs in in Python or IPython using minimal OpenGda emulation (included)\n- Contact us for help running in your environment\n\nDiffractometer compatibility\n----------------------------\n\nDiffcalc’s standard calculation engine is an implementation of [You1999]_ and\n[Busing1967]_. Diffcalc works with any diffractometer which is a subset of:\n\n .. image:: https://raw.githubusercontent.com/DiamondLightSource/diffcalc/master/doc/source/youmanual_images/4s_2d_diffractometer.png\n     :alt: 4s + 2d six-circle diffractometer, from H.You (1999)\n     :width: 50%\n     :align: center\n\nDiffcalc can be configured to work with any diffractometer geometry which is a\nsubset of this. For example, a five-circle diffractometer might be missing the\nnu circle above.\n\nNote that the first versions of Diffcalc were based on [Vlieg1993]_ and\n[Vlieg1998]_ and a ‘Vlieg’ engine is still available.  There is also an engine\nbased on [Willmott2011]_. The ‘You’ engine is more generic and the plan is to\nremove the old ‘Vlieg’ engine once beamlines have been migrated.\n\nInstallation\n------------\n\nCheck it out::\n\n   $ git clone https://github.com/DiamondLightSource/diffcalc.git\n   Cloning into 'diffcalc'...\n\nAt Diamond Diffcalc may be installed within an OpenGDA deployment and is\navailable via the 'module' system from bash.\n\nStarting\n--------\n\nStart diffcalc in ipython using a sixcircle dummy diffractometer::\n\n   $ cd diffcalc\n   $ ./diffcalc.py --help\n   ...\n\n   $ ./diffcalc.py sixcircle\n\n   Running: \"ipython --no-banner --HistoryManager.hist_file=/tmp/ipython_hist_zrb13439.sqlite -i -m diffcmd.start sixcircle False\"\n\n   ---------------------------------- DIFFCALC -----------------------------------\n   Startup script: '/Users/zrb13439/git/diffcalc/startup/sixcircle.py'\n   Loading ub calculation: 'test'\n   ------------------------------------ Help -------------------------------------\n   Quick:  https://github.com/DiamondLightSource/diffcalc/blob/master/README.rst\n   Manual: https://diffcalc.readthedocs.io\n   Type:   \u003e help ub\n           \u003e help hkl\n   -------------------------------------------------------------------------------\n   In [1]:\n\nWithin Diamond use::\n\n   $ module load diffcalc\n   $ diffcalc --help\n   ...\n   $ diffcalc sixcircle\n\nTrying it out\n-------------\n\nType ``demo.all()`` to see it working and then move try the following quick\nstart guide::\n\n   \u003e\u003e\u003e demo.all()\n   ...\n\nGetting help\n------------\n\nTo view help with orientation and then moving in hkl space::\n\n   \u003e\u003e\u003e help ub\n   ...\n   \u003e\u003e\u003e help hkl\n   ...\n\nConfiguring a UB calculation\n----------------------------\nSee the full `user manual\u003chttps://diffcalc.readthedocs.io`\u003e for many more\noptions and an explanation of what this all means.\n\nTo load the last used UB-calculation::\n\n   \u003e\u003e\u003e lastub\n   Loading ub calculation: 'mono-Si'\n\nTo load a previous UB-calculation::\n\n   \u003e\u003e\u003e listub\n   UB calculations in: /Users/walton/.diffcalc/i16\n\n   0) mono-Si            15 Feb 2017 (22:32)\n   1) i16-32             13 Feb 2017 (18:32)\n\n   \u003e\u003e\u003e loadub 0\n\nTo create a new UB-calculation::\n\n   \u003e\u003e\u003e newub 'example'\n   \u003e\u003e\u003e setlat '1Acube' 1 1 1 90 90 90\n\nFind U matrix from two reflections::\n\n   \u003e\u003e\u003e pos wl 1\n   wl:        1.0000\n   \u003e\u003e\u003e c2th [0 0 1]\n   59.99999999999999\n\n   \u003e\u003e\u003e pos sixc [0 60 0 30 90 0]\n   sixc:     mu:  0.0000 delta:  60.0000 gam:  0.0000 eta:  30.0000 chi:  90.0000 phi:  0.0000 \n   \u003e\u003e\u003e addref [0 0 1]\n\n   \u003e\u003e\u003e pos sixc [0 90 0 45 45 90]\n   sixc:     mu:  0.0000 delta:  90.0000 gam:  0.0000 eta:  45.0000 chi:  45.0000 phi:  90.0000 \n   \u003e\u003e\u003e addref [0 1 1]\n   Calculating UB matrix.\n\n\nCheck that it looks good::\n\n   \u003e\u003e\u003e checkub\n   \n        ENERGY     H     K     L    H_COMP   K_COMP   L_COMP     TAG\n    1  12.3984  0.00  0.00  1.00    0.0000   0.0000   1.0000        \n    2  12.3984  0.00  1.00  1.00    0.0000   1.0000   1.0000        \n\nTo see the resulting UB-calculation::\n\n   \u003e\u003e\u003e ub\n   UBCALC\n   \n      name:       example\n   \n      n_phi:      0.00000   0.00000   1.00000 \u003c- set\n      n_hkl:     -0.00000   0.00000   1.00000\n      miscut:     None\n   \n   CRYSTAL\n   \n      name:        1Acube\n   \n      a, b, c:    1.00000   1.00000   1.00000\n                 90.00000  90.00000  90.00000\n   \n      B matrix:   6.28319   0.00000   0.00000\n                  0.00000   6.28319   0.00000\n                  0.00000   0.00000   6.28319\n   \n   UB MATRIX\n   \n      U matrix:   1.00000   0.00000   0.00000\n                  0.00000   1.00000   0.00000\n                  0.00000   0.00000   1.00000\n   \n      U angle:    0\n   \n      UB matrix:  6.28319   0.00000   0.00000\n                  0.00000   6.28319   0.00000\n                  0.00000   0.00000   6.28319\n   \n   REFLECTIONS\n   \n        ENERGY     H     K     L        MU    DELTA      GAM      ETA      CHI      PHI  TAG\n      1 12.398  0.00  0.00  1.00    0.0000  60.0000   0.0000  30.0000  90.0000   0.0000  \n      2 12.398  0.00  1.00  1.00    0.0000  90.0000   0.0000  45.0000  45.0000  90.0000  \n\nSetting the reference vector\n----------------------------\nSee the full `user manual\u003chttps://diffcalc.readthedocs.io`\u003e for many more\noptions and an explanation of what this all means.\n\nBy default the reference vector is set parallel to the phi axis. That is,\nalong the z-axis of the phi coordinate frame.\n\nThe `ub` command shows the current reference vector, along with any inferred\nmiscut, at the top its report (or it can be shown by calling ``setnphi`` or\n``setnhkl'`` with no args)::\n\n   \u003e\u003e\u003e ub\n   ...\n   n_phi:      0.00000   0.00000   1.00000 \u003c- set\n   n_hkl:     -0.00000   0.00000   1.00000\n   miscut:     None\n   ...\n\nConstraining solutions for moving in hkl space\n----------------------------------------------\nSee the full `user manual\u003chttps://diffcalc.readthedocs.io`\u003e for many more\noptions and an explanation of what this all means.\n\nTo get help and see current constraints::\n\n   \u003e\u003e\u003e help con\n   ...\n\n   \u003e\u003e\u003e con\n       DET        REF        SAMP\n       ------     ------     ------\n       delta  --\u003e a_eq_b --\u003e mu\n   --\u003e gam        alpha      eta\n       qaz        beta       chi\n       naz        psi        phi\n                             mu_is_gam\n   \n       gam  : 0.0000\n       a_eq_b\n       mu   : 0.0000\n   \n       Type 'help con' for instructions\n\nThree constraints can be given: zero or one from the DET and REF columns and the\nremainder from the SAMP column. Not all combinations are currently available.\nUse ``help con`` to see a summary if you run into troubles.\n\nTo configure four-circle vertical scattering::\n\n   \u003e\u003e\u003e con gam 0 mu 0 a_eq_b\n       gam  : 0.0000\n       a_eq_b\n       mu   : 0.0000\n\nMoving in hkl space\n-------------------\n\nSimulate moving to a reflection::\n\n   \u003e\u003e\u003e sim hkl [0 1 1]\n   sixc would move to:\n        mu :    0.0000\n     delta :   90.0000\n       gam :    0.0000\n       eta :   45.0000\n       chi :   45.0000\n       phi :   90.0000\n   \n     alpha :   30.0000\n      beta :   30.0000\n       naz :   35.2644\n       psi :   90.0000\n       qaz :   90.0000\n       tau :   45.0000\n     theta :   45.0000\n\nMove to reflection::\n\n   \u003e\u003e\u003e pos hkl [0 1 1]\n   hkl:      h: 0.00000 k: 1.00000 l: 1.00000 \n\n   \u003e\u003e\u003e pos sixc\n   sixc:     mu:  0.0000 delta:  90.0000 gam:  0.0000 eta:  45.0000 chi:  45.0000 phi:  90.0000 \n\n\nScanning in hkl space\n---------------------\n\nScan an hkl axis (and read back settings)::\n\n   \u003e\u003e\u003e scan l 0 1 .2 sixc\n         l       mu     delta      gam       eta      chi       phi\n   -------  -------  --------  -------  --------  -------  --------\n   0.00000   0.0000   60.0000   0.0000   30.0000   0.0000   90.0000\n   0.20000   0.0000   61.3146   0.0000   30.6573   11.3099   90.0000\n   0.40000   0.0000   65.1654   0.0000   32.5827   21.8014   90.0000\n   0.60000   0.0000   71.3371   0.0000   35.6685   30.9638   90.0000\n   0.80000   0.0000   79.6302   0.0000   39.8151   38.6598   90.0000\n   1.00000   0.0000   90.0000   0.0000   45.0000   45.0000   90.0000\n\nScan a constraint (and read back virtual angles and eta)::\n\n   \u003e\u003e\u003e con psi\n       gam  : 0.0000\n   !   psi  : ---\n       mu   : 0.0000\n   \u003e\u003e\u003e scan psi 70 110 10 hklverbose [0 1 1] eta\n        psi       eta        h        k        l     theta       qaz     alpha       naz       tau       psi      beta\n   --------  --------  -------  -------  -------  --------  --------  --------  --------  --------  --------  --------\n   70.00000   26.1183  0.00000  1.00000  1.00000  45.00000  90.00000  19.20748  45.28089  45.00000  70.00000  42.14507\n   80.00000   35.1489  -0.00000  1.00000  1.00000  45.00000  90.00000  24.40450  40.12074  45.00000  80.00000  35.93196\n   90.00000   45.0000  0.00000  1.00000  1.00000  45.00000  90.00000  30.00000  35.26439  45.00000  90.00000  30.00000\n   100.00000   54.8511  -0.00000  1.00000  1.00000  45.00000  90.00000  35.93196  30.68206  45.00000  100.00000  24.40450\n   110.00000   63.8817  -0.00000  1.00000  1.00000  45.00000  90.00000  42.14507  26.34100  45.00000  110.00000  19.20748\n\n\nOrientation Commands\n--------------------\n\n+-----------------------------+---------------------------------------------------+\n| **STATE**                                                                       |\n+-----------------------------+---------------------------------------------------+\n| **-- newub** {'name'}       | start a new ub calculation name                   |\n+-----------------------------+---------------------------------------------------+\n| **-- loadub** 'name' | num  | load an existing ub calculation                   |\n+-----------------------------+---------------------------------------------------+\n| **-- lastub**               | load the last used ub calculation                 |\n+-----------------------------+---------------------------------------------------+\n| **-- listub**               | list the ub calculations available to load        |\n+-----------------------------+---------------------------------------------------+\n| **-- rmub** 'name'|num      | remove existing ub calculation                    |\n+-----------------------------+---------------------------------------------------+\n| **-- saveubas** 'name'      | save the ub calculation with a new name           |\n+-----------------------------+---------------------------------------------------+\n| **LATTICE**                                                                     |\n+-----------------------------+---------------------------------------------------+\n| **-- setlat**               | interactively enter lattice parameters (Angstroms |\n|                             | and Deg)                                          |\n+-----------------------------+---------------------------------------------------+\n| **-- setlat** name a        | assumes cubic                                     |\n+-----------------------------+---------------------------------------------------+\n| **-- setlat** name a b      | assumes tetragonal                                |\n+-----------------------------+---------------------------------------------------+\n| **-- setlat** name a b c    | assumes ortho                                     |\n+-----------------------------+---------------------------------------------------+\n| **-- setlat** name a b c    | assumes mon/hex with gam not equal to 90          |\n| gamma                       |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- setlat** name a b c    | arbitrary                                         |\n| alpha beta gamma            |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- c2th** [h k l]         | calculate two-theta angle for reflection          |\n+-----------------------------+---------------------------------------------------+\n| **-- hklangle** [h1 k1 l1]  | calculate angle between [h1 k1 l1] and [h2 k2 l2] |\n| [h2 k2 l2]                  | crystal planes                                    |\n+-----------------------------+---------------------------------------------------+\n| **REFERENCE (SURFACE)**                                                         |\n+-----------------------------+---------------------------------------------------+\n| **-- setnphi** {[x y z]}    | sets or displays n_phi reference                  |\n+-----------------------------+---------------------------------------------------+\n| **-- setnhkl** {[h k l]}    | sets or displays n_hkl reference                  |\n+-----------------------------+---------------------------------------------------+\n| **REFLECTIONS**                                                                 |\n+-----------------------------+---------------------------------------------------+\n| **-- showref**              | shows full reflection list                        |\n+-----------------------------+---------------------------------------------------+\n| **-- addref**               | add reflection interactively                      |\n+-----------------------------+---------------------------------------------------+\n| **-- addref** [h k l]       | add reflection with current position and energy   |\n| {'tag'}                     |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- addref** [h k l] (p1,  | add arbitrary reflection                          |\n| .., pN) energy {'tag'}      |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- editref** num          | interactively edit a reflection                   |\n+-----------------------------+---------------------------------------------------+\n| **-- delref** num           | deletes a reflection (numbered from 1)            |\n+-----------------------------+---------------------------------------------------+\n| **-- clearref**             | deletes all the reflections                       |\n+-----------------------------+---------------------------------------------------+\n| **-- swapref**              | swaps first two reflections used for calculating  |\n|                             | U matrix                                          |\n+-----------------------------+---------------------------------------------------+\n| **-- swapref** num1 num2    | swaps two reflections (numbered from 1)           |\n+-----------------------------+---------------------------------------------------+\n| **CRYSTAL ORIENTATIONS**                                                        |\n+-----------------------------+---------------------------------------------------+\n| **-- showorient**           | shows full list of crystal orientations           |\n+-----------------------------+---------------------------------------------------+\n| **-- addorient**            | add crystal orientation interactively             |\n+-----------------------------+---------------------------------------------------+\n| **-- addorient** [h k l]    | add crystal orientation in laboratory frame       |\n| [x y z] {'tag'}             |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- editorient** num       | interactively edit a crystal orientation          |\n+-----------------------------+---------------------------------------------------+\n| **-- delorient** num        | deletes a crystal orientation (numbered from 1)   |\n+-----------------------------+---------------------------------------------------+\n| **-- clearorient**          | deletes all the crystal orientations              |\n+-----------------------------+---------------------------------------------------+\n| **-- swaporient**           | swaps first two crystal orientations used for     |\n|                             | calculating U matrix                              |\n+-----------------------------+---------------------------------------------------+\n| **-- swaporient** num1 num2 | swaps two crystal orientations (numbered from 1)  |\n+-----------------------------+---------------------------------------------------+\n| **UB MATRIX**                                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- checkub**              | show calculated and entered hkl values for        |\n|                             | reflections                                       |\n+-----------------------------+---------------------------------------------------+\n| **-- setu**                 | manually set u matrix                             |\n| {[[..][..][..]]}            |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- setub**                | manually set ub matrix                            |\n| {[[..][..][..]]}            |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- calcub**               | (re)calculate u matrix from ref1 and ref2         |\n+-----------------------------+---------------------------------------------------+\n| **-- trialub**              | (re)calculate u matrix from ref1 only (check      |\n|                             | carefully)                                        |\n+-----------------------------+---------------------------------------------------+\n| **-- refineub** {[h k l]}   | refine unit cell dimensions and U matrix to match |\n| {pos}                       | diffractometer angles for a given hkl value       |\n+-----------------------------+---------------------------------------------------+\n| **-- addmiscut** angle      | apply miscut to U matrix using a specified miscut |\n| {[x y z]}                   | angle in degrees and a rotation axis              |\n|                             | (default: [0 1 0])                                |\n+-----------------------------+---------------------------------------------------+\n| **-- setmiscut** angle      | manually set U matrix using a specified miscut    |\n| {[x y z]}                   | angle in degrees and a rotation axis              |\n|                             | (default: [0 1 0])                                |\n+-----------------------------+---------------------------------------------------+\n\nMotion Commands\n---------------\n\n+-----------------------------+---------------------------------------------------+\n| **CONSTRAINTS**                                                                 |\n+-----------------------------+---------------------------------------------------+\n| **-- con**                  | list available constraints and values             |\n+-----------------------------+---------------------------------------------------+\n| **-- con** \u003cname\u003e {val}     | constrains and optionally sets one constraint     |\n+-----------------------------+---------------------------------------------------+\n| **-- con** \u003cname\u003e {val}     | clears and then fully constrains                  |\n| \u003cname\u003e {val} \u003cname\u003e {val}   |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- uncon** \u003cname\u003e         | remove constraint                                 |\n+-----------------------------+---------------------------------------------------+\n| **HKL**                                                                         |\n+-----------------------------+---------------------------------------------------+\n| **-- allhkl** [h k l]       | print all hkl solutions ignoring limits           |\n+-----------------------------+---------------------------------------------------+\n| **HARDWARE**                                                                    |\n+-----------------------------+---------------------------------------------------+\n| **-- hardware**             | show diffcalc limits and cuts                     |\n+-----------------------------+---------------------------------------------------+\n| **-- setcut** {name {val}}  | sets cut angle                                    |\n+-----------------------------+---------------------------------------------------+\n| **-- setmin** {axis {val}}  | set lower limits used by auto sector code (None   |\n|                             | to clear)                                         |\n+-----------------------------+---------------------------------------------------+\n| **-- setmax** {name {val}}  | sets upper limits used by auto sector code (None  |\n|                             | to clear)                                         |\n+-----------------------------+---------------------------------------------------+\n| **MOTION**                                                                      |\n+-----------------------------+---------------------------------------------------+\n| **-- sim** hkl scn          | simulates moving scannable (not all)              |\n+-----------------------------+---------------------------------------------------+\n| **-- sixc**                 | show Eularian position                            |\n+-----------------------------+---------------------------------------------------+\n| **-- pos** sixc [mu, delta, | move to Eularian position(None holds an axis      |\n| gam, eta, chi, phi]         | still)                                            |\n+-----------------------------+---------------------------------------------------+\n| **-- sim** sixc [mu, delta, | simulate move to Eulerian positionsixc            |\n| gam, eta, chi, phi]         |                                                   |\n+-----------------------------+---------------------------------------------------+\n| **-- hkl**                  | show hkl position                                 |\n+-----------------------------+---------------------------------------------------+\n| **-- pos** hkl [h k l]      | move to hkl position                              |\n+-----------------------------+---------------------------------------------------+\n| **-- pos** {h | k | l} val  | move h, k or l to val                             |\n+-----------------------------+---------------------------------------------------+\n| **-- sim** hkl [h k l]      | simulate move to hkl position                     |\n+-----------------------------+---------------------------------------------------+\n\n\nReferences\n----------\n\n.. [You1999] H. You. *Angle calculations for a '4S+2D' six-circle diffractometer.*\n   J. Appl. Cryst. (1999). **32**, 614-623. `(pdf link)\n   \u003chttp://journals.iucr.org/j/issues/1999/04/00/hn0093/hn0093.pdf\u003e`__.\n\n.. [Busing1967] W. R. Busing and H. A. Levy. *Angle calculations for 3- and 4-circle X-ray\n   and neutron diffractometers.* Acta Cryst. (1967). **22**, 457-464. `(pdf link)\n   \u003chttp://journals.iucr.org/q/issues/1967/04/00/a05492/a05492.pdf\u003e`__.\n\n.. [Vlieg1993] Martin Lohmeier and Elias Vlieg. *Angle calculations for a six-circle\n   surface x-ray diffractometer.* J. Appl. Cryst. (1993). **26**, 706-716. `(pdf link)\n   \u003chttp://journals.iucr.org/j/issues/1993/05/00/la0044/la0044.pdf\u003e`__.\n\n.. [Vlieg1998] Elias Vlieg. *A (2+3)-type surface diffractometer: mergence of the z-axis and\n   (2+2)-type geometries.* J. Appl. Cryst. (1998). **31**, 198-203. `(pdf link)\n   \u003chttp://journals.iucr.org/j/issues/1998/02/00/pe0028/pe0028.pdf\u003e`__.\n\n.. [Willmott2011] C. M. Schlepütz, S. O. Mariager, S. A. Pauli, R. Feidenhans'l and\n   P. R. Willmott. *Angle calculations for a (2+3)-type diffractometer: focus\n   on area detectors.* J. Appl. Cryst. (2011). **44**, 73-83. `(pdf link)\n   \u003chttp://journals.iucr.org/j/issues/2011/01/00/db5088/db5088.pdf\u003e`__.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiamondlightsource%2Fdiffcalc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiamondlightsource%2Fdiffcalc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiamondlightsource%2Fdiffcalc/lists"}