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