From dff3cc35a58cbb9c2c2afe4cfa370c2913e6df59 Mon Sep 17 00:00:00 2001 From: kittel_c Date: Wed, 12 Oct 2022 20:02:21 +0200 Subject: [PATCH] bugfixing --- phases/full_polarization.py | 44 +++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/phases/full_polarization.py b/phases/full_polarization.py index bac03b4..9a0feae 100644 --- a/phases/full_polarization.py +++ b/phases/full_polarization.py @@ -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)