bugfixing

This commit is contained in:
2022-10-12 20:02:21 +02:00
parent 8e3645ef69
commit dff3cc35a5

View File

@ -1,4 +1,5 @@
from epics import PV
from os.path import dirname
from slic.core.adjustable import Adjustable, PVAdjustable
from slic.core.device import SimpleDevice
from slic.core.task import Task
@ -10,12 +11,12 @@ from time import sleep
UND_PERIOD = 38.0
REF_MAG_ARRAY = 'TL'
def check_phase(phase):
assert -180 <= phase <= 180
#TODO: use this to be in the correct range?
def fix_phase(p):
return ((p + 180) % 360) - 180
@ -31,7 +32,7 @@ class UndPhases(Adjustable):
allows to set the same phase to all undulators
"""
def __init__(self, ID, params, und_names=None, **kwargs):
def __init__(self, ID, params, isparallel=True, und_names=None, **kwargs):
super().__init__(ID, **kwargs)
self.params = params
@ -39,7 +40,7 @@ class UndPhases(Adjustable):
und_names = params.keys()
SUFFIX = "-UIND030:"
self.phases = [UndPhase(i + SUFFIX, params[i]) for i in und_names]
self.phases = [UndPhase(i + SUFFIX, params[i], isparallel=isparallel) for i in und_names]
def get_current_value(self):
@ -64,10 +65,11 @@ class UndPhase(Adjustable):
allows to set the phase of one undulator
"""
def __init__(self, ID, params, **kwargs):
def __init__(self, ID, params, isparallel, **kwargs):
super().__init__(ID, **kwargs)
self.params = params
self.shift = UndShift(ID)
self.isparallel = isparallel
self.shift = UndShift(ID) if isparallel else UndShiftQuadrants(ID, REF_MAG_ARRAY)
self.radial = UndRadial(ID)
self.totalk = UndTotalK(ID)
@ -79,11 +81,14 @@ class UndPhase(Adjustable):
def set_target_value(self, value):
phase = value
phase = fix_phase(phase)
shift = convert_phase_to_shift(phase)
k = self.totalk.get()
#radial = parallel2gap(k, phase, self.params)
radial = antiparallel2gap(k, phase, self.params)
if self.isparallel:
radial = parallel2gap(k, phase, self.params)
else:
radial = antiparallel2gap(k, phase, self.params)
radial = round(radial, 4) #TODO: why?
self.shift.set_target_value(shift).wait()
@ -168,7 +173,7 @@ class UndShiftQuadrants(Adjustable):
def set_target_value(self, value):
names = (n.lower() for n in self.names)
vals = (value, -value, 0, 0)
tasks = [adjs[n].set_target_value(v) for n, v in zip(names, vals)]
tasks = [self.adjs.__dict__[n].set_target_value(v) for n, v in zip(names, vals)]
sleep(0.3)
self.pv_on.put(1)
@ -212,10 +217,12 @@ class UndTotalK:
if __name__ == "__main__":
print(__file__)
print(dirname(__file__))
basedir = dirname(__file__)
#phase = 123
phase = 95
phase = 90
check_phase(phase)
und_first = 10
und_last = 22
und_range = [*range(und_first, und_last+1, 1)]
@ -226,30 +233,35 @@ if __name__ == "__main__":
print(undus)
# old Excel parameter file with only legacy fixed polarization parameters
params1 = json_load("UE38_all_parallel_parameters.json")
params1 = json_load(basedir + "/UE38_all_parallel_parameters.json")
print('\n')
print(type(params1))
print(params1.keys())
# Excel parameter file with only fixed polarization parameters
params2 = json_load("UE38_all_parameters.json")
params2 = json_load(basedir + "/UE38_all_parameters.json")
print('\n')
print(type(params2))
print(params2.keys())
# Pickle parameter file with fixed and full polarization parameters
alldata = unpickle('./UE38_meas_and_fit_data.pickle')
alldata = unpickle(basedir + '/UE38_meas_and_fit_data.pickle')
params = alldata['fitdata']
measdata = alldata['measdata']
print('\n')
print(type(params))
print(params.keys())
ups = UndPhases("SATUN-PHASES", params)
params = {a:v for a,v in params.items() if a in undus}
#for u in params.keys():
# if u not in undus:
# del(params[u])
ups = UndPhases("SATUN-PHASES", params, isparallel=False)
sleep(0.3)
print(ups.phases[0], ups.phases[0].shift)
#ups.phases[0].set_target_value(phase).wait()
#print(ups.phases[0], ups.phases[0].shift)
ups.phases[0].set_target_value(phase).wait()
print(ups.phases[0], ups.phases[0].shift)