DiamondLightSource / mx-bluesky

Bluesky plans, plan stubs, and utilities for MX beamlines
https://diamondlightsource.github.io/mx-bluesky/
Apache License 2.0
0 stars 2 forks source link

Add new zebra plan for fixed target pump probe #94

Closed noemifrisina closed 5 months ago

noemifrisina commented 6 months ago

Add the new zebra set up to run pump probe collections on a fastchip with long intervals between the laser and the actual collection - which means having to open and close the shutter when taking images to avoid frying the crystals over the long exposure times. (For reference in old scripts: fastchip-zebratrigger-{pilatus,eiger}-medium1)

A description of the zebra setting for this can be found here

On the edm side, a new choice has been added to the pump probe mus on the main screen (option 8 = "Medium1") and the new pump_probe screen will have a new graph (see picture below)

image

noemifrisina commented 5 months ago

Original code on beamline


elif action == 'fastchip-zebratrigger-pilatus-medium1':
        #fast shutter opening time in s
        shutter_open_time = 0.05
        [num_gates, n_exposures, exptime] = args_list
        caput(pv.zebra1_soft_in_b0, '0')
        caput(pv.zebra1_pc_gate_sel, 'External')
        caput(pv.zebra1_pc_pulse_sel, 'Time')
        caput(pv.zebra1_pc_gate_inp, '7')

        caput(pv.zebra1_pulse2_inp, '30')
        caput(pv.zebra1_pulse2_delay, '0')
        caput(pv.zebra1_pulse2_width, (float(n_exposures)*float(exptime) + shutter_open_time))
        caput(pv.zebra1_out4_ttl, '53')

        caput(pv.zebra1_and3_inp1, '61')
        caput(pv.zebra1_and3_inp2, '31')
        caput(pv.zebra1_out2_ttl, '34')

        caput(pv.zebra1_pc_gate_ngate, num_gates)
        caput(pv.zebra1_pc_pulse_start, shutter_open_time)
        exptimestep = float(exptime) +0.0001 # Miss some triggers if no 100us buffer
        caput(pv.zebra1_pc_pulse_step, exptimestep)
        pulse_width = float(exptime) / 2 # sawtooth
        caput(pv.zebra1_pc_pulse_width, pulse_width)
        caput(pv.zebra1_pc_pulse_max, n_exposures)

    elif action == 'fastchip-zebratrigger-eiger-medium1':
        shutter_open_time = 0.05
        [num_gates, n_exposures, exptime] = args_list
        caput(pv.zebra1_soft_in_b0, '0')
        caput(pv.zebra1_pc_gate_sel, 'External')
        caput(pv.zebra1_pc_pulse_sel, 'Time')
        caput(pv.zebra1_pc_gate_inp, '7')

        caput(pv.zebra1_pulse2_inp, '30')
        caput(pv.zebra1_pulse2_delay, '0')
        caput(pv.zebra1_pulse2_width, (float(n_exposures)*float(exptime) + shutter_open_time))
        caput(pv.zebra1_out4_ttl, '53')

        caput(pv.zebra1_and3_inp1, '61')
        caput(pv.zebra1_and3_inp2, '31')
        caput(pv.zebra1_out1_ttl, '34')

        caput(pv.zebra1_pc_gate_ngate, num_gates)
        caput(pv.zebra1_pc_pulse_start, shutter_open_time)
        exptimestep = float(exptime) +0.0001 # Miss some triggers if no 100us buffer
        caput(pv.zebra1_pc_pulse_step, exptimestep)
        pulse_width = float(exptime) -0.0001 # sawtooth with small drop for eiger
        caput(pv.zebra1_pc_pulse_width, pulse_width)
        caput(pv.zebra1_pc_pulse_max, n_exposures)