.. _instrument.configure_bluesky_instrument: Configure bluesky instrument ============================ After the steps in the :ref:`checklist` are complete, it is time to configure the instrument for the details of this specific user. Settings for various aspects of data collection are distributed amongst the many directories and files of the ``instrument/`` subdirectory. This directory is configured as a Python `package `_ so that it can be loaded with an ``import`` `statement `_, such as: from instrument.collection import * The `file <../../../bluesky/instrument/iconfig.yml>`__ ``instrument/iconfig.yml`` gathers many common configuration details into one location (in the root directory of the ``instrument`` package). This is a text file in `YAML `_ format. It's easy to edit with any text editor. Initial configuration of the instrument --------------------------------------- Amongst the many items you might edit in the ``instrument/iconfig.yml`` file, the databroker catalog name is the first. Change: .. code:: yaml DATABROKER_CATALOG: &databroker_catalog training to (assuming *your* catalog is named ``45ida_abcd``): .. code:: yaml DATABROKER_CATALOG: &databroker_catalog 45ida_abcd You should change this line: .. code:: yaml ALLOW_AREA_DETECTOR_WARMUP: true to .. code:: yaml ALLOW_AREA_DETECTOR_WARMUP: false You may comment these lines (used by the training IOCs, not so likely to use them with your instrument): .. code:: yaml ADSIM_IOC_PREFIX: "ad:" GP_IOC_PREFIX: "gp:" AD_IMAGE_DIR: "adsimdet/%Y/%m/%d" AD_MOUNT_PATH: /tmp BLUESKY_MOUNT_PATH: /tmp/docker_ioc/iocad/tmp Parts of the instrument package ------------------------------- The ``instrument`` package is divided into several submodules to make it easier to identify the source definition of any supported item. Framework ~~~~~~~~~ The ``instrument.framework`` directory contains the files that setup the core of Bluesky (and related packages). matplotlib ~~~~~~~~~~ The ``instrument.mpl`` directory contains the matplotlib configuration for data visualizations. Callbacks ~~~~~~~~~ The ``instrument.callbacks`` directory contains custom handling of the documents from the Bluesky RunEngine. If your instrument does not need to generate data files as if they came from the SPEC data collection software, then change this line in your ``instrument/iconfig.yml`` file: from .. code:: yaml WRITE_SPEC_DATA_FILES: true to .. code:: yaml WRITE_SPEC_DATA_FILES: false Other callbacks are possible. For example, the APS USAXS instrument writes NeXus files using a `callback `__. The order of file loading is controlled by the lines in the `init.py <./_about_init_files.md>`__ file. In some cases, the sequence of loading is important. Devices ~~~~~~~ On startup, Devices (which describe your hardware controls) are configured before Plans. This pattern is designed to avoid import loops (A needs B which needs A). There are many files in the ``instrument/devices/`` directory. None of them are in use until they are uncommented in the ``./instrument/devices/__init__.py`` file (and then the IPython session is restarted). Before you uncomment one of these files, you might need to adjust the contents of the file first to match your hardware. These files are leftovers as used in the bluesky training examples and provide ideas for what is possible with your instrument. The order of file loading is controlled by the lines in the `init.py <./_about_init_files.md>`__ file. In some cases, the sequence of loading is important. **Note**: A major principle is that any activities on startup **should not change settings in EPICS**. With this in mind, you gain the confidence that EPICS will not be affected just beacuse a Bluesky session was started. (This is why you changed ``ALLOW_AREA_DETECTOR_WARMUP`` to ``false`` above.) **Tip**: SPEC users: `spec2ophyd `__ can translate much of your SPEC config file into content for the Devices directory. Plans ~~~~~ The ``instrument/plans/`` directory contains Python files that define the custom Bluesky plans for your instrument. The existing files serve as examples. The order of file loading is controlled by the lines in the `init.py <./_about_init_files.md>`__ file. In some cases, the sequence of loading is important. Utils ~~~~~ This directory is for Python code your instrument needs but is not easily classified as Callbacks, Devices, or Plans. For example, standard analytical routines might be best placed in Utils. The order of file loading is controlled by the lines in the `init.py <./_about_init_files.md>`__ file. In some cases, the sequence of loading is important.