before MX beamtime October 2024

This commit is contained in:
2024-10-23 17:59:59 +02:00
parent 4bf7321e2d
commit 792e562d48
6 changed files with 277 additions and 28 deletions

View File

@ -9,8 +9,10 @@ from slic.core.acquisition.detcfg import DetectorConfig
# TODO: JF settings regarding raw conversion, compression, etc. # TODO: JF settings regarding raw conversion, compression, etc.
detectors = [ detectors = [
"JF16T03V01", "JF16T03V02",
# "JF16T03V01",
# "JF17T16V01", # "JF17T16V01",
"JF20T01V01",
] ]
# ALLOWED_PARAMS = dict( # ALLOWED_PARAMS = dict(
@ -160,6 +162,7 @@ channels_Xeye = ["SARES30-CAMS156-XE:intensity",
"SARES30-CAMS156-XE:y_fwhm", "SARES30-CAMS156-XE:y_fwhm",
"SARES30-CAMS156-XE:y_profile", "SARES30-CAMS156-XE:y_profile",
"SARES30-CAMS156-XE:y_rms", "SARES30-CAMS156-XE:y_rms",
# "SARES30-CAMS156-XE:FPICTURE",
] ]
###################### ######################
@ -207,15 +210,49 @@ channels_PSSS059_LB = [
################################### ###################################
## Bernina channels ## Bernina channels
# Beam position monitor PBPS113 # Beam position monitor PBPS113
channels_Bernina = [ #channels_Bernina = [
# "SAROP21-PBPS103:INTENSITY",
# "SAROP21-PBPS103:XPOS",
# "SAROP21-PBPS103:YPOS",
# #"SAROP21-PPRM113:FPICTURE",
# "SAROP21-PPRM113:intensity",
# "SAROP21-PPRM113:x_fit_mean",
# "SAROP21-PPRM113:y_fit_mean",
#]
channels_PBPS113_bernina = [
"SAROP21-PBPS103:INTENSITY", "SAROP21-PBPS103:INTENSITY",
"SAROP21-PBPS103:INTENSITY_UJ",
"SAROP21-PBPS103:Lnk9Ch0-PP_VAL_PD0",
"SAROP21-PBPS103:Lnk9Ch0-PP_VAL_PD1",
"SAROP21-PBPS103:Lnk9Ch0-PP_VAL_PD2",
"SAROP21-PBPS103:Lnk9Ch0-PP_VAL_PD3",
"SAROP21-PBPS103:XPOS", "SAROP21-PBPS103:XPOS",
"SAROP21-PBPS103:YPOS", "SAROP21-PBPS103:YPOS",
#"SAROP21-PPRM113:FPICTURE",
"SAROP21-PPRM113:intensity",
"SAROP21-PPRM113:x_fit_mean",
"SAROP21-PPRM113:y_fit_mean",
] ]
channels_PPRM113_bernina = [
"SAROP21-PPRM113:intensity",
"SAROP21-PPRM113:x_center_of_mass",
"SAROP21-PPRM113:x_fit_amplitude",
"SAROP21-PPRM113:x_fit_mean",
"SAROP21-PPRM113:x_fit_offset",
"SAROP21-PPRM113:x_fit_standard_deviation",
"SAROP21-PPRM113:x_fwhm",
"SAROP21-PPRM113:x_profile",
"SAROP21-PPRM113:x_rms",
"SAROP21-PPRM113:y_center_of_mass",
"SAROP21-PPRM113:y_fit_amplitude",
"SAROP21-PPRM113:y_fit_mean",
"SAROP21-PPRM113:y_fit_offset",
"SAROP21-PPRM113:y_fit_standard_deviation",
"SAROP21-PPRM113:y_fwhm",
"SAROP21-PPRM113:y_profile",
"SAROP21-PPRM113:y_rms",
# "SAROP31-PPRM113:FPICTURE", # full pictures for debugging purposes at the moment, from _ib process
]
################################### ###################################
# Beam position monitor PBPS113 # Beam position monitor PBPS113
channels_PBPS113 = [ channels_PBPS113 = [
@ -360,3 +397,12 @@ bs_channels = (
+ channels_other + channels_other
) )
bs_channels_bernina_DCM = (
channels_gas_monitor
# + channels_RF
+ channels_PBPS053
+ channels_PSSS059
+ channels_PSSS059_LB
+ channels_PBPS113_bernina
# + channels_PPRM113_bernina
)

View File

@ -193,9 +193,84 @@ pvs_PPRM053 = [
################### ###################
# Bernina mono # Bernina mono
pvs_Bernina = [ #pvs_Bernina = [
# "SAROP21-ARAMIS:ENERGY_SP",
# "SAROP21-ARAMIS:ENERGY",
# "SAROP21-PBPS103:MOTOR_X1.DRBV",
# "SAROP21-PBPS103:MOTOR_Y1.DRBV",
# "SAROP21-PBPS103:MOTOR_X1.RBV",
# "SAROP21-PBPS103:MOTOR_Y1.RBV",
# "SAROP21-PBPS103:MOTOR_PROBE.RBV",
# "SAROP21-PPRM113:MOTOR_PROBE.RBV"
#]
pvs_photon_energy_bernina = [
"SAROP21-ARAMIS:ENERGY_SP", "SAROP21-ARAMIS:ENERGY_SP",
"SAROP21-ARAMIS:ENERGY", "SAROP21-ARAMIS:ENERGY",
]
pvs_OAPU092_bernina = [
"SAROP21-OAPU044:MOTOR_X.RBV",
"SAROP21-OAPU044:MOTOR_Y.RBV",
"SAROP21-OAPU044:MOTOR_W.RBV",
"SAROP21-OAPU044:MOTOR_H.RBV",
]
pvs_OOMV092_bernina = [
"SAROP21-OOMV092:W_X.RBV",
"SAROP21-OOMV092:W_Y.RBV",
"SAROP21-OOMV092:W_RX.RBV",
"SAROP21-OOMV092:W_RZ.RBV",
"SAROP21-OOMV092:BU.RBV",
"SAROP21-OOMV092:BD.RBV",
"SAROP21-OOMV092:VS1.RBV",
"SAROP21-OOMV092:VS2.RBV",
"SAROP21-OOMV092:VS3.RBV",
"SAROP21-OOMV092:TX.RBV",
]
pvs_PPRM094_bernina = [
"SAROP21-PPRM113:MOTOR_PROBE",
#"SAROP21-PPRM113:FPICTURE",
]
pvs_OOMV096_bernina = [
"SAROP21-OOMV096:W_X.RBV",
"SAROP21-OOMV096:W_Y.RBV",
"SAROP21-OOMV096:W_RX.RBV",
"SAROP21-OOMV096:W_RZ.RBV",
"SAROP21-OOMV096:BU.RBV",
"SAROP21-OOMV096:BD.RBV",
"SAROP21-OOMV096:VS1.RBV",
"SAROP21-OOMV096:VS2.RBV",
"SAROP21-OOMV096:VS3.RBV",
"SAROP21-OOMV096:TX.RBV",
]
pvs_PSCR097_bernina = [
"SAROP21-PSCR097:MOTOR_Y1.RBV",
]
pvs_ODCM098_bernina = [
"SAROP21-ODCM098:RX12.RBV", # BRAGG
"SAROP21-ODCM098:TX12.RBV", # Horizontal
"SAROP21-ODCM098:T2.RBV", # Crystal gap T2
"SAROP21-ODCM098:RZ1.RBV", # 1st xtal roll
"SAROP21-ODCM098:RZ2.RBV", # 2nd xtal roll
"SAROP21-ODCM098:RX2.RBV", # 2nd xtal pitch
]
pvs_OAPU102_bernina = [
"SAROP21-OAPU092:MOTOR_X.RBV",
"SAROP21-OAPU092:MOTOR_Y.RBV",
"SAROP21-OAPU092:MOTOR_W.RBV",
"SAROP21-OAPU092:MOTOR_H.RBV",
]
pvs_PSRD103_bernina = [
"SAROP21-PSRD103:MOTOR_PROBE",
]
pvs_PBPS113_bernina = [
"SAROP21-PBPS103:MOTOR_X1.DRBV", "SAROP21-PBPS103:MOTOR_X1.DRBV",
"SAROP21-PBPS103:MOTOR_Y1.DRBV", "SAROP21-PBPS103:MOTOR_Y1.DRBV",
"SAROP21-PBPS103:MOTOR_X1.RBV", "SAROP21-PBPS103:MOTOR_X1.RBV",
@ -204,6 +279,17 @@ pvs_Bernina = [
"SAROP21-PPRM113:MOTOR_PROBE.RBV" "SAROP21-PPRM113:MOTOR_PROBE.RBV"
] ]
pvs_OPPI113_bernina = [
"SAROP21-OPPI113:MOTOR_X1.RBV", # X1 instead of X
"SAROP21-OPPI113:MOTOR_Y1.RBV", # Y1 instead of X
"SAROP21-OPPI113:TC1", # Pulse picker temperature
]
pvs_PPRM113 = [
"SAROP21-PPRM113:MOTOR_PROBE.RBV",
]
#################### ####################
# First Cristallina horizontal offset mirror OOMH067 # First Cristallina horizontal offset mirror OOMH067
@ -347,8 +433,8 @@ pvs_OATA150 = [
#################### ####################
# Pulse picker OPPI151 # Pulse picker OPPI151
pvs_OPPI151 = [ pvs_OPPI151 = [
# "SAROP31-OPPI151:MOTOR_X.RBV", # Not available "SAROP31-OPPI151:MOTOR_X1.RBV", # X1 instead of X
# "SAROP31-OPPI151:MOTOR_Y.RBV", # Not available "SAROP31-OPPI151:MOTOR_Y1.RBV", # Y1 instead of X
"SAROP31-OPPI151:TC1", # Pulse picker temperature "SAROP31-OPPI151:TC1", # Pulse picker temperature
] ]
@ -528,3 +614,42 @@ pv_channels = (
# + pvs_attocube # + pvs_attocube
# + pvs_smaract_juraj # + pvs_smaract_juraj
pv_channels_front_end = (
pvs_machine
# + pvs_RF
# + pvs_undulator
+ pvs_gas_monitor
+ pvs_OAPU044
+ pvs_PBPS053
+ pvs_OATT053
+ pvs_PPRM053
+ pvs_PSSS059
+ pvs_OOMH067
+ pvs_PSCR068
)
pv_channels_bernina = (
pvs_machine
# + pvs_RF
# + pvs_undulator
+ pvs_gas_monitor
+ pvs_OAPU044
+ pvs_PBPS053
+ pvs_OATT053
+ pvs_PPRM053
+ pvs_PSSS059
+ pvs_OOMH067
+ pvs_PSCR068
+ pvs_photon_energy_bernina
+ pvs_OAPU092_bernina
+ pvs_OOMV092_bernina
+ pvs_PPRM094_bernina
+ pvs_OOMV096_bernina
+ pvs_PSCR097_bernina
+ pvs_ODCM098_bernina
+ pvs_OAPU102_bernina
+ pvs_PSRD103_bernina
+ pvs_PBPS113_bernina
+ pvs_PPRM113
)

View File

@ -133,9 +133,15 @@ from crq_exp.diffractometer import Diffractometer
diffractometer = Diffractometer("diffractometer") diffractometer = Diffractometer("diffractometer")
# Dilution fridge
from crq_exp.dilsc import Dilution from crq_exp.dilsc import Dilution
dilution = Dilution() try:
dilution = Dilution()
except Exception as e:
logger.warning(f"Error: Could not connect to dilution fridge. {e}")
dilution = None
# MX adajustables # MX adajustables
import mx.mx_adjustables import mx.mx_adjustables
@ -145,10 +151,11 @@ import mx.mx_adjustables
# TODO: requires the stand client, need small howto how to start and configure or let it run all the time # TODO: requires the stand client, need small howto how to start and configure or let it run all the time
from slic.core.acquisition.spreadsheet import Spreadsheet from slic.core.acquisition.spreadsheet import Spreadsheet
from stand.time import Time
# setup spreadsheet for transmission to stand
spreadsheet = Spreadsheet( adjs_for_spreadsheet = {
{ #"Time": Time(),
"Transmission": attenuator.trans1st, "Transmission": attenuator.trans1st,
"Upstream Transmission": upstream_attenuator.trans1st, "Upstream Transmission": upstream_attenuator.trans1st,
"Energy_setpoint": undulators, "Energy_setpoint": undulators,
@ -160,12 +167,27 @@ spreadsheet = Spreadsheet(
"TRYBASE": diffractometer.try_base, "TRYBASE": diffractometer.try_base,
"THETA": diffractometer.theta, "THETA": diffractometer.theta,
"TWOTHETA": diffractometer.twotheta, "TWOTHETA": diffractometer.twotheta,
}
if dilution is not None:
adjs_dilsc = {
"Magnet_X": dilution.x, "Magnet_X": dilution.x,
"Magnet_Y": dilution.y, "Magnet_Y": dilution.y,
"Magnet_Z": dilution.z, "Magnet_Z": dilution.z,
"DilSc_T_chip": dilution.T_chip, "DilSc_T_chip": dilution.T_chip,
"DilSc_T_pucksensor": dilution.T_pucksensor, "DilSc_T_pucksensor": dilution.T_pucksensor,
}, }
adjs_for_spreadsheet.update(adjs_dilsc)
# temporary mono
from exp_temp.mono import Mono_rotation
# setup spreadsheet for transmission to stand
spreadsheet = Spreadsheet(
adjs_for_spreadsheet,
placeholders=("comment", "sample", "run_usable"), placeholders=("comment", "sample", "run_usable"),
host="saresc-vcons-02.psi.ch", host="saresc-vcons-02.psi.ch",
port=9090, port=9090,
@ -187,26 +209,47 @@ except Exception as error:
################# DAQ Setup ################# ################# DAQ Setup #################
instrument = "cristallina" instrument = "cristallina"
experiment_type = "MX" # "MX" or "Q" for the different setups and detector configurations
from pgroups import pgroup, pgroup_scratch from pgroups import pgroup, pgroup_scratch
# setup pgroup specific logger # setup pgroup specific logger
setup_logging_pgroup(pgroup) setup_logging_pgroup(pgroup)
daq = SFAcquisition( logger.info(f"Using Cristallina{experiment_type} setup for detectors.")
instrument,
pgroup,
default_channels=bs_channels,
default_pvs=pv_channels,
default_detectors=detectors,
rate_multiplicator=1,
spreadsheet=spreadsheet,
)
if experiment_type == "MX":
daq = SFAcquisition(
instrument,
pgroup,
default_channels=bs_channels,
default_pvs=pv_channels,
default_detectors=detectors_MX,
rate_multiplicator=1,
spreadsheet=spreadsheet,
)
elif experiment_type == "Q":
daq = SFAcquisition(
instrument,
pgroup,
default_channels=bs_channels,
default_pvs=pv_channels,
default_detectors=detectors,
rate_multiplicator=1,
spreadsheet=spreadsheet,
)
else:
logger.error(f"Experiment type {experiment_type} not supported. Exiting.")
sys.exit(1)
daq.update_config_pvs()
# There is a new EPICS buffer, so the archiver is no longer used. This makes sure we are taking PVs from the right place. # There is a new EPICS buffer, so the archiver is no longer used. This makes sure we are taking PVs from the right place.
daq.update_config_pvs() try:
daq.update_config_pvs()
except Exception as e:
print(e)
from acquisition import multiple_daqs from acquisition import multiple_daqs
@ -228,5 +271,5 @@ check_intensity_gas_monitor = PVCondition(
scan = Scanner(default_acquisitions=[daq], condition=check_intensity_gas_monitor) scan = Scanner(default_acquisitions=[daq], condition=check_intensity_gas_monitor)
gui = GUI(scan, show_goto=True, show_spec=True) gui = GUI(scan, show_goto=True, show_spec=True)
logger.info(f"Running at {instrument} with pgroup {pgroup}.") logger.info(f"Running at {instrument} with pgroup {pgroup}. Experiment type: {experiment_type}.")
logger.info("Loading finished.") logger.info("Loading finished.")

6
exp_temp/mono.py Normal file
View File

@ -0,0 +1,6 @@
from slic.devices.general.motor import Motor
Mono_rotation = Motor("SARES30-MOBI2:MOT_RY") # large rotation stage

View File

@ -33,7 +33,11 @@ pgroup_scratch = "p19150" # Scratch
# pgroup = "p21741" # CrQ - DilSc - SAXS LiHoF4 # pgroup = "p21741" # CrQ - DilSc - SAXS LiHoF4
#pgroup = "p21735" # Cr-MX Aller 2024-06-04 # pgroup = "p21735" # Cr-MX Aller 2024-06-04
# pgroup = "p21736" # Cr-MX Weik 2024-06-07 # pgroup = "p21736" # Cr-MX Weik 2024-06-07
pgroup = "p21977" # CrQ - Dilsc - LiErF4 # pgroup = "p21977" # CrQ - Dilsc - LiErF4
# pgroup = "p21981" # CrMX JFJ commissioning and other related detector bullocks
pgroup = "p22198" # CrMX Fromme - 2024-10-25

25
stand/time.py Normal file
View File

@ -0,0 +1,25 @@
from slic.core.adjustable import Adjustable
import datetime
class Time(Adjustable):
""" Adjustable only for spreadsheet, no other functionality
"""
def __init__(self):
super().__init__(self, "")
def get_current_value(self):
return datetime.datetime.now().replace(microsecond=0).isoformat()
def is_moving(self):
return False
def set_target_value(self):
pass
def __repr__(self):
name = "Time"
value = self._printable_value()
return f"{name} : {value}"
def __str__(self):
return self._printable_value()