From 4848b8405ad6a4a27783736d65da0d642e0ae9c7 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Thu, 2 Dec 2021 13:51:01 +0100 Subject: [PATCH] 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 --- maloja.py | 231 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 166 insertions(+), 65 deletions(-) diff --git a/maloja.py b/maloja.py index 3c22f57..0a51223 100644 --- a/maloja.py +++ b/maloja.py @@ -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) - -