made active undulators and CHIC fudge offset settable from the constructor

This commit is contained in:
2021-08-27 16:44:38 +02:00
parent d08f6cc847
commit 35dc0c3b97
2 changed files with 33 additions and 14 deletions

View File

@ -2,27 +2,37 @@ from time import sleep
import numpy as np import numpy as np
from epics import PV from epics import PV
from logzero import logger as log
from slic.core.adjustable import Adjustable from slic.core.adjustable import Adjustable
from slic.core.adjustable import PVAdjustable from slic.core.adjustable import PVAdjustable
from slic.core.scanner.scanbackend import wait_for_all #, stop_all from slic.core.scanner.scanbackend import wait_for_all #, stop_all
# 14 is the CHIC UND_NAME_FMT = "SATUN{:02}-UIND030"
n_unds = [6, 7, 8, 9, 10, 11, 12, 13, N_UND_CHIC = 14
15, 16, 17, 18, 19, 20, 21, 22
]
und_names = [f"SATUN{n:02}-UIND030" for n in n_unds]
und_name_cal = "SATUN13-UIND030"
class Undulators(Adjustable): class Undulators(Adjustable):
def __init__(self, scaled=True, ID="ATHOS_UNDULATORS", name="Athos Undulators", units="eV"): def __init__(self, n_unds, n_und_cal, chic_fudge_offset=0, scaled=True, ID="ATHOS_UNDULATORS", name="Athos Undulators", units="eV"):
super().__init__(ID, name=name, units=units) super().__init__(ID, name=name, units=units)
self.n_unds = n_unds = list(n_unds)
self.n_und_cal = n_und_cal
if n_und_cal not in n_unds:
raise ValueError(f"the reference undulator ({n_und_cal}) is not in the list of active undulators: {n_unds}")
if N_UND_CHIC in n_unds:
log.warning(f"the CHIC ({N_UND_CHIC}) is in the list of active undulators: {n_unds}, and will be ignored/removed")
n_unds.remove(N_UND_CHIC)
self.und_names = und_names = [UND_NAME_FMT.format(n) for n in n_unds]
self.und_name_cal = und_name_cal = UND_NAME_FMT.format(n_und_cal)
self.adjs = {name: Undulator(name) for name in und_names} self.adjs = {name: Undulator(name) for name in und_names}
self.chic = CHIC(name, units) self.chic = CHIC(chic_fudge_offset, name, units)
self.scaled = scaled self.scaled = scaled
@ -71,7 +81,8 @@ class Undulators(Adjustable):
def get_current_value(self): def get_current_value(self):
a = self.adjs[und_name_cal] n = self.und_name_cal
a = self.adjs[n]
k = a.get_current_value() k = a.get_current_value()
energy = self.convert.E(k) energy = self.convert.E(k)
@ -155,7 +166,8 @@ class ScalerEK:
class CHIC(PVAdjustable): class CHIC(PVAdjustable):
def __init__(self, name, units): def __init__(self, fudge_offset, name, units):
self.fudge_offset = fudge_offset
name += " CHIC Energy" name += " CHIC Energy"
super().__init__("SATUN-CHIC:PHOTON-ENERGY", name=name) super().__init__("SATUN-CHIC:PHOTON-ENERGY", name=name)
self.pvs.start = PV("SATUN-CHIC:APPLY-DELAY-OFFSET-PHASE") self.pvs.start = PV("SATUN-CHIC:APPLY-DELAY-OFFSET-PHASE")
@ -163,7 +175,7 @@ class CHIC(PVAdjustable):
def set_target_value(self, value, hold=False): def set_target_value(self, value, hold=False):
fudge_offset = 3 fudge_offset = self.fudge_offset
print("CHIC fudge offset is", fudge_offset) print("CHIC fudge offset is", fudge_offset)
value -= fudge_offset value -= fudge_offset
value /= 1000 value /= 1000

View File

@ -32,7 +32,14 @@ source_y = Motor("SATES20-MANIP1:MOTOR_1", name="Source manipulator y")
source_x = Motor("SATES20-MANIP1:MOTOR_2", name="Source manipulator x") source_x = Motor("SATES20-MANIP1:MOTOR_2", name="Source manipulator x")
att = Attenuator("SATFE10-OATT064") att = Attenuator("SATFE10-OATT064")
und = Undulators(name="z Athos Undulators")
n_und_cal = 6
n_unds = [
6, 7, 8, 9, 10, 11, 12, 13, # 14 is the CHIC
15, 16, 17, 18, 19, 20, 21, 22
]
chic_fudge_offset = 0
und = Undulators(n_unds, n_und_cal, chic_fudge_offset, name="z Athos Undulators")
xota_z_trans = Motor("SATES21-XOTA166:W_Z", name="Table 1: Z coordinated") xota_z_trans = Motor("SATES21-XOTA166:W_Z", name="Table 1: Z coordinated")
#xota_hori_z = Motor("SATES21-XOTA166:MOTOR_Z", name="Table 1: Z raw") #xota_hori_z = Motor("SATES21-XOTA166:MOTOR_Z", name="Table 1: Z raw")