#!/usr/bin/env python from slic.gui import GUI from slic.core.adjustable import PVAdjustable, PVEnumAdjustable, DummyAdjustable from slic.core.acquisition import SFAcquisition from slic.core.condition import PVCondition from slic.core.scanner import Scanner from slic.devices.simpledevice import SimpleDevice from slic.devices.general.motor import Motor from slic.devices.general.delay_stage import DelayStage from slic.devices.general.smaract import SmarActAxis from slic.utils import devices, Marker, as_shortcut #from slic.utils import Channels, Config, Elog, Screenshot, PV #from slic.core.acquisition.fakeacquisition import FakeAcquisition from devices.attenuator import Attenuator from devices.undulator import Undulators from devices.magnet import Magnet 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") exp_delay = Motor("SLAAT21-LMOT-M704:MOT", name="PP delay chamber 3") #laser_delay = DelayStage("SLAAT21-LMOT-M708:MOT", name="Laser Delay") laser_delay = Motor("SLAAT21-LMOT-M708:MOT", name="Laser Delay") lxt = PVAdjustable("SLAAT01-LTIM-PDLY:DELAY", pvname_done_moving="SLAAT01-LTIM-PDLY:WAITING", name="LXT") 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") ##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=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") #xota_hori_z = Motor("SATES21-XOTA166:MOTOR_Z", name="Table 1: Z raw") mot1_x = SmarActAxis("SATES21-XSMA166:MOT4", name="Table 1: sma X") mot1_y = SmarActAxis("SATES21-XSMA166:MOT5", name="Table 1: sma Y") mot1_z = SmarActAxis("SATES21-XSMA166:MOT6", name="Table 1: sma Z") mot3_z = SmarActAxis("SATES23-XSMA169:MOT3", name="Table 3: sma Z") 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", 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 = PVAdjustable("SATUN14-MBND100:I-READ", internal=True), **undulator_info ) @as_shortcut def print_overview(): print(overview) 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") # "SLAAR11-LTIM01-EVR0:DUMMY_PV5_NBS", 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-EVR0:CALCI", "SATFE10-PEPG046-EVR0:CALCS", "SATFE10-PEPG046-EVR0:CALCT", "SATFE10-PEPG046-EVR0:CALCX", "SATFE10-PEPG046-EVR0:CALCY", "SATFE10-PEPG046:FCUP-INTENSITY-AVG", "SATFE10-PEPG046:FCUP-INTENSITY-CAL", ] # CH 0-3 farday cup / 4&5 multipliers channels_inten += [f"SATFE10-LSCP1:CH{n}:1" for n in range(6)] channels_ks = [ "SATES21-GES1:A1_VALUES", #SATES21-GES1:TD_VALUES.VALZ # "SATES21-GES1:A2_VALUES", # "SATES21-GES1:A3_VALUES", # "SATES21-GES1:A4_VALUES", ] channels_cam_pco = [ "SATES21-CAMS154-M1:FPICTURE", "SATES24-CAMS161-M1:FPICTURE", "SATES21-PATT-M1:FPICTURE", ] channels_cam_gige = [ f"SATES21-CAMS154-GIGE{i+1}:FPICTURE" for i in range(8) ] #channels = channels_nbs + channels_inten + channels_ks #channels = channels_nbs + channels_inten + channels_ks + channels_cam_pco channels = channels_nbs + channels_inten + channels_ks + channels_cam_pco + channels_cam_gige names_cam_pco = [ "SATES21-CAMS154-M1", "SATES24-CAMS161-M1", "SATES21-PATT-M1", ] suffices_proc = [ "processing_parameters", "projection_background", "projection_signal", ] for n in names_cam_pco: for s in suffices_proc: c = f"{n}.{s}" channels.append(c) pvs = [ "SATFE10-PEPG046:PHOTON-ENERGY-PER-PULSE-AVG", ] 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] detectors = [ # "JF15T08V01" ] instrument = "maloja" #pgroup = "p18493" # commissioning june 2020 #pgroup = "p18722" # commissioning sept 2020 #pgroup = "p18863" # JF commissioning april 2021 #pgroup = "p19241" # two colors #pgroup = "p19342" # XMCD #pgroup = "p19343" # slic dev #pgroup = "p19373" # laser #pgroup = "p19483" # pilot 1 -- TRXPS pgroup = "p19488" # 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) 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) 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)