Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ pyiid/grad_test.txt
old_files/
benchmarks/
extra/
history.sqlite
history*.sqlite
*.swp

db/
Expand Down
2 changes: 1 addition & 1 deletion startup/00-base.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
bec=True,
magics=True,
mpl=False,
# publish_documents_to_kafka=True
publish_documents_with_kafka=True
)

from pathlib import Path
Expand Down
42 changes: 41 additions & 1 deletion startup/12-motors.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import ophyd
from ophyd import (Device, Component as Cpt,
EpicsSignal, EpicsSignalRO, EpicsMotor)
from nslsii.devices import TwoButtonShutter
from ophyd.device import DeviceStatus
from nslsii.devices import TwoButtonShutter as _TwoButtonShutter
#import nslsii.devices

Det_1_X = EpicsMotor('XF:28ID1B-ES{Det:1-Ax:X}Mtr', name='Det_1_X', labels=['positioners'])
Expand Down Expand Up @@ -50,6 +51,33 @@ class FilterBank(Device):
flt3 = Cpt(EpicsSignal, '3}Cmd:Opn-Cmd', string=True)
flt4 = Cpt(EpicsSignal, '4}Cmd:Opn-Cmd', string=True)


class TwoButtonShutter(_TwoButtonShutter):
def stop(self):
...
def set(self, value):
if value == 0:
return super().set('Close')
#super().set('Close')
#status = DeviceStatus(self)
#return status
if value == 1:
return super().set('Open')
# super().set('Open')
# status = DeviceStatus(self)
# return status

def read(self): #fix for whoever thought it was smart to use 'Not Open' instead of 'Close' - DO
ret = super().read()
val = ret['fb_two_button_shutters_flt1_status']['value']
if val == 'Not Open':
ret['fb_two_button_shutters_flt1_status']['value'] = 'Close'
return ret

# def read(self):
# ret = super().read()
# # FIX RET
# return ret
class FilterBankTwoButtonShutter(Device):
flt1 = Cpt(TwoButtonShutter, '1}')
flt2 = Cpt(TwoButtonShutter, '2}')
Expand All @@ -59,6 +87,10 @@ class FilterBankTwoButtonShutter(Device):
fb = FilterBank('XF:28ID1B-OP{Fltr:', name='fb')
fb_two_button_shutters = FilterBankTwoButtonShutter('XF:28ID1B-OP{Fltr:', name='fb_two_button_shutters')

#trying to make a temporary shutter - DO - 5/18/2022
#fs = fb_two_button_shutters.flt4
#if disable this, need to re-enable fs in 15-optics: line 105

# Spinner Goniohead motors, add by HZ
Spinnergo_X = EpicsMotor('XF:28ID1B-ES{Stg:Smpl-Ax:X}Mtr', name='Spinnergo_X', labels=['positioners'])
Spinnergo_Y = EpicsMotor('XF:28ID1B-ES{Stg:Smpl-Ax:Y}Mtr', name='Spinnergo_Y', labels=['positioners'])
Expand All @@ -78,7 +110,15 @@ class FilterBankTwoButtonShutter(Device):

#45-degree shifting motor on M6-grid, for use with hot air blower / cryostream with angled sample bracket
broadside45_shifter = EpicsMotor('XF:28ID1B-ES{Smpl:Array-Ax:Horiz}Mtr', name='broadside45_shifter')
Multi_X = EpicsMotor('XF:28ID1B-ES{Smpl:Array-Ax:Horiz}Mtr', name='Multi_X')

#NOx BOx x/y sample position
noxbox_x = EpicsMotor('XF:28ID1B-ES{NOx-Ax:X}Mtr', name='noxbox_x')
noxbox_y = EpicsMotor('XF:28ID1B-ES{NOx-Ax:Y}Mtr', name='noxbox_y')


#Table X-tages
OT_stage_1_X = EpicsMotor('XF:28ID1-ES{Det-Ax:X1}Mtr', name='OT_stage_1_X', labels=['positioners'])
OT_stage_2_X = EpicsMotor('XF:28ID1-ES{Det-Ax:X2}Mtr', name='OT_stage_2_X', labels=['positioners'])
OT_stage_3_X = EpicsMotor('XF:28ID1-ES{Det-Ax:X3}Mtr', name='OT_stage_3_X', labels=['positioners'])
OT_stage_4_X = EpicsMotor('XF:28ID1-ES{Det-Ax:X4}Mtr', name='OT_stage_4_X', labels=['positioners'])
58 changes: 28 additions & 30 deletions startup/15-optics.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,27 +34,25 @@ class SideBounceMono(Device):
twist = Cpt(EpicsMotor, "Twist}Mtr")

sbm = SideBounceMono("XF:28ID1A-OP{Mono:SBM-Ax:", name='sbm')
# Shutters:
#fs = EpicsSignal('XF:28ID1B-OP{PSh:1-Det:2}Cmd', name='fs') # fast shutter
#temporary fast shutter
# class tempFSShutter:
#class tempFSShutter:
#
# def set(self, value):
# if value == 0:
# return fb_two_button_shutters.flt4.set('Close')
# elif value == 1:
# return fb_two_button_shutters.flt4.set('Open')
# def set(self, value):
# if value == 0:
# return fb_two_button_shutters.flt1.set('Close')
# elif value == 1:
# return fb_two_button_shutters.flt1.set('Open')
#
# def read(self):
# return fb_two_button_shutters.read()
# def read(self):
# return fb_two_button_shutters.read()
#
# def describe(self):
# return fb_two_button_shutters.describe()
# def describe(self):
# return fb_two_button_shutters.describe()
#
# def stop(self, success=False):
# return self.set('close')

# fs = tempFSShutter()
# def stop(self, success=False):
# return self.set('close')
#
#fs = tempFSShutter()

# Close the shutter on stop
# fs.stop = lambda *args, **kwargs: fs.set(0)
Expand All @@ -75,20 +73,20 @@ def __init__(self, *args, **kwargs):
def set(self, val):
# NOTE: temporary workaround until the fast shutter works.
#
# def check_if_done(value, old_value, **kwargs):
# if ((val in ['Open', 1] and value == 0) or
# (val in ['Close', 0] and value == 1)):
# if self.st is not None:
# self.st._finished()
# self.st = None
# return True
# return False
def check_if_done(value, old_value, **kwargs):
if ((val in ['Open', 1] and value == 0) or
(val in ['Close', 0] and value == 1)):
if self.st is not None:
self.st._finished()
self.st = None
return True
return False
self.cmd.set(self.setmap[val])
# status = SubscriptionStatus(self.status, check_if_done,settle_time=self.settle_time.get())
# return status
status = SubscriptionStatus(self.status, check_if_done,settle_time=self.settle_time.get())
return status

ttime.sleep(1.0) # wait to set the value since the status PV does not capture the actual status
return NullStatus()
#ttime.sleep(1.0) # wait to set the value since the status PV does not capture the actual status
#return NullStatus()

def get(self):
return self.readmap[self.cmd.get()]
Expand All @@ -101,9 +99,9 @@ def read(self):
# def stop(self, success=False):
# return self.set('Close')


#temporary disable fast shutter while broken - DO 5/18/2022
fs = PDFFastShutter('XF:28ID1B-OP{PSh:1-Det:2}', name='fs')

#if enable this, need to disable fs in 12-motors: line 80

class Mirror(Device):
y_upstream = Cpt(EpicsMotor, 'YU}Mtr')
Expand Down
File renamed without changes.
Loading