a rough patchwork

This commit is contained in:
2023-05-16 13:53:11 +02:00
parent 9c59d52d5c
commit f7a117fd6e
11 changed files with 263 additions and 532 deletions

View File

@ -7,7 +7,7 @@
# TODO: JF settings regarding raw conversion, compression, etc.
detectors = [
"JF16T03V01",
# "JF16T03V01",
]
camera_channels = [

View File

@ -1,522 +0,0 @@
# Channels to save at Cristallina endstation
##########################################################################################################
##########################################################################################################
##########################################################################################################
# BS channels
# TODO: JF settings regarding raw conversion, compression, etc.
detectors = [
"JF16T03V01",
]
camera_channels = [
# "SARES30-CAMS156-PCO1:FPICTURE", # PCO edge camera for the wavefront analysis (from Alvra)
# "SARES30-CAMS156-SMX-OAV:FPICTURE", # SwissMX OAV camera picture
# "SARES30-CAMS156-XE:FPICTURE", # X-ray eye
]
####################
# Machine gas intensity monitor
channels_gas_monitor = [
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG",
# "SARFE10-PBPG050:SLOW-X",
# "SARFE10-PBPG050:SLOW-Y",
"SARFE10-PBIG050-EVR0:CALCI", # good for correlations with total beam intensity
"SARFE10-PBPG050:HAMP-INTENSITY-CAL",
]
######################
# PBPS053
channels_PBPS053 = [
"SARFE10-PBPS053:INTENSITY",
"SARFE10-PBPS053:XPOS",
"SARFE10-PBPS053:YPOS",
]
####################
# PSSS059
channels_PSSS059=[
"SARFE10-PSSS059:FPICTURE",
"SARFE10-PSSS059:SPECTRUM_X",
"SARFE10-PSSS059:SPECTRUM_Y",
"SARFE10-PSSS059:SPECTRUM_CENTER",
"SARFE10-PSSS059:SPECTRUM_COM",
"SARFE10-PSSS059:SPECTRUM_FWHM",
"SARFE10-PSSS059:SPECTRUM_STD",
# "SARFE10-PSSS059:FIT_ERR",
"SARFE10-PSSS059:processing_parameters",
# "SARFE10-PSSS059:SPECTRUM_AVG_CENTER",
# "SARFE10-PSSS059:SPECTRUM_AVG_FWHM",
# "SARFE10-PSSS059:SPECTRUM_AVG_Y",
]
###################################
# Beam position monitor PBPS113
channels_PBPS113 = [
"SAROP31-PBPS113:INTENSITY",
"SAROP31-PBPS113:INTENSITY_UJ",
"SAROP31-PBPS113:Lnk9Ch0-PP_VAL_PD0",
"SAROP31-PBPS113:Lnk9Ch0-PP_VAL_PD1",
"SAROP31-PBPS113:Lnk9Ch0-PP_VAL_PD2",
"SAROP31-PBPS113:Lnk9Ch0-PP_VAL_PD3",
# "SAROP31-PBPS113:Lnk9Ch0-PP_VAL_PD4",
"SAROP31-PBPS113:XPOS",
"SAROP31-PBPS113:YPOS",
]
####################
# Profile monitor PPRM113 (from _proc process)
channels_PPRM113 = [
"SAROP31-PPRM113:intensity",
"SAROP31-PPRM113:x_center_of_mass",
"SAROP31-PPRM113:x_fit_amplitude",
"SAROP31-PPRM113:x_fit_mean",
"SAROP31-PPRM113:x_fit_offset",
"SAROP31-PPRM113:x_fit_standard_deviation",
"SAROP31-PPRM113:x_fwhm",
"SAROP31-PPRM113:x_profile",
"SAROP31-PPRM113:x_rms",
"SAROP31-PPRM113:y_center_of_mass",
"SAROP31-PPRM113:y_fit_amplitude",
"SAROP31-PPRM113:y_fit_mean",
"SAROP31-PPRM113:y_fit_offset",
"SAROP31-PPRM113:y_fit_standard_deviation",
"SAROP31-PPRM113:y_fwhm",
"SAROP31-PPRM113:y_profile",
"SAROP31-PPRM113:y_rms",
# "SAROP31-PPRM113:FPICTURE", # full pictures for debugging purposes at the moment, from _ib process
]
###########################
# Beam position monitor PBPS149
channel_PBPS149 = [
"SAROP31-PBPS149:INTENSITY",
"SAROP31-PBPS149:INTENSITY_UJ",
"SAROP31-PBPS149:Lnk9Ch0-PP_VAL_PD0",
"SAROP31-PBPS149:Lnk9Ch0-PP_VAL_PD1",
"SAROP31-PBPS149:Lnk9Ch0-PP_VAL_PD2",
"SAROP31-PBPS149:Lnk9Ch0-PP_VAL_PD3",
# "SAROP31-PBPS149:Lnk9Ch0-PP_VAL_PD4",
"SAROP31-PBPS149:XPOS",
"SAROP31-PBPS149:YPOS",
]
#######################
# Profile monitor PPRM150 (from _proc process)
channels_PPRM150 = [
"SAROP31-PPRM150:intensity",
"SAROP31-PPRM150:x_center_of_mass",
"SAROP31-PPRM150:x_fit_amplitude",
"SAROP31-PPRM150:x_fit_mean",
"SAROP31-PPRM150:x_fit_offset",
"SAROP31-PPRM150:x_fit_standard_deviation",
"SAROP31-PPRM150:x_fwhm",
"SAROP31-PPRM150:x_profile",
"SAROP31-PPRM150:x_rms",
"SAROP31-PPRM150:y_center_of_mass",
"SAROP31-PPRM150:y_fit_amplitude",
"SAROP31-PPRM150:y_fit_mean",
"SAROP31-PPRM150:y_fit_offset",
"SAROP31-PPRM150:y_fit_standard_deviation",
"SAROP31-PPRM150:y_fwhm",
"SAROP31-PPRM150:y_profile",
"SAROP31-PPRM150:y_rms",
# "SAROP31-PPRM150:FPICTURE", # full pictures for debugging purposes at the moment, from _ib process
]
#######################
# Cristallina event reciever
channels_EVR = [
'SAR-CVME-TIFALL6:EvtSet',
]
#######################
# Digitizer
channels_digitizer =[
"SARES30-LTIM01-EVR0:DUMMY_PV1_NBS",
"SARES30-LTIM01-EVR0:DUMMY_PV2_NBS",
"SARES30-LTIM01-EVR0:DUMMY_PV3_NBS",
"SARES30-LTIM01-EVR0:DUMMY_PV4_NBS",
"SARES30-LSCP1-FNS:CH0:VAL_GET", # Signal-Background
"SARES30-LSCP1-CRISTA1:CH0:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH2:1", # Waveform trigger
"SARES30-LTIM01-EVR0:CALCI", # Calculated intensity
]
#######################
# Other BS channels that we sometimes use
channels_other = [
]
bs_channels = (
camera_channels
+ channels_gas_monitor
+ channels_PBPS053
+ channels_PBPS053
+ channels_PSSS059
+ channels_PBPS113
+ channels_PPRM113
+ channel_PBPS149
+ channels_PPRM150
+ channels_EVR
# + channels_digitizer
# + channels_other
)
##########################################################################################################
##########################################################################################################
##########################################################################################################
# Epics PVS
# Compression, charge settings
#######################
# Machine
pvs_machine = [
"SARCL02-MBND100:P-READ", # Predicted bunch energy
"SARUN:FELPHOTENE.VAL", # Predicted photon energy from machine settings
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG.VAL" # Average pulse energy from the gas detector
]
#######################
# Undulator gap
pvs_undulator =[
"SARUN03-UIND030:K_SET.VAL",
"SARUN04-UIND030:K_SET.VAL",
"SARUN05-UIND030:K_SET.VAL",
"SARUN06-UIND030:K_SET.VAL",
"SARUN07-UIND030:K_SET.VAL",
"SARUN08-UIND030:K_SET.VAL",
"SARUN09-UIND030:K_SET.VAL",
"SARUN10-UIND030:K_SET.VAL",
"SARUN11-UIND030:K_SET.VAL",
"SARUN12-UIND030:K_SET.VAL",
"SARUN13-UIND030:K_SET.VAL",
"SARUN14-UIND030:K_SET.VAL",
"SARUN15-UIND030:K_SET.VAL",
]
####################
# Machine gas intensity monitor
pvs_gas_monitor = [
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-US",
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-DS",
]
#####################
# Slits OAPU044
pvs_OAPU044=[
"SARFE10-OAPU044:MOTOR_X",
"SARFE10-OAPU044:MOTOR_Y",
"SARFE10-OAPU044:MOTOR_W",
"SARFE10-OAPU044:MOTOR_H",
]
###################
# Beam position monitor PBPS053
pvs_PBPS053 = [
"SARFE10-PBPS053:MOTOR_X1",
"SARFE10-PBPS053:MOTOR_X2",
"SARFE10-PBPS053:MOTOR_PROBE",
]
####################
# Upstream attenuator OATT053
pvs_OATT053=[
"SARFE10-OATT053:MOTOR_1",
"SARFE10-OATT053:MOTOR_1.RBV",
"SARFE10-OATT053:MOTOR_2",
"SARFE10-OATT053:MOTOR_2.RBV",
"SARFE10-OATT053:MOTOR_3",
"SARFE10-OATT053:MOTOR_3.RBV",
"SARFE10-OATT053:MOTOR_4",
"SARFE10-OATT053:MOTOR_4.RBV",
"SARFE10-OATT053:MOTOR_5",
"SARFE10-OATT053:MOTOR_5.RBV",
"SARFE10-OATT053:MOTOR_6",
"SARFE10-OATT053:MOTOR_6.RBV",
"SARFE10-OATT053:ENERGY",
"SARFE10-OATT053:TRANS_SP",
"SARFE10-OATT053:TRANS_RB",
]
###################
# Beam profile monitor PPRM053
pvs_PPRM053 = [
"SARFE10-PPRM053:MOTOR_PROBE.RBV",
]
####################
# Single shot spectrometer PSS059
pvs_PSSS059 = [
# "SARFE10-PSSS059:FPICTURE", # full pictures only when really needed
"SARFE10-PSSS059:SPECTRUM_X",
"SARFE10-PSSS059:SPECTRUM_Y",
"SARFE10-PSSS059:SPECTRUM_CENTER",
"SARFE10-PSSS059:SPECTRUM_COM",
"SARFE10-PSSS059:SPECTRUM_FWHM",
"SARFE10-PSSS059:SPECTRUM_STD",
"SARFE10-PSSS059:FIT_ERR",
"SARFE10-PSSS059:processing_parameters",
"SARFE10-PSSS059:SPECTRUM_AVG_CENTER,"
"SARFE10-PSSS059:SPECTRUM_AVG_FWHM",
"SARFE10-PSSS059:SPECTRUM_AVG_Y",
]
####################
# First Cristallina horizontal offset mirror OOMH067
pvs_OOMH067 = [
"SAROP31-OOMH067:W_X.RBV",
"SAROP31-OOMH067:W_Y.RBV",
"SAROP31-OOMH067:W_RX.RBV",
"SAROP31-OOMH067:W_RY.RBV",
"SAROP31-OOMH067:W_RZ.RBV",
"SAROP31-OOMH067:BU.RBV",
"SAROP31-OOMH067:BD.RBV",
"SAROP31-OOMH067:VS1.RBV",
"SAROP31-OOMH067:VS2.RBV",
"SAROP31-OOMH067:VS3.RBV",
"SAROP31-OOMH067:TX.RBV",
"SAROP31-OOMH067:RY.RBV",
]
####################
# Beam screen between the first two horizontal mirrors PSCR068
pvs_PSCR068 = [
"SAROP31-PSCR068:MOTOR_PROBE.RBV",
]
####################
# Second Cristallina horizontal offset mirror OOMH084
pvs_OOMH084 = [
"SAROP31-OOMH084:W_X.RBV",
"SAROP31-OOMH084:W_Y.RBV",
"SAROP31-OOMH084:W_RX.RBV",
"SAROP31-OOMH084:W_RY.RBV",
"SAROP31-OOMH084:W_RZ.RBV",
"SAROP31-OOMH084:BU.RBV",
"SAROP31-OOMH084:BD.RBV",
"SAROP31-OOMH084:VS1.RBV",
"SAROP31-OOMH084:VS2.RBV",
"SAROP31-OOMH084:VS3.RBV",
"SAROP31-OOMH084:TX.RBV",
"SAROP31-OOMH084:RY.RBV",
]
###################
# Beam profile monitor PPRM085
pvs_PPRM085 = [
"SAROP31-PPRM085:MOTOR_PROBE.RBV",
]
###################
# Slits OAPU107
pvs_OAPU107 = [
"SAROP31-OAPU107:MOTOR_X.VAL",
"SAROP31-OAPU107:MOTOR_X.RBV",
"SAROP31-OAPU107:MOTOR_Y.VAL",
"SAROP31-OAPU107:MOTOR_Y.RBV",
]
###################
## Beam position and intensity monitor PBPS113
pvs_PBPS113 = [
"SAROP31-PBPS113:MOTOR_X1.RBV",
"SAROP31-PBPS113:MOTOR_Y1.RBV",
"SAROP31-PBPS113:MOTOR_PROBE.RBV",
]
###################
# Beam profile monitor PPRM113
pvs_PPRM113 = [
"SAROP31-PPRM113:MOTOR_PROBE.RBV",
]
####################
# Alignment laser mirror OLAS147
pvs_OLAS147 = [
"SAROP31-OLAS147:MOTOR_1.RBV",
]
###################
# Slits OAPU149
pvs_OAPU149 = [
"SAROP31-OAPU149:MOTOR_X.VAL",
"SAROP31-OAPU149:MOTOR_X.RBV",
"SAROP31-OAPU149:MOTOR_Y.VAL",
"SAROP31-OAPU149:MOTOR_Y.RBV",
]
###################
# Beam position and intensity monitor PBPS149
pvs_PBPS149 = [
"SAROP31-PBPS149:MOTOR_X1.RBV",
"SAROP31-PBPS149:MOTOR_Y1.RBV",
"SAROP31-PBPS149:MOTOR_PROBE.RBV",
]
###################
# Beam profile monitor PPRM150
pvs_PPRM150 = [
"SAROP31-PPRM150:MOTOR_PROBE.RBV",
]
####################
# Attenuators OATA150
pvs_OATA150 = [
"SAROP31-OATA150:MOTOR_1.RBV",
"SAROP31-OATA150:MOTOR_2.RBV",
"SAROP31-OATA150:MOTOR_3.RBV",
"SAROP31-OATA150:MOTOR_4.RBV",
"SAROP31-OATA150:MOTOR_5.RBV",
"SAROP31-OATA150:MOTOR_6.RBV",
"SAROP31-OATA150:TRANS_SP",
"SAROP31-OATA150:TRANS_RB",
]
####################
# Pulse picker OPPI151
pvs_OPPI151 = [
"SAROP31-OPPI151:MOTOR_X.RBV",
"SAROP31-OPPI151:MOTOR_Y.RBV",
]
####################
## Horizontal offset mirror ODMV152
pvs_ODMV152 = [
"SAROP31-ODMV152:W_X.RBV",
"SAROP31-ODMV152:W_Y.RBV",
"SAROP31-ODMV152:W_RX.RBV",
"SAROP31-ODMV152:W_RZ.RBV",
"SAROP31-ODMV152:BU.RBV",
"SAROP31-ODMV152:BD.RBV",
"SAROP31-ODMV152:VS1.RBV",
"SAROP31-ODMV152:VS2.RBV",
"SAROP31-ODMV152:VS3.RBV",
"SAROP31-ODMV152:TX.RBV",
]
#######################
# from _proc process
pvs_PPRM150 = [
"SAROP31-PPRM150:intensity",
"SAROP31-PPRM150:x_center_of_mass",
"SAROP31-PPRM150:x_fit_amplitude",
"SAROP31-PPRM150:x_fit_mean",
"SAROP31-PPRM150:x_fit_offset",
"SAROP31-PPRM150:x_fit_standard_deviation",
"SAROP31-PPRM150:x_fwhm",
"SAROP31-PPRM150:x_profile",
"SAROP31-PPRM150:x_rms",
"SAROP31-PPRM150:y_center_of_mass",
"SAROP31-PPRM150:y_fit_amplitude",
"SAROP31-PPRM150:y_fit_mean",
"SAROP31-PPRM150:y_fit_offset",
"SAROP31-PPRM150:y_fit_standard_deviation",
"SAROP31-PPRM150:y_fwhm",
"SAROP31-PPRM150:y_profile",
"SAROP31-PPRM150:y_rms",
# "SAROP31-PPRM150:FPICTURE", # full pictures for debugging purposes at the moment, from _ib process
]
###########################
# Vertical KB mirror OKBV153
pvs_OKBV153 = [
"SAROP31-OKBV153:W_X.RBV",
"SAROP31-OKBV153:W_Y.RBV",
"SAROP31-OKBV153:W_RX.RBV",
"SAROP31-OKBV153:W_RY.RBV",
"SAROP31-OKBV153:W_RZ.RBV",
"SAROP31-OKBV153:BU.RBV",
"SAROP31-OKBV153:BD.RBV",
"SAROP31-OKBV153:TY1.RBV",
"SAROP31-OKBV153:TY2.RBV",
"SAROP31-OKBV153:TY3.RBV",
"SAROP31-OKBV153:TX1.RBV",
"SAROP31-OKBV153:TX2.RBV",
]
####################
# Screen between the KB's PSCD153
# Not implemented yet
pvs_PSCD153 = [
# "SAROP31-PSCD153"
]
###########################
# Horizontal KB mirror OKBH154
pvs_OKBH154 = [
"SAROP31-OKBH154:W_X.RBV",
"SAROP31-OKBH154:W_Y.RBV",
"SAROP31-OKBH154:W_RX.RBV",
"SAROP31-OKBH154:W_RY.RBV",
"SAROP31-OKBH154:W_RZ.RBV",
"SAROP31-OKBH154:BU.RBV",
"SAROP31-OKBH154:BD.RBV",
"SAROP31-OKBH154:TY1.RBV",
"SAROP31-OKBH154:TY2.RBV",
"SAROP31-OKBH154:TY3.RBV",
"SAROP31-OKBH154:TX2.RBV",
]
####################
# Standa motors (mainly used with the X-ray eye)
pvs_standa = [
"SARES30MOBI1:MOT_1",
"SARES30MOBI1:MOT_2",
"SARES30MOBI1:MOT_3",
]
####################
# Attocube motors
pvs_attocube=[
"SARES30-ATTOCUBE:A0-POS",
"SARES30-ATTOCUBE:A1-POS",
]
###############################
# Smaract stages from Juraj
pvs_smaract = [
"SARES30-XSMA156:X:MOTRBV",
"SARES30-XSMA156:Y:MOTRBV",
"SARES30-XSMA156:Z:MOTRBV",
"SARES30-XSMA156:Ry:MOTRBV",
"SARES30-XSMA156:Rx:MOTRBV",
"SARES30-XSMA156:Rz:MOTRBV",
]
pvs = (
pvs_machine
+ pvs_undulator
+ pvs_gas_monitor
+ pvs_OAPU044
+ pvs_PBPS053
+ pvs_OATT053
+ pvs_PPRM053
+ pvs_PSSS059
+ pvs_OOMH067
+ pvs_PSCR068
+ pvs_OOMH084
+ pvs_PPRM085
+ pvs_OAPU107
+ pvs_PBPS113
+ pvs_PPRM113
+ pvs_OLAS147
+ pvs_OAPU149
+ pvs_PBPS149
+ pvs_PPRM150
+ pvs_OATA150
+ pvs_OPPI151
+ pvs_ODMV152
+ pvs_PPRM150
+ pvs_OKBV153
+ pvs_PSCD153
+ pvs_OKBH154
+ pvs_standa
# + pvs_attocube
# + pvs_smaract
)

42
client.py Normal file
View File

@ -0,0 +1,42 @@
import requests
import json
class Client:
def __init__(self, host="saresc-vcons-02", port=9090):
self.host = host
self.port = port
self.session = requests.Session()
def add_row(self, **kwargs):
addr = self._make_addr()
resp = self.session.patch(addr, json=kwargs)
return ResponseWrapper(resp)
def get(self):
addr = self._make_addr()
resp = self.session.get(addr)
return ResponseWrapper(resp)
def clear(self):
addr = self._make_addr()
resp = self.session.delete(addr)
return ResponseWrapper(resp)
def _make_addr(self):
return f"http://{self.host}:{self.port}/"
class ResponseWrapper:
def __init__(self, resp):
resp.raise_for_status()
self.resp = resp
def __repr__(self):
return self.resp.text

View File

@ -133,7 +133,8 @@ instrument = "cristallina"
# pgroup = "p20519" # beamline commissioning 2
# pgroup = "p20840" # Cr beamline commisioning (Jan-Feb 2023)
# pgroup = "p20841" # CrQ PMS commisioning 2 (Jan 2023)
pgroup = "p20993" # CrQ commissoing DilSc2 (March 2023)
# pgroup = "p20993" # CrQ commissoing DilSc2 (March 2023)
pgroup = "p21147" # SAXS
# pgroup = "p19150" # Scratch
# pgroup = "p19152" # Scratch
@ -164,10 +165,12 @@ logger.info("Loading finished.")
def simple_acquisition(filename):
task = daq.acquire(filename)
fname = task.filenames[0]
pattern = r"run([0-9]{4})"
match = re.search(pattern, fname)
run_number = int(match.groups()[0])
#fname = task.filenames[0]
#pattern = r"run([0-9]{4})"
#match = re.search(pattern, fname)
#run_number = int(match.groups()[0])
stand_client.add_row(run_number=run_number)
#stand_client.add_row(run_number=run_number)
stand_client.add_row(run_number=-4,step=0, smaract_x=smaract_mini_XYZ.x.get_current_value(),smaract_y=smaract_mini_XYZ.y.get_current_value(),smaract_z=smaract_mini_XYZ.z.get_current_value()

Binary file not shown.

View File

@ -0,0 +1,18 @@
import sys
sys.path.append('/sf/cristallina/applications/frappy')
from frappy.client import SecopClient
from frappy.core import BUSY, IDLE, ERROR, Parameter, Command, Done
# Connect to the dilsc
client = SecopClient('dilsc:5000')
client.connect()
def list_identifiers(client=client):
return client.identifier
# Set lower ramp rate in z-axis
client.setParameter('mfz','ramp',0.025)
def change_temperature(value,temp='T_pucksensor',client=client):

View File

@ -0,0 +1,190 @@
from datetime import datetime
from time import sleep, time
from tracemalloc import start
import numpy as np
from collections import defaultdict
#from epics import PV
#from slic.utils import nice_arange
#from slic.devices.general.motor import Motor
import matplotlib.pyplot as plt
import epics
from cristallina import Newport_large, attocube, attenuator
from smaract_device_def import smaract_mini_XYZ
from slic.devices.xoptics.aramis_attenuator import Attenuator
from tqdm import tqdm
from standa import standa
from slic.devices.timing.events import CTASequencer
cta = CTASequencer("SAR-CCTA-ESC")
# setup logging
import logging
logger = logging.getLogger("slic.hole_drilling")
logger.setLevel(logging.INFO)
#formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s %(message)s',
# datefmt='%Y-%m-%d %H:%M:%S')
# create file handler which logs
try:
fh = logging.FileHandler('/sf/cristallina/applications/slic/cristallina/log/hole_drilling.log')
fh.setLevel(logging.DEBUG)
#fh.setFormatter(formatter)
logger.addHandler(fh)
except PermissionError as e:
logger.warning("Cannot write log file.")
logger.warning(e)
attenuator = Attenuator("SAROP31-OATA150", description="Cristallina attenuator OATA150")
from slic.devices.xoptics.kb import KBHor,KBVer
kbHor = KBHor(
"SAROP31-OKBH154",
description="Cristallina horizontal KB mirror"
)
kbVer = KBVer(
"SAROP31-OKBV153",
description="Cristallina vertical KB mirror"
)
do_not_move_benders = True
testing_flag = False
pos = np.array([0,0])
# parameters
n_same_holes = 3
attenuations = np.linspace(0.15,0.35,9)#np.linspace(0.1,0.35,11)#np.linspace(0.1,0.35,6)#np.logspace(-3,0,num=7)
KBv_home = [1.3 , 1.6]
KBh_home = [1.4 , 1.7]
# Spacings
between_same_shots = 150
between_attenuations = 150
between_KB_settings = 500#500
### 23.02
def kb_settings_list(best,step,no_steps):
for i in range(no_steps):
if i == 0:
l=[]
l.append([best[0]+i*step,best[1]])
for i in range(no_steps):
if i == 0:
pass
l.append([best[0],best[1]+i*step])
return l
KBvs = kb_settings_list([1.595,1.874],0.05,3)
KBhs = kb_settings_list([1.799000,2.100000],0.05,3)
### 24.02
def kb_settings_list_new(best,step,no_steps_one_way):
l=[]
first = np.array(best) - np.array([step*no_steps_one_way,step*no_steps_one_way])
for i in range(no_steps_one_way*2+1):
l.append([first[0]+i*step,first[1]+i*step])
return l
KBvs = kb_settings_list_new([1.595,1.874],0.0075,3)
KBhs = kb_settings_list_new([1.799000,2.100000],0.0075,3)
# Time estimates for total time calculation (time in seconds)
t_kb_change = 30
t_shot = 4
t_atten_change = 10
# Choose motor stage (set true for smaract_stage_xyz, false if attocubes)
smaract_stage = True
# Change to mm from um if smaract stage selected
if smaract_stage:
between_same_shots = between_same_shots/1000
between_attenuations = between_attenuations/1000
between_KB_settings = between_KB_settings/1000
def shoot(n_shots=1):
epics.caput("SAR-CCTA-ESC:seq0Ctrl-Cycles-I", n_shots)
sleep(0.1)
epics.caput("SAR-CCTA-ESC:seq0Ctrl-Start-I", 1)
def move_x_rel(distance):
standa.x.mvr(distance)
def move_y_rel(distance):
standa.z.mvr(distance)
def move_absolute(x, y):
standa.x.mv(x).wait()
standa.z.mv(y).wait()
def make_holes(quantity,spacing=0.25,wait=1):
start_x = standa.x.get()
start_y = standa.z.get()
print(f'Starting postion:\n {standa}')
for i in range(quantity):
print(f'Shot {i}')
shoot()
sleep(wait)
move_x_rel(spacing)
print('Done')
print('Returning to the start')
standa.x.mv(start_x)
standa.z.mv(start_y)
def drill_holes_grid(x_start, x_stop, n_cols, y_start, y_stop, n_rows, wait_time=0.5):
# make grid
x_pos = np.linspace(x_start, x_stop, n_cols)
x_spacing = (x_stop-x_start)/(n_cols-1)
y_pos = np.linspace(y_start, y_stop, n_rows)
y_spacing = (y_stop-y_start)/(n_rows-1)
# TODO: add settings we want to change per row
row_settings = defaultdict(lambda: {'n_pulses' : 100})
row_settings[0] = {'n_pulses' : 500}
row_settings[1] = {'n_pulses' : 100}
row_settings[2] = {'n_pulses' : 10}
row_settings[3] = {'n_pulses' : 1}
x_start = standa.x.get()
y_start = standa.z.get()
logger.info(f"Begin hole pattern at x:{x_start:.5f}, y:{y_start:.5f}, with transmission: {attenuator.get_transmission():.5f}.")
for row, y in enumerate(y_pos):
settings = row_settings[row]
n_pulses = settings['n_pulses']
for x in x_pos:
move_absolute(x, y)
sleep(wait_time)
shoot(n_pulses)
sleep(0.2)
while cta.cta_client.is_running():
# wait until sequence is done
print('waiting for CTA ...')
sleep(0.1)
logger.info(f"At {time():.5f}s, drilled {n_pulses} hole(s) at x:{x:.5f}, y:{y:.5f}, with transmission: {attenuator.get_transmission():.5f}.")
move_absolute(x_start, y_start)
def drill_here():
x_start = standa.x.get()
x_stop = x_start + 2
n_cols = 11
y_start = standa.z.get()
y_stop = y_start + 1
n_rows = 4
drill_holes_grid(x_start, x_stop, n_cols, y_start, y_stop, n_rows, wait_time=0.5)

View File

@ -366,9 +366,9 @@ pvs_OKBH154 = [
####################
# Standa motors (mainly used with the X-ray eye)
pvs_standa = [
"SARES30MOBI1:MOT_1",
"SARES30MOBI1:MOT_2",
"SARES30MOBI1:MOT_3",
"SARES30-MOBI1:MOT_1.RBV",
"SARES30-MOBI1:MOT_2.RBV",
"SARES30-MOBI1:MOT_3.RBV",
]
###############################