Files
maloja/maloja.py

196 lines
7.2 KiB
Python

#!/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 Adjustable, PVAdjustable, DummyAdjustable
from slic.core.acquisition import SFAcquisition#, PVAcquisition
from slic.core.condition import PVCondition
from slic.core.scanner import Scanner
from slic.devices.general.motor import Motor
from slic.devices.general.delay_stage import DelayStage
from slic.devices.general.smaract import SmarActAxis
from slic.devices.general.shutter import Shutter
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 slic.utils import unpickle
from devices.attenuator import Attenuator
from devices.undulator import Undulators, TwoColorChicane, Phases
#from devices.phases import UndPhases
from channels import channels, pvs, detectors
from spreadsheet import overview, print_overview, print_line_for_spreadsheet
import colors
dummy = DummyAdjustable(units="au")
#gas_attenuator = PVAdjustable("SATFE10-VVRE054-A010:SET_VAL-UI", name="Gas Attenuator")
gas_attenuator = PVAdjustable("SATFE10-VVRE054-A010:SET_VAL-UI", process_time=20, name="Gas Attenuator Volts")
gas_attenuator_trans = PVAdjustable("SATFE10-OGAT053:TRANSMISSION", process_time=20, name="Gas Attenuator Transmission")
#jet_delay = PVAdjustable("SATES20-CVME-EVR0:Pul6-Delay-SP", "SATES20-CVME-EVR0:Pul6-Delay-RB", accuracy=1, name="Jet Delay")
source_delay = PVAdjustable("SATES20-CVME-EVR0:Pul14-Delay-SP", "SATES20-CVME-EVR0:Pul14-Delay-RB", accuracy=1, name="Source Delay")
mono = PVAdjustable("SATOP11-OSGM087:SetEnergy", "SATOP11-OSGM087:photonenergy", accuracy=0.1, process_time=3, name="Mono Coupled")
waveplate = Motor("SLAAT21-LMOT-M712:MOT", name="Laser Waveplate")
TT_delay = Motor("SLAAT21-LMOT-M704:MOT", name="TT_delay")
#laser_comp21 = Motor("SLAAT21-LMOT-M701:MOT", name="Laser Comp T2")
#laser_comp11 = Motor("SLAAT21-LMOT-M705:MOT", name="Laser Comp T1 1")
pump_probe_delay = Motor("SLAAT21-LMOT-M703:MOT", name="pump_probe_delay")
#laser_comp12 = Motor("SLAAT21-LMOT-M706:MOT", name="Laser Comp T1 2")
#laser_delay = DelayStage("SLAAT21-LMOT-M708:MOT", name="Laser Delay")
laser_delay = Motor("SLAAT21-LMOT-M708:MOT", name="Laser Global Delay")
lxt = PVAdjustable("SLAAT01-LTIM-PDLY:DELAY", pvname_done_moving="SLAAT01-LTIM-PDLY:WAITING", name="LXT")
source_y = Motor("SATES20-MANIP1:MOTOR_1", name="Aerosol Injector x")
source_x = Motor("SATES20-MANIP1:MOTOR_2", name="Aerosol Injector y")
att = Attenuator("SATFE10-OATT064")
shutter = Shutter("SATOP21-OPSH138")
chic_delay = TwoColorChicane("zz Two Color Chicane")
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, 1100)
und1.set_limits(390, 1100)
und2.set_limits(390, 1100)
class MonoUndCoupled(Adjustable):
def __init__(self, mono, und, und_energy_offset=0):
super().__init__("MONO-UND-COUPLED", name="z mono and undulators coupled")
self.mono = mono
self.und = und
self.und_energy_offset = und_energy_offset
def get_current_value(self):
return self.mono.get_current_value()
def set_target_value(self, value):
t1 = self.mono.set_target_value(value)
value += self.und_energy_offset
t2 = self.und.set_target_value(value)
t1.wait()
t2.wait()
def is_moving(self):
return self.mono.is_moving() or self.und.is_moving()
mono_und_coupled = MonoUndCoupled(mono, und, und_energy_offset=3)
#params = unpickle("devices/phases/UE38_meas_and_fit_data.pickle")["fitdata"]
#und_names = [f"SATUN{i:02}" for i in range(6, 22+1) if i != 14]
#polarization = UndPhases("SATUN-PHASES", params, und_names=und_names, isparallel=True, name="z Polarization")
xota1_z_trans = Motor("SATES21-XOTA166:W_Z", name="Table 1: Z coordinated")
xota1_y_trans = Motor("SATES21-XOTA166:W_Y", name="Table 1: Y coordinated")
#xota1_hori_z = Motor("SATES21-XOTA166:MOTOR_Z", name="Table 1: Z raw")
xota3_z_trans = Motor("SATES23-XOTA169:W_Z", name="Table 3: Z coordinated")
xota3_y_trans = Motor("SATES23-XOTA169:W_Y", name="Table 3: Y coordinated")
#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")
mot3_x = SmarActAxis("SATES23-XSMA169:MOT7", name="Table 3: sma x")
mot3_y = SmarActAxis("SATES23-XSMA169:MOT8", name="Table 3: sma y")
jet_rot = SmarActAxis("SATES24-XSMA171:MOT1", name="Jet Rotation degrees")
jet_X = SmarActAxis("SATES24-XSMA171:MOT4", name="Jet X mm")
jet_Z = SmarActAxis("SATES24-XSMA171:MOT6", name="Jet Z mm")
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")
#magn = PV("SATUN14-MBND100:CYCLE")
#@as_shortcut
#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)
# add some more devices to the overview
overview.standa = standa
overview.TT_delay = TT_delay
overview.pump_probe_delay = pump_probe_delay
overview.LXT = lxt
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
#pgroup = "p19510" # pilot 2 -- Non-Linear Spectroscopy
#pgroup = "p19727" # Laser only timing tests
#pgroup = "p19509" # slic dev
#pgroup = "p19743" # Focus tests and timing tests
#pgroup = "p19582" # pilot 3 -- SPI
#pgroup = "p19583" # permalloy 2.0
#pgroup = "p20073" # alvise
#pgroup = "p20194" # TOF beamtime heated valve
#pgroup = "p20276" # COLTRIMS commissioning
#pgroup = "p20553" # liquid jet
#pgroup = "p20561" # HHGX beamtime
#pgroup = "p20568" # COLTRIMS commissioning
pgroup = "p20562" # CD -- Woerner
daq = SFAcquisition(instrument, pgroup, default_channels=channels, default_pvs=pvs, default_detectors=detectors, rate_multiplicator=1, append_user_tag_to_data_dir=True)
#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, show_spec=True, show_run=True)