moved spreadsheet code to separate file; cleaned up undulator construction

This commit is contained in:
2021-12-02 14:30:50 +01:00
parent acd4b4342d
commit 3f6e5ebce8
2 changed files with 153 additions and 149 deletions

172
maloja.py
View File

@ -7,7 +7,7 @@ from tqdm import trange
from epics import PV
from slic.gui import GUI
from slic.core.adjustable import Adjustable, PVAdjustable, PVEnumAdjustable, DummyAdjustable
from slic.core.adjustable import Adjustable, PVAdjustable, DummyAdjustable
from slic.core.acquisition import SFAcquisition#, PVAcquisition
from slic.core.condition import PVCondition
from slic.core.scanner import Scanner
@ -24,6 +24,7 @@ from devices.undulator import Undulators, TwoColorChicane, Phases
from devices.magnet import Magnet
from channels import channels, pvs, detectors
from spreadsheet import overview
import colors
@ -41,43 +42,18 @@ source_y = Motor("SATES20-MANIP1:MOTOR_1", name="Source manipulator y")
source_x = Motor("SATES20-MANIP1:MOTOR_2", name="Source manipulator x")
att = Attenuator("SATFE10-OATT064")
chic_delay = TwoColorChicane("zz Two Color Chicane")
#n_und_ref = 6
n_und_ref = None
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_ref, chic_fudge_offset, adjust_chic=False, name="z Athos Undulators")
und1 = Undulators([6, 7, 8, 9, 10, 11, 12, 13], n_und_ref=10, adjust_chic=False, name="z Athos Undulators 6-13")
und2 = Undulators([15, 16, 17, 18, 19, 20, 21, 22], n_und_ref=19, adjust_chic=False, name="z Athos Undulators 15-22")
und = Undulators(name="z Athos Undulators (both colors)")
und1 = Undulators([6, 7, 8, 9, 10, 11, 12, 13], n_und_ref=10, name="z Athos Undulators 6-13 (first color)")
und2 = Undulators([15, 16, 17, 18, 19, 20, 21, 22], n_und_ref=19, name="z Athos Undulators 15-22 (second color)")
und.set_limits(390, 1000)
und1.set_limits(390, 1000)
und2.set_limits(390, 1000)
chic_delay = TwoColorChicane("zz Two Color Chicane")
magn = PV("SATUN14-MBND100:CYCLE")
@as_shortcut
def cycle_magnet():
magn.put(1, wait=True)
for _ in trange(250):
sleep(1)
chic_delay.set(1).wait()
sleep(1)
chic_delay.set(5).wait()
sleep(1)
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")
@ -88,7 +64,6 @@ mot1_z = SmarActAxis("SATES21-XSMA166:MOT6", name="Table 1: sma Z")
mot3_z = SmarActAxis("SATES23-XSMA169:MOT3", name="Table 3: sma Z")
standa = Motor("SLAAT21-LMOT-M707:MOT", name="Standa Motor")
mark_microscope = Marker(standa, 141.344, "Microscope")
@ -96,124 +71,26 @@ mark_gascell = Marker(standa, 88.334, "Gas Cell")
mark_tof = Marker(standa, 28.330, "TOF")
class PVStringAdjustable(PVAdjustable):
def get_current_value(self):
return self.pvs.readback.get(as_string=True).strip()
undulator_info = {}
for i in n_unds:
undulator_info[f"energy{i}"] = PVAdjustable(f"SATUN{i:02}-UIND030:FELPHOTENE", internal=True)
undulator_info[f"polarisation{i}"] = PVEnumAdjustable(f"SATUN{i:02}-UIND030:POL-SET", internal=True)
overview = SimpleDevice("Maloja Overview",
standa = standa,
exp_delay = exp_delay,
laser_delay = laser_delay,
LXT = lxt,
FELrepRate = PVAdjustable("SWISSFEL-STATUS:Bunch-2-Appl-Freq-RB", internal=True),
PaddleChamber1x = PVAdjustable("SATES21-XSMA166:MOT1:MOTRBV", internal=True),
PaddleChamber1y = PVAdjustable("SATES21-XSMA166:MOT2:MOTRBV", internal=True),
PaddleChamber1z = PVAdjustable("SATES21-XSMA166:MOT3:MOTRBV", internal=True),
SmartActTTx = PVAdjustable("SATES22-XSMA168:MOT10:MOTRBV", internal=True),
SmartActTTy = PVAdjustable("SATES22-XSMA168:MOT11:MOTRBV", internal=True),
SmartActTTz = PVAdjustable("SATES22-XSMA168:MOT12:MOTRBV", internal=True),
ToFV1m = PVAdjustable("SATES21-XSHV166:V-1-S-CH0", internal=True),
ToFV1p = PVAdjustable("SATES21-XSHV166:V-0-S-CH0", internal=True),
ToFV2m = PVAdjustable("SATES21-XSHV166:V-1-S-CH1", internal=True),
ToFV2p = PVAdjustable("SATES21-XSHV166:V-0-S-CH1", internal=True),
ToFV3m = PVAdjustable("SATES21-XSHV166:V-1-S-CH2", internal=True),
ToFV3p = PVAdjustable("SATES21-XSHV166:V-0-S-CH2", internal=True),
# energy1 = PVAdjustable("SATUN06-UIND030:FELPHOTENE", internal=True),
# energy2 = PVAdjustable("SATUN15-UIND030:FELPHOTENE", internal=True),
manip2needleESx = PVAdjustable("SATES20-MANIP2:MOTOR_1.VAL", internal=True),
manip2needleESy = PVAdjustable("SATES20-MANIP2:MOTOR_2.VAL", internal=True),
manip2needleESz = PVAdjustable("SATES20-MANIP2:MOTOR_3.VAL", internal=True),
# pol1 = PVEnumAdjustable("SATUN06-UIND030:POL-SET", internal=True),
# pol2 = PVEnumAdjustable("SATUN15-UIND030:POL-SET", internal=True),
pressChamb2 = PVAdjustable("SATES21-VM-VT2020:PRESSURE", internal=True),
pressChamb3 = PVAdjustable("SATES21-VM-VT3010:PRESSURE", internal=True),
pressChamb3GasCell = PVAdjustable("SATES21-VM-VT3030:PRESSURE", internal=True),
pulse_energy = PVAdjustable("SATFE10-PEPG046:PHOTON-ENERGY-PER-PULSE-AVG", internal=True),
timeStamp = PVAdjustable("SF-CPCL-TIM:TIME", internal=True),
chicane_current_rb = PVAdjustable("SATUN14-MBND100:I-READ", internal=True),
chicane_current_sv = PVAdjustable("SATUN14-MBND100:I-SET", internal=True),
att64 = PVStringAdjustable("SATFE10-OATT064:MOT2TRANS.VALD", internal=True),
att65 = PVStringAdjustable("SATFE10-OATT065:MOT2TRANS.VALD", internal=True),
**undulator_info
)
spreadsheet_line = [
"timeStamp", "File name",
"Gas cell / TOF",
"standa","Sample",
"pressChamb3",
"pressChamb3GasCell", "Static/scan", "Scan parameter", "ScanStep", "shots", "Comments", "Two colors (Y/N)", "energy1",
"polarisation10", "energy2",
"polarisation19",
"pulse_energy",
"chicane_current_rb",
"FELrepRate",
"att64",
"att65", "Grating", "order", "Slit", "Detector position X", "Detector position Y", "Detector position (angle)","Ek", "Ep", "Slit", "Mode",
"pressChamb2", "Gas",
"manip2needleESx",
"manip2needleESy",
"manip2needleESz",
"ToFV1p",
"ToFV2p",
"ToFV3p",
"ToFV1m",
"ToFV2m",
"ToFV3m",
"PaddleChamber1x",
"PaddleChamber1y",
"PaddleChamber1z",
"energy6",
"energy7",
"energy8",
"energy9",
"energy10",
"energy11",
"energy12",
"energy13",
"energy14",
"energy15",
"energy16",
"energy17",
"energy18",
"energy19",
"energy20",
"energy21",
"energy22",
]
magn = PV("SATUN14-MBND100:CYCLE")
@as_shortcut
def print_overview():
print(overview)
def cycle_magnet():
magn.put(1, wait=True)
for _ in trange(250):
sleep(1)
# set the current to 1 and 5 consecutively,
# since the results after the first step always looks strange
chic_delay.set(1).wait()
sleep(1)
chic_delay.set(5).wait()
sleep(1)
@as_shortcut
def print_line_for_spreadsheet():
ov = overview.__dict__
def get(i):
if i in ov:
return str(ov[i].get())
return ""
res = [get(i) for i in spreadsheet_line]
res = ",".join(res)
print(res)
# add some more devices to the overview
overview.standa = standa
overview.exp_delay = exp_delay
overview.laser_delay = laser_delay
overview.LXT = lxt
@ -246,6 +123,3 @@ gui = GUI(scan, show_goto=True, show_spec=True)

130
spreadsheet.py Normal file
View File

@ -0,0 +1,130 @@
from slic.core.adjustable import PVAdjustable, PVEnumAdjustable
from slic.devices.simpledevice import SimpleDevice
from slic.utils import as_shortcut
class PVStringAdjustable(PVAdjustable):
def get_current_value(self):
return self.pvs.readback.get(as_string=True).strip()
n_unds = [
6, 7, 8, 9, 10, 11, 12, 13, # 14 is the CHIC
15, 16, 17, 18, 19, 20, 21, 22
]
undulator_info = {}
for i in n_unds:
undulator_info[f"energy{i}"] = PVAdjustable(f"SATUN{i:02}-UIND030:FELPHOTENE", internal=True)
undulator_info[f"polarisation{i}"] = PVEnumAdjustable(f"SATUN{i:02}-UIND030:POL-SET", internal=True)
overview = SimpleDevice("Maloja Overview",
# standa = standa,
# exp_delay = exp_delay,
# laser_delay = laser_delay,
# LXT = lxt,
FELrepRate = PVAdjustable("SWISSFEL-STATUS:Bunch-2-Appl-Freq-RB", internal=True),
PaddleChamber1x = PVAdjustable("SATES21-XSMA166:MOT1:MOTRBV", internal=True),
PaddleChamber1y = PVAdjustable("SATES21-XSMA166:MOT2:MOTRBV", internal=True),
PaddleChamber1z = PVAdjustable("SATES21-XSMA166:MOT3:MOTRBV", internal=True),
SmartActTTx = PVAdjustable("SATES22-XSMA168:MOT10:MOTRBV", internal=True),
SmartActTTy = PVAdjustable("SATES22-XSMA168:MOT11:MOTRBV", internal=True),
SmartActTTz = PVAdjustable("SATES22-XSMA168:MOT12:MOTRBV", internal=True),
ToFV1m = PVAdjustable("SATES21-XSHV166:V-1-S-CH0", internal=True),
ToFV1p = PVAdjustable("SATES21-XSHV166:V-0-S-CH0", internal=True),
ToFV2m = PVAdjustable("SATES21-XSHV166:V-1-S-CH1", internal=True),
ToFV2p = PVAdjustable("SATES21-XSHV166:V-0-S-CH1", internal=True),
ToFV3m = PVAdjustable("SATES21-XSHV166:V-1-S-CH2", internal=True),
ToFV3p = PVAdjustable("SATES21-XSHV166:V-0-S-CH2", internal=True),
# energy1 = PVAdjustable("SATUN06-UIND030:FELPHOTENE", internal=True),
# energy2 = PVAdjustable("SATUN15-UIND030:FELPHOTENE", internal=True),
manip2needleESx = PVAdjustable("SATES20-MANIP2:MOTOR_1.VAL", internal=True),
manip2needleESy = PVAdjustable("SATES20-MANIP2:MOTOR_2.VAL", internal=True),
manip2needleESz = PVAdjustable("SATES20-MANIP2:MOTOR_3.VAL", internal=True),
# pol1 = PVEnumAdjustable("SATUN06-UIND030:POL-SET", internal=True),
# pol2 = PVEnumAdjustable("SATUN15-UIND030:POL-SET", internal=True),
pressChamb2 = PVAdjustable("SATES21-VM-VT2020:PRESSURE", internal=True),
pressChamb3 = PVAdjustable("SATES21-VM-VT3010:PRESSURE", internal=True),
pressChamb3GasCell = PVAdjustable("SATES21-VM-VT3030:PRESSURE", internal=True),
pulse_energy = PVAdjustable("SATFE10-PEPG046:PHOTON-ENERGY-PER-PULSE-AVG", internal=True),
timeStamp = PVAdjustable("SF-CPCL-TIM:TIME", internal=True),
chicane_current_rb = PVAdjustable("SATUN14-MBND100:I-READ", internal=True),
chicane_current_sv = PVAdjustable("SATUN14-MBND100:I-SET", internal=True),
att64 = PVStringAdjustable("SATFE10-OATT064:MOT2TRANS.VALD", internal=True),
att65 = PVStringAdjustable("SATFE10-OATT065:MOT2TRANS.VALD", internal=True),
**undulator_info
)
spreadsheet_line = [
"timeStamp", "File name",
"Gas cell / TOF",
"standa","Sample",
"pressChamb3",
"pressChamb3GasCell", "Static/scan", "Scan parameter", "ScanStep", "shots", "Comments", "Two colors (Y/N)", "energy1",
"polarisation10", "energy2",
"polarisation19",
"pulse_energy",
"chicane_current_rb",
"FELrepRate",
"att64",
"att65", "Grating", "order", "Slit", "Detector position X", "Detector position Y", "Detector position (angle)","Ek", "Ep", "Slit", "Mode",
"pressChamb2", "Gas",
"manip2needleESx",
"manip2needleESy",
"manip2needleESz",
"ToFV1p",
"ToFV2p",
"ToFV3p",
"ToFV1m",
"ToFV2m",
"ToFV3m",
"PaddleChamber1x",
"PaddleChamber1y",
"PaddleChamber1z",
"energy6",
"energy7",
"energy8",
"energy9",
"energy10",
"energy11",
"energy12",
"energy13",
"energy14",
"energy15",
"energy16",
"energy17",
"energy18",
"energy19",
"energy20",
"energy21",
"energy22",
]
@as_shortcut
def print_overview():
print(overview)
@as_shortcut
def print_line_for_spreadsheet():
ov = overview.__dict__
def get(i):
if i in ov:
return str(ov[i].get())
return ""
res = [get(i) for i in spreadsheet_line]
res = ",".join(res)
print(res)