post N2O repeat: energy limits, magnet cycling, more overview stuff, spreadsheet line, another intensity channel, PATT cam renamed, more PV channels, pgroup update, show special tab, remove overnight

This commit is contained in:
2021-12-02 13:51:01 +01:00
parent 16ba1f8829
commit 4848b8405a

231
maloja.py
View File

@ -1,8 +1,14 @@
#!/usr/bin/env python
from time import sleep
from datetime import datetime
import numpy as np
from tqdm import trange
from epics import PV
from slic.gui import GUI
from slic.core.adjustable import PVAdjustable, PVEnumAdjustable, DummyAdjustable
from slic.core.acquisition import SFAcquisition
from slic.core.adjustable import Adjustable, PVAdjustable, PVEnumAdjustable, DummyAdjustable
from slic.core.acquisition import SFAcquisition#, PVAcquisition
from slic.core.condition import PVCondition
from slic.core.scanner import Scanner
from slic.devices.simpledevice import SimpleDevice
@ -14,14 +20,14 @@ from slic.utils import devices, Marker, as_shortcut
#from slic.core.acquisition.fakeacquisition import FakeAcquisition
from devices.attenuator import Attenuator
from devices.undulator import Undulators
from devices.undulator import Undulators, TwoColorChicane, Phases
from devices.magnet import Magnet
import colors
dummy = DummyAdjustable(units="au")
magnet = Magnet()
jet_delay = PVAdjustable("SATES20-CVME-EVR0:Pul6-Delay-SP", "SATES20-CVME-EVR0:Pul6-Delay-RB", accuracy=1, name="Jet Delay")
waveplate = Motor("SLAAT21-LMOT-M702:MOT", name="Laser Waveplate")
@ -35,17 +41,40 @@ source_x = Motor("SATES20-MANIP1:MOTOR_2", name="Source manipulator x")
att = Attenuator("SATFE10-OATT064")
##n_und_ref = 6
#n_und_ref = None
#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")
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.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)
und1 = Undulators([6, 7, 8, 9, 10, 11, 12, 13], n_und_ref=13, adjust_chic=False, name="z Athos Undulators 6-13")
und2 = Undulators([15, 16, 17, 18, 19, 20, 21, 22], n_und_ref=22, adjust_chic=False, name="z Athos Undulators 15-22")
xota_z_trans = Motor("SATES21-XOTA166:W_Z", name="Table 1: Z coordinated")
@ -59,16 +88,33 @@ 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")
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"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),
@ -94,7 +140,12 @@ overview = SimpleDevice("Maloja Overview",
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 = PVAdjustable("SATUN14-MBND100:I-READ", internal=True),
chicane_set_current = 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
)
@ -102,13 +153,62 @@ overview = SimpleDevice("Maloja Overview",
def print_overview():
print(overview)
@as_shortcut
def print_line_for_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",
"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",
]
ov = overview.__dict__
def get(i):
if i in ov:
return str(ov[i].get())
return ""
res = [get(i) for i in line]
res = ",".join(res)
print(res)
standa = Motor("SLAAT21-LMOT-M707:MOT", name="Standa Motor")
mark_microscope = Marker(standa, 141.344, "Microscope")
mark_gascell = Marker(standa, 88.334, "Gas Cell")
mark_tof = Marker(standa, 28.330, "TOF")
@ -117,7 +217,7 @@ channels_nbs = [f"SATES20-CVME-EVR0:DUMMY_PV{i+1}_NBS" for i in range(10)]
channels_inten = [
"SATFE10-PEPG046:FCUP-INTENSITY-CAL",
"SATFE10-PEPG046:PHOTON-ENERGY-PER-PULSE-AVG",
"SATFE10-PEPG046-EVR0:CALCI",
"SATFE10-PEPG046-EVR0:CALCS",
"SATFE10-PEPG046-EVR0:CALCT",
@ -141,7 +241,7 @@ channels_ks = [
channels_cam_pco = [
"SATES21-CAMS154-M1:FPICTURE",
"SATES24-CAMS161-M1:FPICTURE",
"SATES21-PATT-M1:FPICTURE",
"SATES21-CAMS-PATT1:FPICTURE",
]
channels_cam_gige = [
@ -157,7 +257,7 @@ channels = channels_nbs + channels_inten + channels_ks + channels_cam_pco + chan
names_cam_pco = [
"SATES21-CAMS154-M1",
"SATES24-CAMS161-M1",
"SATES21-PATT-M1",
"SATES21-CAMS-PATT1",
]
suffices_proc = [
"processing_parameters",
@ -171,11 +271,51 @@ for n in names_cam_pco:
pvs = [
"SATFE10-PEPG046:PHOTON-ENERGY-PER-PULSE-AVG",
"SATES20-MANIP2:MOTOR_1.VAL",
"SATES20-MANIP2:MOTOR_2.VAL",
"SATES20-MANIP2:MOTOR_3.VAL",
"SATES20-MANIP2:MOTOR_1.RBV",
"SATES20-MANIP2:MOTOR_2.RBV",
"SATES20-MANIP2:MOTOR_3.RBV",
"SATES21-VM-VT2020:PRESSURE",
"SATES21-VM-VT3010:PRESSURE",
"SATES21-VM-VT3030:PRESSURE",
"SATES21-XSHV166:V-0-S-CH0",
"SATES21-XSHV166:V-0-S-CH1",
"SATES21-XSHV166:V-0-S-CH2",
"SATES21-XSHV166:V-1-S-CH0",
"SATES21-XSHV166:V-1-S-CH1",
"SATES21-XSHV166:V-1-S-CH2",
"SATES21-XSMA166:MOT1:MOTRBV",
"SATES21-XSMA166:MOT2:MOTRBV",
"SATES21-XSMA166:MOT3:MOTRBV",
"SATES22-XSMA168:MOT10:MOTRBV",
"SATES22-XSMA168:MOT11:MOTRBV",
"SATES22-XSMA168:MOT12:MOTRBV",
"SATFE10-OATT064:MOT2TRANS.VALD",
"SATFE10-OATT065:MOT2TRANS.VALD",
"SATUN14-MBND100:I-READ",
"SF-CPCL-TIM:TIME",
"SLAAT01-LTIM-PDLY:DELAY",
"SLAAT21-LMOT-M704:MOT",
"SLAAT21-LMOT-M707:MOT",
"SLAAT21-LMOT-M708:MOT",
"SWISSFEL-STATUS:Bunch-2-Appl-Freq-RB",
]
pvs += [f"SATES20-CVME-EVR0:DUMMY_PV{i+1}_NBS.INP" for i in range(10)]
pvs += [f"SATUN{i:02}-UIND030:FELPHOTENE" for i in range(6, 22+1) if i != 14]
pvs += [f"SATUN{i:02}-UIND030:POL-SET" for i in range(6, 22+1) if i != 14]
for n in ("TEMP", "HUMIREL", "PRES"):
for i in range(5):
pvs.append(f"SLAAT01-LI2C01_CH{i+1}:{n}")
for i in range(2):
pvs.append(f"SLAAT21-LI2C01_CH{i+1}:{n}")
for i in range(4):
pvs.append(f"SLAAT21-LI2C02_CH{i+1}:{n}")
detectors = [
@ -192,63 +332,24 @@ instrument = "maloja"
#pgroup = "p19343" # slic dev
#pgroup = "p19373" # laser
#pgroup = "p19483" # pilot 1 -- TRXPS
pgroup = "p19488" # pilot 2 -- Non-Linear Spectroscopy
#pgroup = "p19488" # pilot 2 -- Non-Linear Spectroscopy
pgroup = "p19510" # pilot 2 -- Non-Linear Spectroscopy
daq = SFAcquisition(instrument, pgroup, default_channels=channels, default_pvs=pvs, default_detectors=detectors, rate_multiplicator=1)
#daq = FakeAcquisition(instrument, pgroup)
#daqPV = PVAcquisition(instrument, pgroup, default_channels=channels_ks) # workaround for KS not going to DB
check_intensity = PVCondition("SATBD01-DBPM060:Q2", vmin=5, vmax=None, wait_time=1, required_fraction=0.8)
#check_intensity = None
scan = Scanner(scan_info_dir=f"/sf/{instrument}/data/{pgroup}/res/scan_info", default_acquisitions=[daq], condition=check_intensity)
gui = GUI(scan, show_goto=True)
gui = GUI(scan, show_goto=True, show_spec=True)
from epics import PV
from time import sleep
from datetime import datetime
def overnight():
shutter = PV("SATOP21-OPSH138:REQUEST")
print("open shutter")
shutter.put(1)
sleep(3)
#base = "I4d_high_resolution_Ek472_Ep100_TTincluded_slit_2_008"
#base = "I4d_high_resolution_Ek472_Ep200_TTincluded_slit_2_010"
base = "CF3I_C1s_Ek230_Ep200_TTincluded_slit2_2609_130microJ_002"
x0 = 15.813
start = x0 - 0.12
stop = x0 + 0.4
step = 0.004
n_pulses = 2 * 300
for i in range(1000):
print(i, "sig")
scan.scan1D(exp_delay, start, stop, step, n_pulses, f"{base}_sig_{i:04}", return_to_initial_values=True)
print("close shutter")
shutter.put(0)
sleep(3)
print(i, "bkg")
daq.acquire(f"{base}_bkg_{i:04}", n_pulses=n_pulses)
print("open shutter")
shutter.put(1)
sleep(3)