Merge branch 'CLEANUP' into 'master'

Cleanup of structure and fixes

See merge request slic/cristallina!2
This commit is contained in:
2025-03-29 18:05:09 +01:00
78 changed files with 4180 additions and 44639 deletions

0
.gitignore vendored Normal file → Executable file
View File

0
README.md Normal file → Executable file
View File

View File

@ -1,890 +0,0 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "e03fa003-fac5-44f7-b42f-2b718f6b966a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b]0;⊚slic\u0007"
]
}
],
"source": [
"from slic.core.adjustable import Adjustable, PVAdjustable, DummyAdjustable\n",
"from slic.core.scanner import Scanner\n",
"\n",
"from slic.core.acquisition import BSAcquisition, PVAcquisition, SFAcquisition\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "cbd7faac-ff24-4e99-bb00-3536d868663f",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-10-03 at 11:58:38 | INFO | Loading started.\n",
"**** The executable \"caRepeater\" couldn't be located\n",
"**** because of errno = \"No such file or directory\".\n",
"**** You may need to modify your PATH environment variable.\n",
"**** Unable to start \"CA Repeater\" process.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b]0;⊚slic\u0007"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-10-03 at 11:58:41 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fa618d15640>: Failed to establish a new connection: [Errno 111] Connection refused')).\n",
"2023-10-03 at 11:58:41 | WARNING | No transmission value reported from {attenuator.ID}\n",
"2023-10-03 at 11:58:42 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.\n",
"2023-10-03 at 11:58:42 | INFO | Running at cristallina with pgroup p19150.\n",
"2023-10-03 at 11:58:42 | INFO | Loading finished.\n",
"CA client library is unable to contact CA repeater after 50 tries.\n",
"Silence this message by starting a CA repeater daemon\n",
"or by calling ca_pend_event() and or ca_poll() more often.\n"
]
}
],
"source": [
"# %run /sf/cristallina/applications/slic/cristallina/cristallina.py"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "1dae028f-116d-42ea-aead-298be9f01de3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dummy at: 0\n"
]
}
],
"source": [
"# setup dummy axis\n",
"dummy = DummyAdjustable()\n",
"print(f\"dummy at: {dummy.get_current_value()}\")\n",
"\n",
"# setup scanner\n",
"scanner = Scanner(data_base_dir=\"/tmp/scan_data\", scan_info_dir=\"/tmp/scan_info\")"
]
},
{
"cell_type": "markdown",
"id": "207bcb99-d34f-47c5-a417-4de42dfc253e",
"metadata": {},
"source": [
"# BS acquisition"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7396532a-dd7b-4acf-8aa9-c12662405d00",
"metadata": {},
"outputs": [],
"source": [
"bs_example_channels = ['SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', \"SARFE10-PBIG050-EVR0:CALCI\", \"SARES30-CAMS156-XE:x_fit_amplitude\",] # \"SARES30-CAMS156-XE:FPICTURE\"]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "099cd6df-26d6-43e7-bf80-87eabc0a42b5",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Directory \"/tmp/scan_info\" does not exist, creating it...\n",
"Directory \"/tmp/scan_data/scan0000_test_bs\" does not exist, creating it...\n",
"\u001b[32mScan step 1 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 0.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n",
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0000.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 2 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 1.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0001.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 3 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 2.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0002.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 4 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 3.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0003.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 5 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 4.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0004.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 6 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 5.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0005.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 7 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 6.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0006.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 8 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 7.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0007.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 9 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 8.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0008.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 10 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 9.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0009.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 11 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 10.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n",
"[WARNING] bsread.data.helpers - 'type' channel field not found. Parse as 64-bit floating-point number float64 (default).\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data Header: {'htype': 'bsr_d-1.1', 'channels': [{'name': 'SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', 'encoding': '>'}, {'name': 'SARFE10-PBIG050-EVR0:CALCI', 'encoding': '>'}]}\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0000_test_bs/scan0000_test_bs_step0010.h5\n",
"Acquisition done\n",
"\u001b[32mAll scan steps done\n",
"\u001b[39m"
]
},
{
"data": {
"text/plain": [
"perform the following scan:\n",
"===========================\n",
"\n",
"A: DummyAdjustable \"Dummy\" at 10.0\n",
"\n",
" # A\n",
"-- ----\n",
" 0 0.0\n",
" 1 1.0\n",
" 2 2.0\n",
" 3 3.0\n",
" 4 4.0\n",
" 5 5.0\n",
" 6 6.0\n",
" 7 7.0\n",
" 8 8.0\n",
" 9 9.0\n",
"10 10.0\n",
"\n",
"record 10 pulses per step to \"scan0000_test_bs\" via:\n",
"----------------------------------------------------\n",
"- BSAcquisition: example_instrument/example_pgroup"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# setup acquisition \n",
"acq = BSAcquisition('example_instrument', 'example_pgroup', default_channels=bs_example_channels, default_data_base_dir='/tmp')\n",
"\n",
"scanner.scan1D(dummy, 0, 10, step_size=1, n_pulses=10, filename='test_bs', acquisitions=[acq], step_info=None, return_to_initial_values=False)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "8df87c3c-5870-4dc5-9990-3d57187b8f40",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from slic.core.scanner.scanbackend import is_only_sfdaq, is_sfdaq\n",
"is_sfdaq([acq])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "34bc4109-0de2-4a4f-9bb3-0f8ea03973d9",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "13bc2a3c-e3c1-4b14-8cec-d0d4f334987a",
"metadata": {},
"source": [
"is_sfdaq([acq])"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "5a455e3a-ae7a-4d3c-9e14-b42c24de8f36",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit unresponsive\"\n",
" Context: \"SARES30-CPPM-MOBI2.psi.ch:5064\"\n",
" Source File: ../tcpiiu.cpp line 926\n",
" Current Time: Tue Oct 03 2023 17:51:00.456204338\n",
"..................................................................\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit unresponsive\"\n",
" Context: \"SARES30-CPPM-MOBI1.psi.ch:5064\"\n",
" Source File: ../tcpiiu.cpp line 926\n",
" Current Time: Tue Oct 03 2023 17:54:13.473023696\n",
"..................................................................\n",
"Unexpected problem with CA circuit to server \"SARES30-CPPM-MOBI1.psi.ch:5064\" was \"Connection reset by peer\" - disconnecting\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit disconnect\"\n",
" Context: \"SARES30-CPPM-MOBI1.psi.ch:5064\"\n",
" Source File: ../cac.cpp line 1237\n",
" Current Time: Tue Oct 03 2023 17:54:42.135508142\n",
"..................................................................\n",
"Unexpected problem with CA circuit to server \"SARES30-CPPM-MOBI2.psi.ch:5064\" was \"No route to host\" - disconnecting\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit disconnect\"\n",
" Context: \"SARES30-CPPM-MOBI2.psi.ch:5064\"\n",
" Source File: ../cac.cpp line 1237\n",
" Current Time: Tue Oct 03 2023 18:06:26.581725132\n",
"..................................................................\n"
]
}
],
"source": [
"is_sfdaq([acq])"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "e2c866cd-4051-4a1c-b4c8-a4372e14a180",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Directory \"/tmp/scan_data/scan0008_test_pv\" does not exist, creating it...\n",
"\u001b[32mScan step 1 of 11\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 0.0\n",
"Moved adjustables, starting acquisition\n",
"No channels specified, using default channel list.\n",
"Stopping because of: TaskError: Exception in Task\n",
"caused by ConnectionError: connection to the following PVs timed out (1 sec): SARES30-MOBI1:MOT_1.RBV, SARES30-MOBI1:MOT_2.RBV, SARES30-MOBI1:MOT_3.RBV, SARES30-MOBI1:MOT_5.RBV, SARFE10-PBPS053:MOTOR_X2, SAROP31-OPPI151:MOTOR_X.RBV, SAROP31-OPPI151:MOTOR_Y.RBV\n",
"Stopping caused: TaskError: Exception in Task\n",
"caused by ConnectionError: connection to the following PVs timed out (1 sec): SARES30-MOBI1:MOT_1.RBV, SARES30-MOBI1:MOT_2.RBV, SARES30-MOBI1:MOT_3.RBV, SARES30-MOBI1:MOT_5.RBV, SARFE10-PBPS053:MOTOR_X2, SAROP31-OPPI151:MOTOR_X.RBV, SAROP31-OPPI151:MOTOR_Y.RBV\n",
"Stopped current DAQ tasks:\n",
"\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /tmp/scan_data/scan0008_test_pv/scan0008_test_pv_step0000.h5\n",
"\n"
]
},
{
"data": {
"text/plain": [
"perform the following scan:\n",
"===========================\n",
"\n",
"A: DummyAdjustable \"Dummy\" at 0.0\n",
"\n",
" # A\n",
"-- ----\n",
" 0 0.0\n",
" 1 1.0\n",
" 2 2.0\n",
" 3 3.0\n",
" 4 4.0\n",
" 5 5.0\n",
" 6 6.0\n",
" 7 7.0\n",
" 8 8.0\n",
" 9 9.0\n",
"10 10.0\n",
"\n",
"record 10 pulses per step to \"scan0008_test_pv\" via:\n",
"----------------------------------------------------\n",
"- PVAcquisition: cristallina/p19150"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scanner.scan1D(dummy, 0, 10, step_size=1, n_pulses=10, filename='test_pv', acquisitions=[acq], step_info=None, return_to_initial_values=False)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e35014f0-3e5d-49fb-bf7b-e8ffad4c92f2",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d5816898-f66e-4504-90cb-8d0e54ba3c23",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'pvs' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m acq \u001b[38;5;241m=\u001b[39m PVAcquisition(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mexample_instrument\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mexample_pgroup\u001b[39m\u001b[38;5;124m'\u001b[39m, default_channels\u001b[38;5;241m=\u001b[39m\u001b[43mpvs\u001b[49m, default_data_base_dir\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/tmp\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
"\u001b[0;31mNameError\u001b[0m: name 'pvs' is not defined"
]
}
],
"source": [
"acq = PVAcquisition('example_instrument', 'example_pgroup', default_channels=pvs, default_data_base_dir='/tmp')"
]
},
{
"cell_type": "markdown",
"id": "e16c139f-3422-41fc-8557-5cbe39115535",
"metadata": {},
"source": [
"# SFAcquisition example\n",
"\n",
"This requires an existing `pgroup`. The `default_data_base_dir` cannot be used to specify arbitrary directories as a target, instead the data is located in `/sf/<instrument>/data/<pgroup>/raw/run<XXXX>/data/acq<YYYY>.*.h5`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3e374115-4807-47cf-8a3e-034462011493",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 9,
"id": "3d465878-2118-4dea-a24a-219ff4252d88",
"metadata": {},
"outputs": [],
"source": [
"# TODO: requires the stand client, need small howto how to start and configure or let it run all the time\n",
"from slic.core.acquisition.spreadsheet import Spreadsheet\n",
"\n",
"import os\n",
"os.chdir(\"/sf/cristallina/applications/slic/cristallina\")\n",
"# %run /sf/cristallina/applications/slic/cristallina/cristallina.py\n",
"from devices.diffractometer import diffractometer\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "c4f812f4-b6fa-463f-a367-121e139b972b",
"metadata": {},
"outputs": [],
"source": [
"spreadsheet = Spreadsheet({\"TD\": diffractometer.td},\n",
" placeholders=('comment', 'sample'),\n",
" host='saresc-vcons-02.psi.ch',\n",
" port=9090,)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "2c6852f5-9aa5-4d4b-8c1c-7558720f3e2e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Motor \"SARES30-CPCL-ECMC02:TD\" at 115.00409000000013 mm"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diffractometer.td"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "026350d2-a6bf-4b02-abcc-f560b22bbdfb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" a b c\n",
"0 2 3 4"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spreadsheet.client.add_row(a=2, b=3, c=4)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "2dddb44b-689f-4cdb-858f-103610bef3c6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Advanced run number to 192 for SF DAQ on http://sf-daq:10002 (status: idle, last run: 192).\n",
" a b c run filename n_pulses comment sample scanned_adjs v_min v_max n_steps TD\n",
"0 2.0 3.0 4.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN\n",
"1 NaN NaN NaN 192.0 test_bs 10.0 Dummy 0.0 2.0 3.0 115.004265\n",
"\u001b[32mScan step 1 of 3\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 0.0\n",
"Moved adjustables, starting acquisition\n",
"Continuing run number 192.\n",
"No detectors specified, using default detector list.\n",
"No PVs specified, using default PV list.\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 49.7 Hz]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"run number: 192\n",
"acq number: 1\n",
"total acq number: 687\n",
"\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /sf/cristallina/data/p19150/raw/run0192/data/acq0001.BSDATA.h5\n",
"- /sf/cristallina/data/p19150/raw/run0192/data/acq0001.CAMERAS.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 2 of 3\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 1.0\n",
"Moved adjustables, starting acquisition\n",
"Continuing run number 192.\n",
"No detectors specified, using default detector list.\n",
"No PVs specified, using default PV list.\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 49.7 Hz]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"run number: 192\n",
"acq number: 2\n",
"total acq number: 688\n",
"\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /sf/cristallina/data/p19150/raw/run0192/data/acq0002.BSDATA.h5\n",
"- /sf/cristallina/data/p19150/raw/run0192/data/acq0002.CAMERAS.h5\n",
"Acquisition done\n",
"\u001b[32mScan step 3 of 3\n",
"\u001b[39mDummyAdjustable \"Dummy\" at 2.0\n",
"Moved adjustables, starting acquisition\n",
"Continuing run number 192.\n",
"No detectors specified, using default detector list.\n",
"No PVs specified, using default PV list.\n",
"No channels specified, using default channel list.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 49.7 Hz]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"run number: 192\n",
"acq number: 3\n",
"total acq number: 689\n",
"\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- /sf/cristallina/data/p19150/raw/run0192/data/acq0003.BSDATA.h5\n",
"- /sf/cristallina/data/p19150/raw/run0192/data/acq0003.CAMERAS.h5\n",
"Acquisition done\n",
"\u001b[32mAll scan steps done\n",
"\u001b[39m"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/plain": [
"perform the following scan:\n",
"===========================\n",
"\n",
"A: DummyAdjustable \"Dummy\" at 2.0\n",
"\n",
"# A\n",
"- ---\n",
"0 0.0\n",
"1 1.0\n",
"2 2.0\n",
"\n",
"record 10 pulses per step to \"test_bs\" via:\n",
"-------------------------------------------\n",
"- SF DAQ on http://sf-daq:10002 (status: idle, last run: 192)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# setup acquisition \n",
"\n",
"bs_example_channels = ['SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG', \"SARFE10-PBIG050-EVR0:CALCI\", \"SARES30-CAMS156-XE:x_fit_amplitude\", \"SARES30-CAMS156-XE:FPICTURE\"]\n",
"\n",
"# this requires an existing pgroup\n",
"acq = SFAcquisition('example_instrument', 'p19150', default_channels=bs_example_channels, default_data_base_dir='/tmp', spreadsheet=spreadsheet)\n",
"scanner.scan1D(dummy, 0, 2, step_size=1, n_pulses=10, filename='test_bs', acquisitions=[acq], step_info=None, return_to_initial_values=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d5c65482-4b5e-4baa-943f-e35cf384b67c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:conda-slic]",
"language": "python",
"name": "conda-env-conda-slic-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.18"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,71 +0,0 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"id": "bc11382b-bbae-4541-b117-58cc4cafd737",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Playing WAVE '/tmp/ImperialMarch60.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono\n"
]
}
],
"source": [
"import subprocess\n",
"res = subprocess.run([\"aplay\", \"/tmp/ImperialMarch60.wav\"])\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "baf1c729-d9e3-484a-bf51-b9eaa5e6f3ff",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Playing WAVE '/tmp/ImperialMarch60.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono\n"
]
}
],
"source": [
"proc = subprocess.Popen([\"aplay /tmp/ImperialMarch60.wav\"], shell=True,\n",
" stdin=None, stdout=None, stderr=None, close_fds=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "436cfe45-c941-45fa-82af-ad1a8b819eb3",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:conda-slic]",
"language": "python",
"name": "conda-env-conda-slic-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.18"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -1,248 +0,0 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "e0a0b5eb-b6bd-4fb7-abe9-8c61318260f7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b]0;⊚slic\u0007"
]
}
],
"source": [
"from slic.core.adjustable import Adjustable, PVAdjustable, DummyAdjustable\n",
"from slic.core.scanner import Scanner\n",
"from slic.core.acquisition import BSAcquisition, PVAcquisition, SFAcquisition\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8f30e2a0-c4d7-4bdd-a0b5-48662d807568",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-10-29 at 21:54:56 | INFO | Loading started.\n",
"2023-10-29 at 21:54:57 | INFO | Connected to stand server\n",
"2023-10-29 at 21:54:58 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.\n",
"2023-10-29 at 21:54:58 | INFO | Running at cristallina with pgroup p21563.\n",
"2023-10-29 at 21:54:58 | INFO | Loading finished.\n"
]
}
],
"source": [
"%run /sf/cristallina/applications/slic/cristallina/cristallina.py\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "85a7d2d3-794a-49e1-9dec-2c85ebad7730",
"metadata": {},
"outputs": [],
"source": [
"# Run the scan only when gas monitor value larger than 10uJ (and smaller than 2000uJ):\n",
"# required fraction defines ammount of data recorded to save the step and move on to the next one\n",
"check_intensity_gas_monitor = PVCondition(\n",
" \"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-US\",\n",
" vmin=75,\n",
" vmax=2000,\n",
" wait_time=0.5,\n",
" required_fraction=0.8,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "a627e0fb-ecf2-4e14-8c8e-e470c9558059",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"check_intensity_gas_monitor.check()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "a0e05c2f-2b76-4a8f-8394-b04bb4d6b2f5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8285.310467258269"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"undulators.get()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "2175e207-6df8-434c-8d00-985f1149dc27",
"metadata": {},
"outputs": [],
"source": [
"from slic.utils import typename, nice_linspace, nice_arange"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "18767387-ae51-4d1f-a4a1-1e0015016324",
"metadata": {},
"outputs": [],
"source": [
"center = 11.779\n",
"delta = 0.1\n",
"\n",
"#scan.scan1D(\n",
"# diffractometer.theta,\n",
"# center-delta,\n",
"# center+delta,\n",
"# step_size=0.025,"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "6d22b87f-2063-4cb7-bef0-55a4263d4890",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([11.679, 11.704, 11.729, 11.754, 11.779, 11.804, 11.829, 11.854,\n",
" 11.879, 11.904])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit disconnect\"\n",
" Context: \"SAR-CPPM-EXPMX1.psi.ch:5064\"\n",
" Source File: ../cac.cpp line 1237\n",
" Current Time: Wed Nov 01 2023 15:13:05.052862079\n",
"..................................................................\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit unresponsive\"\n",
" Context: \"SAR-CPPM-EXPMX1.psi.ch:5064\"\n",
" Source File: ../tcpiiu.cpp line 926\n",
" Current Time: Fri Nov 03 2023 09:09:46.672425316\n",
"..................................................................\n",
"Unexpected problem with CA circuit to server \"SAR-CPPM-EXPMX1.psi.ch:5064\" was \"No route to host\" - disconnecting\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit disconnect\"\n",
" Context: \"SAR-CPPM-EXPMX1.psi.ch:5064\"\n",
" Source File: ../cac.cpp line 1237\n",
" Current Time: Fri Nov 03 2023 09:25:12.648406223\n",
"..................................................................\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit disconnect\"\n",
" Context: \"sf-saresc-cagw-01.psi.ch:5062\"\n",
" Source File: ../cac.cpp line 1237\n",
" Current Time: Sun Nov 05 2023 12:20:46.598231213\n",
"..................................................................\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit disconnect\"\n",
" Context: \"sf-saresc-cagw-01.psi.ch:5062\"\n",
" Source File: ../cac.cpp line 1237\n",
" Current Time: Sun Nov 05 2023 12:22:30.890766667\n",
"..................................................................\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit unresponsive\"\n",
" Context: \"SARES30-CPPM-MOBI1.psi.ch:5064\"\n",
" Source File: ../tcpiiu.cpp line 926\n",
" Current Time: Mon Nov 06 2023 11:43:52.744259068\n",
"..................................................................\n",
"Unexpected problem with CA circuit to server \"SARES30-CPPM-MOBI1.psi.ch:5064\" was \"Connection reset by peer\" - disconnecting\n",
"CA.Client.Exception...............................................\n",
" Warning: \"Virtual circuit disconnect\"\n",
" Context: \"SARES30-CPPM-MOBI1.psi.ch:5064\"\n",
" Source File: ../cac.cpp line 1237\n",
" Current Time: Mon Nov 06 2023 11:44:07.434289668\n",
"..................................................................\n"
]
}
],
"source": [
"positions = nice_arange(center-delta, center+delta+0.025, 0.025)\n",
"positions\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "d995a8be-f9e7-46c5-add4-7b8717f14c9b",
"metadata": {},
"outputs": [],
"source": [
"positions = [11.779, 11.679, 11.704, 11.729, 11.754, 11.804, 11.829, 11.854,\n",
" 11.879]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ccb7f011-65d2-41e9-9c83-0d1e8ab3a9d8",
"metadata": {},
"outputs": [],
"source": [
"scan.ascan_list("
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:conda-slic]",
"language": "python",
"name": "conda-env-conda-slic-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.18"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

6
acquisition/base.py Normal file → Executable file
View File

@ -1,8 +1,12 @@
import time
# setup logging
from loguru import logger
# TODO
# Most of these are outdated and workarounds for previous issues.
# Do not use without review as for example the CTA is now much better integrated.
def simple_scan():
"""
adjustable: Adjustable names to scan.

25
acquisition/multiple_daqs.py Normal file → Executable file
View File

@ -2,9 +2,26 @@
from slic.core.acquisition import SFAcquisition
rates = {'100Hz': 1, '50Hz': 2, '25Hz': 4, '10Hz': 10, '5Hz': 20, '1Hz': 100}
RATES = {"100Hz": 1,
"50Hz": 2,
"25Hz": 4,
"10Hz": 10,
"5Hz": 20,
"1Hz": 100,
}
def generate_DAQS(instrument, pgroup,bs_channels, pvs, detectors):
DAQS = {name:SFAcquisition(instrument, pgroup, default_channels=bs_channels, default_pvs=pvs, default_detectors=detectors, rate_multiplicator=r) for (name, r) in rates.items()}
def generate_DAQS(instrument, pgroup, bs_channels, pvs, detectors, spreadsheet=None):
DAQS = {
name: SFAcquisition(
instrument,
pgroup,
default_channels=bs_channels,
default_pvs=pvs,
default_detectors=detectors,
rate_multiplicator=r,
spreadsheet=spreadsheet,
)
for (name, r) in RATES.items()
}
return DAQS

View File

@ -1,128 +0,0 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "d1bead0c-2489-4672-ab51-5e75974dd4ab",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'attenuator' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mattenuator\u001b[49m\u001b[38;5;241m.\u001b[39mfoils\n",
"\u001b[0;31mNameError\u001b[0m: name 'attenuator' is not defined"
]
}
],
"source": [
"attenuator.foils\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b2a73dd0-1136-44b7-b625-e5fdcd8ec8dc",
"metadata": {},
"outputs": [],
"source": [
"attenuator.foils.pv_names.get()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b1e94427-0f7d-4dd9-b61a-3d65135445ff",
"metadata": {},
"outputs": [],
"source": [
"attenuator.foils.pv_index.get()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "66d002ac-1625-4b0d-91c5-f7daa1bd941b",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'attenuator' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mattenuator\u001b[49m\u001b[38;5;241m.\u001b[39mfoils\u001b[38;5;241m.\u001b[39mpv_index\u001b[38;5;241m.\u001b[39mget()\n",
"\u001b[0;31mNameError\u001b[0m: name 'attenuator' is not defined"
]
}
],
"source": [
"attenuator.foils.pv_index.get()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b0f5509a-944a-4a2e-a6d1-56785beb359a",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'attenuator' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mattenuator\u001b[49m\u001b[38;5;241m.\u001b[39mfoils\u001b[38;5;241m.\u001b[39mpv_index\u001b[38;5;241m.\u001b[39mget()\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# 0 := None\u001b[39;00m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# 1 := 2\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;66;03m# 2 := 3\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# 3 := 4\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# 4 := 5\u001b[39;00m\n",
"\u001b[0;31mNameError\u001b[0m: name 'attenuator' is not defined"
]
}
],
"source": [
"attenuator.foils.pv_index.get()\n",
"\n",
"# 0 := None\n",
"# 1 := 2\n",
"# 2 := 3\n",
"# 3 := 4\n",
"# 4 := 5\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "aa5aee6a-5b3f-4693-8b52-7e142872449b",
"metadata": {},
"outputs": [],
"source": [
"attenuator.foils.pv_names"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:conda-analysis_edge] *",
"language": "python",
"name": "conda-env-conda-analysis_edge-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

105
beamline/Cristallina_mono.py Executable file
View File

@ -0,0 +1,105 @@
from types import SimpleNamespace
from time import sleep
import numpy as np
from slic.core.adjustable import Adjustable, PVAdjustable, PVEnumAdjustable
from slic.core.adjustable.pvchangemon import PVChangeMonitor
from slic.core.device import Device
from slic.utils.hastyepics import get_pv as PV
from slic.devices.general.motor import Motor
from slic.devices.cameras import CameraCA
class CristallinaMono(Device):
"""Cristallina mono SAROP31-ODCC110"""
def __init__(self, ID, name="Cristallina double-channel-cut monochromator", **kwargs):
super().__init__(ID, name=name, **kwargs)
self.TX = Motor(ID + ":MOT_TX1")
self.bragg1 = Motor(ID + ":MOT_RX1")
self.bragg2 = Motor(ID + ":MOT_RX2")
self.energy = Motor(ID + ":MOT_ENY")
self.energy_offset = Motor(ID + ":MOT_OFS")
self.screen = CristallinaMonoScreen("SAROP31-PSCR110", name='SAROP31-PSCR110')
class CristallinaMonoScreen(Device):
def __init__(self, ID, name="Profile Monitor", **kwargs):
super().__init__(ID, name=name, **kwargs)
self.cam = CameraCA(ID)
self.target = PVEnumAdjustable(ID + ":SCR_SP", name="target")
self.target_pos = Motor(ID + ":MOT_TY1", name="target position")
self.target_in_position = PVEnumAdjustable(ID + ":IN_POS",name="target in valid position")
def move_mono(self):
return self.target.set_target_value(1)
def move_pink(self):
return self.target.set_target_value(2)
def move_out(self):
return self.target.set_target_value(0)
# class DoubleCrystalMonoEnergy(Adjustable):
# def __init__(self, ID, name=None):
# self.wait_time = 0.1
# pvname_setvalue = "SAROP21-ARAMIS:ENERGY_SP"
# pvname_readback = "SAROP21-ARAMIS:ENERGY"
# pvname_moving = "SAROP21-ODCM098:MOVING"
# pvname_stop = "SAROP21-ODCM098:STOP.PROC"
# pv_setvalue = PV(pvname_setvalue)
# pv_readback = PV(pvname_readback)
# pv_moving = PV(pvname_moving)
# pv_stop = PV(pvname_stop)
# units = pv_readback.units
# super().__init__(ID, name=name, units=units)
# self.pvnames = SimpleNamespace(
# setvalue = pvname_setvalue,
# readback = pvname_readback,
# moving = pvname_moving,
# stop = pvname_stop
# )
# self.pvs = SimpleNamespace(
# setvalue = pv_setvalue,
# readback = pv_readback,
# moving = pv_moving,
# stop = pv_stop
# )
# def get_current_value(self):
# return self.pvs.readback.get()
# def set_current_value(self, value):
# self.pvs.setvalue.put(value)
# sleep(3)
# def set_target_value(self, value):
# self.set_current_value(value)
# # while abs(self.wait_for_valid_value() - value) > accuracy:
# while self.is_moving():
# sleep(self.wait_time)
# def wait_for_valid_value(self):
# val = np.nan
# while not np.isfinite(val):
# val = self.get_current_value()
# return val
# def is_moving(self):
# moving = self.pvs.moving.get()
# return bool(moving)
# def stop(self):
# self.pvs.stop.put(1)

0
beamline/PSSS_motion.py Normal file → Executable file
View File

View File

0
exp_temp/apertures.py → beamline/apertures.py Normal file → Executable file
View File

View File

0
beamline/bernina_mono.py Normal file → Executable file
View File

81
beamline/components.py Executable file
View File

@ -0,0 +1,81 @@
from loguru import logger
from slic.devices.xoptics.aramis_attenuator import Attenuator
from slic.devices.xoptics.pulsepicker import PulsePicker
from slic.devices.xdiagnostics.intensitymonitor import IntensityMonitorPBPS
from .Cristallina_mono import CristallinaMono
from .alignment_laser import AlignmentLaser
from slic.devices.xoptics.kb import KBHor, KBVer
from slic.devices.xoptics.offsetmirrors import OffsetMirror
from slic.devices.xoptics.slits import SlitUnitCenterWidth
from .pp_shutter import PP_Shutter
from .i0_chamber import i0_chamber
from .apertures import slits107, slits149
# Attenuators
upstream_attenuator = Attenuator("SARFE10-OATT053", description="Aramis attenuator OATT053")
attenuator = Attenuator("SAROP31-OATA150", description="Cristallina attenuator OATA150")
def test_attenuators():
for att in (upstream_attenuator, attenuator):
tfundamental = att.get_transmission()
try:
assert tfundamental > 0
except TypeError:
logger.warning(f"No transmission value reported from {att.ID}")
test_attenuators()
# Shutter
pp_shutter = PP_Shutter(
"SARES30-LTIM01-EVR0:RearUniv0-Ena-SP", name="Cristallina pulse picker shutter"
) # Shutter button when ufasing the pulse picker
pulsepicker = PulsePicker(
"SAROP31-OPPI151",
"SARES30-LTIM01-EVR0:Pul3",
name="Cristallina X-ray pulse picker OPPI151",
)
# Alignment laser
alignment_laser = AlignmentLaser(
"SAROP31-OLAS147:MOTOR_1", name="Cristallina alignment laser OLAS147"
)
pbps113 = IntensityMonitorPBPS(
"SAROP31-PBPS113",
# vme_crate="SAROP31-CVME-PBPS1", # please check this!
# link=9,
description="Intensity/position monitor in the optics hutch",
)
pbps149 = IntensityMonitorPBPS(
"SAROP31-PBPS149",
# vme_crate="SAROP31-CVME-PBPS2", # please check this!
# link=9,
description="Intensity/position monitor in the experimental hutch",
)
# I0 chamber
i0 = i0_chamber('SARES30-MCS20610')
# Slits
slits149 = SlitUnitCenterWidth('SAROP31-OAPU149')
slits107 = SlitUnitCenterWidth('SAROP31-OAPU107')
slitsi0 = i0.slits
# KB mirrors
kbHor = KBHor("SAROP31-OKBH154", description="Cristallina horizontal KB mirror")
kbVer = KBVer("SAROP31-OKBV153", description="Cristallina vertical KB mirror")
# Mono
mono = CristallinaMono("SAROP31-ODCC110")
# Offset mirrors
m3 = OffsetMirror('SAROP31-ODMV152')
#TODO the other two offset mirros

35
beamline/i0_chamber.py Normal file
View File

@ -0,0 +1,35 @@
from slic.core.device import Device, SimpleDevice
from slic.core.adjustable import PVAdjustable
from slic.devices.general.motor import Motor
class i0_chamber(Device):
def __init__(self, ID, name="Cristallina I0 chamber with slits and foils", process_time=1, **kwargs):
super().__init__(ID, name=name, **kwargs)
self.foils = Motor(ID+":MCS3")
self.slits = i0_slits_unit(ID,name="Cristallina I0 chamber slits")
class i0_slits_unit(Device):
def __init__(self, ID, **kwargs):
super().__init__(ID, **kwargs)
self.x = SimpleDevice(ID + "-X",
center = PVAdjustable(ID + "-XSLIT:SLIT_POS",units='mm'),
width = PVAdjustable(ID + "-XSLIT:SLIT_WIDTH",units='mm')
)
self.y = SimpleDevice(ID + "-Y",
center = PVAdjustable(ID + "-YSLIT:SLIT_POS",units='mm'),
width = PVAdjustable(ID + "-YSLIT:SLIT_WIDTH",units='mm')
)
self.motors = i0_slits_motors(ID,name='Individual I0 chamber slit motors')
class i0_slits_motors(Device):
def __init__(self, ID, **kwargs):
super().__init__(ID, **kwargs)
self.x1 = Motor(ID + ":MCS4")
self.x2 = Motor(ID + ":MCS5")
self.y1 = Motor(ID + ":MCS2")
self.y2 = Motor(ID + ":MCS1")

0
exp_temp/kb_focusing.py → beamline/kb_focusing.py Normal file → Executable file
View File

605
beamline/photon_energy.py Executable file
View File

@ -0,0 +1,605 @@
import time
from time import sleep
import numpy as np
from epics import PV
from logzero import logger as log
from slic.core.adjustable import Adjustable, PVAdjustable, PVEnumAdjustable
from slic.core.scanner.scanbackend import wait_for_all # , stop_all
import subprocess
UND_NAME_FMT = "SARUN{:02}-UIND030"
N_UND_CHIC = None
N_UNDS = list(range(3, 15 + 1))
# N_UNDS.remove(N_UND_CHIC) # does not exist
# offsets fro undulators, PSSS and DCCM
# convention: energy_device = energy_master - energy_offset_device
# readback_energy is energy_undulator + offset_undulator
# move the PSSS motor and the DCCM motor according to the energy_master
# TODO: improve this hack
### SETTINGS ####
PSSS_MOVE = True
DCCM_MOVE = False
TRAJECTORY_FEEDBACK_DISABLE_ENABLE = False
POINTING_FEEDFORWARD = False
energy_offset_undulators = -21 # eV
energy_offset_PSSS = -9 # eV
energy_offset_DCCM = -11 # eV
DCCM_RX2_energy_offset = 32.4 # eV
################
def print_configuration():
print(f"PSSS_MOVE = {PSSS_MOVE}")
print(f"DCCM_MOVE = {DCCM_MOVE}")
print(f"TRAJECTORY_FEEDBACK_DISABLE_ENABLE = {TRAJECTORY_FEEDBACK_DISABLE_ENABLE}")
print(f"POINTING_FEEDFORWARD = {POINTING_FEEDFORWARD}")
print(f"Undulator energy offset = {energy_offset_undulators}")
print(f"PSSS energy offset = {energy_offset_PSSS}")
print(f"DCCM energy offset = {energy_offset_DCCM}")
print(f" DCCM RX2 energy offset = {DCCM_RX2_energy_offset}")
def pointing_slope_X(energy):
#delta_X_predicted = -0.0010097 * (energy - 10000)**2 + 0.002622 * (energy - 10000) - 0.3225 # function derived from calibration energy scan
delta_X_predicted = (energy - 10000) * 10 # function derived from calibration energy scan
#pointing_X_predicted = delta_X_predicted * 0.01829+ 0.009650
pointing_X_predicted = delta_X_predicted / 113 * 4.5
return pointing_X_predicted
def pointing_slope_Y(energy):
#delta_Y_predicted = ...
delta_Y_predicted = (energy - 10000) * 10 # function derived from calibration energy scan
#pointing_Y_predicted = ...
pointing_Y_predicted = delta_Y_predicted / 113 * 4.5
return pointing_Y_predictedS
def set_PSSS_energy(energy: float):
"""When scanning the energy with the undulator we
adjust the spectrometer to follow.
"""
print(f"Adjusting PSSS to {energy}")
PSSS_energy_PV_name = "SARFE10-PSSS059:ENERGY"
PSSS_energy_PV = PV(PSSS_energy_PV_name)
PSSS_energy_PV.put(energy, wait=True)
ret = subprocess.run(["python", "/sf/photo/src/PSSS_motor/qt/PSSS_motion.py", "-s", "-m5", "SARFE10-PSSS059"])
sleep(2)
if ret.returncode != 0:
log.warning("WARNING: PSSS adjustment failed.")
else:
print("Finished adjusting PSSS.")
def set_DCCM_energy(energy: float):
"""When scanning the energy with the undulator we
adjust the monochromator to follow.
"""
print(f"Adjusting DCCM to {energy}")
DCCM_energy_PV_name = "SAROP31-ODCC110:MOT_ENY"
DCCM_energy_PV = PV(DCCM_energy_PV_name)
DCCM_energy_offset_PV_name = "SAROP31-ODCC110:MOT_OFS"
DCCM_energy_offset_PV = PV(DCCM_energy_offset_PV_name)
DCCM_energy_offset_PV.put(DCCM_RX2_energy_offset, wait=True)
DCCM_energy_PV.put(energy, wait=False)
DCCM_energy_offset_PV.put(DCCM_RX2_energy_offset, wait=False)
print(f"Finished adjusting DCCM.")
sleep(0.2)
def enable_trajectory_feedback():
print(f"Enabling trajectory FB")
TrFB_PV_name = "SFB_POINTING_AR:ONOFF1"
TrFB_PV = PV(TrFB_PV_name)
TrFB_PV.put("ON")
sleep(0.2)
def disable_trajectory_feedback():
print(f"Disabling trajectory FB")
TrFB_PV_name = "SFB_POINTING_AR:ONOFF1"
TrFB_PV = PV(TrFB_PV_name)
TrFB_PV.put("OFF")
sleep(0.2)
def set_pointing(energy):
print(f"Pointing correction")
PointingSlopeX_PV_name = "SGE-HL-FPAR:X-SLOPE1"
PointingSlopeY_PV_name = "SGE-HL-FPAR:Y-SLOPE1"
PointingSlopeX_PV = PV(PointingSlopeX_PV_name)
PointingSlopeY_PV = PV(PointingSlopeY_PV_name)
PointingSlopeX = pointing_slope_X(energy)
PointingSlopeY = pointing_slope_Y(energy)
print(f" X-slope = {PointingSlopeX} um")
print(f" Y-slope = {PointingSlopeY} um")
PointingSlopeX_PV.put(PointingSlopeX)
PointingSlopeY_PV.put(PointingSlopeY)
sleep(0.2)
class PhotonEnergy(Adjustable):
"""
for n_und_ref=None (default), the reference undulator currently used by the machine will be used
"""
def __init__(
self, n_unds=N_UNDS, n_und_ref=None, scaled=True, ID="ARAMIS_UNDULATORS", name="Cristallina photon energy", units="eV"
):
# # don't allow setting these since there's no chic :)
# chic_fudge_offset = 0
# adjust_chic = False
super().__init__(ID, name=name, units=units)
machine_n_und_ref = get_machine_n_und_ref()
if n_und_ref is None:
if machine_n_und_ref is None:
raise ValueError(
f"could not read reference undulator currently used by the machine, please specify n_und_ref"
)
n_und_ref = machine_n_und_ref
if n_und_ref != machine_n_und_ref:
log.warning(
f"the chosen reference undulator ({n_und_ref}) is not the reference undulator currently used by the machine ({machine_n_und_ref})"
)
n_unds = list(n_unds)
if N_UND_CHIC in n_unds:
log.warning(
f"the CHIC ({N_UND_CHIC}) is in the list of active undulators: {n_unds}, and will be ignored/removed"
)
n_unds.remove(N_UND_CHIC)
if n_und_ref not in n_unds:
raise ValueError(f"the reference undulator ({n_und_ref}) is not in the list of active undulators: {n_unds}")
self.n_unds = n_unds
self.n_und_ref = n_und_ref
self.und_names = und_names = [UND_NAME_FMT.format(n) for n in n_unds]
self.und_name_cal = und_name_cal = UND_NAME_FMT.format(n_und_ref)
self.adjs = {name: Undulator(name) for name in und_names}
# self.chic = CHIC(chic_fudge_offset, name, units)
# self.phases = Phases(n_unds)
# self.adjust_chic = adjust_chic
self.scaled = scaled
self.convert = ConverterEK()
a = self.adjs[und_name_cal]
self.scale = ScalerEK(a)
def set_target_value(self, energy_master, hold=False):
value = energy_master + energy_offset_undulators
k = self.convert.K(value)
if np.isnan(k):
print("K is nan for", value)
return
print(f"{k} <- {value}")
ks_current = [a.get_current_value(readback=False) for a in self.adjs.values()]
if self.scaled:
header = "scaled: "
ks_target = self.scale.K(value, ks_current)
else:
header = "all equal:"
ks_target = k * np.ones_like(ks_current)
print(header, ks_target)
print()
def change():
if not DCCM_MOVE:
print("no DCCM movement enabled")
else:
energy_DCCM = energy_master + energy_offset_DCCM
set_DCCM_energy(energy_DCCM)
if not TRAJECTORY_FEEDBACK_DISABLE_ENABLE:
print("No trajectory feedback disabling performed.")
else:
disable_trajectory_feedback()
print(f"Setting undulator energy to {value}")
# TODO: replace by set_all_target_values_and_wait when print not needed anymore
tasks = []
for (name, a), k_old, k_new in zip(self.adjs.items(), ks_current, ks_target):
delta = k_old - k_new
print(f"{name}: {k_old}\t->\t{k_new}\t({delta})")
if np.isnan(k_new):
print(f"{name} skipped since target K is nan")
continue
t = a.set_target_value(k_new, hold=False)
tasks.append(t)
wait_for_all(tasks)
# # make sure new K values have been written TODO: needed?
# sleep(2) # check if this can be shortened back to 0.5
# # switching on radial motors ...
# wait_for_all([
# a.adj_radial_on.set_target_value(1, hold=False) for a in self.adjs.values()
# ])
# # press a few times
# for _ in range(3):
# # ... and pushing go to ensure proper movements
# wait_for_all([
# a.adj_radial_go.set_target_value(1, hold=False) for a in self.adjs.values()
# ])
# sleep(0.2)
# # make sure the undulators finished moving TODO: needed?
# sleep(5)
# if self.adjust_chic:
# print("CHIC adjustment follows")
## self.chic.set_target_value(value, hold=False).wait() #TODO: test whether an additional sleep is needed
# self.phases.set(value)
# print("CHIC adjustment done")
# else:
# print("CHIC adjustment skipped")
# make sure the undulators and phases finished moving TODO: needed?
sleep(5)
if not PSSS_MOVE:
print("no PSSS movement enabled")
else:
energy_PSSS = energy_master + energy_offset_PSSS
print(f"Adjusting PSSS to {energy_PSSS}")
set_PSSS_energy(energy_PSSS)
if not POINTING_FEEDFORWARD:
print("No pointing correction performed.")
else:
set_pointing(energy_master)
if not TRAJECTORY_FEEDBACK_DISABLE_ENABLE:
print("No trajectory feedback enabling performed.")
else:
enable_trajectory_feedback()
return self._as_task(change, hold=hold)
def get_current_value(self):
n = self.und_name_cal
a = self.adjs[n]
k = a.get_current_value()
energy = self.convert.E(k) - energy_offset_undulators
# all_ks = [a.get_current_value() for a in self.adjs.values()]
# checks = np.isclose(all_ks, k, rtol=0, atol=0.001)
# if not all(checks):
# print(f"Warning: Ks are not all close to {k}:")
# for name, k, chk in zip(self.adjs.keys(), all_ks, checks):
# if not chk:
# print(name, k)
return energy # if we need to fudge the number to match the mono, do it here!
def get_current_value_undulators_real(self):
n = self.und_name_cal
a = self.adjs[n]
k = a.get_current_value()
energy = self.convert.E(k)
# all_ks = [a.get_current_value() for a in self.adjs.values()]
# checks = np.isclose(all_ks, k, rtol=0, atol=0.001)
# if not all(checks):
# print(f"Warning: Ks are not all close to {k}:")
# for name, k, chk in zip(self.adjs.keys(), all_ks, checks):
# if not chk:
# print(name, k)
return energy # if we need to fudge the number to match the mono, do it here!
def get_current_value_DCCM(self):
DCCM_energy_PV_name = "SAROP31-ODCC110:MOT_ENY"
DCCM_energy_PV = PV(DCCM_energy_PV_name)
energy = DCCM_energy_PV.get() - energy_offset_DCCM
return energy
def get_current_value_DCCM_real(self):
DCCM_energy_PV_name = "SAROP31-ODCC110:MOT_ENY"
DCCM_energy_PV = PV(DCCM_energy_PV_name)
energy = DCCM_energy_PV.get()
return energy
def get_current_value_PSSS(self):
PSSS_energy_PV_name = "SARFE10-PSSS059:ENERGY"
PSSS_energy_PV = PV(PSSS_energy_PV_name)
energy = PSSS_energy_PV.get() - energy_offset_PSSS
return energy
def get_current_value_PSSS_real(self):
PSSS_energy_PV_name = "SARFE10-PSSS059:ENERGY"
PSSS_energy_PV = PV(PSSS_energy_PV_name)
energy = PSSS_energy_PV.get()
return energy
def print_energies_with_offset_correction(self):
print("Real photon energies with offset correction")
print(f" Undulator = {self.get_current_value()} eV")
print(f" PSSS = {self.get_current_value_PSSS()} eV")
print(f" DCCM = {self.get_current_value_DCCM()} eV")
def print_energies(self):
print("Real photon energies")
print(f" Undulator = {self.get_current_value_undulators_real()} eV")
print(f" PSSS = {self.get_current_value_PSSS_real()} eV")
print(f" DCCM = {self.get_current_value_DCCM_real()} eV")
def is_moving(self):
return any(a.is_moving() for a in self.adjs)
class Undulator(PVAdjustable):
def __init__(self, name, accuracy=0.0005):
pvname_setvalue = name + ":K_SET"
pvname_readback = pvname_setvalue # name + ":K_READ" #TODO: there are no readback values?
super().__init__(
pvname_setvalue,
pvname_readback=pvname_readback,
accuracy=accuracy,
active_move=True,
name=name,
internal=True,
)
self.adj_energy = PVAdjustable(name + ":FELPHOTENE", internal=True)
# self.adj_radial_on = PVAdjustable(name + ":RADIAL-ON", internal=True) #TODO: do not exist
# self.adj_radial_go = PVAdjustable(name + ":RADIAL-GO", internal=True) #TODO: do not exist
# self.adj_radial_on_proc = PVAdjustable(name + ":RADIAL-ON.PROC", internal=True)
# self.adj_radial_go_proc = PVAdjustable(name + ":RADIAL-GO.PROC", internal=True)
@property
def energy(self):
return self.adj_energy.get_current_value() * 1000
class ConverterEK:
h = 4.135667696e-15 # eV * s
c = 299792458 # m / s
lambda_u = 15e-3 # m
const = 2 * h * c / lambda_u # eV
electron_rest_energy = 0.51099895 # MeV
# was: pvname_electron_energy="SATCL01-MBND100:P-READ"
# was: pvname_electron_energy="SATCB01:ENE-FILT-OP"
def __init__(self, pvname_electron_energy="SARCL02-MBND100:P-READ"): # S30CB13:ENE-FILT-OP
self.pv_electron_energy = PV(pvname_electron_energy)
def K(self, energy):
f = self.get_factor()
v = f / energy - 1
return np.sqrt(2 * v)
def E(self, k_value):
f = self.get_factor()
v = 1 + k_value**2 / 2
return f / v
def get_factor(self):
return self.const * self.get_gamma_squared()
def get_gamma_squared(self):
electron_energy = self.pv_electron_energy.get()
gamma = electron_energy / self.electron_rest_energy
return gamma**2
class ScalerEK:
def __init__(self, und_reference):
self.und = und_reference
def K(self, energy_target, K_current=None):
if K_current is None:
K_current = self.und.get_current_value()
K_current = np.asarray(K_current)
energy_current = self.und.energy
energy_ratio = energy_current / energy_target
K_target_squared = energy_ratio * (K_current**2 + 2) - 2
return np.sqrt(K_target_squared)
# class CHIC(PVAdjustable):
#
# def __init__(self, fudge_offset, name, units):
# self.fudge_offset = fudge_offset
# name += " CHIC Energy"
# super().__init__("SATUN-CHIC:PHOTON-ENERGY", name=name)
# self.pvs.start = PV("SATUN-CHIC:APPLY-DELAY-OFFSET-PHASE")
# self.units = units
#
#
# def set_target_value(self, value, hold=False):
# fudge_offset = self.fudge_offset
# print("CHIC fudge offset is", fudge_offset)
# value -= fudge_offset
# value /= 1000
#
# def change():
# sleep(1)
# print("CHIC setvalue")
# self.pvs.setvalue.put(value, wait=True)
# print("CHIC start")
# self.pvs.start.put(1, wait=True)
# #TODO: test whether an additional sleep is needed
# sleep(1)
#
# return self._as_task(change, hold=hold)
#
#
# def get_current_value(self):
# return super().get_current_value() * 1000
# class TwoColorChicane(PVAdjustable):
#
# def __init__(self, name):#, t0=0):
## self.t0 = t0
## name += " Two Color Chicane"
# super().__init__("SATUN14-MBND100:I-SET", "SATUN14-MBND100:I-READ", process_time=1, name=name)
#
## def set_target_value(self, value, hold=False):
## super().set_target_value(value)
#
## def get_current_value(self):
## return super().get_current_value()
# class Phases:
#
# def __init__(self, n_unds=N_UNDS):
# # 22 does not have a chicane
# n_unds = n_unds.copy()
# if 22 in n_unds:
# n_unds.remove(22)
#
# # 22 does not have a chicane
# n_unds_all = N_UNDS.copy()
# if 22 in n_unds_all:
# n_unds_all.remove(22)
#
# self.cb_auto_good = {i: PV(f"SATUN{i:02}-CHIC:AUTO-PHASING") for i in n_unds}
# self.cb_auto_bad = {i: PV(f"SATUN{i:02}-CHIC:AUTO-PHASING") for i in set(n_unds_all) - set(n_unds)}
#
# self.pv_fixed_energy = PV("SATUN-CHIC:FIX_PHOTON_ENERGY")
# self.pv_energy = PV("SATUN-CHIC:PHOTON-ENERGY")
#
#
# def set(self, energy):
# for cb in self.cb_auto_good.values(): cb.put(int(False))
# for cb in self.cb_auto_bad.values(): cb.put(int(False))
# sleep(0.1)
#
# pv_fixed_energy = self.pv_fixed_energy
#
# current_state = pv_fixed_energy.get()
# pv_fixed_energy.put(int(True)) # enforce fixed energy
#
# self.pv_energy.put(energy / 1000) # in keV
# sleep(0.1)
#
# for cb in self.cb_auto_good.values(): cb.put(int(True))
# sleep(0.1)
#
# for cb in self.cb_auto_good.values(): cb.put(int(False))
# for cb in self.cb_auto_bad.values(): cb.put(int(False))
# sleep(0.1)
#
## pv_fixed_energy.put(current_state) # reset to original state
# class Phases:
# def __init__(self, n_unds=N_UNDS):
# # 22 does not have a chicane
# n_unds = n_unds.copy()
# if 22 in n_unds:
# n_unds.remove(22)
# self.pv_energy = PV("SATUN-CHIC:PHOTON-ENERGY")
# self.pv_fixed_energy = PV("SATUN-CHIC:FIX_PHOTON_ENERGY")
# self.adjs_apply = {i: PVAdjustable(f"SATUN{i:02}-CHIC:APPLY-DOP", internal=True) for i in n_unds}
# def set(self, energy):
# pv_energy = self.pv_energy
# pv_fixed_energy = self.pv_fixed_energy
# current_state = pv_fixed_energy.get()
# pv_fixed_energy.put(int(True)) # enforce fixed energy
# pv_energy.put(energy / 1000) # in keV
# sleep(0.1)
# self.update()
## sleep(10)
# pv_fixed_energy.put(current_state) # reset to original state
# def update(self):
# wait_for_all([
# adj_apply.set_target_value(1) for adj_apply in self.adjs_apply.values()
# ])
def get_machine_n_und_ref():
for attempt in range(3):
try:
res = PVEnumAdjustable("SARUN:REF-UND").get()
if not res.startswith("SARUN"):
return None
except AttributeError as e:
print("Error getting undulator, retrying")
print(e)
time.sleep(1)
else:
break
n = len("SARUN")
res = res[n:]
try:
res = int(res)
except ValueError:
return None
return res

4
devices/pp_shutter.py → beamline/pp_shutter.py Normal file → Executable file
View File

@ -3,7 +3,9 @@ from slic.utils import typename
class PP_Shutter:
"""Class for when pulse picker is used as a shutter. Opening and closing is done with turning on and off the event reciever universal output ON and OFF."""
"""Class for when pulse picker is used as a shutter.
Opening and closing is done with turning on and off the event receiver universal output ON and OFF.
"""
def __init__(self, ID, name="X-ray Pulse Picker Shutter"):
self.ID = ID

1
devices/pulse_picker.py → beamline/pulse_picker.py Normal file → Executable file
View File

@ -1,6 +1,7 @@
from epics import PV
# TODO: all these values have not been checked since the reorganization of the EVR outputs!
def pp_normal(opening = True):
""" Set pulse picker to fixed open or closed mode.
"""

4
beamline/undulator.py Normal file → Executable file
View File

@ -23,8 +23,8 @@ N_UNDS = list(range(3, 15 + 1))
# Cristallina without calibration
# offset is the difference between PSSS and undulator setpoint
# sign convention: Undulator - PSSS
energy_offset = -104 # eV
energy_offset = 0 # eV
# PSSS = 8355 eV, machine = 8253 eV
# move the PSSS motor according to the energy
# TODO: improve this hack

BIN
channels/.pv_channels.py.swp Executable file

Binary file not shown.

371
channels/bs_channels.py Normal file → Executable file
View File

@ -1,16 +1,17 @@
# Channels to save at Cristallina endstation
##########################################################################################################
##########################################################################################################
##########################################################################################################
# BS channels
### JUNGFRAU DETECTORS
from slic.core.acquisition.detcfg import DetectorConfig
# TODO: JF settings regarding raw conversion, compression, etc.
detectors = [
# "JF16T03V01",
"JF17T16V01",
"JF16T03V02", # 1.5M from 2025
# "JF16T03V01", # 1.5M from 2022
# "JF17T16V01", # 8M
"JF20T01V01", # IO
# "JF05T01V01", # 0.5M stripsel borrowed from Bernina, now registered in esc network
]
# ALLOWED_PARAMS = dict(
@ -22,38 +23,86 @@ detectors = [
# downsample = tuple,
# factor = Number,
# geometry = bool,
# remove_raw_files = bool,
# roi = dict, #TODO: check on contents of the dict?
# remove_raw_files = bool,
# roi = dict, # TODO: test with these definitions: {'beam': [1775, 1875, 1070, 1170]} achtung: doesnt work with geometry = True
# save_dap_results = bool
# )
detectors_with_config = DetectorConfig(detectors)
detectors = DetectorConfig(detectors)
# detectors_with_config["JF16T03V01"]['save_dap_results'] = True
# detectors_with_config["JF16T03V01"]['remove_raw_files'] = True
# JF 1.5M default settings
detectors["JF16T03V02"]['remove_raw_files'] = True
detectors["JF16T03V02"]['factor'] = 0.1 # Some useful compromise to save space.
detectors["JF16T03V02"]['adc_to_energy'] = True
detectors["JF16T03V02"]['compression'] = True
detectors["JF16T03V02"]['save_dap_results'] = False
detectors["JF16T03V02"]['geometry'] = True
# I0 JF default settings
detectors["JF20T01V01"]['remove_raw_files'] = True
detectors["JF20T01V01"]['factor'] = 1 # Some useful compromise to save space.
detectors["JF20T01V01"]['adc_to_energy'] = True
detectors["JF20T01V01"]['compression'] = True
detectors["JF20T01V01"]['save_dap_results'] = False
detectors["JF20T01V01"]['geometry'] = False
detectors_I0_only = DetectorConfig(["JF20T01V01"])
# I0 JF settings with finer resolution
detectors["JF20T01V01"]['remove_raw_files'] = True
detectors["JF20T01V01"]['factor'] = 0.1 # Less space saving but more resolution
detectors["JF20T01V01"]['adc_to_energy'] = True
detectors["JF20T01V01"]['compression'] = True
detectors["JF20T01V01"]['save_dap_results'] = False
detectors["JF20T01V01"]['geometry'] = False
# detectors_with_config["JF16T03V01"]['disabled_modules'] = [0, 1] # bottom module:0, middle module:1, top module:2
#detectors["JF17T16V01"]['disabled_modules'] = [0, 1, 2, 3,
# 9, 10, 11,
# 12, 13, 14, 15] # bottom module:0, middle module:1, top module:2
#detectors["JF17T16V01"]['remove_raw_files'] = True # We switched off quite a few modules, let's not keep all the raw data.
#detectors["JF17T16V01"]['compression'] = True
#detectors["JF17T16V01"]['adc_to_energy'] = True # We switched off quite a few modules, let's not keep all the raw data.
#detectors["JF17T16V01"]['factor'] = 0.2 # Some useful compromise to save space.
#detectors["JF17T16V01"]['save_dap_results'] = False
#detectors["JF17T16V01"]['geometry'] = False
detectors_MX = DetectorConfig()
detectors_MX.add("JF17T16V01", adc_to_energy=True, compression=True, crystfel_lists_laser=True, double_pixels_action="mask", factor=12.08, remove_raw_files=True, save_dap_results=True, geometry=False)
detectors_MX.add("JF17T16V01", adc_to_energy=True, compression=True, crystfel_lists_laser=True, double_pixels_action="mask", factor=12.00, remove_raw_files=True, save_dap_results=True, geometry=False)
##########################################################################################################
##########################################################################################################
##########################################################################################################
### BS CHANNELS
###########################################################################
#### CAMERAS COLLECTED
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-SMX-OAV.jet_projection", #SWISSMX oav jET PROJECTION
# "SARES30-CAMS156-SMX-OAV:FPICTURE", # SwissMX OAV camera picture
# "SARES30-CAMS156-SMX-OAV.jet_projection", #SWISSMX oav jET PROJECTION
# "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",
]
###########################################################################
#### MACHINE
# RF phases and amplitudes
channels_RF = [
@ -126,35 +175,38 @@ channels_RF = [
"S30CB14-RLLE-DSP:AMPLT-VS",
]
channels_Xeye = ["SARES30-CAMS156-XE:intensity",
"SARES30-CAMS156-XE:x_center_of_mass",
"SARES30-CAMS156-XE:x_fit_amplitude",
"SARES30-CAMS156-XE:x_fit_mean",
"SARES30-CAMS156-XE:x_fit_offset",
"SARES30-CAMS156-XE:x_fit_standard_deviation",
"SARES30-CAMS156-XE:x_fwhm",
"SARES30-CAMS156-XE:x_profile",
"SARES30-CAMS156-XE:x_rms",
"SARES30-CAMS156-XE:y_center_of_mass",
"SARES30-CAMS156-XE:y_fit_amplitude",
"SARES30-CAMS156-XE:y_fit_mean",
"SARES30-CAMS156-XE:y_fit_offset",
"SARES30-CAMS156-XE:y_fit_standard_deviation",
"SARES30-CAMS156-XE:y_fwhm",
"SARES30-CAMS156-XE:y_profile",
"SARES30-CAMS156-XE:y_rms",
]
######################
# PBPS053
###########################################################################
#### FRONT-END
####################
# Gas intensity monitor PBPG050
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",
]
###################
# Beam position and intensity monitor PBPS053
channels_PBPS053 = [
"SARFE10-PBPS053:INTENSITY",
"SARFE10-PBPS053:XPOS",
"SARFE10-PBPS053:YPOS",
]
####################
# PSSS059
###################
# Spectrometer PSSS059
channels_PSSS059 = [
"SARFE10-PSSS059:FIT-COM",
"SARFE10-PSSS059:FIT-FWHM",
@ -166,11 +218,13 @@ channels_PSSS059 = [
"SARFE10-PSSS059:SPECTRUM_Y_SUM",
"SARFE10-PSSS059:SPECTRUM_X",
"SARFE10-PSSS059:SPECTRUM_Y",
"SARFE10-PSSS059:FPICTURE",
# "SARFE10-PSSS059:FPICTURE",
"SARFE10-PSSS059:processing_parameters",
]
# Large bandwidth camera
###################
# Spectrometer PSSS059, large bandwidth camera
channels_PSSS059_LB = [
"SARFE10-PSSS059-LB:FIT-COM",
"SARFE10-PSSS059-LB:FIT-FWHM",
@ -183,24 +237,64 @@ channels_PSSS059_LB = [
"SARFE10-PSSS059-LB:SPECTRUM_Y",
"SARFE10-PSSS059-LB:SPECTRUM_Y_SUM",
"SARFE10-PSSS059-LB:processing_parameters",
"SARFE10-PSSS059-LB:FPICTURE",
# "SARFE10-PSSS059-LB:FPICTURE", # only in special circumstances
"SARFE10-PSSS059-LB:FIT-BRT",
]
###################################
## Bernina channels
# Beam position monitor PBPS113
channels_Bernina = [
###########################################################################
#### BERNINA BRANCH until DCM
###################
# Bernina beam intensity and position monitor PBPS113 (alias PBPS103)
channels_PBPS113_bernina = [
"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:YPOS",
#"SAROP21-PPRM113:FPICTURE",
"SAROP21-PPRM113:intensity",
"SAROP21-PPRM113:x_fit_mean",
"SAROP21-PPRM113:y_fit_mean",
]
###################################
# Beam position monitor PBPS113
###################
# Bernina screen PPRM113
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
]
###########################################################################
#### CRISTALLINA BRANCH
###################
## Beam position and intensity monitor PBPS113
channels_PBPS113 = [
"SAROP31-PBPS113:INTENSITY",
"SAROP31-PBPS113:INTENSITY_UJ",
@ -208,9 +302,11 @@ channels_PBPS113 = [
"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",
]
channels_PBPS113_waveforms = [
"SAROP31-PBPS113:Lnk9Ch0-WF-DATA",
"SAROP31-PBPS113:Lnk9Ch1-WF-DATA",
@ -230,8 +326,18 @@ channels_PBPS113_waveforms = [
"SAROP31-PBPS113:Lnk9Ch15-WF-DATA",
]
####################
# Profile monitor PPRM113 (from _proc process)
###################
# Diode PDIM113
channels_PDIM113 = [
"SAROP31-PBPS113:Lnk9Ch0-PP_VAL_PD4",
]
###################
# Beam profile monitor PPRM113
channels_PPRM113 = [
"SAROP31-PPRM113:intensity",
"SAROP31-PPRM113:x_center_of_mass",
@ -253,13 +359,10 @@ channels_PPRM113 = [
# "SAROP31-PPRM113:FPICTURE", # full pictures for debugging purposes at the moment, from _ib process
]
###########################
# Beam position monitor PBPS149
# "SARES30-CAMS156-PCO1:FPICTURE", # PCO edge camera for the wavefront analysis (from Alvra)
# "SARES30-CAMS156-SMX-OAV:FPIC
###########################
# Beam position monitor
###################
# Beam position and intensity monitor PBPS149
channels_PBPS149 = [
"SAROP31-PBPS149:INTENSITY",
"SAROP31-PBPS149:INTENSITY_UJ",
@ -271,6 +374,7 @@ channels_PBPS149 = [
"SAROP31-PBPS149:YPOS",
]
#######################
# Profile monitor PPRM150 (from _proc process)
channels_PPRM150 = [
@ -294,14 +398,32 @@ channels_PPRM150 = [
# "SAROP31-PPRM150:FPICTURE", # full pictures for debugging purposes at the moment, from _ib process
]
####################
# Diode under screen between the KB's PSCD153
channels_PSCD153 = [
"SAROP31-PBPS149:Lnk9Ch0-PP_VAL_PD4",
]
###########################################################################
#### GENERAL PURPOSE EXPERIMENT
#######################
# Cristallina event reciever
channels_EVR = [
"SAR-CVME-TIFALL6:EvtSet",
]
#######################
# Digitizer
channels_digitizer = [
# extra non-beam synchronous channels:
#"SARES30-LTIM01-EVR0:DUMMY_PV1_NBS",
@ -310,33 +432,132 @@ channels_digitizer = [
#"SARES30-LTIM01-EVR0:DUMMY_PV4_NBS",
# other EVR channels:
"SARES30-LSCP1-FNS:CH0:VAL_GET", # Signal-Background
"SARES30-LSCP1-FNS:CH1:VAL_GET", # Signal-Background
"SARES30-LSCP1-FNS:CH2:VAL_GET", # Signal-Background
"SARES30-LSCP1-FNS:CH3:VAL_GET", # Signal-Background
"SARES30-LSCP1-FNS:CH4:VAL_GET", # Signal-Background
"SARES30-LSCP1-FNS:CH5:VAL_GET", # Signal-Background
"SARES30-LSCP1-FNS:CH6:VAL_GET", # Signal-Background
"SARES30-LSCP1-FNS:CH7:VAL_GET", # Signal-Background
"SARES30-LSCP1-CRISTA1:CH0:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH2:1", # Waveform trigger
"SARES30-LSCP1-CRISTA1:CH1:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH2:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH3:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH4:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH5:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH6:1", # Waveform signal
"SARES30-LSCP1-CRISTA1:CH7: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 = [
# "SARFE10-PPRM053:FPICTURE", # TODO: Test if this works here
# "SARFE10-PPRM064:FPICTURE", # TODO: Test if this works here
]
# X-ray eye
channels_Xeye = [
"SARES30-CAMS156-XE:intensity",
"SARES30-CAMS156-XE:x_center_of_mass",
"SARES30-CAMS156-XE:x_fit_amplitude",
"SARES30-CAMS156-XE:x_fit_mean",
"SARES30-CAMS156-XE:x_fit_offset",
"SARES30-CAMS156-XE:x_fit_standard_deviation",
"SARES30-CAMS156-XE:x_fwhm",
"SARES30-CAMS156-XE:x_profile",
"SARES30-CAMS156-XE:x_rms",
"SARES30-CAMS156-XE:y_center_of_mass",
"SARES30-CAMS156-XE:y_fit_amplitude",
"SARES30-CAMS156-XE:y_fit_mean",
"SARES30-CAMS156-XE:y_fit_offset",
"SARES30-CAMS156-XE:y_fit_standard_deviation",
"SARES30-CAMS156-XE:y_fwhm",
"SARES30-CAMS156-XE:y_profile",
"SARES30-CAMS156-XE:y_rms",
# "SARES30-CAMS156-XE:FPICTURE",
]
###########################################################################
#### CRISTALLINA-Q EXPERIMENT
#######################
# Diffractometer 1 bs_channels
ID_dm1 = "SARES31-GPS"
diffractometer_1_bs = [
ID_dm1 + ":ROT2THETA-BS",
ID_dm1 + ":ROTTHETA-BS",
ID_dm1 + ":TRX-BS",
ID_dm1 + ":TRY-BS",
ID_dm1 + ":TRZ-BS",
ID_dm1 + ":TD-BS",
ID_dm1 + ":TRXBASE-BS",
ID_dm1 + ":TRYBASE-BS",
ID_dm1 + ":TRYBASE-Avg-BS",
ID_dm1 + "::CALC1",
ID_dm1 + "::CALC2",
ID_dm1 + "::CALC3",
ID_dm1 + "::CALC4",
]
###########################################################################
#### CHANNEL GROUPS
bs_channels = (
camera_channels
+ channels_gas_monitor
channels_gas_monitor
# + channels_RF
# + channels_Xeye
+ channels_PBPS053
+ channels_PSSS059
+ channels_PSSS059_LB
+ channels_PBPS113
# + channels_PBPS113_waveforms
+ channels_PDIM113
# + channels_PPRM113
+ channels_PBPS149
# + channels_PBPS149_waveforms
# + channels_PPRM150 # only if screen is inserted
+ channels_PSCD153
+ channels_EVR
# + channels_digitizer
+ channels_other
+ channels_digitizer
# + channels_Xeye
# + diffractometer_1_bs
# + camera_channels
)
bs_channels_cristallina_beamline = (
channels_gas_monitor
# + channels_RF
+ channels_PBPS053
+ channels_PSSS059
+ channels_PSSS059_LB
+ channels_PBPS113
# + channels_PBPS113_waveforms
+ channels_PDIM113
# + channels_PPRM113
+ channels_PBPS149
# + channels_PBPS149_waveforms
# + channels_PPRM150 # only if screen is inserted
+ channels_PSCD153
+ channels_EVR
)
bs_channels_bernina_DCM = (
channels_gas_monitor
# + channels_RF
+ channels_PBPS053
+ channels_PSSS059
+ channels_PSSS059_LB
+ channels_PBPS113_bernina
# + channels_PPRM113_bernina
)

View File

@ -1,259 +0,0 @@
# Channels at Cristallina endstation
##########################################################################################################
# BS channels
# TODO: JF settings regarding raw conversion, compression, etc.
detectors = [
# "JF16T03V01",
]
####################
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",
]
######################
### PCO edge camera for the wavefront analysis
channels_PCO = [
"SARES30-CAMS156-PCO1:FPICTURE",
]
######################
### SwissMX OAV camera picture
channels_OAV = [] # "SARES30-CAMS156-SMX-OAV:FPICTURE",
######################
### PBPS053
channels_PBPS053 = [
"SARFE10-PBPS053:INTENSITY",
"SARFE10-PBPS053:XPOS",
"SARFE10-PBPS053:YPOS",
]
###################################
### 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",
]
####################
## PSS059
channels_pss059 = [
# "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
]
#######################
# 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
]
#######################
# 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
]
###########################
# Beam position monitor
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",
]
further_channels = [
####################
## Digitizer
# Integration limits
"SARES30-LTIM01-EVR0:DUMMY_PV1_NBS",
"SARES30-LTIM01-EVR0:DUMMY_PV2_NBS",
"SARES30-LTIM01-EVR0:DUMMY_PV3_NBS",
"SARES30-LTIM01-EVR0:DUMMY_PV4_NBS",
# Signal-Background
"SARES30-LSCP1-FNS:CH0:VAL_GET",
# Waveform signal
"SARES30-LSCP1-CRISTA1:CH0:1",
# Waveform trigger
"SARES30-LSCP1-CRISTA1:CH2:1",
# Calculated intensity
"SARES30-LTIM01-EVR0:CALCI",
]
channels = (
channels_gas_monitor
+ channels_PCO
+ channels_OAV
+ channels_PBPS053
+ channels_pss059
+ channels_PPRM113
+ channels_PPRM150
+ channel_PBPS149
+ channel_PBPS149
+ further_channels
)
##########################################################################################################
pv_channels = [
####################
## OAPU044
"SARFE10-OAPU044:MOTOR_X",
"SARFE10-OAPU044:MOTOR_Y",
"SARFE10-OAPU044:MOTOR_W",
"SARFE10-OAPU044:MOTOR_H",
####################
## 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",
####################
## OATA150
"SAROP31-OATA150:MOTOR_1",
"SAROP31-OATA150:MOTOR_2",
"SAROP31-OATA150:MOTOR_3",
"SAROP31-OATA150:MOTOR_4",
"SAROP31-OATA150:MOTOR_5",
"SAROP31-OATA150:MOTOR_6",
####################
## PSSS
"SARFE10-PSSS059:MOTOR_Y3.VAL",
"SARFE10-PSSS059:MOTOR_ROT_X3.VAL",
"SARFE10-PSSS059:MOTOR_X5.VAL",
"SARFE10-PSSS059:MOTOR_X3.VAL",
###########################
# KB mirrors
"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",
"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",
####################
## FEL Photon Energy
"SARUN:FELPHOTENE",
###################
## FEL Photon Pulse Energy
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG",
]
pvs_slits = [
# TODO: PVS slits can't be read by the DAQ module currently. Therefore disabled it.
# "SARFE10-OAPU044:MOTOR_X.VAL",
# "SARFE10-OAPU044:MOTOR_X.RBV"
]
pvs_apertures = [
"SAROP31-OAPU149:MOTOR_X.VAL", # the x pos of the aperture
"SAROP31-OAPU149:MOTOR_X.RBV", # the x pos of the aperture
]
###############################
smaract_channels = [
"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_slits + pv_channels + smaract_channels

View File

@ -1,15 +0,0 @@
# Channels at Cristallina endstation
##########################################################################################################
# BS channels
# TODO: JF settings regarding raw conversion, compression, etc.
detectors_min = [
# "JF16T03V01",
]
channels_min = ["SARFE10-PSSS059:SPECTRUM_Y"]
pvs_min = ["SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG"] # pvs_slits + pv_channels + smaract_channels

596
channels/pv_channels.py Normal file → Executable file
View File

@ -1,15 +1,15 @@
##########################################################################################################
##########################################################################################################
##########################################################################################################
# Epics PVS
### EPICS PVS
###########################################################################
#### MACHINE
# 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
]
# accelerator parameters
@ -83,8 +83,10 @@ pvs_RF = [
"S30CB14-RSYS:GET-VSUM-AMPLT-SCALE",
]
#######################
# Undulator gap
pvs_undulator = [
"SARUN03-UIND030:K_SET.VAL",
"SARUN04-UIND030:K_SET.VAL",
@ -99,17 +101,24 @@ pvs_undulator = [
"SARUN13-UIND030:K_SET.VAL",
"SARUN14-UIND030:K_SET.VAL",
"SARUN15-UIND030:K_SET.VAL",
"SFB_POINTING_AR:SP1",
"SFB_POINTING_AR:SP2",
"SFB_POINTING_AR:ONOFF1",
"SGE-HL-FPAR:X-SLOPE1",
"SGE-HL-FPAR:Y-SLOPE1",
"SGE-HL-FPAR:X-OFFSET1",
"SGE-HL-FPAR:Y-OFFSET1",
]
####################
# Machine gas intensity monitor
pvs_gas_monitor = [
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-US",
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-DS",
]
###########################################################################
#### FRONT-END
#####################
# Slits OAPU044
pvs_OAPU044 = [
"SARFE10-OAPU044:MOTOR_X",
"SARFE10-OAPU044:MOTOR_Y",
@ -117,37 +126,30 @@ pvs_OAPU044 = [
"SARFE10-OAPU044:MOTOR_H",
]
####################
# Gas intensity monitor PBPG050
pvs_gas_monitor = [
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-US",
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-DS",
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-AVG",
]
###################
# Beam position monitor PBPS053
# Beam position and intensity monitor PBPS053
pvs_PBPS053 = [
"SARFE10-PBPS053:MOTOR_X1",
"SARFE10-PBPS053:MOTOR_X2",
# "SARFE10-PBPS053:MOTOR_X2", # Not available, disabled
"SARFE10-PBPS053:MOTOR_PROBE",
]
###################
# Spectrometer PSSS059
pvs_PSSS059 = [
"SARFE10-PSSS055:MOTOR_X1.RBV",
"SARFE10-PSSS055:MOTOR_Y1.RBV",
"SARFE10-PSSS055:MOTOR_ROT_X1.RBV",
"SARFE10-PSSS055:MOTOR_PROBE.RBV",
"SARFE10-PSSS059:MOTOR_X3.RBV",
"SARFE10-PSSS059:MOTOR_Y3.RBV",
"SARFE10-PSSS059:MOTOR_ROT_X3.RBV",
"SARFE10-PSSS059:MOTOR_Y4.RBV",
"SARFE10-PSSS059:MOTOR_ROT_X4.RBV",
"SARFE10-PSSS059:MOTOR_X5.RBV",
"SARFE10-PSSS059:MOTOR_Y5.RBV",
"SARFE10-PSSS059:MOTOR_Z5.RBV",
"SARFE10-PSSS055:GRATING_SP",
"SARFE10-PSSS059:CRYSTAL_SP",
"SARFE10-PSSS059:SPC_ROI_YMIN",
"SARFE10-PSSS059:SPC_ROI_YMAX",
]
####################
# Upstream attenuator OATT053
pvs_OATT053_old = [
"SARFE10-OATT053:MOTOR_1",
"SARFE10-OATT053:MOTOR_1.RBV",
@ -169,6 +171,7 @@ pvs_OATT053_old = [
####################
# New Upstream attenuator OATT053
pvs_OATT053 = [
"SARFE10-OATT053:photonenergy", # Photon energy for Transmission
"SARFE10-OATT053:transmission", # Total Transmission of all stages
@ -183,19 +186,183 @@ pvs_OATT053 = [
"SARFE10-OATT053:MOTOR_6", # motor Motor 6
]
###################
# Beam profile monitor PPRM053
pvs_PPRM053 = [
"SARFE10-PPRM053:MOTOR_PROBE.RBV",
#"SARFE10-PPRM053:FPICTURE",
#"SARFE10-PPRM064:FPICTURE", # TODO move to correct place
]
###################
# Bernina mono
pvs_Bernina = [
# Diode PDIM053
# pvs_PDIM053 = [
# ]
###################
# Spectrometer PSSS059
pvs_PSSS059 = [
"SARFE10-PSSS055:MOTOR_X1.RBV",
"SARFE10-PSSS055:MOTOR_Y1.RBV",
"SARFE10-PSSS055:MOTOR_ROT_X1.RBV",
"SARFE10-PSSS055:MOTOR_PROBE.RBV",
"SARFE10-PSSS059:MOTOR_X3.RBV",
"SARFE10-PSSS059:MOTOR_Y3.RBV",
"SARFE10-PSSS059:MOTOR_ROT_X3.RBV",
"SARFE10-PSSS059:MOTOR_Y4.RBV",
"SARFE10-PSSS059:MOTOR_ROT_X4.RBV",
"SARFE10-PSSS059:MOTOR_X5.RBV",
"SARFE10-PSSS059:MOTOR_Y5.RBV",
"SARFE10-PSSS059:MOTOR_Z5.RBV",
"SARFE10-PSSS055:GRATING_SP",
"SARFE10-PSSS059:CRYSTAL_SP",
"SARFE10-PSSS059:SPC_ROI_YMIN",
"SARFE10-PSSS059:SPC_ROI_YMAX",
"SARFE10-PSSS055:MOTOR_PROBE.RBV",
]
###################
# PPRM064
# pvs_PPRM064 = [
# ]
###################
# Alvra M1 horizontal offset mirror
# pvs_OOMH064 = [
# ]
###################
# PPRM066
# pvs_PPRM066 = [
# ]
###########################################################################
#### BERNINA BRANCH until DCM
###################
# Bernina photon energy
pvs_photon_energy_bernina = [
"SAROP21-ARAMIS:ENERGY_SP",
"SAROP21-ARAMIS:ENERGY",
]
###################
# Bernina apertures OAPU092
pvs_OAPU092_bernina = [
"SAROP21-OAPU092:MOTOR_X.RBV",
"SAROP21-OAPU092:MOTOR_Y.RBV",
"SAROP21-OAPU092:MOTOR_W.RBV",
"SAROP21-OAPU092:MOTOR_H.RBV",
]
###################
# Bernina M1 vertical offset mirror
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",
]
###################
# Bernina post-M1 screen PPRM094
pvs_PPRM094_bernina = [
"SAROP21-PPRM113:MOTOR_PROBE",
#"SAROP21-PPRM113:FPICTURE",
]
###################
# Bernina M2 vertical offset mirror
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",
]
###################
# Bernina post-M2 screen PSCR097
pvs_PSCR097_bernina = [
"SAROP21-PSCR097:MOTOR_Y1.RBV",
]
###################
# Bernina DCM ODCM098
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
"SAROP21-ODCM098:ENERGY", # DCM photon energy
]
###################
# Bernina apertures OAPU102
pvs_OAPU102_bernina = [
"SAROP21-OAPU102:MOTOR_X.RBV",
"SAROP21-OAPU102:MOTOR_Y.RBV",
"SAROP21-OAPU102:MOTOR_W.RBV",
"SAROP21-OAPU102:MOTOR_H.RBV",
]
###################
# Bernina spontaneous radiation monitor PSRD103
pvs_PSRD103_bernina = [
"SAROP21-PSRD103:MOTOR_PROBE",
]
###################
# Bernina beam intensity and position monitor PBPS113 (alias PBPS103)
pvs_PBPS113_bernina = [
"SAROP21-PBPS103:MOTOR_X1.DRBV",
"SAROP21-PBPS103:MOTOR_Y1.DRBV",
"SAROP21-PBPS103:MOTOR_X1.RBV",
@ -205,8 +372,33 @@ pvs_Bernina = [
]
###################
# Bernina pulse-picker OPPI113
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
]
###################
# Bernina screen PPRM113
pvs_PPRM113_bernina = [
"SAROP21-PPRM113:MOTOR_PROBE.RBV",
]
###########################################################################
#### CRISTALLINA BRANCH
####################
# First Cristallina horizontal offset mirror OOMH067
# Cristallina M1 horizontal offset mirror OOMH067
pvs_OOMH067 = [
"SAROP31-OOMH067:W_X.RBV",
"SAROP31-OOMH067:W_Y.RBV",
@ -222,14 +414,17 @@ pvs_OOMH067 = [
"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
# Cristallina M2 horizontal offset mirror OOMH084
pvs_OOMH084 = [
"SAROP31-OOMH084:W_X.RBV",
"SAROP31-OOMH084:W_Y.RBV",
@ -245,14 +440,18 @@ pvs_OOMH084 = [
"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",
@ -260,8 +459,34 @@ pvs_OAPU107 = [
"SAROP31-OAPU107:MOTOR_Y.RBV",
]
###################
## Double channel-cut monochromator ODCC110
pvs_ODCC110 = [
"SAROP31-ODCC110:MOT_RX1.RBV",
"SAROP31-ODCC110:MOT_RX2.RBV",
"SAROP31-ODCC110:MOT_ENY.RBV",
"SAROP31-ODCC110:MOT_OFS.RBV",
"SAROP31-ODCC110:MOT_TX1.RBV",
"SAROP31-ODCC110:ENC_RX11",
"SAROP31-ODCC110:ENC_RX12",
"SAROP31-ODCC110:ENC_RX21",
"SAROP31-ODCC110:ENC_RX22",
]
###################
## Infra-channel-cut-crystals screen PSCR110110
pvs_PSCR110 = [
"SAROP31-PSCR110:MOT_TY1.RBV",
]
###################
## Beam position and intensity monitor PBPS113
pvs_PBPS113 = [
"SAROP31-PBPS113:MOTOR_X1.DRBV",
"SAROP31-PBPS113:MOTOR_Y1.DRBV",
@ -270,20 +495,34 @@ pvs_PBPS113 = [
"SAROP31-PBPS113:MOTOR_PROBE.RBV",
]
###################
# Diode PDIM113
pvs_PDIM113 = [
"SAROP31-PDIM113: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.RBV",
"SAROP31-OAPU149:MOTOR_Y.RBV",
@ -291,8 +530,10 @@ pvs_OAPU149 = [
"SAROP31-OAPU149:MOTOR_H.RBV",
]
###################
# Beam position and intensity monitor PBPS149
pvs_PBPS149 = [
"SAROP31-PBPS149:MOTOR_X1.DRBV",
"SAROP31-PBPS149:MOTOR_Y1.DRBV",
@ -301,14 +542,18 @@ pvs_PBPS149 = [
"SAROP31-PBPS149:MOTOR_PROBE.RBV",
]
###################
# Beam profile monitor PPRM150
pvs_PPRM150 = [
"SAROP31-PPRM150:MOTOR_PROBE.RBV",
]
####################
# Attenuators OATA150
# Attenuators OATA150, old
pvs_OATA150_old = [
"SAROP31-OATA150:MOTOR_1.RBV",
"SAROP31-OATA150:MOTOR_2.RBV",
@ -323,8 +568,10 @@ pvs_OATA150_old = [
"SAROP31-OATA150:MOT2TRANS.VALD"
]
####################
# New Attenuators OATA150
# Attenuators OATA150
pvs_OATA150 = [
"SAROP31-OATA150:photonenergy", # ai Photon energy for Transmission SAROP31-CPCL-OSAT150 swissfel
"SAROP31-OATA150:transmission", # ai Total Transmission of all stages SAROP31-CPCL-OSAT150 swissfel
@ -337,20 +584,25 @@ pvs_OATA150 = [
"SAROP31-OATA150:MOTOR_4", # motor Motor 4 SAROP31-CPPM-MOT7171 swissfel
"SAROP31-OATA150:MOTOR_5", # motor Motor 5 SAROP31-CPPM-MOT7171 swissfel
"SAROP31-OATA150:MOTOR_6", # motor Motor 6
"SAROP31-OATA150:UsrRec.TC1", # current transmission
"SAROP31-OATA150:UsrRec.TR1", # resulting transmission
"SAROP31-OATA150:UsrRec.TD", # setpoint transmission
]
####################
# Pulse picker OPPI151
pvs_OPPI151 = [
"SAROP31-OPPI151:MOTOR_X.RBV",
"SAROP31-OPPI151:MOTOR_Y.RBV",
"SAROP31-OPPI151:MOTOR_X1.RBV", # X1 instead of X
"SAROP31-OPPI151:MOTOR_Y1.RBV", # Y1 instead of X
"SAROP31-OPPI151:TC1", # Pulse picker temperature
]
####################
## Horizontal offset mirror ODMV152
pvs_ODMV152 = [
"SAROP31-ODMV152:W_X.RBV",
"SAROP31-ODMV152:W_Y.RBV",
@ -364,8 +616,10 @@ pvs_ODMV152 = [
"SAROP31-ODMV152:TX.RBV",
]
###########################
# Vertical KB mirror OKBV153
pvs_OKBV153 = [
"SAROP31-OKBV153:W_X.RBV",
"SAROP31-OKBV153:W_Y.RBV",
@ -381,14 +635,18 @@ pvs_OKBV153 = [
"SAROP31-OKBV153:TX2.RBV",
]
####################
# Screen between the KB's PSCD153
pvs_PSCD153 = [
"SAROP31-PSCD153:MOTOR_PROBE.RBV"
]
###########################
# Horizontal KB mirror OKBH154
pvs_OKBH154 = [
"SAROP31-OKBH154:W_X.RBV",
"SAROP31-OKBH154:W_Y.RBV",
@ -403,16 +661,38 @@ pvs_OKBH154 = [
"SAROP31-OKBH154:TX2.RBV",
]
###########################
# Izero-slit unit
pvs_i0_chamber = [
"SARES30-MCS20610:MCS1.RBV",
"SARES30-MCS20610:MCS2.RBV",
"SARES30-MCS20610:MCS3.RBV",
"SARES30-MCS20610:MCS4.RBV",
"SARES30-MCS20610:MCS5.RBV"
]
###########################################################################
#### GENERAL PURPOSE EXPERIMENT
####################
# Standa motors (mainly used with the X-ray eye)
pvs_standa = [
"SARES30-MOBI1:MOT_1.RBV",
"SARES30-MOBI1:MOT_2.RBV",
"SARES30-MOBI1:MOT_3.RBV",
]
####################
# Newport 300 mm stage
pvs_newport_300 = [
"SARES30-MOBI1:MOT_5.RBV",
]
@ -420,6 +700,7 @@ pvs_newport_300 = [
###############################
# Smaract stages mini XYZ from SwissMX
pvs_smaract_xyz = [
"SARES30-MCS2750:MOT_1.RBV",
"SARES30-MCS2750:MOT_1.VAL",
@ -429,15 +710,19 @@ pvs_smaract_xyz = [
"SARES30-MCS2750:MOT_3.VAL",
]
####################
# Attocube motors
pvs_attocube = [
"SARES30-ATTOCUBE:A0-POS",
"SARES30-ATTOCUBE:A1-POS",
]
###############################
# Smaract stages from Juraj
pvs_smaract_juraj = [
"SARES30-XSMA156:X:MOTRBV",
"SARES30-XSMA156:Y:MOTRBV",
@ -447,32 +732,148 @@ pvs_smaract_juraj = [
"SARES30-XSMA156:Rz:MOTRBV",
]
pvs_diffractometer_1 = [
"SARES30-CPCL-ECMC02:ROT2THETA-PosAct",
"SARES30-CPCL-ECMC02:ROTTHETA-PosAct",
"SARES30-CPCL-ECMC02:TRXBASE-PosAct",
"SARES30-CPCL-ECMC02:TRY-PosAct",
"SARES30-CPCL-ECMC02:TRX-PosAct",
"SARES30-CPCL-ECMC02:TRZ-PosAct",
"SARES30-CPCL-ECMC02:TD-PosAct",
###############################
# General purpose JJ-slits
pvs_JJ_slits = [
"SARES30-MOBI2:MOT_X.RBV",
"SARES30-MOBI2:MOT_Y.RBV",
"SARES30-MOBI2:MOT_W.RBV",
"SARES30-MOBI2:MOT_H.RBV",
]
pvs = (
###########################################################################
#### CRISTALLINA-Q EXPERIMENT
###############################
# Diffractometer 1
ID_dm1 = "SARES31-GPS"
pvs_diffractometer_1 = [
ID_dm1 + ":ROT2THETA-PosAct",
ID_dm1 + ":ROTTHETA-PosAct",
ID_dm1 + ":TRXBASE-PosAct",
ID_dm1 + ":TRY-PosAct",
ID_dm1 + ":TRX-PosAct",
ID_dm1 + ":TRZ-PosAct",
ID_dm1 + ":TD-PosAct",
ID_dm1 + ":m1s012-Drv01-TrqAct", # TRYBASE Mot 1 torque
ID_dm1 + ":m1s013-Drv01-TrqAct", # TRYBASE Mot 2 torque
ID_dm1 + ":m1s014-Drv01-TrqAct", # TRYBASE Mot 3 torque
ID_dm1 + ":m1s015-Drv01-TrqAct", # TRYBASE Mot 4 torque
ID_dm1 + ":m1s027-Drv01-TrqAct", # TD Mot torque
ID_dm1 + ":m1s011-Drv01-TrqAct", # TRXBASE Mot torque
ID_dm1 + ":m1s030-Drv01-TrqAct", # TRX Mot torque
ID_dm1 + ":m1s031-Drv01-TrqAct", # TRY Mot torque
ID_dm1 + ":m1s029-Drv01-TrqAct", # TRZ Mot torque
ID_dm1 + ":m1s010-Drv01-TrqAct", # ROT2THETA Mot torque
ID_dm1 + ":m1s028-Drv01-TrqAct", # ROTTHETA Mot torque
]
###############################
# Diffractometer 2
ID_dm2 = "SARES32-GPS"
pvs_diffractometer_2 = [
ID_dm2 + ":ROTTHETA-PosAct",
ID_dm2 + ":TRXBASE-PosAct",
ID_dm2 + ":TRY-PosAct",
ID_dm2 + ":TRX-PosAct",
ID_dm2 + ":ROT2THETA-PosAct",
ID_dm2 + ":TRZ-PosAct",
ID_dm2 + ":TD-PosAct",
ID_dm2 + ":ROTX-PosAct",
ID_dm2 + ":ROTZ-PosAct",
ID_dm2 + ":m0s012-Drv01-TrqAct", # TRYBASE Mot 1 torque
ID_dm2 + ":m0s012-Drv01-TrqAct", # TRYBASE Mot 2 torque
ID_dm2 + ":m0s014-Drv01-TrqAct", # TRYBASE Mot 3 torque
ID_dm2 + ":m0s015-Drv01-TrqAct", # TRYBASE Mot 4 torque
ID_dm2 + ":m0s027-Drv01-TrqAct", # TD Mot torque
ID_dm2 + ":m0s011-Drv01-TrqAct", # TRXBASE Mot torque
ID_dm2 + ":m0s030-Drv01-TrqAct", # TRX Mot torque
ID_dm2 + ":m0s032-Drv01-TrqAct", # ROTX Mot torque
ID_dm2 + ":m0s033-Drv01-TrqAct", # ROTZ Mot torque
ID_dm2 + ":m0s010-Drv01-TrqAct", # ROT2THETA Mot torque
ID_dm2 + ":m0s028-Drv01-TrqAct", # ROTTHETA Mot torque
]
###############################
# DilSc
ID_DilSc_LakeShore = "SARES31-DIL-LS1"
pvs_DilSc_Lakeshore = [
ID_DilSc_LakeShore + "A_KELVIN",
ID_DilSc_LakeShore + "7_KELVIN",
ID_DilSc_LakeShore + "8_KELVIN",
ID_DilSc_LakeShore + "A_RES",
ID_DilSc_LakeShore + "7_RES",
ID_DilSc_LakeShore + "8_RES",
]
###############################
# Huber vertical stage
pvs_huber_z= [
"SARES30-MOBI2:MOT_Z.RBV",
]
###########################################################################
#### CRISTALLINA-MX EXPERIMENT
###############################
# Fast XY-stage
pvs_swissmx = [
"SAR-EXPMX:MOT_FX.RBV",
"SAR-EXPMX:MOT_FY.RBV",
]
###########################################################################
#### CHANNEL GROUPS
###############################
# All channels (slic updates the list based on these)
pv_channels = (
pvs_machine
# + pvs_RF
# + pvs_undulator
+ pvs_gas_monitor
+ pvs_undulator
+ pvs_OAPU044
+ pvs_gas_monitor
+ pvs_PBPS053
+ pvs_OATT053
+ pvs_PPRM053
# + pvs_PDIM053
+ pvs_PSSS059
# + pvs_PPRM064
# + pvs_OOMH064
# + pvs_PPRM066
+ pvs_OOMH067
+ pvs_PSCR068
+ pvs_OOMH084
+ pvs_PPRM085
+ pvs_OAPU107
+ pvs_ODCC110
+ pvs_PSCR110
+ pvs_PBPS113
+ pvs_PDIM113
+ pvs_PPRM113
+ pvs_OLAS147
+ pvs_OAPU149
@ -484,13 +885,94 @@ pvs = (
+ pvs_OKBV153
+ pvs_PSCD153
+ pvs_OKBH154
+ pvs_i0_chamber
+ pvs_standa
# + pvs_newport_300
# + pvs_newport_300
# + pvs_smaract_xyz
+ pvs_diffractometer_1
# + pvs_Bernina
+ pvs_diffractometer_2
+ pvs_DilSc_Lakeshore
+ pvs_huber_z
+ pvs_JJ_slits
# + pvs_attocube
# + pvs_smaract_juraj
# + 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_OPPI113_bernina
# + pvs_PPRM113_bernina
)
pv_channels_cristallina_beamline = (
pvs_machine
# + pvs_RF
+ pvs_undulator
+ pvs_OAPU044
+ pvs_gas_monitor
+ pvs_PBPS053
+ pvs_OATT053
+ pvs_PPRM053
# + pvs_PDIM053
+ pvs_PSSS059
# + pvs_PPRM064
# + pvs_OOMH064
# + pvs_PPRM066
+ pvs_OOMH067
+ pvs_PSCR068
+ pvs_OOMH084
+ pvs_PPRM085
+ pvs_OAPU107
+ pvs_ODCC110
+ pvs_PSCR110
+ pvs_PBPS113
+ pvs_PDIM113
+ pvs_PPRM113
+ pvs_OLAS147
+ pvs_OAPU149
+ pvs_PBPS149
+ pvs_PPRM150
+ pvs_OATA150
+ pvs_OPPI151
+ pvs_ODMV152
+ pvs_OKBV153
+ pvs_PSCD153
+ pvs_OKBH154
+ pvs_i0_chamber
)
# + pvs_attocube
# + pvs_smaract_juraj
pv_channels_bernina_DCM = (
pvs_machine
# + pvs_RF
+ pvs_undulator
+ pvs_OAPU044
+ pvs_gas_monitor
+ pvs_PBPS053
+ pvs_OATT053
+ pvs_PPRM053
# + pvs_PDIM053
+ pvs_PSSS059
# + pvs_PPRM064
# + pvs_OOMH064
# + pvs_PPRM066
+ 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_OPPI113_bernina
+ pvs_PPRM113_bernina
)

313
cristallina.py Normal file → Executable file
View File

@ -1,15 +1,18 @@
#!/usr/bin/env python
import sys
import os
from loguru import logger
# at the moment this allows us to group the subdirectories as modules easily
# TODO: a more general way would be to have this cristallina as a installed package
os.chdir("/sf/cristallina/applications/slic/cristallina")
# setup logging
from loguru import logger
def setup_logging():
def setup_general_logging():
"""Setup logging to console and files in both the snapshots and
the respective pgroup.
"""
logger.remove()
logger.add(
sys.stderr,
@ -19,18 +22,19 @@ def setup_logging():
logger.info("Loading started.")
# create file handler which logs
# TODO: better directory for general log files?
try:
logger.add(
"/sf/cristallina/applications/slic/cristallina/log/cristallina.log",
"/sf/cristallina/applications/beamline/snapshots/slic_logs/cristallina.log",
format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
level="DEBUG",
rotation="1 week",
)
logger.info("Logging to snapshots.")
except PermissionError as e:
logger.warning("Cannot write log file.")
logger.warning("Cannot write log file to snapshots.")
logger.warning(e)
def setup_logging_pgroup(pgroup, level="INFO"):
try:
logger.add(
@ -39,130 +43,114 @@ def setup_logging_pgroup(pgroup, level="INFO"):
level=level,
rotation="1 week",
)
logger.info(f"Logging to pgroup {pgroup}.")
except PermissionError as e:
logger.warning(f"Cannot write log file to pgroup {pgroup}.")
# We setup the logging before going further so that
# other modules can write startup messages into the log file.
setup_logging()
setup_general_logging()
# TODO: this is later overwritten, probably not intended that way?
# from epics import PV
from beamline.alignment_laser import AlignmentLaser
from devices.alignment_laser import AlignmentLaser
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.xdiagnostics.intensitymonitor import IntensityMonitorPBPS
from slic.devices.general.motor import Motor
from slic.devices.xoptics.pulsepicker import PulsePicker
from slic.utils import devices, Marker, as_shortcut
from slic.utils import devices, Marker, as_shortcut, snapshot
from slic.utils import Channels, Config, Elog, Screenshot, PV
from slic.core.acquisition.fakeacquisition import FakeAcquisition
from slic.devices.timing.events import CTASequencer
from channels.bs_channels import (
detectors,
detectors_with_config,
detectors_MX,
bs_channels,
camera_channels,
)
from channels.pv_channels import pvs
from channels.pv_channels import pv_channels
from spreadsheet import overview
from channels.bs_channels import bs_channels_bernina_DCM
from channels.pv_channels import pv_channels_bernina_DCM
from channels.bs_channels import bs_channels_cristallina_beamline
from channels.pv_channels import pv_channels_cristallina_beamline
# from channels_minimal import detectors_min, channels_min, pvs_min
from devices.pp_shutter import PP_Shutter
################# DEVICES #################
dummy = DummyAdjustable(units="au")
# Attenuators
from slic.devices.xoptics.aramis_attenuator import Attenuator
from devices.knife_edge import KnifeEdge
from devices.standa import standa
from devices.newport import newport
Newport_large = Motor("SARES30-MOBI1:MOT_5")
OWIS = Motor("SARES30-MOBI1:MOT_6") # small OWIS linear stage
attenuator = Attenuator("SAROP31-OATA150", description="Cristallina attenuator OATA150")
upstream_attenuator = Attenuator("SARFE10-OATT053", description="Aramis attenuator OATT053")
def test_attenuator():
tfundamental = attenuator.get_transmission()
try:
assert tfundamental > 0
except TypeError:
logger.warning("No transmission value reported from {attenuator.ID}")
dummy2 = DummyAdjustable(ID='DUMMY2', name='Dummy2', units="au")
# test_attenuator()
# from devices.knife_edge import KnifeEdge
# from devices.standa import standa
# from devices.newport import newport
front_end_attenuator = Attenuator(
"SARFE10-OATT053", description="Front end attenuator OATT053"
)
cta = CTASequencer("SAR-CCTA-ESC")
pbps113 = IntensityMonitorPBPS(
"SAROP31-PBPS113",
# vme_crate="SAROP31-CVME-PBPS1", # please check this!
# link=9,
description="Intensity/position monitor in the optics hutch",
from beamline.components import (
upstream_attenuator,
attenuator,
pp_shutter,
pulsepicker,
alignment_laser,
pbps113,
slits107,slits149,slitsi0,
mono,
m3,
i0,
)
pbps149 = IntensityMonitorPBPS(
"SAROP31-PBPS149",
# vme_crate="SAROP31-CVME-PBPS2", # please check this!
# link=9,
description="Intensity/position monitor in the experimental hutch",
)
from beamline.components import kbHor, kbVer
from systems.components import cta
from gp_exp.components import Newport_large, OWIS, slitsjj
# Undulators
from beamline import undulator
undulators = undulator.Undulators()
logger.info(
f"Using undulator (Aramis) offset to PSSS energy of {undulator.energy_offset} eV."
)
logger.info(f"Using undulator (Aramis) offset to PSSS energy of {undulator.energy_offset} eV.")
# Shutter
shutter = PP_Shutter(
"SARES30-LTIM01-EVR0:RearUniv0-Ena-SP", name="Cristallina pulse picker shutter"
) # Shutter button when using the pulse picker
pulsepicker = PulsePicker(
"SAROP31-OPPI151",
"SARES30-LTIM01-EVR0:Pul3",
name="Cristallina X-ray pulse picker OPPI151",
)
# Undulators & mono
from beamline import photon_energy
# Alignment laser
alignment_laser = AlignmentLaser(
"SAROP31-OLAS147:MOTOR_1", name="Cristallina alignment laser OLAS147"
)
cr_photon_energy = photon_energy.PhotonEnergy()
logger.info(f"Photon energy offsets: PSSS {photon_energy.energy_offset_PSSS} eV , DCCM {photon_energy.energy_offset_DCCM} eV, undulator {photon_energy.energy_offset_undulators} eV.")
# Pulse picker shutter
#pp_shutter = PP_Shutter(
# "SARES30-LTIM01-EVR0:RearUniv0-Ena-SP", name="Cristallina pulse picker shutter"
#) # Shutter buttton when using the pulse picker
## Slits
from slic.devices.xoptics import slits
## Smaract & attocube stages
from devices.smaract_device_def import smaract_Juraj, smaract_mini_XYZ
from devices.attocube_device_def import attocube
from devices.jj_device_def import jjslits
# KBs
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")
from gp_exp.smaract_device_def import smaract_Juraj, smaract_mini_XYZ
# from gp_exp.attocube_device_def import attocube # disabled fbecause of issues with Adjustables
from gp_exp.jj_device_def import jjslits
# Bernina monochromator
from beamline.bernina_mono import BerninaMono
@ -170,123 +158,157 @@ from beamline.bernina_mono import BerninaMono
BerninaDCM = BerninaMono("SAROP21-ODCM098")
# Diffractometer
from devices.diffractometer import Diffractometer
from crq_exp.diffractometer import Diffractometer
dm1 = Diffractometer("SARES31-GPS")
dm2 = Diffractometer("SARES32-GPS")
diffractometer = Diffractometer("diffractometer")
# Set according to which diffractometer is being used
diffractometer = dm1
# Dilution fridge
#from crq_exp.dilsc import Dilution
try:
dilution = Dilution()
except Exception as e:
logger.warning(f"Error: Could not connect to dilution fridge. {e}")
dilution = None
from devices.dilsc import Dilution
dilution = Dilution()
# MX adajustables
# import mx.mx_adjustables
# Temporary quick hack thermometer addition for stand
#TODO: make in a thermometer class ...
T_reg = PVAdjustable('SARES31-DIL-LS1:A_KELVIN')
T_plato = PVAdjustable('SARES31-DIL-LS1:7_KELVIN')
T_chip = PVAdjustable('SARES31-DIL-LS1:8_KELVIN')
################# Stand setup ##################
# 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 stand.time import Time
# setup spreadsheet for transmission to stand
spreadsheet = Spreadsheet(
{
"Transmission" : attenuator.trans1st,
adjs_for_spreadsheet = {
"Time": Time(),
"T_reg": T_reg,
"T_plato": T_plato,
"T_chip":T_chip,
"Transmission": attenuator.trans1st,
"Upstream Transmission": upstream_attenuator.trans1st,
"Energy_setpoint" : undulators,
"Energy_offset": undulator.energy_offset,
"Energy_setpoint": cr_photon_energy,
"Energy_offset undulator": photon_energy.energy_offset_undulators,
"TD": diffractometer.td,
"TRX": diffractometer.tr_x,
"TRY": diffractometer.tr_y,
"TRXBASE": diffractometer.trx_base,
"TRYBASE": diffractometer.try_base,
"THETA": diffractometer.theta,
"TWOTHETA": diffractometer.twotheta,
"Magnet_X": dilution.x,
"Magnet_Y": dilution.y,
"Magnet_Z": dilution.z,
"DilSc_T_plato": dilution.T_plato,
"DilSc_T_pucksensor": dilution.T_pucksensor,
},
"TWOTHETA": diffractometer.twotheta,
}
if dilution is not None:
adjs_dilsc = {
#"Magnet_X": dilution.x,
#"Magnet_Y": dilution.y,
#"Magnet_Z": dilution.z,
"DilSc_T_chip": T_chip,
"DilSc_T_plato": T_plato,
#"DilSc_T_chip": dilution.T_chip,
"DilSc_T_pucksensor": T_reg,
}
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"),
host="saresc-vcons-02.psi.ch",
port=9090,
)
try:
from stand_client import Client
from stand.client import Client
stand_host = "saresc-vcons-02.psi.ch"
stand_client = Client(host=stand_host, port=9090)
response = stand_client.get()
logger.info("Connected to stand server")
except Exception as error:
# catching with a broad net because different connection errors can occur.
# catching excpetions with a broad net because different connection errors can occur.
logger.warning(f"Cannot connect to stand server on {stand_host}. Disabling spreadsheet.")
spreadsheet = None
spreadsheet = None
# spreadsheet = Spreadsheet(adjs, placeholders=PLACEHOLDERS, host="127.0.0.1", port=8080))
################# DAQ Setup #################
instrument = "cristallina"
# experiment_type = "MX" # "MX" or "Q" for the different setups and detector configurations
experiment_type = "Q" # "MX" or "Q" for the different setups and detector configurations
# pgroup = "p19739" # commissioning March 2022 -- July 2022
# pgroup = "p20443" # commissioning Wavefront Sensor August 2022 (active)
# pgroup = "p20558" # SwissMX commissioning 3
# pgroup = "p20557" # CrQ PMS commisioning 1
# pgroup = "p20509" # CrQ commisioning DilSc1
# pgroup = "p20519" # beamline commissioning 2
# pgroup = "p20841" # CrQ PMS commisioning 2 (Jan 2023)
# pgroup = "p20993" # CrQ commisioning DilSc2 (March 2023)
# pgroup = "p21147" # SAXS
# pgroup = "p21238" # Cristallina photon diagnostics p-group with Chris
# pgroup = "p21224" # SwissMX commisioning 7
# pgroup = "p19150" # Scratch
# pgroup = "p19152" # Scratch
# pgroup = "p20840" # Cr beamline commisioning (Jan-Feb 2023)
# pgroup = "p21261" # CrQ PMS-3 July 2023
# pgroup = "p21528" # Cr-MX Colletier 2023-09-05
# pgroup = "p21516" # Beamline commissioning September 26-27, November 7 2023
# pgroup = "p21563" # Dil-Sc / diffractometer / tilted bunch / LiErF4 (/ TmVO4)
# pgroup = "p21569" # Dil-Sc / diffractometer / tilted bunch / LiErF4 (/ TmVO4), November 17-
# pgroup = "p21592" # HVE commissioning
# pgroup = "p21640" # Dil-Sc / diffractometer / LiErF4 : 4 March 2024
# pgroup = "p21920" # Beamline commissioning 2024
pgroup = "p21741" # CrQ - DilSc - SAXS LiHoF4
from pgroups import pgroup, pgroup_scratch
# setup pgroup specific logger
setup_logging_pgroup(pgroup)
daq = SFAcquisition(
instrument,
pgroup,
default_channels=bs_channels,
default_pvs=pvs,
default_detectors=detectors,
rate_multiplicator=1,
spreadsheet=spreadsheet,
)
logger.info(f"Using Cristallina{experiment_type} setup for detectors.")
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)
# default_channels=bs_channels,
# default_pvs=pv_channels,
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.
daq.update_config_pvs()
try:
daq.update_config_pvs()
except Exception as e:
print(e)
from acquisition import multiple_daqs
DAQS = multiple_daqs.generate_DAQS(instrument, pgroup,bs_channels, pvs, detectors)
DAQS = multiple_daqs.generate_DAQS(instrument, pgroup, bs_channels, pv_channels, detectors, spreadsheet)
# daq = FakeAcquisition(instrument, pgroup)
# daqPV = PVAcquisition(instrument, pgroup, default_channels=channels_ks) # workaround for KS not going to DB
# daq_fake = FakeAcquisition(instrument, pgroup)
# daq_PV_only = PVAcquisition(instrument, pgroup, default_channels=channels_ks) # workaround for KS not going to DB
# Run the scan only when gas monitor value larger than 10uJ (and smaller than 2000uJ):
# required fraction defines ammount of data recorded to save the step and move on to the next one
check_intensity_gas_monitor = PVCondition(
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-US",
vmin=4,
vmin=400,
vmax=2000,
wait_time=0.5,
required_fraction=0.8,
@ -295,5 +317,6 @@ check_intensity_gas_monitor = PVCondition(
scan = Scanner(default_acquisitions=[daq], condition=check_intensity_gas_monitor)
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.")

74
crq_exp/diffractometer.py Executable file
View File

@ -0,0 +1,74 @@
""" Diffractometer
motorized axis:
SARES30-CPCL-ECMC02:ROT2THETA
SARES30-CPCL-ECMC02:ROTTHETA
SARES30-CPCL-ECMC02:TRXBASE
SARES30-CPCL-ECMC02:TRYBASE
"""
from slic.core.adjustable import Adjustable, Linked
from slic.core.device import Device, SimpleDevice
from slic.devices.general.motor import Motor
class Diffractometer(Device):
def __init__(self, ID, **kwargs):
super().__init__(ID, **kwargs)
self.twotheta = Motor(ID + ":ROT2THETA") # , ID=None, name=None, units=None, internal=False):
self.theta = Motor(ID + ":ROTTHETA") # , ID=None, name=None, units=None, internal=False):
self.trx_base = Motor(ID + ":TRXBASE") # , ID=None, name=None, units=None, internal=False):
self.try_base = Motor(ID + ":TRYBASE") # , ID=None, name=None, units=None, internal=False):
self.tr_x = Motor(ID + ":TRX")
self.tr_y = Motor(ID + ":TRY")
self.tr_z = Motor(ID + ":TRZ")
self.td = Motor(ID + ":TD")
if ID == "SARES32-GPS":
self.name = "DM2: Cristallina pulsed magnet diffractometer"
# This diffractometer also has extra swivel stages
self.rotx = Motor(ID + ":ROTX")
self.rotz = Motor(ID + ":ROTZ")
if ID == "SARES31-GPS":
self.name = "DM1: Cristallina dilution fridge diffractometer"
# class Diffractometer(Device):
# def __init__(self, ID, motor_naming="MOTOR", **kwargs):
# super().__init__(ID, **kwargs)
# self.twotheta = Motor("SARES30-CPCL-ECMC02:ROT2THETA") # , ID=None, name=None, units=None, internal=False):
# self.theta = Motor("SARES30-CPCL-ECMC02:ROTTHETA") # , ID=None, name=None, units=None, internal=False):
# self.trx_base = Motor("SARES30-CPCL-ECMC02:TRXBASE") # , ID=None, name=None, units=None, internal=False):
# self.try_base = Motor("SARES30-CPCL-ECMC02:TRYBASE") # , ID=None, name=None, units=None, internal=False):
# self.tr_x = Motor("SARES30-CPCL-ECMC02:TRX")
# self.tr_y = Motor("SARES30-CPCL-ECMC02:TRY")
# self.tr_z = Motor("SARES30-CPCL-ECMC02:TRZ")
# self.td = Motor("SARES30-CPCL-ECMC02:TD")
# Set speed:
# diffractometer.theta._motor.VELO = 0.25
class ThetasCombined(Linked):
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs)
def connect_axis(self):
"""
calculate offset to match scale factor
"""
offset = self.secondary.get_current_value() - self.primary.get_current_value() * self.scale_factor
self.offset = offset

182
crq_exp/dilsc.py Executable file
View File

@ -0,0 +1,182 @@
""" DilSc prototype
"""
from slic.core.adjustable import Adjustable, PVAdjustable
from slic.core.device import Device, SimpleDevice
from frappy.client import SecopClient
from frappy import states
from frappy.datatypes import StatusType
class Dilution(Device):
def __init__(self, **kwargs):
self.name = 'DilSc'
ID = self.name
super().__init__(ID, **kwargs)
self.address = 'dilsc.psi.ch:5000'
self.dilsc = SecopClient(self.address)
self.dilsc.connect()
self.x = MagnetCoil("X", self.dilsc, 'x', limit_low=-0.6, limit_high=0.6)
self.y = MagnetCoil("Y", self.dilsc, 'y', limit_low=-0.6, limit_high=0.6)
self.z = MagnetCoil("Z", self.dilsc, 'z', limit_low=-5.2, limit_high=5.2)
self.T_plato = Thermometer('T_plato', self.dilsc, limit_low=0, limit_high=300)
self.T_chip = Thermometer('T_chip', self.dilsc, limit_low=0, limit_high=300)
self.T_reg = Thermometer('T_reg', self.dilsc, limit_low=0, limit_high=300)
class Thermometer(Adjustable):
def __init__(self, name, dilsc_connection, limit_low=-0.0001, limit_high=0.0001):
super().__init__(name, limit_low=limit_low, limit_high=limit_high)
self.dilsc = dilsc_connection
# Heater to regulate channel A on the Galgen LakeShore372. Give value in Ohm.
self.heater_resistance = 82
# Defines heater ranges and PID values for various control temperature regions.
self.heater_settings = [
{'range': 'off', 'pid': (800, 1, 0), 'temp_start': -1, 'temp_end': 0.00099},
{'range': '300uA', 'pid': (800, 1, 0), 'temp_start': 0.001, 'temp_end': 0.037},
{'range': '1mA', 'pid': (40, 14, 0), 'temp_start': 0.038, 'temp_end': 0.108},
{'range': '3mA', 'pid': (4, 15, 0), 'temp_start': 0.110, 'temp_end': 0.350},
{'range': '10mA', 'pid': (2, 12, 0), 'temp_start': 0.352, 'temp_end': 1.100},
{'range': '30mA', 'pid': (2, 60, 0), 'temp_start': 1.100, 'temp_end': 2.300}
]
def _check_connection(func):
def checker(self, *args, **kwargs):
if not self.dilsc.online:
raise ConnectionError(f'No connection to dilsc at {self.address}')
else:
return func(self, *args, **kwargs)
return checker
@_check_connection
def set_heater_range(self, range_value):
""" Sets the heater range for the control channel and sets the PID parameters for the associated control loop.
TODO: Consider redoing so that it only works for the T_reg channel.
TODO: the pid values are now sent with stringio and not saved as parameters in slic, this should be fixed.
-
"""
heater_range_map = {
'off': 0, '30uA': 1, '100uA': 2, '300uA': 3, '1mA': 4, '3mA': 5, '10mA': 6, '30mA': 7, '100mA': 8}
if range_value not in heater_range_map:
raise ValueError("Invalid range value. Allowed are: ['off','30uA','100uA','300uA','1mA','3mA','10mA','30mA','100mA']")
enum_value = heater_range_map[range_value]
self.dilsc.setParameter(self.name, 'htrrng', enum_value)
for setting in self.heater_settings:
if setting['range'] == range_value:
self.set_PID_parameters(*setting['pid'])
break
return
@_check_connection
def get_current_value(self):
cacheitem = self.dilsc.getParameter(f'{self.name}', 'value', trycache=False)
return cacheitem.value
@_check_connection
def set_target_value(self, value, adjust_heater_range=True):
if adjust_heater_range:
range_to_set = None
for setting in self.heater_settings:
if setting['temp_start'] <= value and setting['temp_end'] >= value:
range_to_set = setting['range']
if range_to_set != None:
self.set_heater_range(range_to_set)
else:
raise ValueError(f"Heater range for the target value {value} could not be set")
self.dilsc.setParameter(f'{self.name}', 'target', value)
@_check_connection
def get_target_value(self):
cacheitem = self.dilsc.getParameter(f'{self.name}', 'target', trycache=False)
return cacheitem.value
@_check_connection
def is_moving(self):
response = self.dilsc.getParameter(f'{self.name}','status', trycache=False)
return response[0][0] > StatusType.PREPARED
@_check_connection
def get_PID_parameters(self):
""" Returns the current PID parameters associated with the control loop for
this thermometer.
"""
# response = self.dilsc.getParameter(f'{self.name}','ctrlpars', trycache=False)
response = self.dilsc.execCommand('lscio', 'communicate', 'PID?')
return response
@_check_connection
def set_PID_parameters(self, p, i, d):
""" Sets the PID parameters for the associated control loop.
TODO:
- This still returns a timeout error but sets the correct values.
- The range is limited to less than the Lakeshore range allows, this needs
to be fixed in frappy.
"""
# self.dilsc.setParameter(f'{self.name}', 'ctrlpars', {'p': p, 'i': i, 'd': d})
command_string = f'PID {0},{p},{i},{d}; PID?'
self.dilsc.execCommand('lscio', 'communicate', command_string)
class MagnetCoil(Adjustable):
def __init__(self, name, dilsc_connection, direction, limit_low=-0.0001, limit_high=0.0001):
super().__init__(name, limit_low=-0.0001, limit_high=0.0001)
self.direction = direction.lower()
if self.direction not in ["x", "y", "z"]:
raise ValueError("Direction must be either x, y or z.")
self.dilsc = dilsc_connection
def _check_connection(func):
def checker(self, *args, **kwargs):
if not self.dilsc.online:
raise ConnectionError(f'No connection to dilsc at {self.address}')
else:
return func(self, *args, **kwargs)
return checker
@_check_connection
def get_current_value(self):
cacheitem = self.dilsc.getParameter(f'mf{self.direction}', 'value', trycache=False)
return cacheitem.value
@_check_connection
def set_target_value(self, value):
self.dilsc.setParameter(f'mf{self.direction}', 'target', value)
@_check_connection
def is_moving(self):
response = self.dilsc.getParameter(f'mf{self.direction}','status', trycache=False)
return response[0][0] > StatusType.PREPARED
@_check_connection
def set_ramp_speed(self, direction, value):
""" Sets ramp speed for a given direction (x,y or z) and value in T/min.
"""
if value > 0.5:
raise ValueError('Do not exceed 0.5 T/min unless you want a quench party')
if value <= 0:
raise ValueError('Only positive values are allowed')
if self.direction not in ["x", "y", "z"]:
raise ValueError("Direction must be either x, y or z.")
else:
self.dilsc.setParameter(direction, 'ramp', value)
return

View File

View File

@ -1,50 +0,0 @@
""" Diffractometer
motorized axis:
SARES30-CPCL-ECMC02:ROT2THETA
SARES30-CPCL-ECMC02:ROTTHETA
SARES30-CPCL-ECMC02:TRXBASE
SARES30-CPCL-ECMC02:TRYBASE
"""
from slic.core.adjustable import Adjustable, Linked
from slic.core.device import Device, SimpleDevice
from slic.devices.general.motor import Motor
class Diffractometer(Device):
def __init__(self, ID, motor_naming="MOTOR", **kwargs):
super().__init__(ID, **kwargs)
self.twotheta = Motor("SARES30-CPCL-ECMC02:ROT2THETA") # , ID=None, name=None, units=None, internal=False):
self.theta = Motor("SARES30-CPCL-ECMC02:ROTTHETA") # , ID=None, name=None, units=None, internal=False):
self.trx_base = Motor("SARES30-CPCL-ECMC02:TRXBASE") # , ID=None, name=None, units=None, internal=False):
self.try_base = Motor("SARES30-CPCL-ECMC02:TRYBASE") # , ID=None, name=None, units=None, internal=False):
self.tr_x = Motor("SARES30-CPCL-ECMC02:TRX")
self.tr_y = Motor("SARES30-CPCL-ECMC02:TRY")
self.tr_z = Motor("SARES30-CPCL-ECMC02:TRZ")
self.td = Motor("SARES30-CPCL-ECMC02:TD")
# Set speed:
# diffractometer.theta._motor.VELO = 0.25
class ThetasCombined(Linked):
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs)
def connect_axis(self):
"""
calculate offset to match scale factor
"""
offset = self.secondary.get_current_value() - self.primary.get_current_value() * self.scale_factor
self.offset = offset

View File

@ -1,102 +0,0 @@
""" DilSc prototype
"""
from slic.core.adjustable import Adjustable
from slic.core.device import Device, SimpleDevice
from frappy.client import SecopClient
from frappy import states
from frappy.datatypes import StatusType
class Dilution(Device):
def __init__(self, **kwargs):
self.name = 'DilSc'
ID = self.name
super().__init__(ID, **kwargs)
self.address = 'dilsc.psi.ch:5000'
self.dilsc = SecopClient(self.address)
self.dilsc.connect()
self.x = MagnetCoil("X", self.dilsc, 'x', limit_low=-0.6, limit_high=0.6)
self.y = MagnetCoil("Y", self.dilsc, 'y', limit_low=-0.6, limit_high=0.6)
self.z = MagnetCoil("Z", self.dilsc, 'z', limit_low=-5.2, limit_high=5.2)
self.T_plato = Thermometer('T_plato', self.dilsc, limit_low=0, limit_high=300)
self.T_pucksensor = Thermometer('T_pucksensor', self.dilsc, limit_low=0, limit_high=300)
class Thermometer(Adjustable):
def __init__(self, name, dilsc_connection, limit_low=-0.0001, limit_high=0.0001):
super().__init__(name, limit_low=limit_low, limit_high=limit_high)
self.dilsc = dilsc_connection
def _check_connection(func):
def checker(self, *args, **kwargs):
if not self.dilsc.online:
raise ConnectionError(f'No connection to dilsc at {self.address}')
else:
return func(self, *args, **kwargs)
return checker
@_check_connection
def get_current_value(self):
cacheitem = self.dilsc.getParameter(f'{self.name}', 'value', trycache=False)
return cacheitem.value
@_check_connection
def set_target_value(self, value):
self.dilsc.setParameter(f'{self.name}', 'target', value)
@_check_connection
def is_moving(self):
response = self.dilsc.getParameter(f'{self.name}','status', trycache=False)
return response[0][0] > StatusType.PREPARED
class MagnetCoil(Adjustable):
def __init__(self, name, dilsc_connection, direction, limit_low=-0.0001, limit_high=0.0001):
super().__init__(name, limit_low=-0.0001, limit_high=0.0001)
self.direction = direction.lower()
if self.direction not in ["x", "y", "z"]:
raise ValueError("Direction must be either x, y or z.")
self.dilsc = dilsc_connection
def _check_connection(func):
def checker(self, *args, **kwargs):
if not self.dilsc.online:
raise ConnectionError(f'No connection to dilsc at {self.address}')
else:
return func(self, *args, **kwargs)
return checker
@_check_connection
def get_current_value(self):
cacheitem = self.dilsc.getParameter(f'mf{self.direction}', 'value', trycache=False)
return cacheitem.value
@_check_connection
def set_target_value(self, value):
self.dilsc.setParameter(f'mf{self.direction}', 'target', value)
@_check_connection
def is_moving(self):
response = self.dilsc.getParameter(f'mf{self.direction}','status', trycache=False)
return response[0][0] > StatusType.PREPARED

0
devices/knife_edge.py Normal file → Executable file
View File

0
environment.txt Normal file → Executable file
View File

5
exp_temp/I0_foil_motor.py Executable file
View File

@ -0,0 +1,5 @@
from slic.devices.general.motor import Motor
from slic.devices.general.smaract import SmarActAxis
I0_foils = Motor("SARES30-MCS20610:MCS3")
# I0_foils = SmarActAxis("SARES30-MCS20610:MCS3")

File diff suppressed because it is too large Load Diff

184
exp_temp/fake_attenuator.py Executable file
View File

@ -0,0 +1,184 @@
from time import sleep
from slic.core.adjustable import Adjustable, PVAdjustable
from slic.core.device import Device, SimpleDevice
from slic.devices.general.motor import Motor
from slic.utils.hastyepics import get_pv as PV
class Attenuator(Device):
def __init__(self, ID, energy_threshold=1500, name="Attenuator Aramis", process_time=1, **kwargs):
super().__init__(ID, name=name, **kwargs)
# self.motor_limits = motor_limits
# self.motors = motors = LimitedMotors(ID, motor_limits)
self.motor_status_pvs = [PVAdjustable(f"{ID}:MOTOR_{i}.DMOV") for i in [1,2,3,4,5,6]]
# self.motors = LimitedMotors(ID, motor_limits)
self.trans1st = Transmission(ID, process_time=process_time)
self.trans3rd = Transmission(ID, process_time=process_time, third_order=True)
self.energy = LimitedEnergy(ID, energy_threshold, process_time)
self.foils = [Foil(ID, i+1) for i in range(6)]
def get_current_transmission(self):
return self.trans1st.get_current_value()
def get_current_transmission_third_harmonic(self):
return self.trans3rd.get_current_value()
def set_transmission(self, value, energy=None):
self.energy.set_target_value(energy)
self.trans1st.set_target_value(value)
def set_transmission_third_harmonic(self, value, energy=None):
self.energy.set_target_value(energy)
self.trans3rd.set_target_value(value)
def set_foils_combination(self, combination: list, wait=False):
assert len(combination) == 6, "Invalid combination entered"
for value in combination:
assert value in self.foils[0].values, "wrong value entered"
for i, (foil,value) in enumerate(zip(self.foils,combination)):
print(f"setting {repr(foil)} to position {value}")
foil.set_target_value(value)
if wait:
self.foils[0].wait_for_motion()
class Transmission(PVAdjustable):
def __init__(self, ID, third_order=False, check_motors=True, **kwargs):
#self.motors = motors
self.third_order = third_order
self.motors = [Motor(f"{ID}:MOTOR_{i}") for i in [1,2,3,4,5,6]]
self.check_motors = check_motors
prefix = ID + ":"
# Changed for new attenuator IOC
pvname_setvalue = prefix + "UsrRec.TD"
pvname_readback = prefix + ("UsrRec.TC3" if third_order else "UsrRec.TC1")
super().__init__(pvname_setvalue, pvname_readback, **kwargs)
self.pvnames.third_order_toggle = pvn = prefix + "UsrRec.HRM3"
self.pvs.third_order_toggle = PV(pvn)
pv_calculated = prefix + ("UsrRec.TR3" if third_order else "UsrRec.TR1")
pv_current = prefix + ("UsrRec.TC3" if third_order else "UsrRec.TC1")
self.calculated_trans = PVAdjustable(pv_calculated).get_current_value()
self.current_trans = PVAdjustable(pv_current).get_current_value()
def set_target_value(self, *args, **kwargs):
self.set_third_order_toggle()
t = super().set_target_value(*args, **kwargs)
self.wait_for_motion()
return t
def set_third_order_toggle(self):
self.pvs.third_order_toggle.put(self.third_order)
def wait_for_motion(self):
sleep(1) # to be certain that motion has started
while True:
if not self.is_moving():
break # motion is completed
sleep(0.25)
def is_moving(self):
if self.check_motors:
return any(m.is_moving() for m in self.motors)
else:
return (self.calculated_trans != self.current_trans)
class LimitedEnergy(PVAdjustable):
def __init__(self, ID, threshold, wait_time):
self.threshold = threshold
self.wait_time = wait_time
super().__init__(ID + ":UsrRec.ERY")
prefix = ID + ":"
self.pvnames.fel_energy = pvn = prefix + "ENY_CALC" # uses the new calculated energy from attenuator IOC
self.pvs.fel_energy = PV(pvn)
def set_target_value(self, value):
threshold = self.threshold
wait_time = self.wait_time
while not value:
value = self.pvs.fel_energy.get()
if value is not None:
if value >= threshold:
break
print(f"Machine photon energy ({value} eV) is below {threshold} eV - waiting for the machine to recover...")
value = None
sleep(wait_time)
super().set_target_value(value) # setting the energy is now instantanious, motors will still move afterwards.
print(f"Set attenuator energy to {value} eV")
class Foil(PVAdjustable):
def __init__(self, ID, number,check_motors=True):
""" Foil with possible settings of 0,1,2,3 or 4.
"""
assert 0 <= int(number) <= 6, "Invalid foil selected"
super().__init__(ID + f":UsrRec.FI{number}")
self.values = [0, 1, 2, 3, 4]
prefix = ID + ":"
self.motors = [Motor(f"{ID}:MOTOR_{i}") for i in [1,2,3,4,5,6]]
self.check_motors = check_motors
pv_calculated = prefix + "UsrRec.TR1"
pv_current = prefix + "UsrRec.TC1"
self.calculated_trans = PVAdjustable(pv_calculated).get_current_value()
self.current_trans = PVAdjustable(pv_current).get_current_value()
def set_target_value(self, *args, **kwargs):
t = super().set_target_value(*args, **kwargs).wait()
self.wait_for_motion()
return t
def wait_for_motion(self):
sleep(1) # to be certain that motion has started
while True:
if not self.is_moving():
break # motion is completed
sleep(0.25)
def is_moving(self):
if self.check_motors:
return any(m.is_moving() for m in self.motors)
else:
return (self.calculated_trans != self.current_trans)

6
exp_temp/mono.py Executable file
View File

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

6
experiments/DilSC/TwoTheta_scan.ipynb Normal file → Executable file
View File

@ -193,9 +193,9 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:conda-slic]",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "conda-env-conda-slic-py"
"name": "python3"
},
"language_info": {
"codemirror_mode": {
@ -207,7 +207,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.18"
"version": "3.9.20"
}
},
"nbformat": 4,

12
experiments/PMS/PMS.py Normal file → Executable file
View File

@ -32,3 +32,15 @@ class PP_Shutter:
def __repr__(self):
tn = typename(self)
return f'{tn} "{self.name}" is {self.status}'
def get_Cernox_temperature():
""" Very improvised """
import csv
fname = '/gfa/.mounts/sf_cristallina/applications/devices/CryovacTIC/temperatures_009.csv'
with open(fname) as f:
reader = csv.reader(f)
rows = [row for row in reader]
return float(rows[-1][3])

0
devices/attocube.py → gp_exp/attocube.py Normal file → Executable file
View File

View File

@ -1,4 +1,4 @@
from devices.attocube import AttocubeStage
from .attocube import AttocubeStage
attocube = AttocubeStage(
"SARES30-ATTOCUBE",

8
gp_exp/components.py Executable file
View File

@ -0,0 +1,8 @@
from slic.devices.general.motor import Motor
from gp_exp.jj_device_def import SlitUnitCenterWidthJJ
OWIS = Motor("SARES30-MOBI1:MOT_6") # small OWIS linear stage
Newport_large = Motor("SARES30-MOBI1:MOT_5")
slitsjj = SlitUnitCenterWidthJJ("SARES30-MOBI2", motor_naming="MOT")

0
devices/jj_device_def.py → gp_exp/jj_device_def.py Normal file → Executable file
View File

0
devices/newport.py → gp_exp/newport.py Normal file → Executable file
View File

0
devices/smaract.py → gp_exp/smaract.py Normal file → Executable file
View File

View File

@ -1,5 +1,5 @@
# from slic.devices.general.smaract import SmarActStage
from devices.smaract import SmarActStage
from gp_exp.smaract import SmarActStage
from slic.core.device.simpledevice import SimpleDevice
from slic.devices.general.motor import Motor

0
devices/standa.py → gp_exp/standa.py Normal file → Executable file
View File

912
log/cristallina.log Normal file → Executable file
View File

@ -1,855 +1,57 @@
2023-09-13 at 17:47:59 | INFO | Connected to stand server
2023-09-13 at 17:48:00 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-13 at 17:48:00 | INFO | Running at cristallina with pgroup p19150.
2023-09-13 at 17:48:00 | INFO | Loading finished.
2023-09-13 at 17:59:12 | INFO | Connected to stand server
2023-09-13 at 17:59:13 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-13 at 17:59:13 | INFO | Running at cristallina with pgroup p19150.
2023-09-13 at 17:59:13 | INFO | Loading finished.
2023-09-13 at 23:23:54 | INFO | Connected to stand server
2023-09-13 at 23:23:54 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-13 at 23:23:55 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-13 at 23:23:56 | INFO | Running at cristallina with pgroup p19150.
2023-09-13 at 23:23:56 | INFO | Loading finished.
2023-09-23 at 18:20:47 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f52e5816430>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-23 at 18:20:47 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-23 at 18:20:48 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-23 at 18:20:51 | INFO | Running at cristallina with pgroup p19150.
2023-09-23 at 18:20:51 | INFO | Loading finished.
2023-09-23 at 18:33:46 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f86f9a083d0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-23 at 18:33:47 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-23 at 18:33:47 | INFO | Running at cristallina with pgroup p19150.
2023-09-23 at 18:33:47 | INFO | Loading finished.
2023-09-25 at 12:57:37 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fcdb41d4370>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 12:57:37 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-25 at 12:57:38 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 12:57:38 | INFO | Running at cristallina with pgroup p19150.
2023-09-25 at 12:57:38 | INFO | Loading finished.
2023-09-25 at 13:25:29 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7feb9ca24d90>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 13:25:29 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-25 at 13:25:31 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 13:25:31 | INFO | Running at cristallina with pgroup p19150.
2023-09-25 at 13:25:31 | INFO | Loading finished.
2023-09-25 at 17:16:41 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f51e5efcdf0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 17:16:41 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-25 at 17:16:43 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 17:16:43 | INFO | Running at cristallina with pgroup p19150.
2023-09-25 at 17:16:43 | INFO | Loading finished.
2023-09-25 at 21:12:24 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f90c6285490>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 21:12:24 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-25 at 21:12:25 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 21:12:26 | INFO | Running at cristallina with pgroup p21516.
2023-09-25 at 21:12:26 | INFO | Loading finished.
2023-09-25 at 21:14:20 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f90c458ab80>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 21:14:21 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 21:14:21 | INFO | Running at cristallina with pgroup p21516.
2023-09-25 at 21:14:21 | INFO | Loading finished.
2023-09-25 at 21:14:48 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f90c44e5a30>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 21:14:49 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 21:14:49 | INFO | Running at cristallina with pgroup p21516.
2023-09-25 at 21:14:49 | INFO | Loading finished.
2023-09-25 at 21:14:57 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f90c4464e80>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 21:14:58 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 21:14:58 | INFO | Running at cristallina with pgroup p21516.
2023-09-25 at 21:14:58 | INFO | Loading finished.
2023-09-25 at 21:21:52 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f90c4476df0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-09-25 at 21:21:53 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 21:21:53 | INFO | Running at cristallina with pgroup p21516.
2023-09-25 at 21:21:53 | INFO | Loading finished.
2023-09-25 at 21:23:35 | INFO | Connected to stand server
2023-09-25 at 21:23:36 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-25 at 21:23:36 | INFO | Running at cristallina with pgroup p21516.
2023-09-25 at 21:23:36 | INFO | Loading finished.
2023-09-25 at 21:28:02 | INFO | Simple acquisition started.
2023-09-25 at 21:28:05 | DEBUG | Simple acquisition complete: {'run_number': 1, 'time': 'Mon Sep 25 21:28:03 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': '', 'parameters': ''}
2023-09-25 at 22:06:08 | INFO | Simple acquisition started.
2023-09-25 at 22:06:09 | DEBUG | Simple acquisition complete: {'run_number': 2, 'time': 'Mon Sep 25 22:06:09 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': '', 'parameters': ''}
2023-09-25 at 22:59:49 | INFO | Simple acquisition started.
2023-09-25 at 22:59:50 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:50 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.990000'}
2023-09-25 at 22:59:52 | INFO | Simple acquisition started.
2023-09-25 at 22:59:52 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:52 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.000000'}
2023-09-25 at 22:59:53 | INFO | Simple acquisition started.
2023-09-25 at 22:59:54 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:53 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.100000'}
2023-09-25 at 22:59:54 | INFO | Simple acquisition started.
2023-09-25 at 22:59:55 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:54 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.200000'}
2023-09-25 at 22:59:55 | INFO | Simple acquisition started.
2023-09-25 at 22:59:56 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:55 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.300000'}
2023-09-25 at 22:59:56 | INFO | Simple acquisition started.
2023-09-25 at 22:59:57 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:56 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.400000'}
2023-09-25 at 22:59:57 | INFO | Simple acquisition started.
2023-09-25 at 22:59:58 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:57 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.500000'}
2023-09-25 at 22:59:58 | INFO | Simple acquisition started.
2023-09-25 at 22:59:58 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:58 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.600000'}
2023-09-25 at 22:59:59 | INFO | Simple acquisition started.
2023-09-25 at 22:59:59 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 22:59:59 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.700000'}
2023-09-25 at 23:00:00 | INFO | Simple acquisition started.
2023-09-25 at 23:00:00 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:00 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.800000'}
2023-09-25 at 23:00:01 | INFO | Simple acquisition started.
2023-09-25 at 23:00:01 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:01 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:5.900000'}
2023-09-25 at 23:00:02 | INFO | Simple acquisition started.
2023-09-25 at 23:00:02 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:02 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.000000'}
2023-09-25 at 23:00:03 | INFO | Simple acquisition started.
2023-09-25 at 23:00:03 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:03 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.100000'}
2023-09-25 at 23:00:04 | INFO | Simple acquisition started.
2023-09-25 at 23:00:05 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:04 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.200000'}
2023-09-25 at 23:00:05 | INFO | Simple acquisition started.
2023-09-25 at 23:00:06 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:05 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.300000'}
2023-09-25 at 23:00:06 | INFO | Simple acquisition started.
2023-09-25 at 23:00:06 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:06 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.400000'}
2023-09-25 at 23:00:07 | INFO | Simple acquisition started.
2023-09-25 at 23:00:07 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:07 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.500000'}
2023-09-25 at 23:00:08 | INFO | Simple acquisition started.
2023-09-25 at 23:00:08 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:08 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.600000'}
2023-09-25 at 23:00:09 | INFO | Simple acquisition started.
2023-09-25 at 23:00:09 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:09 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.700000'}
2023-09-25 at 23:00:10 | INFO | Simple acquisition started.
2023-09-25 at 23:00:10 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:10 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.800000'}
2023-09-25 at 23:00:11 | INFO | Simple acquisition started.
2023-09-25 at 23:00:11 | DEBUG | Simple acquisition complete: {'run_number': 3, 'time': 'Mon Sep 25 23:00:11 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'Smaract movement test', 'parameters': 'x:6.900000'}
2023-09-26 at 10:58:09 | INFO | Simple acquisition started.
2023-09-26 at 10:58:10 | DEBUG | Simple acquisition complete: {'run_number': 4, 'time': 'Tue Sep 26 10:58:09 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'testing the CTA acquisition', 'parameters': ''}
2023-09-26 at 11:02:35 | INFO | Retrieve images starting from pid 19120266900.
2023-09-26 at 11:02:35 | DEBUG | {'run_number': 4, 'acq_number': 2, 'total_acq_number': 25, 'filenames': ['/sf/cristallina/data/p21516/raw/run0004/data/acq0002.PVDATA.h5', '/sf/cristallina/data/p21516/raw/run0004/data/acq0002.BSDATA.h5', '/sf/cristallina/data/p21516/raw/run0004/data/acq0002.JF16T03V01.h5']}
2023-09-26 at 11:42:56 | INFO | Connected to stand server
2023-09-26 at 11:42:57 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 11:42:57 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 11:42:57 | INFO | Loading finished.
2023-09-26 at 11:43:22 | INFO | Simple acquisition started.
2023-09-26 at 11:43:23 | DEBUG | Simple acquisition complete: {'run_number': 5, 'time': 'Tue Sep 26 11:43:22 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'testing the CTA acquisition', 'parameters': ''}
2023-09-26 at 11:44:29 | INFO | Retrieve images starting from pid 19120518800.
2023-09-26 at 11:44:29 | DEBUG | {'run_number': 5, 'acq_number': 2, 'total_acq_number': 27, 'filenames': ['/sf/cristallina/data/p21516/raw/run0005/data/acq0002.PVDATA.h5', '/sf/cristallina/data/p21516/raw/run0005/data/acq0002.BSDATA.h5', '/sf/cristallina/data/p21516/raw/run0005/data/acq0002.JF16T03V01.h5']}
2023-09-26 at 11:47:45 | INFO | Connected to stand server
2023-09-26 at 11:47:46 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 11:47:46 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 11:47:46 | INFO | Loading finished.
2023-09-26 at 11:49:08 | INFO | Simple acquisition started.
2023-09-26 at 11:49:08 | DEBUG | Simple acquisition complete: {'run_number': 6, 'time': 'Tue Sep 26 11:49:08 2023', 'topic': 'Beamline commissioning', 'sample': '--', 'comment': 'testing the CTA acquisition, only one module', 'parameters': ''}
2023-09-26 at 11:50:18 | INFO | Retrieve images starting from pid 19120553700.
2023-09-26 at 11:50:18 | DEBUG | {'run_number': 6, 'acq_number': 2, 'total_acq_number': 29, 'filenames': ['/sf/cristallina/data/p21516/raw/run0006/data/acq0002.PVDATA.h5', '/sf/cristallina/data/p21516/raw/run0006/data/acq0002.BSDATA.h5', '/sf/cristallina/data/p21516/raw/run0006/data/acq0002.JF16T03V01.h5']}
2023-09-26 at 13:49:08 | INFO | Connected to stand server
2023-09-26 at 13:49:09 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 13:49:09 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 13:49:09 | INFO | Loading finished.
2023-09-26 at 13:59:23 | INFO | Connected to stand server
2023-09-26 at 13:59:24 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 13:59:24 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 13:59:24 | INFO | Loading finished.
2023-09-26 at 13:59:46 | INFO | Connected to stand server
2023-09-26 at 13:59:47 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 13:59:47 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 13:59:47 | INFO | Loading finished.
2023-09-26 at 14:00:49 | INFO | Connected to stand server
2023-09-26 at 14:00:49 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-26 at 14:00:50 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 14:00:50 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 14:00:50 | INFO | Loading finished.
2023-09-26 at 14:01:34 | INFO | Connected to stand server
2023-09-26 at 14:01:34 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-26 at 14:01:35 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 14:01:35 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 14:01:35 | INFO | Loading finished.
2023-09-26 at 18:04:51 | INFO | Connected to stand server
2023-09-26 at 18:04:51 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-26 at 18:04:52 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 18:04:52 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 18:04:52 | INFO | Loading finished.
2023-09-26 at 18:16:04 | INFO | Connected to stand server
2023-09-26 at 18:16:05 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 18:16:05 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 18:16:05 | INFO | Loading finished.
2023-09-26 at 18:35:39 | INFO | Connected to stand server
2023-09-26 at 18:35:40 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 18:35:40 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 18:35:40 | INFO | Loading finished.
2023-09-26 at 18:47:48 | INFO | Connected to stand server
2023-09-26 at 18:47:49 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-26 at 18:47:49 | INFO | Running at cristallina with pgroup p21516.
2023-09-26 at 18:47:49 | INFO | Loading finished.
2023-09-27 at 17:19:18 | INFO | Connected to stand server
2023-09-27 at 17:19:18 | INFO | Connected to stand server
2023-09-27 at 17:19:18 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-27 at 17:19:18 | WARNING | No transmission value reported from {attenuator.ID}
2023-09-27 at 17:19:19 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-27 at 17:19:19 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-09-27 at 17:19:20 | INFO | Running at cristallina with pgroup p19150.
2023-09-27 at 17:19:20 | INFO | Loading finished.
2023-09-27 at 17:19:20 | INFO | Running at cristallina with pgroup p19150.
2023-09-27 at 17:19:20 | INFO | Loading finished.
2023-10-02 at 18:28:14 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe246f7e880>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-02 at 18:28:14 | WARNING | No transmission value reported from {attenuator.ID}
2023-10-02 at 18:28:15 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-02 at 18:28:16 | INFO | Running at cristallina with pgroup p19150.
2023-10-02 at 18:28:16 | INFO | Loading finished.
2023-10-02 at 18:46:27 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbb75193430>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-02 at 18:47:04 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbb72bddf40>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-02 at 18:47:17 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbb72612790>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-02 at 18:47:36 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbb72376790>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-02 at 18:50:01 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f247806d040>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-03 at 11:58:41 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fa618d15640>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-03 at 11:58:41 | WARNING | No transmission value reported from {attenuator.ID}
2023-10-03 at 11:58:42 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-03 at 11:58:42 | INFO | Running at cristallina with pgroup p19150.
2023-10-03 at 11:58:42 | INFO | Loading finished.
2023-10-09 at 16:15:27 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f17c452d5b0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:15:27 | WARNING | No transmission value reported from {attenuator.ID}
2023-10-09 at 16:15:28 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-09 at 16:15:30 | INFO | Running at cristallina with pgroup p21516.
2023-10-09 at 16:15:30 | INFO | Loading finished.
2023-10-09 at 16:17:44 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd9743bdee0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:17:44 | WARNING | No transmission value reported from {attenuator.ID}
2023-10-09 at 16:17:45 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-09 at 16:17:45 | INFO | Running at cristallina with pgroup p21516.
2023-10-09 at 16:17:45 | INFO | Loading finished.
2023-10-09 at 16:28:40 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f7079a82d90>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:28:40 | WARNING | No transmission value reported from {attenuator.ID}
2023-10-09 at 16:28:41 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-09 at 16:28:41 | INFO | Running at cristallina with pgroup p21516.
2023-10-09 at 16:28:41 | INFO | Loading finished.
2023-10-09 at 16:31:13 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f28ce93a6d0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:31:20 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fa103ece700>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:31:39 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8d1b8916a0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:31:40 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-09 at 16:31:40 | INFO | Running at cristallina with pgroup p21516.
2023-10-09 at 16:31:40 | INFO | Loading finished.
2023-10-09 at 16:33:27 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f9060b98520>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:33:28 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-09 at 16:33:28 | INFO | Running at cristallina with pgroup p21516.
2023-10-09 at 16:33:28 | INFO | Loading finished.
2023-10-09 at 16:34:19 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f5947a2d4f0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-09 at 16:34:20 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-09 at 16:34:20 | INFO | Running at cristallina with pgroup p21516.
2023-10-09 at 16:34:20 | INFO | Loading finished.
2023-10-12 at 16:59:37 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f0a00c12640>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-12 at 16:59:38 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-12 at 16:59:39 | INFO | Running at cristallina with pgroup p21516.
2023-10-12 at 16:59:39 | INFO | Loading finished.
2023-10-16 at 18:53:14 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Caught HTTPConnectionPool(host='saresc-vcons-02.psi.ch', port=9090): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fce3dc222e0>: Failed to establish a new connection: [Errno 111] Connection refused')).
2023-10-16 at 18:53:15 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-16 at 18:53:16 | INFO | Running at cristallina with pgroup p21516.
2023-10-16 at 18:53:16 | INFO | Loading finished.
2023-10-16 at 18:56:36 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch.
2023-10-16 at 18:56:37 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-16 at 18:56:37 | INFO | Running at cristallina with pgroup p21516.
2023-10-16 at 18:56:37 | INFO | Loading finished.
2023-10-20 at 17:48:03 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch.
2023-10-20 at 17:48:04 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-20 at 17:48:07 | INFO | Running at cristallina with pgroup p21563.
2023-10-20 at 17:48:07 | INFO | Loading finished.
2023-10-20 at 17:48:50 | INFO | Connected to stand server
2023-10-20 at 17:48:51 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-20 at 17:48:51 | INFO | Running at cristallina with pgroup p21563.
2023-10-20 at 17:48:51 | INFO | Loading finished.
2023-10-20 at 21:47:23 | INFO | Connected to stand server
2023-10-20 at 21:47:24 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-20 at 21:47:26 | INFO | Running at cristallina with pgroup p21563.
2023-10-20 at 21:47:26 | INFO | Loading finished.
2023-10-21 at 01:34:59 | INFO | Connected to stand server
2023-10-21 at 01:35:01 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-21 at 01:35:01 | INFO | Running at cristallina with pgroup p21563.
2023-10-21 at 01:35:01 | INFO | Loading finished.
2023-10-23 at 18:24:05 | INFO | Connected to stand server
2023-10-23 at 18:24:06 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-23 at 18:24:07 | INFO | Running at cristallina with pgroup p21563.
2023-10-23 at 18:24:07 | INFO | Loading finished.
2023-10-23 at 18:51:10 | INFO | Connected to stand server
2023-10-23 at 18:51:11 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-23 at 18:51:12 | WARNING | Cannot write log file to pgroup p21563.
2023-10-23 at 18:51:12 | INFO | Running at cristallina with pgroup p21563.
2023-10-23 at 18:51:12 | INFO | Loading finished.
2023-10-23 at 18:59:21 | INFO | Connected to stand server
2023-10-23 at 18:59:22 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-23 at 18:59:22 | WARNING | Cannot write log file to pgroup p21563.
2023-10-23 at 18:59:22 | INFO | Running at cristallina with pgroup p21563.
2023-10-23 at 18:59:22 | INFO | Loading finished.
2023-10-23 at 20:44:41 | INFO | Connected to stand server
2023-10-23 at 20:44:43 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-23 at 20:44:43 | INFO | Running at cristallina with pgroup p21563.
2023-10-23 at 20:44:43 | INFO | Loading finished.
2023-10-23 at 22:37:44 | INFO | Connected to stand server
2023-10-23 at 22:37:45 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-23 at 22:37:45 | INFO | Running at cristallina with pgroup p21563.
2023-10-23 at 22:37:45 | INFO | Loading finished.
2023-10-24 at 11:37:01 | INFO | Connected to stand server
2023-10-24 at 11:37:02 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-24 at 11:37:03 | WARNING | Cannot write log file to pgroup p21563.
2023-10-24 at 11:37:03 | INFO | Running at cristallina with pgroup p21563.
2023-10-24 at 11:37:03 | INFO | Loading finished.
2023-10-24 at 13:11:26 | INFO | Connected to stand server
2023-10-24 at 13:11:27 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-24 at 13:11:27 | WARNING | Cannot write log file to pgroup p21563.
2023-10-24 at 13:11:27 | INFO | Running at cristallina with pgroup p21563.
2023-10-24 at 13:11:27 | INFO | Loading finished.
2023-10-24 at 13:17:04 | INFO | Connected to stand server
2023-10-24 at 13:17:05 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-24 at 13:17:06 | WARNING | Cannot write log file to pgroup p21563.
2023-10-24 at 13:17:06 | INFO | Running at cristallina with pgroup p21563.
2023-10-24 at 13:17:06 | INFO | Loading finished.
2023-10-24 at 19:32:32 | INFO | Connected to stand server
2023-10-24 at 19:32:33 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-24 at 19:32:33 | INFO | Running at cristallina with pgroup p21563.
2023-10-24 at 19:32:33 | INFO | Loading finished.
2023-10-25 at 11:48:35 | INFO | Connected to stand server
2023-10-25 at 11:48:36 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-25 at 11:48:37 | INFO | Running at cristallina with pgroup p21563.
2023-10-25 at 11:48:37 | INFO | Loading finished.
2023-10-25 at 11:49:35 | INFO | Connected to stand server
2023-10-25 at 11:49:36 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-25 at 11:49:36 | INFO | Running at cristallina with pgroup p21563.
2023-10-25 at 11:49:36 | INFO | Loading finished.
2023-10-27 at 15:14:18 | INFO | Connected to stand server
2023-10-27 at 15:14:19 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-27 at 15:14:20 | WARNING | Cannot write log file to pgroup p21563.
2023-10-27 at 15:14:20 | INFO | Running at cristallina with pgroup p21563.
2023-10-27 at 15:14:20 | INFO | Loading finished.
2023-10-27 at 15:17:02 | INFO | Connected to stand server
2023-10-27 at 15:17:03 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-27 at 15:17:04 | WARNING | Cannot write log file to pgroup p21563.
2023-10-27 at 15:17:04 | INFO | Running at cristallina with pgroup p21563.
2023-10-27 at 15:17:04 | INFO | Loading finished.
2023-10-27 at 15:25:08 | INFO | Connected to stand server
2023-10-27 at 15:25:09 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-27 at 15:25:09 | INFO | Running at cristallina with pgroup p21563.
2023-10-27 at 15:25:09 | INFO | Loading finished.
2023-10-27 at 16:01:18 | INFO | Connected to stand server
2023-10-27 at 16:01:19 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-27 at 16:01:20 | WARNING | Cannot write log file to pgroup p21563.
2023-10-27 at 16:01:20 | INFO | Running at cristallina with pgroup p21563.
2023-10-27 at 16:01:20 | INFO | Loading finished.
2023-10-27 at 21:12:41 | INFO | Connected to stand server
2023-10-27 at 21:12:42 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-27 at 21:12:42 | WARNING | Cannot write log file to pgroup p21563.
2023-10-27 at 21:12:42 | INFO | Running at cristallina with pgroup p21563.
2023-10-27 at 21:12:42 | INFO | Loading finished.
2023-10-28 at 07:59:40 | INFO | Connected to stand server
2023-10-28 at 07:59:41 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-28 at 07:59:41 | INFO | Running at cristallina with pgroup p21563.
2023-10-28 at 07:59:41 | INFO | Loading finished.
2023-10-28 at 08:06:20 | INFO | Connected to stand server
2023-10-28 at 08:06:21 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-28 at 08:06:21 | INFO | Running at cristallina with pgroup p21563.
2023-10-28 at 08:06:21 | INFO | Loading finished.
2023-10-28 at 08:17:09 | INFO | Connected to stand server
2023-10-28 at 08:17:10 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-28 at 08:17:10 | INFO | Running at cristallina with pgroup p21563.
2023-10-28 at 08:17:10 | INFO | Loading finished.
2023-10-28 at 08:38:00 | INFO | Connected to stand server
2023-10-28 at 08:38:01 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-28 at 08:38:01 | INFO | Running at cristallina with pgroup p21563.
2023-10-28 at 08:38:01 | INFO | Loading finished.
2023-10-28 at 09:17:44 | INFO | Connected to stand server
2023-10-28 at 09:17:45 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-28 at 09:17:46 | INFO | Running at cristallina with pgroup p21563.
2023-10-28 at 09:17:46 | INFO | Loading finished.
2023-10-28 at 11:04:55 | INFO | Connected to stand server
2023-10-28 at 11:04:57 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-28 at 11:04:57 | INFO | Running at cristallina with pgroup p21563.
2023-10-28 at 11:04:57 | INFO | Loading finished.
2023-10-28 at 11:56:16 | INFO | Connected to stand server
2023-10-28 at 11:56:17 | INFO | Using undulator (Aramis) offset to PSSS energy of 0 eV.
2023-10-28 at 11:56:17 | INFO | Running at cristallina with pgroup p21563.
2023-10-28 at 11:56:17 | INFO | Loading finished.
2023-10-28 at 13:15:52 | INFO | Connected to stand server
2023-10-28 at 13:15:53 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-10-29 at 11:22:36 | INFO | Connected to stand server
2023-10-29 at 11:22:37 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-10-31 at 17:49:30 | INFO | Connected to stand server
2023-10-31 at 17:49:31 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-10-31 at 17:49:32 | INFO | Running at cristallina with pgroup p21563.
2023-10-31 at 17:49:32 | INFO | Loading finished.
2023-11-01 at 14:02:26 | INFO | Connected to stand server
2023-11-01 at 14:02:28 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-01 at 14:02:28 | INFO | Running at cristallina with pgroup p21563.
2023-11-01 at 14:02:28 | INFO | Loading finished.
2023-11-01 at 15:05:32 | INFO | Connected to stand server
2023-11-01 at 15:05:34 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-01 at 15:05:34 | INFO | Running at cristallina with pgroup p21563.
2023-11-01 at 15:05:34 | INFO | Loading finished.
2023-11-05 at 14:29:20 | INFO | Connected to stand server
2023-11-05 at 14:29:21 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 14:29:21 | INFO | Running at cristallina with pgroup p21563.
2023-11-05 at 14:29:21 | INFO | Loading finished.
2023-11-05 at 14:32:32 | INFO | Connected to stand server
2023-11-05 at 14:32:33 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 14:32:34 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 14:32:34 | INFO | Loading finished.
2023-11-05 at 14:55:32 | INFO | Connected to stand server
2023-11-05 at 14:55:33 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 14:55:33 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 14:55:33 | INFO | Loading finished.
2023-11-05 at 14:58:58 | INFO | Connected to stand server
2023-11-05 at 14:58:59 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 14:58:59 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 14:58:59 | INFO | Loading finished.
2023-11-05 at 15:16:28 | INFO | Connected to stand server
2023-11-05 at 15:16:29 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 15:16:30 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 15:16:30 | INFO | Loading finished.
2023-11-05 at 15:32:01 | INFO | Connected to stand server
2023-11-05 at 15:32:02 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 15:32:02 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 15:32:02 | INFO | Loading finished.
2023-11-05 at 15:38:13 | INFO | Connected to stand server
2023-11-05 at 15:38:14 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 15:38:14 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 15:38:14 | INFO | Loading finished.
2023-11-05 at 15:39:14 | INFO | Connected to stand server
2023-11-05 at 15:39:15 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 15:39:15 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 15:39:15 | INFO | Loading finished.
2023-11-05 at 15:41:06 | INFO | Connected to stand server
2023-11-05 at 15:41:08 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-05 at 15:41:08 | INFO | Running at cristallina with pgroup p19150.
2023-11-05 at 15:41:08 | INFO | Loading finished.
2023-11-06 at 17:40:45 | INFO | Connected to stand server
2023-11-06 at 17:40:46 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-06 at 17:40:47 | WARNING | Cannot write log file to pgroup p19150.
2023-11-06 at 17:40:47 | INFO | Running at cristallina with pgroup p19150.
2023-11-06 at 17:40:47 | INFO | Loading finished.
2023-11-07 at 10:41:37 | INFO | Connected to stand server
2023-11-07 at 10:41:38 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-07 at 10:41:38 | INFO | Running at cristallina with pgroup p19150.
2023-11-07 at 10:41:38 | INFO | Loading finished.
2023-11-07 at 10:56:40 | INFO | Connected to stand server
2023-11-07 at 10:56:41 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-07 at 10:56:41 | INFO | Running at cristallina with pgroup p21516.
2023-11-07 at 10:56:41 | INFO | Loading finished.
2023-11-07 at 13:43:12 | INFO | Connected to stand server
2023-11-07 at 13:43:13 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-07 at 13:43:14 | INFO | Running at cristallina with pgroup p21516.
2023-11-07 at 13:43:14 | INFO | Loading finished.
2023-11-07 at 18:15:56 | INFO | Connected to stand server
2023-11-07 at 18:15:58 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-07 at 18:15:59 | INFO | Running at cristallina with pgroup p21516.
2023-11-07 at 18:15:59 | INFO | Loading finished.
2023-11-07 at 21:52:45 | INFO | Connected to stand server
2023-11-07 at 21:52:46 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-07 at 21:52:47 | INFO | Running at cristallina with pgroup p21516.
2023-11-07 at 21:52:47 | INFO | Loading finished.
2023-11-11 at 17:55:50 | INFO | Connected to stand server
2023-11-11 at 17:55:51 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-11 at 17:55:52 | INFO | Running at cristallina with pgroup p21516.
2023-11-11 at 17:55:52 | INFO | Loading finished.
2023-11-11 at 18:25:19 | INFO | Connected to stand server
2023-11-11 at 18:25:20 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-11 at 18:25:20 | INFO | Running at cristallina with pgroup p21516.
2023-11-11 at 18:25:20 | INFO | Loading finished.
2023-11-11 at 18:27:32 | INFO | Connected to stand server
2023-11-11 at 18:27:33 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-11 at 18:27:33 | INFO | Running at cristallina with pgroup p21516.
2023-11-11 at 18:27:33 | INFO | Loading finished.
2023-11-11 at 18:33:10 | INFO | Connected to stand server
2023-11-11 at 18:33:11 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-11 at 18:33:11 | INFO | Running at cristallina with pgroup p21516.
2023-11-11 at 18:33:11 | INFO | Loading finished.
2023-11-11 at 18:33:52 | INFO | Connected to stand server
2023-11-11 at 18:33:53 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-11 at 18:33:53 | INFO | Running at cristallina with pgroup p21516.
2023-11-11 at 18:33:53 | INFO | Loading finished.
2023-11-13 at 08:19:30 | INFO | Connected to stand server
2023-11-13 at 08:19:31 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 08:19:32 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 08:19:32 | INFO | Loading finished.
2023-11-13 at 11:36:54 | INFO | Connected to stand server
2023-11-13 at 11:36:55 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 11:36:56 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 11:36:56 | INFO | Loading finished.
2023-11-13 at 11:48:02 | INFO | Connected to stand server
2023-11-13 at 11:48:03 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 11:48:04 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 11:48:04 | INFO | Loading finished.
2023-11-13 at 11:49:14 | INFO | Connected to stand server
2023-11-13 at 11:49:15 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 11:49:16 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 11:49:16 | INFO | Loading finished.
2023-11-13 at 11:51:26 | INFO | Connected to stand server
2023-11-13 at 11:51:27 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 11:51:27 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 11:51:27 | INFO | Loading finished.
2023-11-13 at 16:56:48 | INFO | Connected to stand server
2023-11-13 at 16:56:49 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 16:56:49 | WARNING | Cannot write log file to pgroup p21516.
2023-11-13 at 16:56:49 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 16:56:49 | INFO | Loading finished.
2023-11-13 at 17:29:58 | INFO | Connected to stand server
2023-11-13 at 17:29:59 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 17:29:59 | WARNING | Cannot write log file to pgroup p21516.
2023-11-13 at 17:29:59 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 17:29:59 | INFO | Loading finished.
2023-11-13 at 21:36:08 | INFO | Connected to stand server
2023-11-13 at 21:36:09 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 21:36:09 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 21:36:09 | INFO | Loading finished.
2023-11-13 at 21:37:34 | INFO | Connected to stand server
2023-11-13 at 21:37:35 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-13 at 21:37:35 | INFO | Running at cristallina with pgroup p21516.
2023-11-13 at 21:37:35 | INFO | Loading finished.
2023-11-14 at 08:42:12 | INFO | Connected to stand server
2023-11-14 at 08:42:13 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-14 at 08:42:14 | WARNING | Cannot write log file to pgroup p21516.
2023-11-14 at 08:42:14 | INFO | Running at cristallina with pgroup p21516.
2023-11-14 at 08:42:14 | INFO | Loading finished.
2023-11-14 at 09:32:52 | INFO | Connected to stand server
2023-11-14 at 09:32:54 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-14 at 09:32:54 | INFO | Running at cristallina with pgroup p21516.
2023-11-14 at 09:32:54 | INFO | Loading finished.
2023-11-14 at 17:59:03 | INFO | Connected to stand server
2023-11-14 at 17:59:04 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-14 at 17:59:05 | INFO | Running at cristallina with pgroup p21516.
2023-11-14 at 17:59:05 | INFO | Loading finished.
2023-11-14 at 18:00:27 | INFO | Connected to stand server
2023-11-14 at 18:00:28 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-14 at 18:00:28 | INFO | Running at cristallina with pgroup p21516.
2023-11-14 at 18:00:28 | INFO | Loading finished.
2023-11-14 at 18:01:13 | INFO | Connected to stand server
2023-11-14 at 18:01:14 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-14 at 18:01:14 | INFO | Running at cristallina with pgroup p21516.
2023-11-14 at 18:01:14 | INFO | Loading finished.
2023-11-14 at 18:01:57 | INFO | Connected to stand server
2023-11-14 at 18:01:58 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-14 at 18:01:58 | INFO | Running at cristallina with pgroup p21516.
2023-11-14 at 18:01:58 | INFO | Loading finished.
2023-11-17 at 10:25:58 | INFO | Connected to stand server
2023-11-17 at 10:25:59 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 10:26:00 | INFO | Running at cristallina with pgroup p21516.
2023-11-17 at 10:26:00 | INFO | Loading finished.
2023-11-17 at 11:49:59 | INFO | Connected to stand server
2023-11-17 at 11:50:00 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 11:50:02 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 11:50:02 | INFO | Loading finished.
2023-11-17 at 11:55:45 | INFO | Connected to stand server
2023-11-17 at 11:55:46 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 11:55:47 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 11:55:47 | INFO | Loading finished.
2023-11-17 at 13:51:41 | INFO | Connected to stand server
2023-11-17 at 13:51:42 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 13:51:43 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 13:51:43 | INFO | Loading finished.
2023-11-17 at 15:55:13 | INFO | Connected to stand server
2023-11-17 at 15:55:14 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 15:55:15 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 15:55:15 | INFO | Loading finished.
2023-11-17 at 16:04:20 | INFO | Connected to stand server
2023-11-17 at 16:04:21 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 16:04:21 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 16:04:21 | INFO | Loading finished.
2023-11-17 at 16:10:58 | INFO | Connected to stand server
2023-11-17 at 16:10:59 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 16:10:59 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 16:10:59 | INFO | Loading finished.
2023-11-17 at 16:59:50 | INFO | Connected to stand server
2023-11-17 at 16:59:51 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 16:59:51 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 16:59:51 | INFO | Loading finished.
2023-11-17 at 17:12:58 | INFO | Connected to stand server
2023-11-17 at 17:12:59 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 17:12:59 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 17:12:59 | INFO | Loading finished.
2023-11-17 at 17:18:44 | INFO | Connected to stand server
2023-11-17 at 17:18:45 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-17 at 17:18:45 | INFO | Running at cristallina with pgroup p21569.
2023-11-17 at 17:18:45 | INFO | Loading finished.
2023-11-18 at 12:56:50 | INFO | Connected to stand server
2023-11-18 at 12:56:51 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-18 at 12:56:51 | INFO | Running at cristallina with pgroup p21569.
2023-11-18 at 12:56:51 | INFO | Loading finished.
2023-11-18 at 13:52:36 | INFO | Connected to stand server
2023-11-18 at 13:52:37 | INFO | Using undulator (Aramis) offset to PSSS energy of -62 eV.
2023-11-18 at 13:52:37 | INFO | Running at cristallina with pgroup p21569.
2023-11-18 at 13:52:37 | INFO | Loading finished.
2023-11-18 at 13:54:23 | INFO | Connected to stand server
2023-11-18 at 13:54:25 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-18 at 13:54:25 | INFO | Running at cristallina with pgroup p21569.
2023-11-18 at 13:54:25 | INFO | Loading finished.
2023-11-18 at 15:36:50 | INFO | Connected to stand server
2023-11-18 at 15:36:51 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-18 at 15:36:52 | INFO | Running at cristallina with pgroup p21569.
2023-11-18 at 15:36:52 | INFO | Loading finished.
2023-11-19 at 04:23:27 | INFO | Connected to stand server
2023-11-19 at 04:23:28 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-19 at 04:23:29 | INFO | Running at cristallina with pgroup p21569.
2023-11-19 at 04:23:29 | INFO | Loading finished.
2023-11-20 at 17:34:26 | INFO | Connected to stand server
2023-11-20 at 17:34:27 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-20 at 17:45:46 | INFO | Connected to stand server
2023-11-20 at 17:45:47 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-20 at 17:46:06 | INFO | Connected to stand server
2023-11-20 at 17:46:07 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-20 at 17:46:07 | INFO | Running at cristallina with pgroup p21569.
2023-11-20 at 17:46:07 | INFO | Loading finished.
2023-11-20 at 22:05:21 | INFO | Connected to stand server
2023-11-20 at 22:05:22 | INFO | Using undulator (Aramis) offset to PSSS energy of -17 eV.
2023-11-20 at 22:05:22 | INFO | Running at cristallina with pgroup p21569.
2023-11-20 at 22:05:22 | INFO | Loading finished.
2023-11-21 at 19:21:58 | INFO | Connected to stand server
2023-11-21 at 19:21:59 | INFO | Using undulator (Aramis) offset to PSSS energy of -76 eV.
2023-11-21 at 19:22:00 | INFO | Running at cristallina with pgroup p21569.
2023-11-21 at 19:22:00 | INFO | Loading finished.
2023-11-22 at 00:39:04 | INFO | Connected to stand server
2023-11-22 at 00:39:06 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-22 at 00:39:06 | INFO | Running at cristallina with pgroup p21569.
2023-11-22 at 00:39:06 | INFO | Loading finished.
2023-11-22 at 00:39:32 | INFO | Connected to stand server
2023-11-22 at 00:39:33 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-22 at 00:39:33 | INFO | Running at cristallina with pgroup p21569.
2023-11-22 at 00:39:33 | INFO | Loading finished.
2023-11-22 at 05:44:14 | INFO | Connected to stand server
2023-11-22 at 05:44:16 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-22 at 05:44:16 | INFO | Running at cristallina with pgroup p21569.
2023-11-22 at 05:44:16 | INFO | Loading finished.
2023-11-22 at 11:17:06 | INFO | Connected to stand server
2023-11-22 at 11:17:07 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-22 at 11:17:08 | INFO | Running at cristallina with pgroup p21569.
2023-11-22 at 11:17:08 | INFO | Loading finished.
2023-11-22 at 11:48:04 | INFO | Connected to stand server
2023-11-22 at 11:48:05 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-22 at 11:48:06 | INFO | Running at cristallina with pgroup p21569.
2023-11-22 at 11:48:06 | INFO | Loading finished.
2023-11-25 at 07:12:17 | INFO | Connected to stand server
2023-11-25 at 07:12:18 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-25 at 07:12:19 | INFO | Running at cristallina with pgroup p21569.
2023-11-25 at 07:12:19 | INFO | Loading finished.
2023-11-25 at 07:24:46 | INFO | Connected to stand server
2023-11-25 at 07:24:47 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-25 at 07:24:48 | INFO | Running at cristallina with pgroup p21569.
2023-11-25 at 07:24:48 | INFO | Loading finished.
2023-11-25 at 07:26:48 | INFO | Connected to stand server
2023-11-25 at 07:26:49 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-25 at 07:26:49 | INFO | Running at cristallina with pgroup p21569.
2023-11-25 at 07:26:49 | INFO | Loading finished.
2023-11-25 at 20:36:09 | INFO | Connected to stand server
2023-11-25 at 20:36:11 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-25 at 20:36:11 | INFO | Running at cristallina with pgroup p21569.
2023-11-25 at 20:36:11 | INFO | Loading finished.
2023-11-25 at 22:34:08 | INFO | Connected to stand server
2023-11-25 at 22:34:10 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-25 at 22:34:10 | INFO | Running at cristallina with pgroup p21569.
2023-11-25 at 22:34:10 | INFO | Loading finished.
2023-11-25 at 22:35:00 | INFO | Connected to stand server
2023-11-25 at 22:35:01 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-25 at 22:35:02 | INFO | Running at cristallina with pgroup p21569.
2023-11-25 at 22:35:02 | INFO | Loading finished.
2023-11-27 at 00:27:07 | INFO | Connected to stand server
2023-11-27 at 00:27:08 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-27 at 00:27:09 | INFO | Running at cristallina with pgroup p21569.
2023-11-27 at 00:27:09 | INFO | Loading finished.
2023-11-27 at 00:40:19 | INFO | Connected to stand server
2023-11-27 at 00:40:20 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-27 at 00:40:21 | INFO | Running at cristallina with pgroup p21569.
2023-11-27 at 00:40:21 | INFO | Loading finished.
2023-11-27 at 00:53:34 | INFO | Connected to stand server
2023-11-27 at 00:53:35 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-27 at 00:53:36 | INFO | Running at cristallina with pgroup p21569.
2023-11-27 at 00:53:36 | INFO | Loading finished.
2023-11-27 at 06:40:44 | INFO | Connected to stand server
2023-11-27 at 06:40:45 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-27 at 06:40:46 | INFO | Running at cristallina with pgroup p21569.
2023-11-27 at 06:40:46 | INFO | Loading finished.
2023-11-27 at 06:42:03 | INFO | Connected to stand server
2023-11-27 at 06:42:04 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-11-27 at 06:42:04 | INFO | Running at cristallina with pgroup p21569.
2023-11-27 at 06:42:04 | INFO | Loading finished.
2023-12-01 at 15:31:05 | INFO | Connected to stand server
2023-12-01 at 15:31:07 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-01 at 15:31:12 | INFO | Running at cristallina with pgroup p21569.
2023-12-01 at 15:31:12 | INFO | Loading finished.
2023-12-01 at 15:35:29 | INFO | Connected to stand server
2023-12-01 at 15:35:30 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-01 at 15:35:30 | INFO | Running at cristallina with pgroup p21569.
2023-12-01 at 15:35:30 | INFO | Loading finished.
2023-12-01 at 15:46:54 | INFO | Connected to stand server
2023-12-01 at 15:46:55 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-01 at 15:46:55 | WARNING | Cannot write log file to pgroup p21592.
2023-12-01 at 15:46:55 | INFO | Running at cristallina with pgroup p21592.
2023-12-01 at 15:46:55 | INFO | Loading finished.
2023-12-01 at 15:47:30 | INFO | Connected to stand server
2023-12-01 at 15:47:31 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-01 at 15:47:32 | WARNING | Cannot write log file to pgroup p21592.
2023-12-01 at 15:47:32 | INFO | Running at cristallina with pgroup p21592.
2023-12-01 at 15:47:32 | INFO | Loading finished.
2023-12-01 at 15:49:42 | INFO | Connected to stand server
2023-12-01 at 15:49:43 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-01 at 15:49:43 | WARNING | Cannot write log file to pgroup p21592.
2023-12-01 at 15:49:43 | INFO | Running at cristallina with pgroup p21592.
2023-12-01 at 15:49:43 | INFO | Loading finished.
2023-12-01 at 15:55:35 | INFO | Connected to stand server
2023-12-01 at 15:55:36 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-01 at 15:55:36 | WARNING | Cannot write log file to pgroup p21592.
2023-12-01 at 15:55:36 | INFO | Running at cristallina with pgroup p21592.
2023-12-01 at 15:55:36 | INFO | Loading finished.
2023-12-05 at 07:22:43 | INFO | Connected to stand server
2023-12-05 at 07:22:45 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-05 at 07:22:48 | INFO | Running at cristallina with pgroup p21592.
2023-12-05 at 07:22:48 | INFO | Loading finished.
2023-12-08 at 11:47:27 | INFO | Connected to stand server
2023-12-08 at 11:47:29 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 11:47:44 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 11:47:44 | INFO | Loading finished.
2023-12-08 at 12:07:28 | INFO | Connected to stand server
2023-12-08 at 12:07:29 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:07:30 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:07:30 | INFO | Loading finished.
2023-12-08 at 12:15:13 | INFO | Connected to stand server
2023-12-08 at 12:15:14 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:15:15 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:15:15 | INFO | Loading finished.
2023-12-08 at 12:29:46 | INFO | Connected to stand server
2023-12-08 at 12:29:47 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:29:47 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:29:47 | INFO | Loading finished.
2023-12-08 at 12:39:22 | INFO | Connected to stand server
2023-12-08 at 12:39:23 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:39:24 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:39:24 | INFO | Loading finished.
2023-12-08 at 12:43:30 | INFO | Connected to stand server
2023-12-08 at 12:43:31 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:43:31 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:43:31 | INFO | Loading finished.
2023-12-08 at 12:44:44 | INFO | Connected to stand server
2023-12-08 at 12:44:45 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:44:45 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:44:45 | INFO | Loading finished.
2023-12-08 at 12:48:36 | INFO | Connected to stand server
2023-12-08 at 12:48:37 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:48:37 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:48:37 | INFO | Loading finished.
2023-12-08 at 12:51:36 | INFO | Connected to stand server
2023-12-08 at 12:51:37 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:51:38 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:51:38 | INFO | Loading finished.
2023-12-08 at 12:56:14 | INFO | Connected to stand server
2023-12-08 at 12:56:15 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 12:56:16 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 12:56:16 | INFO | Loading finished.
2023-12-08 at 13:08:21 | INFO | Connected to stand server
2023-12-08 at 13:08:22 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 13:08:22 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 13:08:22 | INFO | Loading finished.
2023-12-08 at 13:22:18 | INFO | Connected to stand server
2023-12-08 at 13:22:19 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 13:22:20 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 13:22:20 | INFO | Loading finished.
2023-12-08 at 13:23:10 | INFO | Connected to stand server
2023-12-08 at 13:23:11 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 13:23:11 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 13:23:11 | INFO | Loading finished.
2023-12-08 at 13:25:03 | INFO | Connected to stand server
2023-12-08 at 13:25:05 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 13:25:05 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 13:25:05 | INFO | Loading finished.
2023-12-08 at 13:26:44 | INFO | Connected to stand server
2023-12-08 at 13:26:45 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 13:26:46 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 13:26:46 | INFO | Loading finished.
2023-12-08 at 13:36:29 | INFO | Connected to stand server
2023-12-08 at 13:36:30 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 13:36:31 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 13:36:31 | INFO | Loading finished.
2023-12-08 at 13:38:01 | INFO | Connected to stand server
2023-12-08 at 13:38:02 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 13:38:03 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 13:38:03 | INFO | Loading finished.
2023-12-08 at 14:15:24 | INFO | Connected to stand server
2023-12-08 at 14:15:25 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 14:15:25 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 14:15:25 | INFO | Loading finished.
2023-12-08 at 14:16:55 | INFO | Connected to stand server
2023-12-08 at 14:16:56 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 14:16:57 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 14:16:57 | INFO | Loading finished.
2023-12-08 at 14:26:23 | INFO | Connected to stand server
2023-12-08 at 14:26:24 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 14:26:25 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 14:26:25 | INFO | Loading finished.
2023-12-08 at 14:38:29 | INFO | Connected to stand server
2023-12-08 at 14:38:30 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 14:38:31 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 14:38:31 | INFO | Loading finished.
2023-12-08 at 16:22:56 | INFO | Connected to stand server
2023-12-08 at 16:22:58 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 16:22:58 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 16:22:58 | INFO | Loading finished.
2023-12-08 at 16:27:16 | INFO | Connected to stand server
2023-12-08 at 16:27:17 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 16:27:17 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 16:27:17 | INFO | Loading finished.
2023-12-08 at 16:28:39 | INFO | Connected to stand server
2023-12-08 at 16:28:40 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 16:28:40 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 16:28:40 | INFO | Loading finished.
2023-12-08 at 20:21:03 | INFO | Connected to stand server
2023-12-08 at 20:21:04 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 20:21:07 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 20:21:07 | INFO | Loading finished.
2023-12-08 at 20:26:12 | INFO | Connected to stand server
2023-12-08 at 20:26:13 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 20:26:13 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 20:26:13 | INFO | Loading finished.
2023-12-08 at 22:11:13 | INFO | Connected to stand server
2023-12-08 at 22:11:15 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-08 at 22:11:15 | INFO | Running at cristallina with pgroup p21592.
2023-12-08 at 22:11:15 | INFO | Loading finished.
2023-12-09 at 14:54:59 | INFO | Connected to stand server
2023-12-09 at 14:55:00 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-09 at 14:55:05 | INFO | Running at cristallina with pgroup p21592.
2023-12-09 at 14:55:05 | INFO | Loading finished.
2023-12-09 at 15:08:16 | INFO | Connected to stand server
2023-12-09 at 15:08:17 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-09 at 15:08:18 | INFO | Running at cristallina with pgroup p21592.
2023-12-09 at 15:08:18 | INFO | Loading finished.
2023-12-10 at 01:58:19 | INFO | Connected to stand server
2023-12-10 at 01:58:20 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-10 at 01:58:21 | INFO | Running at cristallina with pgroup p21592.
2023-12-10 at 01:58:21 | INFO | Loading finished.
2023-12-10 at 09:02:51 | INFO | Connected to stand server
2023-12-10 at 09:02:52 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-10 at 09:02:54 | INFO | Running at cristallina with pgroup p21592.
2023-12-10 at 09:02:54 | INFO | Loading finished.
2023-12-11 at 06:00:14 | INFO | Connected to stand server
2023-12-12 at 12:00:40 | INFO | Connected to stand server
2023-12-12 at 15:23:02 | INFO | Connected to stand server
2023-12-12 at 15:37:58 | INFO | Connected to stand server
2023-12-12 at 15:37:59 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 10:16:21 | INFO | Connected to stand server
2023-12-13 at 10:38:03 | INFO | Connected to stand server
2023-12-13 at 10:38:04 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 11:24:30 | INFO | Connected to stand server
2023-12-13 at 11:24:31 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 11:46:18 | INFO | Connected to stand server
2023-12-13 at 11:50:19 | INFO | Connected to stand server
2023-12-13 at 11:50:20 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 11:51:10 | INFO | Connected to stand server
2023-12-13 at 11:51:11 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 11:51:11 | WARNING | Cannot write log file to pgroup p21592.
2023-12-13 at 11:51:11 | INFO | Running at cristallina with pgroup p21592.
2023-12-13 at 11:51:11 | INFO | Loading finished.
2023-12-13 at 11:54:29 | INFO | Connected to stand server
2023-12-13 at 11:54:30 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 11:54:30 | INFO | Running at cristallina with pgroup p21592.
2023-12-13 at 11:54:30 | INFO | Loading finished.
2023-12-13 at 12:01:40 | INFO | Connected to stand server
2023-12-13 at 12:01:41 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 12:01:42 | INFO | Running at cristallina with pgroup p21592.
2023-12-13 at 12:01:42 | INFO | Loading finished.
2023-12-13 at 12:01:48 | INFO | Connected to stand server
2023-12-13 at 12:01:49 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 12:01:49 | WARNING | Cannot write log file to pgroup p21592.
2023-12-13 at 12:01:49 | INFO | Running at cristallina with pgroup p21592.
2023-12-13 at 12:01:49 | INFO | Loading finished.
2023-12-13 at 13:56:57 | INFO | Connected to stand server
2023-12-13 at 13:57:00 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 13:57:00 | WARNING | Cannot write log file to pgroup p21592.
2023-12-13 at 13:57:00 | INFO | Running at cristallina with pgroup p21592.
2023-12-13 at 13:57:00 | INFO | Loading finished.
2023-12-13 at 14:10:56 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 14:10:57 | INFO | Connected to stand server
2023-12-13 at 14:10:57 | WARNING | Cannot write log file to pgroup p21592.
2023-12-13 at 14:10:57 | INFO | Running at cristallina with pgroup p21592.
2023-12-13 at 14:10:57 | INFO | Loading finished.
2023-12-13 at 14:26:27 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 14:26:27 | INFO | Connected to stand server
2023-12-13 at 14:27:13 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 14:27:13 | INFO | Connected to stand server
2023-12-13 at 14:28:23 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 14:28:23 | INFO | Connected to stand server
2023-12-13 at 14:31:31 | INFO | Using undulator (Aramis) offset to PSSS energy of -59 eV.
2023-12-13 at 14:31:32 | INFO | Connected to stand server
2024-05-23 at 17:37:01 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-23 at 17:37:02 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-23 at 17:37:02 | WARNING | Cannot write log file to pgroup p19150.
2024-05-23 at 17:37:02 | INFO | Running at cristallina with pgroup p19150.
2024-05-23 at 17:37:02 | INFO | Loading finished.
2024-05-23 at 17:37:32 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-23 at 17:37:32 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-23 at 17:37:32 | WARNING | Cannot write log file to pgroup p19150.
2024-05-23 at 17:37:32 | INFO | Running at cristallina with pgroup p19150.
2024-05-23 at 17:37:32 | INFO | Loading finished.
2024-05-27 at 15:58:04 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 15:58:04 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 15:58:04 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 15:58:04 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 15:58:04 | INFO | Loading finished.
2024-05-27 at 16:05:00 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:05:01 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:05:01 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:05:01 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:05:01 | INFO | Loading finished.
2024-05-27 at 16:07:15 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:07:16 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:07:16 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:07:16 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:07:16 | INFO | Loading finished.
2024-05-27 at 16:17:12 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:19:57 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:20:44 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:20:45 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:20:45 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:20:45 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:20:45 | INFO | Loading finished.
2024-05-27 at 16:35:50 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:35:50 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:35:50 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:35:50 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:35:50 | INFO | Loading finished.
2024-05-27 at 16:36:36 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:36:37 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:36:37 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:36:37 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:36:37 | INFO | Loading finished.
2024-05-27 at 16:40:58 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:40:59 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:40:59 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:40:59 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:40:59 | INFO | Loading finished.
2024-05-27 at 16:41:23 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:41:24 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:41:24 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:41:24 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:41:24 | INFO | Loading finished.
2024-05-27 at 16:42:29 | INFO | Using undulator (Aramis) offset to PSSS energy of -104 eV.
2024-05-27 at 16:42:30 | WARNING | Cannot connect to stand server on saresc-vcons-02.psi.ch. Disabling spreadsheet.
2024-05-27 at 16:42:30 | WARNING | Cannot write log file to pgroup p19150.
2024-05-27 at 16:42:30 | INFO | Running at cristallina with pgroup p19150.
2024-05-27 at 16:42:30 | INFO | Loading finished.

File diff suppressed because one or more lines are too long

Binary file not shown.

0
measurement_scripts/DilSc_commisioning_pulses.py Normal file → Executable file
View File

0
measurement_scripts/DilSc_frappy_client.py Normal file → Executable file
View File

0
measurement_scripts/DilSc_meander_scripts.py Normal file → Executable file
View File

1172
measurement_scripts/Untitled.ipynb Executable file

File diff suppressed because it is too large Load Diff

View File

View File

0
measurement_scripts/hole_drilling.py Normal file → Executable file
View File

0
measurement_scripts/inprints.py Normal file → Executable file
View File

View File

7
mx/knife_edge_prototype.py Executable file
View File

@ -0,0 +1,7 @@
# to execute directly in slic:
from devices.knife_edge import KnifeEdge
kn = KnifeEdge
scan = Scanner(default_acquisitions=[daq], condition=None)
scan.scan1D(kn.x, 4, 5, 0.1, 10, 'test_knife_edge_evr_only', detectors=[], channels=["SAR-CVME-TIFALL6:EvtSet"], pvs=[])

28
mx/mx_adjustables.py Executable file
View File

@ -0,0 +1,28 @@
from slic.core.device.simpledevice import SimpleDevice
from slic.devices.general.motor import Motor
# hve positioners
hve_mot_v = Motor("SARES30-MOBI1:MOT_1")
hve_mot_h1 = Motor("SARES30-MOBI1:MOT_2")
hve_mot_h2 = Motor("SARES30-MOBI1:MOT_3")
# collimator
coll_x = Motor("SARES30-SMX:MCS1")
coll_y = Motor("SARES30-SMX:MCS2")
# post-tube
pt_x1 = Motor("SARES30-SMX:MCS4")
pt_x2 = Motor("SARES30-SMX:MCS5")
pt_y1 = Motor("SARES30-SMX:MCS6")
pt_y2 = Motor("SARES30-SMX:MCS7")
pt_z = Motor("SARES30-SMX:MCS8")
# post-tube
detector_z = Motor("SAR-EXPMX:MOT_DET_Z")
# post-tube
backlight = Motor("SAR-EXPMX:MOT_BLGT")
# fast stage
mx_fast_x = Motor("SAR-EXPMX:MOT_FX")
mx_fast_y = Motor("SAR-EXPMX:MOT_FY")

205
mx/mx_experiment.py Normal file → Executable file
View File

@ -1,19 +1,104 @@
# Moved from main cristallina.py here temporarily
mxdaq = SFAcquisition(
instrument,
pgroup,
default_channels=bs_channels,
default_pvs=pvs,
default_detectors=detectors_MX,
rate_multiplicator=1,
append_user_tag_to_data_dir=True
#!/usr/bin/env python
import sys
import os
from loguru import logger
# at the moment this allows us to group the subdirectories as modules easily
# TODO: a more general way would be to have this cristallina as a installed package
sys.path.insert(0, os.path.expanduser("/sf/cristallina/applications/slic/cristallina"))
def setup_general_logging():
"""Setup logging to console and files in both the snapshots and
the respective pgroup.
"""
logger.remove()
logger.add(
sys.stderr,
format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
level="INFO",
)
logger.info("Loading started.")
# create file handler which logs
try:
logger.add(
"/sf/cristallina/applications/beamline/snapshots/slic_logs/cristallina_mx.log",
format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
level="DEBUG",
rotation="1 week",
)
logger.info("Logging to snapshots.")
except PermissionError as e:
logger.warning("Cannot write log file to snapshots.")
logger.warning(e)
def setup_logging_pgroup(pgroup, level="INFO"):
try:
logger.add(
f"/sf/cristallina/data/{pgroup}/scratch/slic.log",
format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
level=level,
rotation="1 week",
)
logger.info(f"Logging to pgroup {pgroup}.")
except PermissionError as e:
logger.warning(f"Cannot write log file to pgroup {pgroup}.")
# We setup the logging before going further so that
# other modules can write startup messages into the log file.
setup_general_logging()
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.utils import devices, Marker, as_shortcut, snapshot
from slic.utils import Channels, Config, Elog, Screenshot, PV
from slic.core.acquisition.fakeacquisition import FakeAcquisition
print( os.getcwd() )
from channels.bs_channels import (
detectors_MX,
bs_channels,
camera_channels,
)
mxscan = Scanner(default_acquisitions=[mxdaq], condition=check_intensity_gas_monitor)
from channels.pv_channels import pv_channels
mxgui = GUI(mxscan, show_goto=True, show_spec=False, show_scan=False, show_scan2D=False, show_run=False, show_static=False, show_sfx=True, start_tab="sfx")
############## MX motors ##############
################# DEVICES #################
dummy = DummyAdjustable(units="au")
from devices.knife_edge import KnifeEdge
# from devices.standa import standa
# from devices.newport import newport
from beamline.components import (
upstream_attenuator,
attenuator,
pp_shutter,
pulsepicker,
alignment_laser,
pbps113,
pbps149,
)
from systems.components import cta
# MX adajustables
from slic.core.device.simpledevice import SimpleDevice
from slic.devices.general.motor import Motor
# hve positioners
hve_mot_v = Motor("SARES30-MOBI1:MOT_1")
hve_mot_h1 = Motor("SARES30-MOBI1:MOT_2")
@ -36,18 +121,71 @@ detector_z = Motor("SAR-EXPMX:MOT_DET_Z")
# post-tube
backlight = Motor("SAR-EXPMX:MOT_BLGT")
# fast stage
mx_fast_x = Motor("SAR-EXPMX:MOT_FX")
mx_fast_y = Motor("SAR-EXPMX:MOT_FY")
################# DAQ Setup #################
instrument = "cristallina"
#pgroup = "p21734"
pgroup = "p22215"
# setup pgroup specific logger
setup_logging_pgroup(pgroup)
# Moved from main cristallina.py here temporarily
mxdaq = SFAcquisition(
instrument,
pgroup,
default_channels=bs_channels,
default_pvs=pv_channels,
default_detectors=detectors_MX,
rate_multiplicator=1,
append_user_tag_to_data_dir=True
)
# There is a new EPICS buffer, so the archiver is no longer used. This makes sure we are taking PVs from the right place.
try:
mxdaq.update_config_pvs()
except Exception as e:
logger.warning(f"error updating config pvs for mxdaq: {e}")
check_intensity_gas_monitor = PVCondition(
"SARFE10-PBPG050:PHOTON-ENERGY-PER-PULSE-US",
vmin=4,
vmax=2000,
wait_time=0.5,
required_fraction=0.8,
)
mxscan = Scanner(default_acquisitions=[mxdaq], condition=check_intensity_gas_monitor)
mxgui = GUI(mxscan, show_goto=True, show_spec=False, show_scan=True, show_scan2D=False, show_run=False, show_static=False, show_sfx=True, start_tab="sfx")
#############################################
################# DAQ Setup #################
############## in positions ##############
coll_in_pos_x, coll_in_pos_y = 9.51, -5.62
coll_in_pos_x, coll_in_pos_y = 9.50, 1.38
backlight_in = -30000
detector_in_pos = 1
pt_in_pos_x1, pt_in_pos_x2, pt_in_pos_y1, pt_in_pos_y2, pt_in_pos_z = -3.039, -2.637, 8.904, 13.857, 0
detector_in_pos = 116
pt_in_pos_x1 = -4.301
pt_in_pos_x2 = -4.501
pt_in_pos_y1 = 10.996
pt_in_pos_y2 = 10.664
pt_in_pos_z = 0.5
############## out positions ##############
coll_out_pos_x, coll_out_pos_y = -14.5, 1.32
############## out positions ##############
coll_out_pos_x, coll_out_pos_y = -12, 1.38
backlight_out = 1000
detector_out_pos = 180
pt_out_pos_x1, pt_out_pos_x2, pt_out_pos_y1, pt_out_pos_y2, pt_out_pos_z = 5.960, 6.361, -15.096, -10.143, -8
detector_out_pos = 220
pt_out_pos_x1 = 4.8
pt_out_pos_x2 = 4.6
pt_out_pos_y1 = -12.8
pt_out_pos_y2 = -13.1
pt_out_pos_z = -8
@as_shortcut
def a_data_collection():
@ -56,52 +194,61 @@ def a_data_collection():
backlight.set( backlight_out ).wait()
# post-tube in
pt_x1_in = pt_x1.set( pt_in_pos_x1 ) # this runs in parallel
pt_x2_in = pt_x2.set( pt_in_pos_x2 ) # this runs in parallel
pt_y1_in = pt_y1.set( pt_in_pos_y1 ) # this runs in parallel
pt_y2_in = pt_y2.set( pt_in_pos_y2 ) # this runs in parallel
pt_z_in = pt_z.set( pt_in_pos_z ) # this runs in parallel
for t in (pt_x1_in, pt_x2_in, pt_y1_in, pt_y2_in, pt_z_in): # this waits for all of them to be done!
for t in (pt_x1_in, pt_x2_in, pt_y1_in, pt_y2_in): # this waits for all of them to be done!
logger.info(f"waiting for post-tube to move in")
t.wait()
pt_z_in = pt_z.set( pt_in_pos_z ).wait() # this no longer runs in parallel
# collimator in
cx_in = coll_x.set( coll_in_pos_x ) # this runs in parallel
cy_in = coll_y.set( coll_in_pos_y ) # this runs in parallel
for t in (cx_in, cy_in): # this waits for all of them to be done!
logger.info(f"waiting for collimator to move in")
t.wait()
# detector in
logger.info(f"waiting for detector to move in")
detector_z.set( detector_in_pos ).wait() # this runs in parallel
@as_shortcut
def b_sample_alignment():
# detector out
logger.info(f"waiting for detector to move out")
detector_z.set( detector_out_pos ).wait()
# collimator out
cx_out = coll_x.set( coll_out_pos_x ) # this runs in parallel
cy_out = coll_y.set( coll_out_pos_y ) # this runs in parallel
for t in (cx_out, cy_out): # this waits for all of them to be done!
logger.info(f"waiting for collimator to move out")
t.wait()
# post-tube out
pt_z_out = pt_z.set( pt_out_pos_z ).wait() # this runs in parallel
pt_x1_out = pt_x1.set( pt_out_pos_x1 ) # this runs in parallel
pt_x2_out = pt_x2.set( pt_out_pos_x2 ) # this runs in parallel
pt_y1_out = pt_y1.set( pt_out_pos_y1 ) # this runs in parallel
pt_y2_out = pt_y2.set( pt_out_pos_y2 ) # this runs in parallel
pt_z_out = pt_z.set( pt_out_pos_z ) # this runs in parallel
for t in (pt_x1_out, pt_x2_out, pt_y1_out, pt_y2_out, pt_z_out): # this waits for all of them to be done!
logger.info(f"waiting for post_tube to move out")
t.wait()
@as_shortcut
def c_backlight_in():
# safety logic for backlight in
if coll_x.get() < 0 and pt_y1.get() < 0 and detector_z.get() > 20:
if round( coll_x.get(), 2 ) == coll_out_pos_x and round( pt_y1.get(), 2 ) == pt_out_pos_y1 and round( detector_z.get(), 2 ) > detector_in_pos:
backlight.set( backlight_in ).wait()
else:
print( "devises are in the way" )
logger.warning( "some devices are in the way" )
@as_shortcut
def ca_backlight_out():
@ -120,7 +267,7 @@ def post_tube_in():
for t in (pt_x1_in, pt_x2_in, pt_y1_in, pt_y2_in, pt_z_in): # this waits for all of them to be done!
t.wait()
else:
print( "devises are in the way" )
logger.warning( "devices are in the way" )
@as_shortcut
def post_tube_out():
@ -135,13 +282,14 @@ def post_tube_out():
for t in (pt_x1_out, pt_x2_out, pt_y1_out, pt_y2_out, pt_z_out): # this waits for all of them to be done!
t.wait()
else:
print( "detector needs to move" )
logger.warning( "detector needs to move" )
@as_shortcut
def coll_in():
cx_in = coll_x.set( coll_in_pos_x ) # this runs in parallel
cy_in = coll_y.set( coll_in_pos_y ) # this runs in parallel
for t in (cx_in, cy_in): # this waits for all of them to be done!
logger.info(f"waiting for collimator to move in")
t.wait()
@as_shortcut
@ -149,6 +297,7 @@ def coll_out():
cx_out = coll_x.set( coll_out_pos_x ) # this runs in parallel
cy_out = coll_y.set( coll_out_pos_y ) # this runs in parallel
for t in (cx_out, cy_out): # this waits for all of them to be done!
logger.info(f"waiting for collimator to move out")
t.wait()
@as_shortcut
@ -156,12 +305,14 @@ def detector_in():
# safety logic for detector in
if backlight.get() > 0 and pt_y1.get() > 8:
logger.info(f"waiting for detector to move in")
detector_z.set( detector_in_pos ).wait() # this runs in parallel
else:
print( "devises are in the way" )
logger.warning( "devices are in the way" )
@as_shortcut
def detector_out():
logger.info(f"waiting for detector to move out")
detector_z.set( detector_out_pos ).wait() # this runs in parallel

52
pgroups.py Executable file
View File

@ -0,0 +1,52 @@
pgroup_scratch = "p19150" # Scratch
# pgroup = "p19150" # Scratch
# pgroup = "p19152" # Scratch
# pgroup = "p19739" # commissioning March 2022 -- July 2022
# pgroup = "p20443" # commissioning Wavefront Sensor August 2022 (active)
# pgroup = "p20558" # SwissMX commissioning 3
# pgroup = "p20557" # CrQ PMS commisioning 1
# pgroup = "p20509" # CrQ commisioning DilSc1
# pgroup = "p20519" # beamline commissioning 2
# pgroup = "p20841" # CrQ PMS commisioning 2 (Jan 2023)
# pgroup = "p20993" # CrQ commisioning DilSc2 (March 2023)
# pgroup = "p21147" # SAXS
# pgroup = "p21238" # Cristallina photon diagnostics p-group with Chris
# pgroup = "p21224" # SwissMX commisioning 7
# pgroup = "p20840" # Cr beamline commisioning (Jan-Feb 2023)
# pgroup = "p21261" # CrQ PMS-3 July 2023
# pgroup = "p21528" # Cr-MX Colletier 2023-09-05
# pgroup = "p21516" # Beamline commissioning September 26-27, November 7 2023
# pgroup = "p21563" # Dil-Sc / diffractometer / tilted bunch / LiErF4 (/ TmVO4)
# pgroup = "p21569" # Dil-Sc / diffractometer / tilted bunch / LiErF4 (/ TmVO4), November 17-
# pgroup = "p21592" # HVE commissioning
# pgroup = "p21640" # Dil-Sc / diffractometer / LiErF4 : 4 March 2024
# pgroup = "p21920" # Beamline commissioning 2024
# pgroup = "p21741" # CrQ - DilSc - SAXS LiHoF4
# pgroup = "p21735" # Cr-MX Aller 2024-06-04
# pgroup = "p21736" # Cr-MX Weik 2024-06-07
# pgroup = "p21977" # CrQ - Dilsc - LiErF4
# pgroup = "p21981" # CrMX JFJ commissioning and other related detector bullocks
# pgroup = "p22198" # CrMX Fromme - 2024-10-25
# pgroup = "p22214" # CrQ in-house DilSc 2024-11-15
# pgroup = "p22199" # CrQ commissioning PuMa 2024-11-22
# pgroup = "p22259" # Cr-Bl commissioning Jan 2025
# pgroup = "p22226" # CrMX user Nogly 2025-02-21
pgroup = "p22478" # Cr-Q commissioning Mar-Apr 2025

View File

@ -1,464 +0,0 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "8960fc34-a3b8-4f3a-85a4-22ea697ee38a",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1a5fa748-9641-4c93-b0bf-9a2a3ac58745",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-05-22 at 08:16:27 | INFO | Loading started.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b]0;⊚slic\u0007could not set up DBusNotify: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-05-22 at 08:16:32 | INFO | Connected to stand server\n",
"2023-05-22 at 08:16:33 | INFO | Using undulator (Aramis) offset to PSSS energy of 13 eV.\n",
"2023-05-22 at 08:16:33 | INFO | Running at cristallina with pgroup p21147.\n",
"2023-05-22 at 08:16:33 | INFO | Loading finished.\n"
]
}
],
"source": [
"%run cristallina.py"
]
},
{
"cell_type": "markdown",
"id": "69ae9d05-4a12-40b0-b0a7-d5436eaf23ea",
"metadata": {},
"source": [
"We recorded at 1 Hz with the CTA and 6000 repetions."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "09065809-9077-46b1-8fea-a13c0a92e2a2",
"metadata": {},
"outputs": [],
"source": [
"shots = 6000 # repetitions from CTA"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "1713739a-6399-43fa-ad60-1ef2a0903d1a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"<span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">array</span><span style=\"font-weight: bold\">([</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">120000</span>., <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">180000</span>., <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">240000</span>., <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">300000</span>., <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">360000</span>., <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">420000</span>., <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">480000</span>.,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">540000</span>.<span style=\"font-weight: bold\">])</span>\n",
"</pre>\n"
],
"text/plain": [
"\n",
"\u001b[1;35marray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m120000\u001b[0m., \u001b[1;36m180000\u001b[0m., \u001b[1;36m240000\u001b[0m., \u001b[1;36m300000\u001b[0m., \u001b[1;36m360000\u001b[0m., \u001b[1;36m420000\u001b[0m., \u001b[1;36m480000\u001b[0m.,\n",
" \u001b[1;36m540000\u001b[0m.\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pids = shots*100\n",
"\n",
"missing = np.arange(2,10)*pids/10\n",
"missing\n"
]
},
{
"cell_type": "markdown",
"id": "a15fc525-b909-43a1-a105-bf13272a3257",
"metadata": {},
"source": [
"Missing are the images from pids 12000 to 18000, 18000 to 24000 and so on. Already recorded are the first 60000.\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "0b0d72f1-9528-4077-89f1-1476b4b74411",
"metadata": {},
"outputs": [],
"source": [
"# with scratch pgroup:\n",
"\n",
"daq_test = SFAcquisition(\n",
" instrument,\n",
" \"p19150\",\n",
" default_channels=bs_channels,\n",
" default_pvs=pvs,\n",
" default_detectors=detectors,\n",
" rate_multiplicator=100,\n",
")\n",
"\n",
"slow_daq_test = SFAcquisition(\n",
" instrument,\n",
" \"p19150\",\n",
" default_channels=bs_channels,\n",
" default_pvs=pvs,\n",
" default_detectors=detectors,\n",
" rate_multiplicator=100,\n",
")\n",
"\n",
"slow_daq = SFAcquisition(\n",
" instrument,\n",
" pgroup,\n",
" default_channels=bs_channels,\n",
" default_pvs=pvs,\n",
" default_detectors=detectors,\n",
" rate_multiplicator=100,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d1db9525-bb0e-4c32-8aa5-752091928bbd",
"metadata": {},
"outputs": [],
"source": [
"pgroup = \"p21147\" # SAXS\n",
"\n",
"if False:\n",
" res = daq.retrieve(\n",
" \"CTA_pulses\",\n",
" np.arange(CTA_sequence_start_PID, CTA_sequence_start_PID + n_pulses * 10),\n",
" run_number=run_number,\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "77d93f9d-2a11-4059-966f-4640f1ea86b0",
"metadata": {},
"outputs": [
{
"ename": "BrokerError",
"evalue": "An error happened on the server:\nUnknown error",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mBrokerError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[11], line 5\u001b[0m\n\u001b[1;32m 1\u001b[0m CTA_sequence_start_PID \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m18111678900\u001b[39m\n\u001b[1;32m 3\u001b[0m length \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m200\u001b[39m\n\u001b[0;32m----> 5\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mslow_daq_test\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mCTA_pulses\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43marange\u001b[49m\u001b[43m(\u001b[49m\u001b[43mCTA_sequence_start_PID\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mCTA_sequence_start_PID\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mlength\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_number\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/sfacquisition.py:125\u001b[0m, in \u001b[0;36mSFAcquisition.retrieve\u001b[0;34m(self, filename, pulseids, run_number)\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_continuous(pulseids):\n\u001b[1;32m 123\u001b[0m params[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mselected_pulse_ids\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m pulseids\n\u001b[0;32m--> 125\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maddress\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 127\u001b[0m res_run_number \u001b[38;5;241m=\u001b[39m res[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 128\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m res_run_number \u001b[38;5;241m==\u001b[39m run_number, \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mreceived \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mres_run_number\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and expected \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrun_number\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m run numbers not identical\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/broker_client.py:251\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(address, *args, **kwargs)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mretrieve\u001b[39m(address, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 250\u001b[0m requrl \u001b[38;5;241m=\u001b[39m address\u001b[38;5;241m.\u001b[39mrstrip(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/retrieve_from_buffers\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m--> 251\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mpost_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequrl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 252\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\n\u001b[1;32m 253\u001b[0m run_number \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]),\n\u001b[1;32m 254\u001b[0m acq_number \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124macquisition_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]),\n\u001b[1;32m 255\u001b[0m total_acq_number \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124munique_acquisition_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]),\n\u001b[1;32m 256\u001b[0m filenames \u001b[38;5;241m=\u001b[39m response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfiles\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 257\u001b[0m )\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m res\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/broker_client.py:275\u001b[0m, in \u001b[0;36mpost_request\u001b[0;34m(requrl, params, timeout)\u001b[0m\n\u001b[1;32m 273\u001b[0m params \u001b[38;5;241m=\u001b[39m json_validate(params)\n\u001b[1;32m 274\u001b[0m response \u001b[38;5;241m=\u001b[39m requests\u001b[38;5;241m.\u001b[39mpost(requrl, json\u001b[38;5;241m=\u001b[39mparams, timeout\u001b[38;5;241m=\u001b[39mtimeout)\u001b[38;5;241m.\u001b[39mjson()\n\u001b[0;32m--> 275\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mvalidate_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/broker_client.py:289\u001b[0m, in \u001b[0;36mvalidate_response\u001b[0;34m(resp)\u001b[0m\n\u001b[1;32m 287\u001b[0m message \u001b[38;5;241m=\u001b[39m resp\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnknown error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 288\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error happened on the server:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(message)\n\u001b[0;32m--> 289\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m BrokerError(msg)\n",
"\u001b[0;31mBrokerError\u001b[0m: An error happened on the server:\nUnknown error"
]
}
],
"source": [
"CTA_sequence_start_PID = 18111678900\n",
"\n",
"length = 200\n",
"\n",
"res = slow_daq_test.retrieve(\n",
" \"CTA_pulses\",\n",
" np.arange(CTA_sequence_start_PID, CTA_sequence_start_PID + length),\n",
" run_number=None,\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "0733b5e8-b7f0-4693-b772-670ee62d6e35",
"metadata": {},
"outputs": [
{
"ename": "BrokerError",
"evalue": "An error happened on the server:\nUnknown error",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mBrokerError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[11], line 6\u001b[0m\n\u001b[1;32m 2\u001b[0m CTA_sequence_start_PID \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m18111618800\u001b[39m\n\u001b[1;32m 4\u001b[0m length \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1000\u001b[39m\n\u001b[0;32m----> 6\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mslow_daq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mCTA_pulses\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43marange\u001b[49m\u001b[43m(\u001b[49m\u001b[43mCTA_sequence_start_PID\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mCTA_sequence_start_PID\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mlength\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_number\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1120\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/sfacquisition.py:125\u001b[0m, in \u001b[0;36mSFAcquisition.retrieve\u001b[0;34m(self, filename, pulseids, run_number)\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_continuous(pulseids):\n\u001b[1;32m 123\u001b[0m params[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mselected_pulse_ids\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m pulseids\n\u001b[0;32m--> 125\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maddress\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 127\u001b[0m res_run_number \u001b[38;5;241m=\u001b[39m res[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 128\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m res_run_number \u001b[38;5;241m==\u001b[39m run_number, \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mreceived \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mres_run_number\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and expected \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrun_number\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m run numbers not identical\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/broker_client.py:251\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(address, *args, **kwargs)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mretrieve\u001b[39m(address, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 250\u001b[0m requrl \u001b[38;5;241m=\u001b[39m address\u001b[38;5;241m.\u001b[39mrstrip(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/retrieve_from_buffers\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m--> 251\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mpost_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequrl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 252\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\n\u001b[1;32m 253\u001b[0m run_number \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]),\n\u001b[1;32m 254\u001b[0m acq_number \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124macquisition_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]),\n\u001b[1;32m 255\u001b[0m total_acq_number \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124munique_acquisition_number\u001b[39m\u001b[38;5;124m\"\u001b[39m]),\n\u001b[1;32m 256\u001b[0m filenames \u001b[38;5;241m=\u001b[39m response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfiles\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 257\u001b[0m )\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m res\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/broker_client.py:275\u001b[0m, in \u001b[0;36mpost_request\u001b[0;34m(requrl, params, timeout)\u001b[0m\n\u001b[1;32m 273\u001b[0m params \u001b[38;5;241m=\u001b[39m json_validate(params)\n\u001b[1;32m 274\u001b[0m response \u001b[38;5;241m=\u001b[39m requests\u001b[38;5;241m.\u001b[39mpost(requrl, json\u001b[38;5;241m=\u001b[39mparams, timeout\u001b[38;5;241m=\u001b[39mtimeout)\u001b[38;5;241m.\u001b[39mjson()\n\u001b[0;32m--> 275\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mvalidate_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/gfa/.mounts/sf_cristallina/applications/slic/slic-package/slic/core/acquisition/broker_client.py:289\u001b[0m, in \u001b[0;36mvalidate_response\u001b[0;34m(resp)\u001b[0m\n\u001b[1;32m 287\u001b[0m message \u001b[38;5;241m=\u001b[39m resp\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnknown error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 288\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error happened on the server:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(message)\n\u001b[0;32m--> 289\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m BrokerError(msg)\n",
"\u001b[0;31mBrokerError\u001b[0m: An error happened on the server:\nUnknown error"
]
}
],
"source": [
"CTA_sequence_start_PID = 18111678900\n",
"CTA_sequence_start_PID = 18111618800\n",
"\n",
"length = 1000\n",
"\n",
"res = slow_daq.retrieve(\n",
" \"CTA_pulses\",\n",
" np.arange(CTA_sequence_start_PID, CTA_sequence_start_PID + length),\n",
" run_number=1120,\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "a0b1dece-021b-4bf5-9031-3db06c56b8fb",
"metadata": {},
"outputs": [],
"source": [
"#CTA_sequence_start_PID = 18111678900\n",
"CTA_sequence_start_PID = 18111618800\n",
"CTA_sequence_start_PID = 18116377800\n",
"\n",
"CTA_sequence_start_PID = 18114660400 # works\n",
"CTA_sequence_start_PID = 18113444000 # fails \n",
"CTA_sequence_start_PID = 18114052200 # fails\n",
"\n",
"\n",
"CTA_sequence_start_PID = 18114660400 # works\n",
"\n",
"length = 60000\n",
"\n",
"\n",
"for start_pid in [18114720400, 18114780500, 18114840600, 18114900700, 18114960800,\n",
" 18115020900, 18115081000, 18115141100, 18115201200, 18115261300]:\n",
"\n",
" res = slow_daq.retrieve(\n",
" \"CTA_pulses\",\n",
" np.arange(start_pid, start_pid + length),\n",
" run_number=1129,\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "684e664b-fe6d-404d-86b9-7a223fa990c3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Advanced run number to 1129.\n",
"No detectors specified, using default detector list.\n",
"No PVs specified, using default PV list.\n",
"No channels specified, using default channel list.\n",
"\u001b[31m\u001b[1mOffline Channels:\n",
"-----------------\n",
"- SAR-CVME-TIFALL6:EvtSet\n",
"- SARFE10-PSSS059:FIT_ERR\n",
"- SARFE10-PSSS059:SPECTRUM_AVG_CENTER\n",
"- SARFE10-PSSS059:SPECTRUM_AVG_FWHM\n",
"- SARFE10-PSSS059:SPECTRUM_AVG_Y\n",
"\u001b[39m\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" 1%|██ | 2/200 [00:03<05:02, 1.5s/@]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"run number: 1129\n",
"acq number: 1\n",
"total acq number: 1970\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- <span style=\"color: #800080; text-decoration-color: #800080\">/sf/cristallina/data/p21147/raw/run1129/data/</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\">acq0001.PVDATA.h5</span>\n",
"- <span style=\"color: #800080; text-decoration-color: #800080\">/sf/cristallina/data/p21147/raw/run1129/data/</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\">acq0001.BSDATA.h5</span>\n",
"- <span style=\"color: #800080; text-decoration-color: #800080\">/sf/cristallina/data/p21147/raw/run1129/data/</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\">acq0001.JF16T03V01.h5</span>\n",
"</pre>\n"
],
"text/plain": [
"\n",
"DAQTask: done\n",
"\n",
"Output files:\n",
"-------------\n",
"- \u001b[35m/sf/cristallina/data/p21147/raw/run1129/data/\u001b[0m\u001b[95macq0001.PVDATA.h5\u001b[0m\n",
"- \u001b[35m/sf/cristallina/data/p21147/raw/run1129/data/\u001b[0m\u001b[95macq0001.BSDATA.h5\u001b[0m\n",
"- \u001b[35m/sf/cristallina/data/p21147/raw/run1129/data/\u001b[0m\u001b[95macq0001.JF16T03V01.h5\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"slow_daq.acquire('something', n_pulses=2)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "3852ea6f-b014-402b-ba9c-fb5778a76e00",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"<span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">array</span><span style=\"font-weight: bold\">([</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114720400</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114780500</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114840600</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114900700</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114960800</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115020900</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115081000</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115141100</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115201200</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115261300</span><span style=\"font-weight: bold\">])</span>\n",
"</pre>\n"
],
"text/plain": [
"\n",
"\u001b[1;35marray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m18114720400\u001b[0m, \u001b[1;36m18114780500\u001b[0m, \u001b[1;36m18114840600\u001b[0m, \u001b[1;36m18114900700\u001b[0m, \u001b[1;36m18114960800\u001b[0m,\n",
" \u001b[1;36m18115020900\u001b[0m, \u001b[1;36m18115081000\u001b[0m, \u001b[1;36m18115141100\u001b[0m, \u001b[1;36m18115201200\u001b[0m, \u001b[1;36m18115261300\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"np.array([[18114720400],\n",
" [18114780500],\n",
" [18114840600],\n",
" [18114900700],\n",
" [18114960800],\n",
" [18115020900],\n",
" [18115081000],\n",
" [18115141100],\n",
" [18115201200],\n",
" [18115261300]]).flatten()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "c4de9b27-2721-449b-a3e6-6658d3e611c8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"<span style=\"font-weight: bold\">[</span>\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114720400</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114780500</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114840600</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114900700</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18114960800</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115020900</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115081000</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115141100</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115201200</span>,\n",
" <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">18115261300</span>\n",
"<span style=\"font-weight: bold\">]</span>\n",
"</pre>\n"
],
"text/plain": [
"\n",
"\u001b[1m[\u001b[0m\n",
" \u001b[1;36m18114720400\u001b[0m,\n",
" \u001b[1;36m18114780500\u001b[0m,\n",
" \u001b[1;36m18114840600\u001b[0m,\n",
" \u001b[1;36m18114900700\u001b[0m,\n",
" \u001b[1;36m18114960800\u001b[0m,\n",
" \u001b[1;36m18115020900\u001b[0m,\n",
" \u001b[1;36m18115081000\u001b[0m,\n",
" \u001b[1;36m18115141100\u001b[0m,\n",
" \u001b[1;36m18115201200\u001b[0m,\n",
" \u001b[1;36m18115261300\u001b[0m\n",
"\u001b[1m]\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"[18114720400, 18114780500, 18114840600, 18114900700, 18114960800,\n",
" 18115020900, 18115081000, 18115141100, 18115201200, 18115261300]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a8be60a2-d85b-4cbc-8e8b-ffd749b09d15",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

84
spreadsheet.py Normal file → Executable file
View File

@ -24,49 +24,49 @@ n_unds = [6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22] # 14 is t
overview = SimpleDevice(
"Cristallina Overview",
# OKHB154_X_trans = PVAdjustable("SAROP31-OKBH154:W_X.RBV", internal=True),
# OKHB154_Y_trans = PVAdjustable("SAROP31-OKBH154:W_Y.RBV", internal=True),
# OKHB154_X_rot = PVAdjustable("SAROP31-OKBH154:W_RX.RBV", internal=True),
# OKHB154_Y_rot = PVAdjustable("SAROP31-OKBH154:W_RY.RBV", internal=True),
# OKHB154_Z_rot = PVAdjustable("SAROP31-OKBH154:W_RZ.RBV", internal=True),
# OKBV153_X_trans = PVAdjustable("SAROP31-OKBV153:W_X.RBV", internal=True),
# OKBV153_Y_trans = PVAdjustable("SAROP31-OKBV153:W_Y.RBV", internal=True),
# OKBV153_X_rot = PVAdjustable("SAROP31-OKBV153:W_RX.RBV", internal=True),
# OKBV153_Y_rot = PVAdjustable("SAROP31-OKBV153:W_RY.RBV", internal=True),
# OKBV153_Z_rot = PVAdjustable("SAROP31-OKBV153:W_RZ.RBV", internal=True),
# ODMV152_X_trans = PVAdjustable("SAROP31-OKBV153:W_X.RBV", internal=True),
# ODMV152_Y_trans = PVAdjustable("SAROP31-OKBV153:W_Y.RBV", internal=True),
# ODMV152_X_rot = PVAdjustable("SAROP31-OKBV153:W_RX.RBV", internal=True),
# ODMV152_Y_rot = PVAdjustable("SAROP31-OKBV153:W_RY.RBV", internal=True),
# ODMV152_COATING = PVAdjustable("SAROP31-ODMV152:COATING_SP", internal=True),
OKHB154_X_trans = PVAdjustable("SAROP31-OKBH154:W_X.RBV", internal=True),
OKHB154_Y_trans = PVAdjustable("SAROP31-OKBH154:W_Y.RBV", internal=True),
OKHB154_X_rot = PVAdjustable("SAROP31-OKBH154:W_RX.RBV", internal=True),
OKHB154_Y_rot = PVAdjustable("SAROP31-OKBH154:W_RY.RBV", internal=True),
OKHB154_Z_rot = PVAdjustable("SAROP31-OKBH154:W_RZ.RBV", internal=True),
OKBV153_X_trans = PVAdjustable("SAROP31-OKBV153:W_X.RBV", internal=True),
OKBV153_Y_trans = PVAdjustable("SAROP31-OKBV153:W_Y.RBV", internal=True),
OKBV153_X_rot = PVAdjustable("SAROP31-OKBV153:W_RX.RBV", internal=True),
OKBV153_Y_rot = PVAdjustable("SAROP31-OKBV153:W_RY.RBV", internal=True),
OKBV153_Z_rot = PVAdjustable("SAROP31-OKBV153:W_RZ.RBV", internal=True),
ODMV152_X_trans = PVAdjustable("SAROP31-OKBV153:W_X.RBV", internal=True),
ODMV152_Y_trans = PVAdjustable("SAROP31-OKBV153:W_Y.RBV", internal=True),
ODMV152_X_rot = PVAdjustable("SAROP31-OKBV153:W_RX.RBV", internal=True),
ODMV152_Y_rot = PVAdjustable("SAROP31-OKBV153:W_RY.RBV", internal=True),
ODMV152_COATING = PVAdjustable("SAROP31-ODMV152:COATING_SP", internal=True),
OATA150_transmission=PVAdjustable("SAROP31-OATA150:TRANS_SP", internal=True),
# PBPS149_motor_probe = PVAdjustable("SAROP31-PBPS149:MOTOR_PROBE.RBV", internal=True),
# PBPS149_motor_X1 = PVAdjustable("SAROP31-PBPS149:MOTOR_X1.RBV", internal=True),
# PBPS149_motor_Y1 = PVAdjustable("SAROP31-PBPS149:MOTOR_Y1.RBV", internal=True),
# PBPS149_wafer = PVAdjustable("SAROP31-PBPS149:PROBE_SP", internal=True),
# OAPU149_hor_pos = PVAdjustable("SAROP31-OAPU149:MOTOR_X.VAL", internal=True),
# OAPU149_hor_width = PVAdjustable("SAROP31-OAPU149:MOTOR_W.VAL", internal=True),
# OAPU149_vert_pos = PVAdjustable("SAROP31-OAPU149:MOTOR_Y.VAL", internal=True),
# OAPU149_vert_width = PVAdjustable("SAROP31-OAPU149:MOTOR_H.VAL", internal=True),
# OAPU107_hor_pos = PVAdjustable("SAROP31-OAPU107:MOTOR_X.VAL", internal=True),
# OAPU107_hor_width = PVAdjustable("SAROP31-OAPU107:MOTOR_W.VAL", internal=True),
# OAPU107_vert_pos = PVAdjustable("SAROP31-OAPU107:MOTOR_Y.VAL", internal=True),
# OAPU107_vert_width = PVAdjustable("SAROP31-OAPU107:MOTOR_H.VAL", internal=True),
# OOMH084_X_trans = PVAdjustable("SAROP31-OOMH084:W_X.RBV", internal=True),
# OOMH084_Y_trans = PVAdjustable("SAROP31-OOMH084:W_Y.RBV", internal=True),
# OOMH084_X_rot = PVAdjustable("SAROP31-OOMH084:W_RX.RBV", internal=True),
# OOMH084_Y_rot = PVAdjustable("SAROP31-OOMH084:W_RY.RBV", internal=True),
# OOMH084_Z_rot = PVAdjustable("SAROP31-OOMH084:W_RZ.RBV", internal=True),
# OOMH084_COATING = PVAdjustable("SAROP31-OOMH084:COATING_SP", internal=True),
# OOMH067_X_trans = PVAdjustable("SAROP31-OOMH067:W_X.RBV", internal=True),
# OOMH067_Y_trans = PVAdjustable("SAROP31-OOMH067:W_Y.RBV", internal=True),
# OOMH067_X_rot = PVAdjustable("SAROP31-OOMH067:W_RX.RBV", internal=True),
# OOMH067_Y_rot = PVAdjustable("SAROP31-OOMH067:W_RY.RBV", internal=True),
# OOMH067_Z_rot = PVAdjustable("SAROP31-OOMH067:W_RZ.RBV", internal=True),
# OOMH067_COATING = PVAdjustable("SAROP31-OOMH067:COATING_SP", internal=True),
SMARACT_MINI_X=PVAdjustable("SARES30-MCS2750:MOT_2.RBV", internal=True),
SMARACT_MINI_Y=PVAdjustable("SARES30-MCS2750:MOT_3.RBV", internal=True),
SMARACT_MINI_Z=PVAdjustable("SARES30-MCS2750:MOT_1.RBV", internal=True),
PBPS149_motor_probe = PVAdjustable("SAROP31-PBPS149:MOTOR_PROBE.RBV", internal=True),
PBPS149_motor_X1 = PVAdjustable("SAROP31-PBPS149:MOTOR_X1.RBV", internal=True),
PBPS149_motor_Y1 = PVAdjustable("SAROP31-PBPS149:MOTOR_Y1.RBV", internal=True),
PBPS149_wafer = PVAdjustable("SAROP31-PBPS149:PROBE_SP", internal=True),
OAPU149_hor_pos = PVAdjustable("SAROP31-OAPU149:MOTOR_X.VAL", internal=True),
OAPU149_hor_width = PVAdjustable("SAROP31-OAPU149:MOTOR_W.VAL", internal=True),
OAPU149_vert_pos = PVAdjustable("SAROP31-OAPU149:MOTOR_Y.VAL", internal=True),
OAPU149_vert_width = PVAdjustable("SAROP31-OAPU149:MOTOR_H.VAL", internal=True),
OAPU107_hor_pos = PVAdjustable("SAROP31-OAPU107:MOTOR_X.VAL", internal=True),
OAPU107_hor_width = PVAdjustable("SAROP31-OAPU107:MOTOR_W.VAL", internal=True),
OAPU107_vert_pos = PVAdjustable("SAROP31-OAPU107:MOTOR_Y.VAL", internal=True),
OAPU107_vert_width = PVAdjustable("SAROP31-OAPU107:MOTOR_H.VAL", internal=True),
OOMH084_X_trans = PVAdjustable("SAROP31-OOMH084:W_X.RBV", internal=True),
OOMH084_Y_trans = PVAdjustable("SAROP31-OOMH084:W_Y.RBV", internal=True),
OOMH084_X_rot = PVAdjustable("SAROP31-OOMH084:W_RX.RBV", internal=True),
OOMH084_Y_rot = PVAdjustable("SAROP31-OOMH084:W_RY.RBV", internal=True),
OOMH084_Z_rot = PVAdjustable("SAROP31-OOMH084:W_RZ.RBV", internal=True),
OOMH084_COATING = PVAdjustable("SAROP31-OOMH084:COATING_SP", internal=True),
OOMH067_X_trans = PVAdjustable("SAROP31-OOMH067:W_X.RBV", internal=True),
OOMH067_Y_trans = PVAdjustable("SAROP31-OOMH067:W_Y.RBV", internal=True),
OOMH067_X_rot = PVAdjustable("SAROP31-OOMH067:W_RX.RBV", internal=True),
OOMH067_Y_rot = PVAdjustable("SAROP31-OOMH067:W_RY.RBV", internal=True),
OOMH067_Z_rot = PVAdjustable("SAROP31-OOMH067:W_RZ.RBV", internal=True),
OOMH067_COATING = PVAdjustable("SAROP31-OOMH067:COATING_SP", internal=True),
# SMARACT_MINI_X=PVAdjustable("SARES30-MCS2750:MOT_2.RBV", internal=True),
# SMARACT_MINI_Y=PVAdjustable("SARES30-MCS2750:MOT_3.RBV", internal=True),
# SMARACT_MINI_Z=PVAdjustable("SARES30-MCS2750:MOT_1.RBV", internal=True),
)

0
stand_client.py → stand/client.py Normal file → Executable file
View File

25
stand/time.py Executable 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()

1
systems/README.md Executable file
View File

@ -0,0 +1 @@
Timing and camera related modules

3
systems/components.py Executable file
View File

@ -0,0 +1,3 @@
from slic.devices.timing.events import CTASequencer
cta = CTASequencer("SAR-CCTA-ESC")

0
devices/cool_motor.py → templates/cool_motor.py Normal file → Executable file
View File