This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -218,7 +218,7 @@ class Target:
|
||||
def actual(self):
|
||||
return self.reader()
|
||||
|
||||
def checkpos(self):
|
||||
def checkin(self):
|
||||
return abs(self.actual - self.inpos) <= self.tol
|
||||
|
||||
def mvin(self):
|
||||
@@ -227,46 +227,43 @@ class Target:
|
||||
def mvout(self):
|
||||
scans.umv(self.mot, self.outpos, relative = False)
|
||||
|
||||
|
||||
@dataclass
|
||||
class GroupTarget:
|
||||
def __init__(self, **targets: Target):
|
||||
self.targets = targets
|
||||
def checkpos(self):
|
||||
return all(t.checkpos() for t in self.targets.values())
|
||||
def report(self):
|
||||
return {name: t.checkpos() for name, t in self.targets.items()}
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@dataclass (frozen=True)
|
||||
class SE:
|
||||
"""Define settings for scintillator, collimator, i1"""
|
||||
scin = Target(0.0, 0.0, 0.1, dev.scin_y, lambda: dev.scin_y.read()['scin_y']['value'])
|
||||
i1 = Target(0.0, 0.0, 0.2, dev.scin_y, lambda: dev.scin_y.read()['scin_y']['value'])
|
||||
colly = Target(0.0, 0.0, 0.05, dev.coll_y, lambda: dev.coll_y.read()['coll_y']['value'])
|
||||
bsy = Target(0.0, 0, 0.05, dev.bs_y, lambda: dev.bs_y.read()['bs_y']['value'])
|
||||
bsx = Target(0.0, 0.0, 0.05, dev.bs_x, lambda: dev.bs_x.read()['bs_x']['value'])
|
||||
blpos = Target(0.0, 0.0, 0.0, dev.blight_pos, lambda: dev.blight_pos.read()['blight_pos']['value'])
|
||||
bspos = Target(0.0, 0.0, 0.0, dev.bs_pos, lambda: dev.bs_pos.read()['bs_pos']['value'])
|
||||
# cryopos = Target(1, 0, 0, dev.cryo_pos, lambda: dev.cryo_pos.read()['cryo_pos']['value'])
|
||||
# xrfpos = Target(1, 0, 0, dev.xrf_pos, lambda: dev.xrf_pos.read()['xrf_pos']['value'])
|
||||
# coll = GroupTarget(
|
||||
# x = Target(0.0517, 0.0517, 0.02, dev.coll_x, lambda: dev.coll_x.read()['coll_x']['value']),
|
||||
# y = Target(41.5, 20.0, 0.05, dev.coll_y, lambda: dev.coll_y.read()['coll_y']['value']),
|
||||
# )
|
||||
# bs = GroupTarget(
|
||||
# x = Target(2.65, 2.65, 0.05, dev.bs_x, lambda: dev.bs_x.read()['bs_x']['value']),
|
||||
# y = Target(0.1, 0.1, 0.05, dev.bs_y, lambda: dev.bs_y.read()['bs_y']['value'])
|
||||
# )
|
||||
"""sample environment positions"""
|
||||
pass
|
||||
|
||||
def build_se(yaml_file):
|
||||
with open(yaml_file) as f:
|
||||
data = yaml.safe_load(f)
|
||||
for name, cfg in data.items():
|
||||
# Skip devices without userParameter
|
||||
user = cfg.get("userParameter")
|
||||
if not user:
|
||||
continue
|
||||
# # Set tolerance
|
||||
if "tol" not in user:
|
||||
user["tol"] = 0.01
|
||||
|
||||
try:
|
||||
dev_obj = getattr(dev, name)
|
||||
except:
|
||||
raise KeyError(f"Device {name} not found in device list")
|
||||
|
||||
@classmethod
|
||||
def load_positions(cls, filename: str):
|
||||
with open(filename) as f:
|
||||
data = yaml.safe_load(f)
|
||||
|
||||
for name, pos in data.items():
|
||||
if not hasattr(cls, name):
|
||||
raise KeyError(f"Unknown motor '{name}' in {filename}")
|
||||
target = getattr(cls, name)
|
||||
target.inpos = pos["in"]
|
||||
target.outpos = pos["out"]
|
||||
|
||||
target = Target(
|
||||
inpos=user["in"],
|
||||
outpos=user["out"],
|
||||
tol=user["tol"],
|
||||
mot=dev_obj,
|
||||
reader=lambda d=dev_obj, n=name: d.read()[n]["value"],
|
||||
)
|
||||
|
||||
setattr(SE, name, target)
|
||||
|
||||
def init_sample_env():
|
||||
file = "/sls/x10sa/config/bec/production/pxii_bec/pxii_bec/device_configs/pxii-autogenerated.yaml"
|
||||
build_se(file)
|
||||
print("Motor in/out positions updated from values in device_config yaml")
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
scin:
|
||||
in: 38.62
|
||||
out: 20.0
|
||||
|
||||
i1:
|
||||
in: 44.0
|
||||
out: 20.0
|
||||
|
||||
colly:
|
||||
in: 41.5
|
||||
out: 20.0
|
||||
|
||||
bsy:
|
||||
in: 0.1
|
||||
out: -0.9
|
||||
|
||||
bsx:
|
||||
in: 2.45
|
||||
out: 2.45
|
||||
|
||||
blpos:
|
||||
in: 1
|
||||
out: 0
|
||||
|
||||
bspos:
|
||||
in: 1
|
||||
out: 0
|
||||
Reference in New Issue
Block a user