Skip to main content

Sirepo-Bluesky interface

Project description

https://img.shields.io/travis/NSLS-II/sirepo-bluesky.svg https://img.shields.io/pypi/v/sirepo-bluesky.svg

Sirepo-Bluesky interface

Purpose

An attempt to integrate Sirepo/SRW simulations with Bluesky/Ophyd.

Based on this Sirepo simulation that can be downloaded in the next section:

https://github.com/NSLS-II/sirepo-bluesky/raw/master/images/basic_beamline.png

Prepare a local Sirepo server

  • Install Sirepo using Vagrant/VirtualBox following the instructions (you will need to install VirtualBox and Vagrant)
  • After the successful installation start the VM with vagrant up and ssh to it with vagrant ssh
  • Run the following command to start Sirepo with the Bluesky interface (bluesky is a “secret” key used on both server and client sides, and the SIREPO_FEATURE_CONFIG_SIM_TYPES=srw part is optional if you run Sirepo directly on a Linux/Mac machine and only have SRW installed):
SIREPO_FEATURE_CONFIG_SIM_TYPES=srw SIREPO_AUTH_METHODS=bluesky:guest SIREPO_AUTH_BLUESKY_SECRET=bluesky sirepo service http
  • In your browser, go to http://10.10.10.10:8000/srw, click the “Import” button in the right-upper corner and upload the archive with the simulation stored in this repo
  • You should be redirected to the address like http://10.10.10.10:8000/srw#/source/IKROlKfR
  • Grab the last 8 alphanumeric symbols (IKROlKfR), which represent a UID for the simulation we will be working with in the next section.

You can also consider running a Docker container:

mkdir -p $HOME/tmp/sirepo-docker-run
docker run -it --rm -e SIREPO_AUTH_METHODS=bluesky:guest -e SIREPO_AUTH_BLUESKY_SECRET=bluesky -e SIREPO_SRDB_ROOT=/sirepo -e SIREPO_COOKIE_IS_SECURE=false -p 8000:8000 -v $HOME/sirepo_srdb_root:/sirepo radiasoft/sirepo:20200220.135917 bash -l -c "sirepo service http"

Prepare Bluesky and trigger a simulated Sirepo detector

  • (OPTIONAL) Make sure you have mongodb installed and the service is running (see local.yml for details)
  • Create a conda environment:
conda create -n sirepo_bluesky python=3.7 -y
conda activate sirepo_bluesky
pip install sirepo-bluesky  # a package from PyPI
  • Clone this repository to have access to the examples:
git clone https://github.com/NSLS-II/sirepo-bluesky/
cd sirepo-bluesky/
  • Start ipython and run the following where sim_id is the UID for the simulation we are working with:
%run -i examples/prepare_det_env.py
import sirepo_bluesky.sirepo_detector as sd
import bluesky.plans as bp
sirepo_det = sd.SirepoDetector(sim_id='<sim_id>', reg=db.reg)
sirepo_det.select_optic('Aperture')
param1 = sirepo_det.create_parameter('horizontalSize')
param2 = sirepo_det.create_parameter('verticalSize')
sirepo_det.read_attrs = ['image', 'mean', 'photon_energy']
sirepo_det.configuration_attrs = ['horizontal_extent', 'vertical_extent', 'shape']
RE(bp.grid_scan([sirepo_det],
                param1, 0, 1, 10,
                param2, 0, 1, 10,
                True))

You should get something like:

https://github.com/NSLS-II/sirepo-bluesky/raw/master/images/sirepo_bluesky_grid.png
  • Get the data:
hdr = db[-1]
imgs = list(hdr.data('sirepo_det_image'))
cfg = hdr.config_data('sirepo_det')['primary'][0]
hor_ext = cfg['{}_horizontal_extent'.format(sirepo_det.name)]
vert_ext = cfg['{}_vertical_extent'.format(sirepo_det.name)]
plt.imshow(imgs[21], aspect='equal', extent=(*hor_ext, *vert_ext))

You should get something like:

https://github.com/NSLS-II/sirepo-bluesky/raw/master/images/sirepo_bluesky.png

To view single-electron spectrum report (Hint: use a different sim_id, e.g. for the NSLS-II CHX beamline example):

%run -i examples/prepare_det_env.py
import sirepo_bluesky.sirepo_detector as sd
import bluesky.plans as bp
sirepo_det = sd.SirepoDetector(sim_id='<sim_id>', reg=db.reg, source_simulation=True)
sirepo_det.read_attrs = ['image']
sirepo_det.configuration_attrs = ['photon_energy', 'shape']
RE(bp.count([sirepo_det]))
hdr = db[-1]
cfg = hdr.config_data('sirepo_det')['primary'][0]
energies = cfg['sirepo_det_photon_energy']
spectrum, = hdr.data('sirepo_det_image')
plt.plot(energies, spectrum)

You should get something like:

https://github.com/NSLS-II/sirepo-bluesky/raw/master/images/spectrum.png

Use a simulated Sirepo Flyer to run multiple simulations

  • This section is based on the Young’s Double Slit Experiment Sirepo example that can be found in the wavefront propagation folder on the SRW simulations section
  • Open the simulation and grab the new UID (the last 8 alphanumeric symbols)
  • Start ipython and run the following:
%run -i examples/prepare_flyer_env.py
import bluesky.plans as bp
import sirepo_bluesky.sirepo_flyer as sf
  • To create 5 different simulations that change 4 parameters at a time:
params_to_change = []
for i in range(1, 6):
    key1 = 'Aperture'
    parameters_update1 = {'horizontalSize': i * .1, 'verticalSize': (16 - i) * .1}
    key2 = 'Lens'
    parameters_update2 = {'horizontalFocalLength': i + 7}
    key3 = 'Obstacle'
    parameters_update3 = {'horizontalSize': 6 - i}
    params_to_change.append({key1: parameters_update1,
                             key2: parameters_update2,
                             key3: parameters_update3})
  • Create the flyer and run a fly scan where sim_id is the UID of this simulation:
sirepo_flyer = sf.SirepoFlyer(sim_id='<sim_id>', server_name='http://10.10.10.10:8000',
                              root_dir=root_dir, params_to_change=params_to_change,
                              watch_name='W60')

RE(bp.fly([sirepo_flyer]))
  • Access the data:
In[13]: hdr = db[-1]
        hdr.table(stream_name='sirepo_flyer')

Out[13]:
                              time                    sirepo_flyer_image  \
seq_num
1       2020-08-10 07:54:01.426501  ae51b7d7-1a0f-4613-9118-1626b4f89bf0
2       2020-08-10 07:54:01.426501  14183b1a-03f1-4333-a4a2-b9e16ccdbf29
3       2020-08-10 07:54:01.426501  2e372fb4-7fe3-47ce-acf8-9af3e2d1acad
4       2020-08-10 07:54:01.426501  7bea7ace-0be3-4b97-a936-f2cec48cb370
5       2020-08-10 07:54:01.426501  7e22377b-985c-49d9-aaf4-26c967b1bd22

        sirepo_flyer_shape  sirepo_flyer_mean  sirepo_flyer_photon_energy  \
seq_num
1               [250, 896]       3.677965e+13                      4240.0
2               [250, 546]       9.944933e+13                      4240.0
3               [250, 440]       1.492891e+14                      4240.0
4               [252, 308]       2.234285e+14                      4240.0
5               [252, 176]       3.885947e+14                      4240.0

                          sirepo_flyer_horizontal_extent  \
seq_num
1        [-0.0013627376425855513, 0.0013596958174904943]
2         [-0.001015813953488372, 0.0010120930232558139]
3        [-0.0009701657458563539, 0.0009701657458563542]
4        [-0.0008026143790849673, 0.0008026143790849673]
5        [-0.0005374045801526716, 0.0005312977099236639]

                             sirepo_flyer_vertical_extent  \
seq_num
1         [-0.000249500998003992, 0.00024750499001996017]
2         [-0.000249500998003992, 0.00024750499001996017]
3        [-0.00024650698602794426, 0.0002504990019960079]
4        [-0.0002485029940119762, 0.00025249500998003984]
5        [-0.00025149700598802393, 0.0002495009980039921]

                  sirepo_flyer_hash_value sirepo_flyer_status  \
seq_num
1        d5d6628d50bd65a329717e8ffb942224           completed
2        d6f8b77048fe6ad48e007cfb776528ad           completed
3        e5f914471d873f156c31815ab705575f           completed
4        bf507c942bb67c7191d16968de6ddd5b           completed
5        1775724d932efa3e0233781465a5a67b           completed

         sirepo_flyer_Aperture_horizontalSize  \
seq_num
1                                         0.1
2                                         0.2
3                                         0.3
4                                         0.4
5                                         0.5

         sirepo_flyer_Aperture_verticalSize  \
seq_num
1                                       1.5
2                                       1.4
3                                       1.3
4                                       1.2
5                                       1.1

         sirepo_flyer_Lens_horizontalFocalLength  \
seq_num
1                                              8
2                                              9
3                                             10
4                                             11
5                                             12

         sirepo_flyer_Obstacle_horizontalSize
seq_num
1                                           5
2                                           4
3                                           3
4                                           2
5                                           1

Databroker will return the following information:

https://github.com/NSLS-II/sirepo-bluesky/raw/master/images/flyer_output.png

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for sirepo-bluesky, version 0.1.0
Filename, size File type Python version Upload date Hashes
Filename, size sirepo_bluesky-0.1.0-py3-none-any.whl (20.3 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size sirepo-bluesky-0.1.0.tar.gz (41.4 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page