beamline staff changes as of 261020
CI for pxii_bec / test (pull_request) Successful in 1m11s
CI for pxii_bec / test (push) Successful in 1m4s

This commit was merged in pull request #27.
This commit is contained in:
x10sa authored and perl_d committed 2026-10-20 16:07:54 +02:00
1 parent b3fdc1122f
commit df82ebc0d2
103 files changed
+6347 -2037

No files matched your search

@@ -0,0 +1,605 @@
[BECDockArea]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=false
baseSize=@Size(0 0)
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 23 1142 746)
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
maximumSize=@Size(16777215 16777215)
minimumSize=@Size(0 0)
mode=creator
mouseTracking=false
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
statusTip=
tabletTracking=false
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=BEC - DailySetup
workspace_is_locked=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Info.dockWidgetScrollArea.qt_scrollarea_viewport.Info]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
baseSize=@Size(0 0)
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 408 667)
html_text="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\nhr { height: 1px; border-width: 0; }\nli.unchecked::marker { content: \"\\2610\"; }\nli.checked::marker { content: \"\\2612\"; }\n</style></head><body style=\" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;\">\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
maximumSize=@Size(16777215 16777215)
minimumSize=@Size(0 0)
mouseTracking=false
plain_text=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
statusTip=
tabletTracking=false
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Progress.dockWidgetScrollArea.qt_scrollarea_viewport.Progress]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
baseSize=@Size(0 0)
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 201 667)
html_text="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\nhr { height: 1px; border-width: 0; }\nli.unchecked::marker { content: \"\\2610\"; }\nli.checked::marker { content: \"\\2612\"; }\n</style></head><body style=\" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;\">\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
maximumSize=@Size(16777215 16777215)
minimumSize=@Size(0 0)
mouseTracking=false
plain_text=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
statusTip=
tabletTracking=false
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_1.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_1]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 242 194)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(0 0)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_2.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_2]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 243 194)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(0 0)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_3.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_3]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 242 193)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(0 0)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_4.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_4]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 243 193)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(0 0)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_5.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_5]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 242 194)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(0 0)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_6.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_6]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 243 194)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(0 0)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.dockSettingsAction]
autoRepeat=true
checkable=false
checked=false
enabled=true
iconText=Dock settings
iconVisibleInMenu=true
menuRole=@Variant(\0\0\0\x7f\0\0\0\x12QAction::MenuRole\0\0\0\0\x1)
priority=@Variant(\0\0\0\x7f\0\0\0\x12QAction::Priority\0\0\0\0\x80)
shortcut=
shortcutContext=@Variant(\0\0\0\x7f\0\0\0\x14Qt::ShortcutContext\0\0\0\0\x1)
shortcutVisibleInContextMenu=true
statusTip=
text=Dock settings
toolTip=Dock settings
whatsThis=
[Perspectives]
1\Name=BEC - DailySetup
1\State="@ByteArray(\0\0\x3\xd3x\xda\xa5\x93_K\xc3\x30\x14\xc5\xdf\xfd\x14\x97\xbc\xcf\xaei6'\xb4\x1d\xa3\x32\xf0\xc5?l\xd3G\xa9\xed\xb5\x4\xdb\x44\x92l\xa8\xf8\xe1M\xdaQDS\xa1\xec)\xc9\xb9'\xbf{r!\xf1\xf2\xbd\xa9\xe1\x80Js)\x12\x12\x9eO\t\xa0(d\xc9\x45\x95\x90\xddv=Y\x90\x65\x1a\xdf\x9bUy\xc8\x45\x81\xe5\x95,^mm\xf3\xa1\r6\xf0\xd0_$\xb0\xd3\xa8\xfa\xb3\xc5\x64R\x98\x9c\v\xab\xb8r\x1a\xf7gX\xd7\x32\x37m\x83\xa9\xd5\x37o57\xc6\xca\xb7\x8a\xa3\xb5\x98\x16\xf0\xe5\0{a\x12\xc2\xacg\xa5\x30\x87m\xfe\xdc\xa2 \xdb+\x85\xaet\xa7\x64\xa5Pk\xebx\xe4\x65\x85\x6n\xf2\x6\x7f\xe8\x90\xd5Rc\xe9\x1a\x5i\x1c\x38\xcc \xecZ\xbc\xc8\xdf\xa0V\xf3\x42\xfc\xa9'}\xea\xe8\x9f\xd4\xb5\x34O\xe1\x9f\xcc\x9d:&q{%\xf2\x82\xa2\xf1\xa0\x99\x17\x34\x1bx>\xff\x44\x9dRz\t\x94.\xc0\xadq\xd0iv=\x8e\xe6\xf4!Qo$:\xfem\xcc\vb\xe3\x41s/h~\xd2\x90:\xd7\xf4\x2X\xc8\x80\x32\xeb\x64~g\xd0\x7f!\xbb\x1f\xf8\x92\xe9\xd9\x37,-7\xa6)"
size=1
[mainWindow]
DockingState="@ByteArray(\0\0\x3\xd3x\xda\xa5\x93_K\xc3\x30\x14\xc5\xdf\xfd\x14\x97\xbc\xcf\xaei6'\xb4\x1d\xa3\x32\xf0\xc5?l\xd3G\xa9\xed\xb5\x4\xdb\x44\x92l\xa8\xf8\xe1M\xdaQDS\xa1\xec)\xc9\xb9'\xbf{r!\xf1\xf2\xbd\xa9\xe1\x80Js)\x12\x12\x9eO\t\xa0(d\xc9\x45\x95\x90\xddv=Y\x90\x65\x1a\xdf\x9bUy\xc8\x45\x81\xe5\x95,^mm\xf3\xa1\r6\xf0\xd0_$\xb0\xd3\xa8\xfa\xb3\xc5\x64R\x98\x9c\v\xab\xb8r\x1a\xf7gX\xd7\x32\x37m\x83\xa9\xd5\x37o57\xc6\xca\xb7\x8a\xa3\xb5\x98\x16\xf0\xe5\0{a\x12\xc2\xacg\xa5\x30\x87m\xfe\xdc\xa2 \xdb+\x85\xaet\xa7\x64\xa5Pk\xebx\xe4\x65\x85\x6n\xf2\x6\x7f\xe8\x90\xd5Rc\xe9\x1a\x5i\x1c\x38\xcc \xecZ\xbc\xc8\xdf\xa0V\xf3\x42\xfc\xa9'}\xea\xe8\x9f\xd4\xb5\x34O\xe1\x9f\xcc\x9d:&q{%\xf2\x82\xa2\xf1\xa0\x99\x17\x34\x1bx>\xff\x44\x9dRz\t\x94.\xc0\xadq\xd0iv=\x8e\xe6\xf4!Qo$:\xfem\xcc\vb\xe3\x41s/h~\xd2\x90:\xd7\xf4\x2X\xc8\x80\x32\xeb\x64~g\xd0\x7f!\xbb\x1f\xf8\x92\xe9\xd9\x37,-7\xa6)"
Geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x17\0\0\x4u\0\0\x3\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\xf\0\0\0\0\0\0\0\0\x17\0\0\x4u\0\0\x3\0)
State=@Variant(\0\0\0\x7f\0\0\0\x18PySide::PyObjectWrapper\0\0\0\0\xf\x80\x4\x95\x4\0\0\0\0\0\0\0\x43\0\x94.)
[manifest]
widgets\1\closable=true
widgets\1\floatable=true
widgets\1\floating=false
widgets\1\floating_abs_h=0
widgets\1\floating_abs_w=0
widgets\1\floating_abs_x=0
widgets\1\floating_abs_y=0
widgets\1\floating_rel_h=0
widgets\1\floating_rel_w=0
widgets\1\floating_rel_x=0
widgets\1\floating_rel_y=0
widgets\1\floating_screen=
widgets\1\movable=true
widgets\1\object_name=Info
widgets\1\widget_class=TextBox
widgets\2\closable=true
widgets\2\floatable=true
widgets\2\floating=false
widgets\2\floating_abs_h=0
widgets\2\floating_abs_w=0
widgets\2\floating_abs_x=0
widgets\2\floating_abs_y=0
widgets\2\floating_rel_h=0
widgets\2\floating_rel_w=0
widgets\2\floating_rel_x=0
widgets\2\floating_rel_y=0
widgets\2\floating_screen=
widgets\2\movable=true
widgets\2\object_name=Plot_1
widgets\2\widget_class=Waveform
widgets\3\closable=true
widgets\3\floatable=true
widgets\3\floating=false
widgets\3\floating_abs_h=0
widgets\3\floating_abs_w=0
widgets\3\floating_abs_x=0
widgets\3\floating_abs_y=0
widgets\3\floating_rel_h=0
widgets\3\floating_rel_w=0
widgets\3\floating_rel_x=0
widgets\3\floating_rel_y=0
widgets\3\floating_screen=
widgets\3\movable=true
widgets\3\object_name=Plot_2
widgets\3\widget_class=Waveform
widgets\4\closable=true
widgets\4\floatable=true
widgets\4\floating=false
widgets\4\floating_abs_h=0
widgets\4\floating_abs_w=0
widgets\4\floating_abs_x=0
widgets\4\floating_abs_y=0
widgets\4\floating_rel_h=0
widgets\4\floating_rel_w=0
widgets\4\floating_rel_x=0
widgets\4\floating_rel_y=0
widgets\4\floating_screen=
widgets\4\movable=true
widgets\4\object_name=Plot_3
widgets\4\widget_class=Waveform
widgets\5\closable=true
widgets\5\floatable=true
widgets\5\floating=false
widgets\5\floating_abs_h=0
widgets\5\floating_abs_w=0
widgets\5\floating_abs_x=0
widgets\5\floating_abs_y=0
widgets\5\floating_rel_h=0
widgets\5\floating_rel_w=0
widgets\5\floating_rel_x=0
widgets\5\floating_rel_y=0
widgets\5\floating_screen=
widgets\5\movable=true
widgets\5\object_name=Plot_4
widgets\5\widget_class=Waveform
widgets\6\closable=true
widgets\6\floatable=true
widgets\6\floating=false
widgets\6\floating_abs_h=0
widgets\6\floating_abs_w=0
widgets\6\floating_abs_x=0
widgets\6\floating_abs_y=0
widgets\6\floating_rel_h=0
widgets\6\floating_rel_w=0
widgets\6\floating_rel_x=0
widgets\6\floating_rel_y=0
widgets\6\floating_screen=
widgets\6\movable=true
widgets\6\object_name=Plot_5
widgets\6\widget_class=Waveform
widgets\7\closable=true
widgets\7\floatable=true
widgets\7\floating=false
widgets\7\floating_abs_h=0
widgets\7\floating_abs_w=0
widgets\7\floating_abs_x=0
widgets\7\floating_abs_y=0
widgets\7\floating_rel_h=0
widgets\7\floating_rel_w=0
widgets\7\floating_rel_x=0
widgets\7\floating_rel_y=0
widgets\7\floating_screen=
widgets\7\movable=true
widgets\7\object_name=Plot_6
widgets\7\widget_class=Waveform
widgets\8\closable=true
widgets\8\floatable=true
widgets\8\floating=false
widgets\8\floating_abs_h=0
widgets\8\floating_abs_w=0
widgets\8\floating_abs_x=0
widgets\8\floating_abs_y=0
widgets\8\floating_rel_h=0
widgets\8\floating_rel_w=0
widgets\8\floating_rel_x=0
widgets\8\floating_rel_y=0
widgets\8\floating_screen=
widgets\8\movable=true
widgets\8\object_name=Progress
widgets\8\widget_class=TextBox
widgets\size=8
[profile]
created_at=2026-10-10T16:30:18Z
quick_select=true
screenshot="@ByteArray(\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x4v\0\0\x2\xea\b\x6\0\0\0PE\xd3\x82\0\0\0\tpHYs\0\0\xe\xc4\0\0\xe\xc4\x1\x95+\xe\x1b\0\0 \0IDATx\x9c\xec\xddwT\x14W\x1b\xc0\xe1\xdfR\xa5\vbA\xb0\xb7\xa8\xd8\xc1\xde{\x8b\x5\x5{Kl\xb1\x63\x8b\xbd\xf7\xde{\x8d\r{\x8f\xc6h\xa2\x31\x89\x1a\x89\xbd\x97\xd8\xc5^@@`\xd9\xfd\xfe\xe0\x63#\xa1,e\x97\x65\xe1}\xce\xf1\x1c\x99\x99\x9d{\xe1\xce;\xe5\xdd{\xef(BB#\xd4\b!\x84\x10\x42\b!\x84\x10\x42\b\xa3\x63\x62\xe8\n\b!\x84\x10\x42\b!\x84\x10\x42\x88\xe4\x91\xc4\x8e\x10\x42\b!\x84\x10\x42\b!\x84\x91\x92\xc4\x8e\x10\x42\b!\x84\x10\x42\b!\x84\x91\x92\xc4N\x1a\xf2\xe4\xf9k\x9e<\x7fm\xe8j\b\x91hr\xcc\x1a'i\xb7\x8cK\xda^\x88\xb8Il\b!\xd2\"97\x89\xc4\x92\xc4\x8e\x10\x42\b!\x84\x10\x42\b!\x84\x91\x92\xc4\x8e\x10\x42\b!\x84\x10\x42\b!\x84\x91\x32\x33t\x5\x84\x10\x42\b!\x84\x30\x16\xc1\xc1\x9f\t\xfc\x14\x8c\x32Re\xe8\xaa\b\x91,\x16\x16\xe6\x64\xb2\xb4\xc0\xc1\xce\xda\xd0U\x11\x42\xe8\x88$v\x84\x10\x42\b!\x84H\x84\x80W\xef\xb0\xb2\x30'\xb7[V\xccL\xa5\xe3\xbb\x30Naa\x11|\f\f\xe5\xe9\xf3\x37\xb8\xe5t6tu\x84H\x91'\xcf_\x93+gVCW\xc3\xe0$\xb1#\x84\x10\x42\b!\x84\x16\xc1\xc1\x9f\xc9\x64i\x8eKvGCWE\x88\x14\xb1\xb4\x34'[VsL\xcd 8$\f\x1bkKCWI\b\x91\x42\xf2U\x83\x10\x42\b!\x84\x10Z\x4~\n&\x9b\xb3\x83\xa1\xab!2\x80;\xff\x4\xa4J9\xe\xf6\x36|\f\fN\x95\xb2\x84\x10\xfa%\x89\x1d!\x84\x10\x42\b!\xb4PF\xaa\x64\xf8\x95HW\xccLM\x89TE\x1a\xba\x1a\x42\b\x1d\x90\xab\x93\x10\x42\b!\x84\x10\x42\b\x91\xce\xa8\xd5j\xd4ju\xaa}N\x18\x8e\xcc\xb1#\x84\x10\x42\b!\x84\x10\"N~\xdbwq\xde\xff\x42\xa2\xb7\xafT\xd1\x93\xd6\xadZ\xea\xb1\x46\"1\xd4j5s\xe7-B\xadV3t\xc8@T*\x15\xc3G\x8c\xc5\xbbuK*V\xf0\x8c\xb1\xed\xd9s\xe7\xd9\xb9k/3\xa6M\xc2\xcc\xcc\x94\x99\xb3\xe6\x11\x16\x1e\xc6\xb8\x31#Q(\x14:\xad\xd3\xc2\xc5\xcby\xf2\xe4i\x8c\xe5\xb9r\xb9\x31\xb0\xffw:-+\xa3\x91\xc4\x8e\x10\x42\b!\x84\x10\x42\x88\x38\x9d\xf7\xbf\xc0\xa1\xc3G(T\xb0\x80\xd6m?}\xfa\xc4\xae\xdd{\t\r\xf9L\xa7N\xed\xf4R\x9f;\xb7\xefr\xe2\xe4)\xbe\xeb\xd5]/\xfb\xd7\xe6\xd1\xa3'l\xdf\xb1\x8b\x97\xaf^S\xbcXQ\xda\xb7\xf3&S\xa6L\x6\xa9Kb,Y\xb6\x12\xb5Z\x8d\xef\xa0\xfe\xec\xda\xbd\x17O\x8f\xb2\xb1\x12;\xf\x1f>b\xd7\xee\xbdL\x9d<\x8ey\xf3\x17\xb1|\xe5\x1a\xfa~\xd7S\xe7uY\xb4\x64\x5\xf3\x17,\xa6X\xd1\xaf\x30\x35\x35\x5@\xa5R\xb1k\xf7\xde\xa8:\xe\xec\xab\xf3\x32S\x9bR\x19\x89J\x15\x89\x85\x85\x45\xaa\x96+\x89\x1d!\x84\x10\x42\b!\x84\x10\xf1*T\xb0\0\a\xf6\xed\xe0\xed\xdb\xb7\xf1ncoo\x8f\xa9\xa9\x19\x43\x86\x8e`\xcc\xf8I\0:O\xee\xdc\xb9}\x97\x36\x1d\xba\xe2\x9c\x35\v]:u\xc0\xda\xdaJ\xa7\xfb\xd7\xe6\xda\xf5\x1b\xb4\xf2\xee@&KK\xdc\xdc\\\xd9\xb7\xff\0\xbb\xf7\xec\x63\xef\x1e?,\xcc\xcdS\xb5.\xda(\x14\n\x86\f\x1e\0\xc0\xe2\xa5+\x88P*\xb5~f\xce\xdc\x85\xac^\xbb\x81~}z1t\xc8\xc0\x14\xf5\xa0\xd9\xb5{/k\xd6m\xd4\xfc\xacV\xc3\xad[\xb7\x19\xd0\xaf\x37\x43\x6\xf\x8c\xb1\xed\xbc\xf9\x8bX\xb0p\tG~:\x86\xc9\x17\x65v\xeb\xda\x99\x36\xde^\xc9\xae\x43j\x89\x88P\xb2r\xf5Zv\xed\xda\xcb\xc3G\x8fY\xbbj\x19u\xea\xd4L\xd5:\x18l\x8e\x9d\xc7\x8f\x1f\x93'\x7fQ\x1e?~\x9c\xac\xf5\t9p\xf0 \r\x1a\x36Ni\x15\xc5\xffU\xaeR\x83\xa3G\x8f&{\xbd\xd0\x8f\x62\xee\x65\xf8\xe5\x97_\f]\x8d\x34\xc9\xd0\xc7\xac\x9c\x83\x92N\xae\tB\b!D\xda\xf6\xf6\xed[<*T\x8f\xf7\xdf\x8fG~\xc2\xcc\xcc\x94\xb9sf\xd0\xa2YS\xc6\x8c\x9f\xc4\xae\xdd{uV\xfe\xed[w\xf0i\xdf\x5\xe7\xacY\xf0\xdb\xbc>\xd5\x93:\0\xb3\xe7.$\xa7K\xe~?\xf5\x33\x87\xf\xee\x66\xcb\xa6\xf5\\\xbb~\x83\xbd\xfb\xe\xa6z]\x12\x43\xa9\x8c\xa4_\xdf^\xf4\xec\xde\x8dU\xab\xd7i\xdd~\xf5\xda\r\xf4\xec\xde\x8d\xfe\xfdz\xa3T\xa6lb\xedw\xef\xdes\xfb\xf6]J\x95p\xa7T\twJ\x97t\xc7wP\x7f\x6\xfb\xe\x88\xb5\xad\xef\xa0\xfe\xf8\xe\xeaO\x99\x92%4\xdb\xdf\xbe}7\xc1\x44\x62Z\xf1\xe8\xd1\x13Zx\xb5\x61\xdf\xbe\x3\x14(\x90\x9f\n\xe5=R=\xa9\x3:\xee\xb1\x13\x12\x12\x42Q\xf7rX\x98\x9bq\xed\x8a?\x96\x96\x96\xba\xdc\xbd\xc6\xaaU\xab\x99:c\x1e\0\x36\xd6\x99\xa8X\xbe\x1cm\xdaxS\xaf^=LLd>\xe8\xc4\xe8\xdb\xb7?\x87\x8e\x1c\xe7\xa7\x1f\xf7\xf2\xd5W_\xe9\xa5\x8cs\xe7\xce\xe1\xd3\xae\xab\xe6\xe7\x12\xc5\x8bP\xa6tI\xbc\xbcZR\xa6L\x99\x14\xef\xff\xc8\xd1\xa3l\xdb\xb6\x9d\x35\xabW\xea\xb4\xab[dd$G\x8f\xfe\xc4o\xbf\xfd\xc6\xd9s\xe7\xb1\xb3\xb3\xa3|y\xf:\xb4oG\x81\x2\xda\xbb\xa0\n\xfdH\x8d\x63v\xf1\xe2%\xdc\xbd{\x8f\x45\x8b\x16\xc4X~\xfa\xf4\xeft\xec\xd2\x83\a\xf7\xae\xc7y\x8e\t\xfd\xfc\x99o\xbe\xe9N\x8f\xee\xdfP\xbbvm\xbd\xd4\xcd\x18\xa5\xd7k\xc2\xf4\xe9\x33\xc8\x94)\x13\xbe\xbe\x83t\xbeo!\x84\xf1\xf2\x1d<\x8c-~\xfb\0\x30\x35\x35\xa1\xa2giJ\x97*\x81\x8fOk\x8a\x16M\xfcuk\xc5\x8aU\\\xb9v\x9d\xa5\x8b\x17\xa0P(\xa8\xdf\xe0k\xda\xf8x\xf1\xed\xb7\xdd\xb4~622\x92\x13'~e\xc7\xce\xdd\xf8\xff}\x99,N\x99)W\xae\x34\xadZ\xb5\xa4\x42yO\xad\x9fW\xa9T\x4\x6\x6\x62mm\x9d\xea\xc3\btI\xa9\x8c\xa4g\xaf>\xd4\xa8^\x95.]:\x19\xba:\x19Ntr\xe7\xf2\x95\xab\x9c\x39{^'\xf3\xed\xdc\xbau\x9b\xb6\x1d\xba\xf1\xfe\xfd{\x9a\x34i\xc0\xa6\xcd\xdb\x62m\x93={v\xdc\xdd\x8b\xe1^\xbc\x98\xde\xe6j\xb9{\xe7\x1eM\x1a\x37\xc0\xce\xde\xe\x80\x8a\x15<\xc9\x91=;\xf7\xee\xde\xd3Ky)5b\xd4\xb8$'\xd7V\xadY\xcf\xaa\x35\xebi\xdd\xaa%sgOKQ\xf9\x66\x66\x66\xcc\x9c\x31\x45\xebv\n\x85\x82\x41\x3\xfa\xc4X\xb6'\x8d&\xcb\xbe\x14\x11\xa1\xa4O\xbf\x41\xe4\xca\xe5Line truncated
screenshot_at=2026-10-10T20:20:15Z
@@ -0,0 +1,457 @@
[BECDockArea]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=false
baseSize=@Size(0 0)
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 23 1670 1505)
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
maximumSize=@Size(16777215 16777215)
minimumSize=@Size(0 0)
mode=creator
mouseTracking=false
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
statusTip=
tabletTracking=false
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=BEC - TestLayout4
workspace_is_locked=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Info.dockWidgetScrollArea.qt_scrollarea_viewport.Info]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
baseSize=@Size(0 0)
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 816 1426)
html_text="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\nhr { height: 1px; border-width: 0; }\nli.unchecked::marker { content: \"\\2610\"; }\nli.checked::marker { content: \"\\2612\"; }\n</style></head><body style=\" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Starting daily beamline setup</p>\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Machine current OK (401.8 mA)</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Beamline is not offline, (operation mode is attended)</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ FE shutter is open</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Hutch shutter is open</p>\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ SS Xray eye is OUT</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Cryostream temperature: 99.96 K</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Detector height: 62.0 mm</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Beamstop blocking beam: I2 = 8.76e-09</p>\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Beamline energy set to 12400 eV</p>\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Beam aligned</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Displacement: Beam X: -0.1 microns, Beam Y: -0.3 microns</p>\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Flux measured</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Intensity at current transmission: 8.62e+11 ph/s</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Intensity at 100% transmission: 8.53e+12 ph/s</p>\n<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Total duration: 39.7 s</p></body></html>"
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
maximumSize=@Size(16777215 16777215)
minimumSize=@Size(640 310)
mouseTracking=false
plain_text="Starting daily beamline setup\n\n✓ Machine current OK (401.8 mA)\n✓ Beamline is not offline, (operation mode is attended)\n✓ FE shutter is open\n✓ Hutch shutter is open\n\n✓ SS Xray eye is OUT\n✓ Cryostream temperature: 99.96 K\n✓ Detector height: 62.0 mm\n✓ Beamstop blocking beam: I2 = 8.76e-09\n\n✓ Beamline energy set to 12400 eV\n\n✓ Beam aligned\nDisplacement: Beam X: -0.1 microns, Beam Y: -0.3 microns\n\n✓ Flux measured\nIntensity at current transmission: 8.62e+11 ph/s\nIntensity at 100% transmission: 8.53e+12 ph/s\n\nTotal duration: 39.7 s"
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
statusTip=
tabletTracking=false
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_1.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_1]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=false
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 575 341)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(384 200)
mouseTracking=false
outer_axes=false
signal_x=dcm_pitch
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=Scan: Current
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=dcm_pitch
x_limits=@Variant(\0\0\0\x1a\xc0\x1a\xb0\xb0)(\x17v\xc0\x15\xa0\xc4\x15n&N)
x_log=false
x_mode=dcm_pitch
y_grid=false
y_label=lu_bpmsum
y_limits=@Variant(\0\0\0\x1a\xc0g\xe2\xe0\x3|_\x2@\x9d\xf0\x41\x91k\xed@)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_2.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_2]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 575 304)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(384 200)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_3.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_3]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 575 358)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(384 200)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_4.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_4]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
auto_range_x=true
auto_range_y=true
baseSize=@Size(0 0)
color_palette=plasma
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
curve_json=[]
enable_fps_monitor=false
enable_popups=true
enable_side_panel=false
enable_toolbar=true
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 575 294)
inner_axes=true
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
invert_x=false
invert_y=false
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
legend_label_size=9
lock_aspect_ratio=false
max_dataset_size_mb=10
maximumSize=@Size(16777215 16777215)
minimal_crosshair_precision=3
minimumSize=@Size(384 200)
mouseTracking=false
outer_axes=false
signal_x=
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
skip_large_dataset_check=false
skip_large_dataset_warning=false
statusTip=
tabletTracking=false
title=
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
x_grid=false
x_label=
x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
x_log=false
x_mode=auto
y_grid=false
y_label=
y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0)
y_log=false
[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Progress.dockWidgetScrollArea.qt_scrollarea_viewport.Progress]
acceptDrops=false
accessibleDescription=
accessibleIdentifier=
accessibleName=
autoFillBackground=true
baseSize=@Size(0 0)
contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1)
cursor=@Variant(\0\0\0J\0\0)
enabled=true
focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0)
geometry=@Rect(0 0 256 1416)
html_text="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\nhr { height: 1px; border-width: 0; }\nli.unchecked::marker { content: \"\\2610\"; }\nli.checked::marker { content: \"\\2612\"; }\n</style></head><body style=\" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Pre checks</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Set energy</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Move beam</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">– Align beamstop</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">– Align collimator</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">✓ Measure flux</p></body></html>"
inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0)
layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0)
maximumSize=@Size(16777215 16777215)
minimumSize=@Size(256 310)
mouseTracking=false
plain_text=✓ Pre checks\n✓ Set energy\n✓ Move beam\n– Align beamstop\n– Align collimator\n✓ Measure flux
sizeIncrement=@Size(0 0)
sizePolicy=@Variant(\0\0\0K\0\0\0U)
statusTip=
tabletTracking=false
toolTip=
toolTipDuration=-1
whatsThis=
windowFilePath=
windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0)
windowModified=false
windowOpacity=1
windowTitle=
[BECDockArea.dockSettingsAction]
autoRepeat=true
checkable=false
checked=false
enabled=true
iconText=Dock settings
iconVisibleInMenu=true
menuRole=@Variant(\0\0\0\x7f\0\0\0\x12QAction::MenuRole\0\0\0\0\x1)
priority=@Variant(\0\0\0\x7f\0\0\0\x12QAction::Priority\0\0\0\0\x80)
shortcut=
shortcutContext=@Variant(\0\0\0\x7f\0\0\0\x14Qt::ShortcutContext\0\0\0\0\x1)
shortcutVisibleInContextMenu=true
statusTip=
text=Dock settings
toolTip=Dock settings
whatsThis=
[Perspectives]
1\Name=BEC - TestLayout4
1\State="@ByteArray(\0\0\x3:x\xda\x95\x92\xdfO\x83\x30\x10\xc7\xdf\xfd+.}\x9f@\xcb\x94%\xc0\xb2`\x96\xf8\xe2\x8f\xb0\xe9\xa3\x41\x38I#\xb4\xa6\xed\x16\x35\xfe\xf1\x16\xb6\x10\xa3\x65\x91\x87\xa6\xbd\xef]?\xed\xf7r\xf1\xf2\xbdm`\x8fJs)\x12\x12\x9c\xfb\x4P\x94\xb2\xe2\xa2N\xc8v\xb3\x9e\x45\x64\x99\xc6\xf7\x66U\xed\vQbu%\xcbW\x9b\xcb?\xb4\xc1\x16\x1e\x86\x8b\x4\xb6\x1a\xd5\x10[L&\x85)\xb8\xb0J\x97N\xe3!\x86u#\v\xd3?\xe0[=\x7fk\xb8\x31V\xbeU\x1cm\x89\xe9\x1_\x1d`'LB\xe8?kV\n\v\xd8\x14\xcf\xfds\x90\xed\x94\xc2.u\xa7\x64\xadPk[\xf1\xc8\xab\x1a\r\xdc\x14-\xfe\xd0!k\xa4\xc6\xaa\xfb\x8c\x97\xc6^\x87\x19\x85]\x8b\x17\xf9\x1b\xd4kNH\xce?Q\xa7t\x1e@D)\xc4\xde!\xb6\xfb\xd1\xcd\x98\xaf\xd9\xe0+<\xe1\xab\x91\xe6)\xf8\xe3\xea\xa0N\xf1\xd4_\xa1N\x10\x9d\xe\x62N\x10\x9b\xe\n\x9d\xa0\xf0T\xa7\xd9\xe5\x5\x30\xb6\0\xb6`\xc0\xe8\xc2\xdd\xf1^\t\xfc(\x80\xb9]\xae\x12o\x98T{\x1e\x99\xfc\xf4\xec\x1b\xd0\xbb\tD)"
size=1
[mainWindow]
DockingState="@ByteArray(\0\0\x3:x\xda\x95\x92\xdfO\x83\x30\x10\xc7\xdf\xfd+.}\x9f@\xcb\x94%\xc0\xb2`\x96\xf8\xe2\x8f\xb0\xe9\xa3\x41\x38I#\xb4\xa6\xed\x16\x35\xfe\xf1\x16\xb6\x10\xa3\x65\x91\x87\xa6\xbd\xef]?\xed\xf7r\xf1\xf2\xbdm`\x8fJs)\x12\x12\x9c\xfb\x4P\x94\xb2\xe2\xa2N\xc8v\xb3\x9e\x45\x64\x99\xc6\xf7\x66U\xed\vQbu%\xcbW\x9b\xcb?\xb4\xc1\x16\x1e\x86\x8b\x4\xb6\x1a\xd5\x10[L&\x85)\xb8\xb0J\x97N\xe3!\x86u#\v\xd3?\xe0[=\x7fk\xb8\x31V\xbeU\x1cm\x89\xe9\x1_\x1d`'LB\xe8?kV\n\v\xd8\x14\xcf\xfds\x90\xed\x94\xc2.u\xa7\x64\xadPk[\xf1\xc8\xab\x1a\r\xdc\x14-\xfe\xd0!k\xa4\xc6\xaa\xfb\x8c\x97\xc6^\x87\x19\x85]\x8b\x17\xf9\x1b\xd4kNH\xce?Q\xa7t\x1e@D)\xc4\xde!\xb6\xfb\xd1\xcd\x98\xaf\xd9\xe0+<\xe1\xab\x91\xe6)\xf8\xe3\xea\xa0N\xf1\xd4_\xa1N\x10\x9d\xe\x62N\x10\x9b\xe\n\x9d\xa0\xf0T\xa7\xd9\xe5\x5\x30\xb6\0\xb6`\xc0\xe8\xc2\xdd\xf1^\t\xfc(\x80\xb9]\xae\x12o\x98T{\x1e\x99\xfc\xf4\xec\x1b\xd0\xbb\tD)"
Geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x17\0\0\x6\x85\0\0\x5\xf7\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\xf\0\0\0\0\0\0\0\0\x17\0\0\x6\x85\0\0\x5\xf7)
State=@Variant(\0\0\0\x7f\0\0\0\tPyObject\0\0\0\0\xf\x80\x4\x95\x4\0\0\0\0\0\0\0\x43\0\x94.)
[manifest]
widgets\1\closable=true
widgets\1\floatable=true
widgets\1\floating=false
widgets\1\floating_abs_h=0
widgets\1\floating_abs_w=0
widgets\1\floating_abs_x=0
widgets\1\floating_abs_y=0
widgets\1\floating_rel_h=0
widgets\1\floating_rel_w=0
widgets\1\floating_rel_x=0
widgets\1\floating_rel_y=0
widgets\1\floating_screen=
widgets\1\movable=true
widgets\1\object_name=Info
widgets\1\widget_class=TextBox
widgets\2\closable=true
widgets\2\floatable=true
widgets\2\floating=false
widgets\2\floating_abs_h=0
widgets\2\floating_abs_w=0
widgets\2\floating_abs_x=0
widgets\2\floating_abs_y=0
widgets\2\floating_rel_h=0
widgets\2\floating_rel_w=0
widgets\2\floating_rel_x=0
widgets\2\floating_rel_y=0
widgets\2\floating_screen=
widgets\2\movable=true
widgets\2\object_name=Plot_1
widgets\2\widget_class=Waveform
widgets\3\closable=true
widgets\3\floatable=true
widgets\3\floating=false
widgets\3\floating_abs_h=0
widgets\3\floating_abs_w=0
widgets\3\floating_abs_x=0
widgets\3\floating_abs_y=0
widgets\3\floating_rel_h=0
widgets\3\floating_rel_w=0
widgets\3\floating_rel_x=0
widgets\3\floating_rel_y=0
widgets\3\floating_screen=
widgets\3\movable=true
widgets\3\object_name=Plot_2
widgets\3\widget_class=Waveform
widgets\4\closable=true
widgets\4\floatable=true
widgets\4\floating=false
widgets\4\floating_abs_h=0
widgets\4\floating_abs_w=0
widgets\4\floating_abs_x=0
widgets\4\floating_abs_y=0
widgets\4\floating_rel_h=0
widgets\4\floating_rel_w=0
widgets\4\floating_rel_x=0
widgets\4\floating_rel_y=0
widgets\4\floating_screen=
widgets\4\movable=true
widgets\4\object_name=Plot_3
widgets\4\widget_class=Waveform
widgets\5\closable=true
widgets\5\floatable=true
widgets\5\floating=false
widgets\5\floating_abs_h=0
widgets\5\floating_abs_w=0
widgets\5\floating_abs_x=0
widgets\5\floating_abs_y=0
widgets\5\floating_rel_h=0
widgets\5\floating_rel_w=0
widgets\5\floating_rel_x=0
widgets\5\floating_rel_y=0
widgets\5\floating_screen=
widgets\5\movable=true
widgets\5\object_name=Plot_4
widgets\5\widget_class=Waveform
widgets\6\closable=true
widgets\6\floatable=true
widgets\6\floating=false
widgets\6\floating_abs_h=0
widgets\6\floating_abs_w=0
widgets\6\floating_abs_x=0
widgets\6\floating_abs_y=0
widgets\6\floating_rel_h=0
widgets\6\floating_rel_w=0
widgets\6\floating_rel_x=0
widgets\6\floating_rel_y=0
widgets\6\floating_screen=
widgets\6\movable=true
widgets\6\object_name=Progress
widgets\6\widget_class=TextBox
widgets\size=6
[profile]
created_at=2026-09-27T09:27:43Z
quick_select=true
screenshot="@ByteArray(\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x6\x86\0\0\x5\xe1\b\x6\0\0\0\xb7\x5(\x97\0\0\0\tpHYs\0\0\xe\xc4\0\0\xe\xc4\x1\x95+\xe\x1b\0\0 \0IDATx\x9c\xec\xddut\x14\xd7\xfb\xc7\xf1w\x1c\x12\x92\xe0n\xc5\xdd\x83\xb6Xp\xb7\xe0RZ\xac\xb8\x43)R\\\x8a\xbbK\xb1\xe0.-\x85\x1f-\x14)\x14)\xe\xa5XB\bNB\x2\x44v\x7f\x7f\xe4\xcb\x96\x94\x18\xc9\xc6\xe0\xf3:'\xe7$3w\xef}\xb2wv\xf6\xce<3w,\xfc_\x5\x1a\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91\x8f\x9e\x65|\a \"\"\"\"\"\"\"\"\"\"\"\"qC\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91O\x84\x12\x43\"\"\"\"\"\"\"\"\"\"\"\"\x9f\b%\x86\x12\x90{\xf7\x1fq\xef\xfe\xa3\xf8\xe\x43$\xca\xb4\xcd&N\xea\xb7O\x97\xfa^DD\xe4\xc3\xe8\xbbSDDD\x12\x13\x8d]$\xaa\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\xf9\x44(1$\"\"\"\"\"\"\"\"\"\"\"\xf2\x89\xb0\x8e\xef\0\x44\x44\x44\x44\x44\x44\x44\x12;?\xbf\xd7\xf8\xbc\xf4#(\xd8\x10\xdf\xa1\x88\x88\x88\x98\x95\xad\xad\rI\xeclqv\xb4\x8f\xefPD\xc4L\x94\x18\x12\x11\x11\x11\x11\x11\x11\x89\x1\xaf\x87OIjkC\xd6\xcci\xb0\xb6\xd2\xc4\x1c\"\"\xf2qy\xf3&\x90\x17>\xaf\xf0\xb8\xff\x98\xcc\x19S\xc7w8\"1r\xef\xfe#\xb2\x64L\x13\xdf\x61\xc4;%\x86\x44\x44\x44\x44\x44\x44\x44\xa2\xc9\xcf\xef\x35I\xecl\xc8\x90.E|\x87\"\"\"\x12+\xec\xeclH\x9b\xc6\x6+k\xf0\xf3\x7f\x83\x83\xbd]|\x87$\"1\xa4K\x99\x44\x44\x44\x44\x44\x44\x44\xa2\xc9\xe7\xa5\x1fiS;\xc7w\x18\"\"\xf2\t\xbb\xfe\x8fW\x9c\xb4\xe3\xec\xe4\xc0\v\x1f\xbf\x38iKDb\x97\x12\x43\"\"\"\"\"\"\"\xd1\x14\x14l\xd0\xf4q\"\"\xf2I\xb0\xb6\xb2\"\xd8\x10\x1c\xdf\x61\x88\x88\x19h\xf4*\"\"\"\"\"\"\"\"\"\"\xf2\x89\x33\x1a\x8d\x18\x8d\xc6\x38{\x9d\xc4\x1f=cHDDDDDDDDDD\xcc\xc2}\xc3\x66N\x9d>\x13\xe5\xf2\xe5\xca\xba\xd0\xaci\xe3X\x8cH\xa2\xc2h42m\xfal\x8c\x46#\x3\a\xf4\xc1`00x\xe8\b\xdc\x9a\x35\xa6l\x19\x97PeO\x9c<\xc5\xa6\xcd\xdb\x98\x34\x61\f\xd6\xd6VL\x9e\x32\x9d\x37\x1o\x18\x39\xfc[,,,\xcc\x1a\xd3\xac\x39\v\xb8w\xcf#\xd4\xf2,Y2\xd3\xa7\xd7\x37\x66m\xebS\xa3\xc4\x90\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x98\xc5\xa9\xd3g\xd8\xbdg\x1f\xb9s\xe5\x8c\xb4\xec\xcb\x97/\xd9\xbc\x65\x1b\xaf\xfc_\xd3\xae]\xabX\x89\xe7\xfa\xb5\x1b\x1c<\xfc+\xdft\xed\x14+\xf5G\xe6\xce\x9d{l\xd8\xb8\x19\xef\x87\x8f(X ?\xad[\xb9\x91$I\x92x\x89%*\xe6\xce_\x84\xd1h\xa4_\xdf^l\xde\xb2\r\x97R%\xdeK\f\xdd\xbe}\x87\xcd[\xb6\x31~\xecH\xa6\xcf\x98\xcd\x82\x45K\xe9\xf1M\x17\xb3\xc7\x32{\xee\x42\x66\xcc\x9c\x43\x81\xfc\xf9\xb0\xb2\xb2\x2\xc0`0\xb0y\xcb\xb6\x90\x18\xfb\xf4\x30{\x9bq-((\x18\x83!\x18[[\xdb\x38mW\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x31\x9b\xdc\xb9r\xb2s\xfb\x46\x9e<y\x12n\x19'''\xac\xac\xac\x19\x30p(\xc3G\x8d\x1\x30{r\xe8\xfa\xb5\x1b\xb4h\xf3%\xa9\xd3\xa4\xa2\x43\xbb\x36\xd8\xdb'5k\xfd\x91\xb9x\xe9\x32M\xdd\xda\x90\xc4\xce\x8e\xcc\x99\x33\xb1}\xc7N\xb6l\xdd\xce\xb6\xad\xee\xd8\xda\xd8\xc4i,\x91\xb1\xb0\xb0`@\xff\xde\0\xcc\x99\xb7\x90\xc0\xa0\xa0H_3u\xda,\x96,[I\xcf\xee]\x19\x38\xa0O\x8c\xee\xe0\xd9\xbc\x65\x1bK\x97\xaf\x32\xfdm4\xc2\xd5\xab\xd7\xe8\xdd\xb3\x1b\x3\xfa\xf7\tUv\xfa\x8c\xd9\xcc\x9c\x35\x97}?\xfd\x8c\xe5;mv\xfc\xb2=-\xdc\x9a\x44;\x86\xb8\x12\x18\x18\xc4\xa2%\xcb\xd8\xbcy\x1b\xb7\xef\xdc\x65\xd9\xe2\xf9\xb8\xbaV\x8e\xd3\x18\xe2\xed\x19\x43w\xef\xde%[\x8e\xfc\xdc\xbd{7Z\xeb#\xb2s\xd7.j\xd6\xaa\x13\xd3\x10\xe5\x7f\xcaW\xa8\xc4\xfe\xfd\xfb\xa3\xbd^bG\x81\x42\xc5\x39t\xe8P|\x87\x91 \xc5\xf7\x36\xab}\xd0\x87\xd3w\x82\x88\x88\x88\x88\x88\x88\xc8\xc7\xe5\xc9\x93'\x94*S1\xdc\x9f\xbd\xfb~\xc2\xda\xda\x8aiS'\xd1\xa8\x41=\x86\x8f\x1a\xc3\xe6-\xdb\xcc\xd6\xfe\xb5\xab\xd7i\xde\xba\x3\xa9\xd3\xa4\xc2}\xcd\x8a\x38O\n\x1\xfc\x30m\x16\x19\x33\xa4\xe7\xe8\xaf\a\xd8\xb3k\vkW\xaf\xe0\xe2\xa5\xcbl\xdb\xbe+\xce\x63\x89\x8a\xa0\xa0`z\xf6\xe8J\x97N\x1dY\xbc\x64y\xa4\xe5\x97,[I\x97N\x1d\xe9\xd5\xb3\x1b\x41\x41\xc1\x31j\xfb\xe9\xd3g\\\xbbv\x83\xa2\x85\vQ\xb4p!\x8a\x15)D\xbf\xbe\xbd\xe8\xdf\xaf\xf7{e\xfb\xf5\xed\x45\xbf\xbe\xbd(^\xa4\xb0\xa9\xfc\xb5k7\"LD&\x14w\xee\xdc\xa3Q\x93\x16l\xdf\xbe\x93\x9c\x39sP\xa6t\xa9\x38O\n\x81\x99\x13\x43\xfe\xfe\xfe\x64\xcb\x91\x9f\xdcy\v\xf3\xe6\xcd\x1bsV\x1d\xca\xe2\xc5K\xc8\x96#?\xd9r\xe4\xa7@\xa1\xe2|\xf5U'~\xfa\xe9'\f\x6\x43\xac\xb5\xf9\xb1\xe9\xd1\xa3\x17\xd9r\xe4\xe7\xea\xd5\xab\xb1\xd6\xc6\xc9\x93'M\xfd\x94-G~\xea\xd5o\xc4\x88\x11#9{\xf6\xacY\xea\xdf\xb7\x7f?\xed;t$ \xc0,\xf5\xbd\x15\x1c\x1c\xcc\x9e={\x19\x32\x64(\x95*\xbbR\xaf~#\xc6\x8c\x1d\xc7\xcd\x9b\x37\xcd\xda\x8e|\x98\xb8\xd8\x66\xe7\xcc\x99K\xef\xde}\xdf[~\xe4\xc8Q\xb2\xe5\xc8\x1f\xee>\xe6\xd5\xeb\xd7\xb4j\xddV\x89\xba\xff\xf8X\xbf\x13&N\x9c\xc4\x8c\x19\x33\x63\xa5n\x11\x11\x11\xf9\xf8\x5\x4\x4\x90\x36\x63n\xf6\xff\xf4s\xa4\x65\x83\x82\x82\xf9\xea\xeb\xae\xacZ\xb5\x1a\0ooo\xd2\x66\xcc\xcd\xe9\xd3\x7f\xc6v\x98\x11\x32\x18\f<\x7f\xfe\xdc\xec\xc7\x62\xaf_\xbf\x61\xed\xda\xf5|\xdd\xa9\x1b\xc5J\x94\xa7S\xe7o\xf8\xe3\x8fSfm\xe3\x43\xfc\xf7\xfd\x17\x11\x91\xd8\xf1\x36\x39\xf4Y\xf6l\x1c?a\x9e\xfd\xfe\xd5\xab\xd7h\xd1\xe6K\x9e={Fi\x97\x92\xac^\xb3\x9e\x99\xb3\xe6\x86\xfaY\xef\xbe\x89\v\x17/a4\x1a\xcd\xd2\x66Xn\\\xff\x9bj\xaeUptr\x4\xa0l\x19\x17\xd2\xa7K\xc7\xdf\x37\xfe\x8e\xb5\x36\x63\x62\xe8\xb0\x91\xe4-P\x9c\xc5KWD\xf9\x35\x8b\x97\xae o\x81\Line truncated
screenshot_at=2026-09-27T09:27:43Z
@@ -0,0 +1 @@
,e18747,x10sa-cons-02.psi.ch,28.09.2026 21:41,file:///home/e18747/.config/libreoffice/4;
Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 915 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 849 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 KiB

@@ -30,3 +30,46 @@ timestamp,energy_eV,flux_ph_s,beam_start_x_px,beam_start_y_px,vfm_ydr_start_mm,h
2026-10-02T10:16:22,12400,-0.044,9.91e+12,,,,,,,,,,,-1.55143,-0.84055,2.98973,1.41274,1.91402,3.00507
2026-10-02T10:21:56,12400,-0.044,8.22e+12,1001,952,-0.84053,1.91404,-0.84102,1.91453,0.5,-0.5,11.20,1.19,-1.55155,-0.84100,2.98875,1.41302,1.91456,3.00614
2026-10-02T11:46:02,12400,-0.046,7.47e+12,984,963,-0.84101,1.91456,-0.84101,1.91396,-0.5,0.7,10.91,1.12,-1.55155,-0.84101,2.98877,1.41272,1.91395,3.00500
2026-10-02T14:27:48,12400,-0.046,7.51e+12,953,969,-0.84102,1.91394,-0.84101,1.91180,-0.2,0.3,13.01,1.65,-1.55155,-0.84102,2.98880,1.41165,1.91182,3.00066
2026-10-04T17:23:05,12400,-0.047,8.06e+12,1035,1081,-0.84162,1.91194,-0.83864,1.91375,-0.5,0.0,18.41,0.86,-1.55117,-0.83864,2.99429,1.41264,1.91375,3.00441
2026-10-04T17:30:34,12400,-0.047,9.24e+12,994,967,-0.83864,1.91375,-0.83864,1.91371,-0.1,0.3,16.19,0.80,-1.55118,-0.83863,2.99434,1.41263,1.91373,3.00435
2026-10-05T13:58:52,20000,-0.045,1.28e+12,933,891,-0.83851,1.91371,-0.84056,1.91048,-1.1,0.1,26.14,-0.07,-1.55180,-0.84059,2.99023,1.41099,1.91048,2.99785
2026-10-05T14:00:11,20000,-0.045,1.28e+12,1000,971,-0.84057,1.91048,-0.84056,1.91093,0.5,-0.3,27.35,-0.22,-1.55179,-0.84058,2.99021,1.41123,1.91093,2.99878
2026-10-05T14:04:31,20000,-0.046,1.31e+12,997,969,-0.84057,1.91085,-0.84055,1.91086,-0.6,-0.1,24.26,-0.19,-1.55178,-0.84056,2.99024,1.41121,1.91086,2.99865
2026-10-05T14:50:12,12400,-0.049,7.69e+12,1001,967,-0.84055,1.91084,-0.84056,1.91122,0.1,0.1,17.17,-0.34,-1.55176,-0.84054,2.99021,1.41137,1.91120,2.99932
2026-10-05T14:52:28,12400,-0.050,7.64e+12,992,969,-0.84054,1.91118,-0.84055,1.91122,0.1,-0.0,17.85,-0.35,-1.55176,-0.84055,2.99023,1.41136,1.91119,2.99931
2026-10-07T09:46:42,12400,-0.119,7.26e+12,,,,,,,,,,,-1.55153,-0.84025,2.99058,1.41125,1.91103,2.99908
2026-10-07T09:50:26,12400,-0.119,7.24e+12,,,,,,,,,,,-1.55153,-0.84025,2.99055,1.41126,1.91104,2.99909
2026-10-07T09:54:58,12400,-0.119,7.25e+12,,,,,,,,,,,-1.55159,-0.84048,2.99009,1.41034,1.90919,2.99541
2026-10-07T22:12:48,12400,-0.120,8.57e+12,,,,,,,,,,,-1.55164,-0.84046,2.99019,1.41031,1.90915,2.99535
2026-10-07T22:21:21,12400,-0.120,8.55e+12,1003,969,-0.84045,1.90916,-0.84045,1.90993,-6.0,0.0,31.82,-3.14,-1.55163,-0.84047,2.99011,1.41070,1.90993,2.99691
2026-10-07T22:25:08,12400,-0.120,3.01e+12,886,960,-0.84046,1.90986,-0.84068,1.90511,0.8,0.1,259.20,-3.45,-1.55168,-0.84069,2.98967,1.40829,1.90511,2.98729
2026-10-08T09:38:54,12400,-0.119,8.58e+12,1094,966,-0.84067,1.90501,-0.84067,1.91027,0.9,0.2,31.67,-2.49,-1.55168,-0.84066,2.98976,1.41088,1.91027,2.99759
2026-10-08T11:18:52,,,8.65e+09,,,,,,,,,,,-1.55167,-0.84067,2.98977,1.41085,1.91025,2.99755
2026-10-08T11:23:02,15999,-0.118,3.18e+12,988,945,-0.84066,1.91025,-0.84130,1.91026,0.6,0.1,40.53,-1.92,-1.55183,-0.84130,2.98850,1.41086,1.91026,2.99760
2026-10-08T11:46:45,15999,-0.118,3.29e+12,990,966,-0.84128,1.91027,-0.84128,1.91024,0.5,0.4,38.28,-1.28,-1.55182,-0.84128,2.98846,1.41085,1.91027,2.99762
2026-10-08T12:23:01,20000,-0.118,1.18e+12,981,951,-0.84128,1.91026,-0.84177,1.90955,-0.6,-0.1,37.40,-1.39,-1.55193,-0.84179,2.98751,1.41052,1.90955,2.99617
2026-10-08T12:36:12,12398,-0.122,7.54e+12,1014,1011,-0.84177,1.90955,-0.84063,1.91046,-0.0,0.3,27.70,-2.63,-1.55164,-0.84064,2.98980,1.41097,1.91046,2.99798
2026-10-08T14:05:15,12400,-0.125,7.53e+12,1010,997,-0.84063,1.91038,-0.83988,1.91091,-0.6,-0.2,22.53,-2.62,-1.55143,-0.83988,2.99126,1.41118,1.91089,2.99881
2026-10-09T08:39:08,12400,-0.123,7.52e+12,1021,1015,-0.83960,1.91196,-0.83836,1.91302,-0.7,-0.0,25.21,-2.48,-1.55103,-0.83836,2.99472,1.41226,1.91302,3.00306
2026-10-09T09:09:02,12400,-0.123,7.84e+12,975,956,-0.83837,1.91304,-0.83871,1.91193,-0.4,-0.1,26.17,-2.47,-1.55112,-0.83871,2.99398,1.41169,1.91192,3.00089
2026-10-11T13:43:17,12400,-0.003,9.40e+12,1046,974,-0.84349,1.90884,-0.84328,1.91123,-0.5,0.3,-11.57,0.25,-1.55229,-0.84327,2.98450,1.41135,1.91124,2.99953
2026-10-11T13:44:35,12400,-0.003,8.89e+12,959,963,-0.84328,1.91121,-0.84349,1.90923,-1.0,-0.5,4.12,-0.10,-1.55233,-0.84350,2.98406,1.41036,1.90923,2.99553
2026-10-11T13:46:10,15000,0.000,3.88e+12,997,974,-0.84348,1.90922,-0.84349,1.90922,-0.5,-0.7,7.75,-0.22,-1.55235,-0.84348,2.98409,1.41036,1.90924,2.99551
2026-10-11T13:57:05,15000,-0.000,3.88e+12,999,972,-0.84348,1.90924,-0.84346,1.90924,-0.8,-0.5,7.18,-0.03,-1.55236,-0.84348,2.98415,1.41037,1.90926,2.99557
2026-10-11T14:06:33,15000,0.000,3.89e+12,1000,972,-0.84349,1.90922,-0.84349,1.90923,-0.9,-0.5,5.01,-0.04,-1.55235,-0.84347,2.98411,1.41035,1.90923,2.99548
2026-10-11T14:14:45,12400,-0.002,8.88e+12,997,971,-0.84349,1.90924,-0.84350,1.90923,-0.8,-0.3,4.65,-0.12,-1.55235,-0.84350,2.98404,1.41035,1.90923,2.99552
2026-10-11T14:30:55,12400,-0.002,8.87e+12,998,974,-0.84348,1.90922,-0.84349,1.90924,-1.0,-0.9,4.66,-0.26,-1.55235,-0.84350,2.98410,1.41035,1.90922,2.99549
2026-10-11T14:46:28,12400,-0.002,8.73e+12,988,976,-0.84348,1.90922,-0.84349,1.90925,0.7,-1.1,9.50,-0.33,-1.55234,-0.84349,2.98406,1.41034,1.90921,2.99547
2026-10-11T14:51:26,12400,-0.002,8.75e+12,995,975,-0.84349,1.90923,-0.84348,1.90921,-0.5,-0.9,7.19,-0.16,-1.55234,-0.84347,2.98412,1.41038,1.90924,2.99546
2026-10-11T15:00:54,12400,-0.002,8.77e+12,995,977,-0.84350,1.90924,-0.84325,1.90923,-0.5,0.3,6.43,0.09,-1.55229,-0.84326,2.98451,1.41035,1.90923,2.99550
2026-10-11T15:14:21,12400,-0.002,8.83e+12,993,971,-0.84326,1.90925,-0.84327,1.90924,-0.0,-0.2,6.62,-0.12,-1.55229,-0.84326,2.98454,1.41036,1.90923,2.99549
2026-10-11T15:17:41,12400,-0.002,8.86e+12,995,968,-0.84327,1.90923,-0.84326,1.90921,-0.2,0.2,6.43,0.13,-1.55230,-0.84328,2.98450,1.41035,1.90922,2.99549
2026-10-12T09:45:04,12400,0.000,8.91e+12,983,951,-0.84303,1.90992,-0.84353,1.90914,-0.7,-0.3,4.88,0.31,-1.55229,-0.84354,2.98386,1.41029,1.90909,2.99524
2026-10-14T08:55:40,12400,0.000,8.77e+12,1033,1005,-0.84345,1.90907,-0.84247,1.91088,-0.5,0.3,10.83,0.85,-1.55198,-0.84249,2.98585,1.41119,1.91089,2.99878
2026-10-15T09:34:37,12400,-0.000,8.83e+12,959,923,-0.84246,1.91085,-0.84368,1.90935,0.7,-0.0,8.69,0.17,-1.55226,-0.84369,2.98353,1.41042,1.90936,2.99573
2026-10-16T08:40:24,12400,-0.000,8.80e+12,1004,979,-0.84368,1.90932,-0.84343,1.90991,0.2,0.1,13.56,0.51,-1.55222,-0.84343,2.98403,1.41066,1.90985,2.99675
2026-10-16T15:14:36,12400,-0.000,8.78e+12,982,956,-0.84344,1.90983,-0.84379,1.90948,0.6,-0.1,12.88,0.34,-1.55234,-0.84380,2.98332,1.41047,1.90947,2.99601
2026-10-17T12:28:51,12400,-0.038,9.12e+12,1017,1181,-0.84379,1.90942,-0.83817,1.91044,-0.2,-0.6,6.60,-5.16,-1.55092,-0.83817,2.99459,1.41097,1.91047,2.99800
2026-10-17T21:52:03,12400,-0.042,9.16e+12,993,968,-0.83965,1.91067,-0.83966,1.91068,-0.2,0.1,6.30,-3.83,-1.55129,-0.83964,2.99155,1.41106,1.91066,2.99839
2026-10-19T09:06:34,12400,-0.044,9.12e+12,987,952,-0.83966,1.91067,-0.84014,1.91068,0.8,-0.2,5.30,-4.09,-1.55137,-0.84013,2.99058,1.41107,1.91067,2.99843
1 timestamp energy_eV flux_ph_s beam_start_x_px beam_start_y_px vfm_ydr_start_mm hfm_xd_start_mm vfm_ydr_final_mm hfm_xd_final_mm beam_final_x_um beam_final_y_um vfm_y_mm vfm_ydr_mm vfm_pitch_mrad hfm_x_mm hfm_xd_mm hfm_pitch_mrad
30 2026-10-02T10:16:22 12400 -0.044 9.91e+12 -1.55143 -0.84055 2.98973
31 2026-10-02T10:21:56 12400 -0.044 8.22e+12 1001 952 -0.84053 1.91404 -0.84102 1.91453 0.5 -0.5 11.20 1.19 -1.55155 -0.84100 2.98875
32 2026-10-02T11:46:02 12400 -0.046 7.47e+12 984 963 -0.84101 1.91456 -0.84101 1.91396 -0.5 0.7 10.91 1.12 -1.55155 -0.84101 2.98877
33 2026-10-02T14:27:48 12400 -0.046 7.51e+12 953 969 -0.84102 1.91394 -0.84101 1.91180 -0.2 0.3 13.01 1.65 -1.55155 -0.84102 2.98880
34 2026-10-04T17:23:05 12400 -0.047 8.06e+12 1035 1081 -0.84162 1.91194 -0.83864 1.91375 -0.5 0.0 18.41 0.86 -1.55117 -0.83864 2.99429
35 2026-10-04T17:30:34 12400 -0.047 9.24e+12 994 967 -0.83864 1.91375 -0.83864 1.91371 -0.1 0.3 16.19 0.80 -1.55118 -0.83863 2.99434
36 2026-10-05T13:58:52 20000 -0.045 1.28e+12 933 891 -0.83851 1.91371 -0.84056 1.91048 -1.1 0.1 26.14 -0.07 -1.55180 -0.84059 2.99023
37 2026-10-05T14:00:11 20000 -0.045 1.28e+12 1000 971 -0.84057 1.91048 -0.84056 1.91093 0.5 -0.3 27.35 -0.22 -1.55179 -0.84058 2.99021
38 2026-10-05T14:04:31 20000 -0.046 1.31e+12 997 969 -0.84057 1.91085 -0.84055 1.91086 -0.6 -0.1 24.26 -0.19 -1.55178 -0.84056 2.99024
39 2026-10-05T14:50:12 12400 -0.049 7.69e+12 1001 967 -0.84055 1.91084 -0.84056 1.91122 0.1 0.1 17.17 -0.34 -1.55176 -0.84054 2.99021
40 2026-10-05T14:52:28 12400 -0.050 7.64e+12 992 969 -0.84054 1.91118 -0.84055 1.91122 0.1 -0.0 17.85 -0.35 -1.55176 -0.84055 2.99023
41 2026-10-07T09:46:42 12400 -0.119 7.26e+12 -1.55153 -0.84025 2.99058
42 2026-10-07T09:50:26 12400 -0.119 7.24e+12 -1.55153 -0.84025 2.99055
43 2026-10-07T09:54:58 12400 -0.119 7.25e+12 -1.55159 -0.84048 2.99009
44 2026-10-07T22:12:48 12400 -0.120 8.57e+12 -1.55164 -0.84046 2.99019
45 2026-10-07T22:21:21 12400 -0.120 8.55e+12 1003 969 -0.84045 1.90916 -0.84045 1.90993 -6.0 0.0 31.82 -3.14 -1.55163 -0.84047 2.99011
46 2026-10-07T22:25:08 12400 -0.120 3.01e+12 886 960 -0.84046 1.90986 -0.84068 1.90511 0.8 0.1 259.20 -3.45 -1.55168 -0.84069 2.98967
47 2026-10-08T09:38:54 12400 -0.119 8.58e+12 1094 966 -0.84067 1.90501 -0.84067 1.91027 0.9 0.2 31.67 -2.49 -1.55168 -0.84066 2.98976
48 2026-10-08T11:18:52 8.65e+09 -1.55167 -0.84067 2.98977
49 2026-10-08T11:23:02 15999 -0.118 3.18e+12 988 945 -0.84066 1.91025 -0.84130 1.91026 0.6 0.1 40.53 -1.92 -1.55183 -0.84130 2.98850
50 2026-10-08T11:46:45 15999 -0.118 3.29e+12 990 966 -0.84128 1.91027 -0.84128 1.91024 0.5 0.4 38.28 -1.28 -1.55182 -0.84128 2.98846
51 2026-10-08T12:23:01 20000 -0.118 1.18e+12 981 951 -0.84128 1.91026 -0.84177 1.90955 -0.6 -0.1 37.40 -1.39 -1.55193 -0.84179 2.98751
52 2026-10-08T12:36:12 12398 -0.122 7.54e+12 1014 1011 -0.84177 1.90955 -0.84063 1.91046 -0.0 0.3 27.70 -2.63 -1.55164 -0.84064 2.98980
53 2026-10-08T14:05:15 12400 -0.125 7.53e+12 1010 997 -0.84063 1.91038 -0.83988 1.91091 -0.6 -0.2 22.53 -2.62 -1.55143 -0.83988 2.99126
54 2026-10-09T08:39:08 12400 -0.123 7.52e+12 1021 1015 -0.83960 1.91196 -0.83836 1.91302 -0.7 -0.0 25.21 -2.48 -1.55103 -0.83836 2.99472
55 2026-10-09T09:09:02 12400 -0.123 7.84e+12 975 956 -0.83837 1.91304 -0.83871 1.91193 -0.4 -0.1 26.17 -2.47 -1.55112 -0.83871 2.99398
56 2026-10-11T13:43:17 12400 -0.003 9.40e+12 1046 974 -0.84349 1.90884 -0.84328 1.91123 -0.5 0.3 -11.57 0.25 -1.55229 -0.84327 2.98450
57 2026-10-11T13:44:35 12400 -0.003 8.89e+12 959 963 -0.84328 1.91121 -0.84349 1.90923 -1.0 -0.5 4.12 -0.10 -1.55233 -0.84350 2.98406
58 2026-10-11T13:46:10 15000 0.000 3.88e+12 997 974 -0.84348 1.90922 -0.84349 1.90922 -0.5 -0.7 7.75 -0.22 -1.55235 -0.84348 2.98409
59 2026-10-11T13:57:05 15000 -0.000 3.88e+12 999 972 -0.84348 1.90924 -0.84346 1.90924 -0.8 -0.5 7.18 -0.03 -1.55236 -0.84348 2.98415
60 2026-10-11T14:06:33 15000 0.000 3.89e+12 1000 972 -0.84349 1.90922 -0.84349 1.90923 -0.9 -0.5 5.01 -0.04 -1.55235 -0.84347 2.98411
61 2026-10-11T14:14:45 12400 -0.002 8.88e+12 997 971 -0.84349 1.90924 -0.84350 1.90923 -0.8 -0.3 4.65 -0.12 -1.55235 -0.84350 2.98404
62 2026-10-11T14:30:55 12400 -0.002 8.87e+12 998 974 -0.84348 1.90922 -0.84349 1.90924 -1.0 -0.9 4.66 -0.26 -1.55235 -0.84350 2.98410
63 2026-10-11T14:46:28 12400 -0.002 8.73e+12 988 976 -0.84348 1.90922 -0.84349 1.90925 0.7 -1.1 9.50 -0.33 -1.55234 -0.84349 2.98406
64 2026-10-11T14:51:26 12400 -0.002 8.75e+12 995 975 -0.84349 1.90923 -0.84348 1.90921 -0.5 -0.9 7.19 -0.16 -1.55234 -0.84347 2.98412
65 2026-10-11T15:00:54 12400 -0.002 8.77e+12 995 977 -0.84350 1.90924 -0.84325 1.90923 -0.5 0.3 6.43 0.09 -1.55229 -0.84326 2.98451
66 2026-10-11T15:14:21 12400 -0.002 8.83e+12 993 971 -0.84326 1.90925 -0.84327 1.90924 -0.0 -0.2 6.62 -0.12 -1.55229 -0.84326 2.98454
67 2026-10-11T15:17:41 12400 -0.002 8.86e+12 995 968 -0.84327 1.90923 -0.84326 1.90921 -0.2 0.2 6.43 0.13 -1.55230 -0.84328 2.98450
68 2026-10-12T09:45:04 12400 0.000 8.91e+12 983 951 -0.84303 1.90992 -0.84353 1.90914 -0.7 -0.3 4.88 0.31 -1.55229 -0.84354 2.98386
69 2026-10-14T08:55:40 12400 0.000 8.77e+12 1033 1005 -0.84345 1.90907 -0.84247 1.91088 -0.5 0.3 10.83 0.85 -1.55198 -0.84249 2.98585
70 2026-10-15T09:34:37 12400 -0.000 8.83e+12 959 923 -0.84246 1.91085 -0.84368 1.90935 0.7 -0.0 8.69 0.17 -1.55226 -0.84369 2.98353
71 2026-10-16T08:40:24 12400 -0.000 8.80e+12 1004 979 -0.84368 1.90932 -0.84343 1.90991 0.2 0.1 13.56 0.51 -1.55222 -0.84343 2.98403
72 2026-10-16T15:14:36 12400 -0.000 8.78e+12 982 956 -0.84344 1.90983 -0.84379 1.90948 0.6 -0.1 12.88 0.34 -1.55234 -0.84380 2.98332
73 2026-10-17T12:28:51 12400 -0.038 9.12e+12 1017 1181 -0.84379 1.90942 -0.83817 1.91044 -0.2 -0.6 6.60 -5.16 -1.55092 -0.83817 2.99459
74 2026-10-17T21:52:03 12400 -0.042 9.16e+12 993 968 -0.83965 1.91067 -0.83966 1.91068 -0.2 0.1 6.30 -3.83 -1.55129 -0.83964 2.99155
75 2026-10-19T09:06:34 12400 -0.044 9.12e+12 987 952 -0.83966 1.91067 -0.84014 1.91068 0.8 -0.2 5.30 -4.09 -1.55137 -0.84013 2.99058
Binary file not shown.
@@ -10,3 +10,12 @@
"2026-09-30T11:45:21",12400,5.307,-0.0417,0.14,0.874,0.102,0.152,0.224,-0.639,0.014,-0.0129,0.0118,-0.0001,-0.0399,-0.0652,6.1,-1.63
2026-09-30T12:07:53,12400,5.307,-0.042,0.14,0.874,0.101,0.152,0.219,-0.639,0.0145,-0.0108,0.0138,0.000447,-0.0467,-0.066,7.24,-1.65
2026-09-30T12:15:59,12400,5.307,-0.0418,0.14,0.874,0.101,0.152,0.221,-0.639,0.0144,-0.0105,0.012,-0.00118,-0.0414,-0.0618,6.36,-1.54
2026-10-07T09:34:08,12400,5.307,-0.1193,0.130,0.881,0.088,0.163,0.184,-0.589,0.0961,0.0611,-0.0289,-0.1239,-0.1618,-0.0831,26.4,-2.1
2026-10-11T14:05:28,12400,5.310,-0.0036,0.130,0.873,0.092,0.156,0.180,-0.637,0.0954,0.0073,-0.0118,0.0191,-0.0440,-0.0014,3.8,-0.1,0.25
2026-10-11T14:14:13,12400,5.310,-0.0033,,,0.093,0.156,0.182,-0.636,0.0977,0.0072,-0.0168,0.0181,-0.0418,-0.0021,3.5,-0.1,0.25
2026-10-11T14:23:25,12400,5.310,-0.0019,,,0.093,0.156,0.181,-0.637,0.1022,0.0046,-0.0068,0.0224,-0.0518,-0.0005,5.1,-0.1,0.25
2026-10-11T14:30:23,12400,5.310,-0.0013,,,0.093,0.156,0.185,-0.635,0.0970,0.0061,-0.0078,0.0209,-0.0287,-0.0040,1.3,-0.2,0.25
2026-10-11T14:45:55,12400,5.310,-0.0021,,,,,,,,,,,,,,,0.25
2026-10-11T15:00:21,12400,5.310,-0.0023,0.130,0.873,0.093,0.174,0.177,-0.636,0.1009,0.0066,-0.0069,0.0183,-0.0608,-0.0088,6.6,-0.3,0.25
2026-10-14T08:55:03,12400,5.310,0.0001,0.130,0.873,0.085,0.157,0.172,-0.638,0.1177,0.0063,-0.0048,0.0302,-0.0618,-0.0162,6.8,-0.5,0.25
2026-10-17T12:28:09,12400,5.309,-0.0382,0.125,0.881,0.077,0.167,0.171,-0.529,0.1176,0.0800,-0.0212,-0.2063,-0.0501,-0.4810,4.8,-7.0,0.25
1 timestamp energy_eV id_gap_mm pitch_offset_mrad fe_x fe_y bsf_x bsf_y ss_x ss_y lu_Xnorm lu_Ynorm ss_Xnorm ss_Ynorm bcu_Xnorm bcu_Ynorm bcu_beam_x bcu_beam_y
10 2026-09-30T11:45:21 12400 5.307 -0.0417 0.14 0.874 0.102 0.152 0.224 -0.639 0.014 -0.0129 0.0118 -0.0001 -0.0399 -0.0652 6.1 -1.63
11 2026-09-30T12:07:53 12400 5.307 -0.042 0.14 0.874 0.101 0.152 0.219 -0.639 0.0145 -0.0108 0.0138 0.000447 -0.0467 -0.066 7.24 -1.65
12 2026-09-30T12:15:59 12400 5.307 -0.0418 0.14 0.874 0.101 0.152 0.221 -0.639 0.0144 -0.0105 0.012 -0.00118 -0.0414 -0.0618 6.36 -1.54
13 2026-10-07T09:34:08 12400 5.307 -0.1193 0.130 0.881 0.088 0.163 0.184 -0.589 0.0961 0.0611 -0.0289 -0.1239 -0.1618 -0.0831 26.4 -2.1
14 2026-10-11T14:05:28 12400 5.310 -0.0036 0.130 0.873 0.092 0.156 0.180 -0.637 0.0954 0.0073 -0.0118 0.0191 -0.0440 -0.0014 3.8 -0.1
15 2026-10-11T14:14:13 12400 5.310 -0.0033 0.093 0.156 0.182 -0.636 0.0977 0.0072 -0.0168 0.0181 -0.0418 -0.0021 3.5 -0.1
16 2026-10-11T14:23:25 12400 5.310 -0.0019 0.093 0.156 0.181 -0.637 0.1022 0.0046 -0.0068 0.0224 -0.0518 -0.0005 5.1 -0.1
17 2026-10-11T14:30:23 12400 5.310 -0.0013 0.093 0.156 0.185 -0.635 0.0970 0.0061 -0.0078 0.0209 -0.0287 -0.0040 1.3 -0.2
18 2026-10-11T14:45:55 12400 5.310 -0.0021
19 2026-10-11T15:00:21 12400 5.310 -0.0023 0.130 0.873 0.093 0.174 0.177 -0.636 0.1009 0.0066 -0.0069 0.0183 -0.0608 -0.0088 6.6 -0.3
20 2026-10-14T08:55:03 12400 5.310 0.0001 0.130 0.873 0.085 0.157 0.172 -0.638 0.1177 0.0063 -0.0048 0.0302 -0.0618 -0.0162 6.8 -0.5
21 2026-10-17T12:28:09 12400 5.309 -0.0382 0.125 0.881 0.077 0.167 0.171 -0.529 0.1176 0.0800 -0.0212 -0.2063 -0.0501 -0.4810 4.8 -7.0
@@ -0,0 +1,10 @@
timestamp,energy_eV,id_gap_mm,pitch_offset_mrad,fe_x,fe_y,bsf_x,bsf_y,ss_x,ss_y,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_Xnorm,bcu_Ynorm,bcu_beam_x,bcu_beam_y
2026-09-24T21:42:20,12400.0338140146,5.307,-0.042640079687493,0.140288499999999,0.872397500000001,0.097923887634334,0.153298136901654,0.21542,-0.64411,,,,,,,,
2026-09-28T19:57:16,12399.9628462791,5.307,-0.044554079687435,0.140375499999999,0.872320000000001,0.105040205383357,0.148134944152631,0.22142,-0.6395,,,,,,,,
2026-09-28T20:08:25,12399.9609373482,5.307,-0.044496079687582,0.1403535,0.872312500000001,0.104503286743221,0.148356196594037,0.22431,-0.64021,-0.001605502500174,-0.011175883290173,-0.01409593110007,,0.11351579437023,-0.118069917719052,,
2026-09-30T08:58:15,12399.7329928229,5.307,-0.044525079687622,0.139911,0.88608,0.10406555023199,0.17099928588847,0.19652,-0.2202,0.081590727629084,0.411812820368516,0.033582789254866,,-0.112479632399972,-0.816516017074602,,
2026-09-30T09:08:53,12399.747477715,5.307,-0.042524079687558,0.139926999999998,0.864803500000001,0.103701246643123,0.143616435241498,0.24392,-1.0175,-0.063997780917417,-0.289248157407647,-0.079407668513141,,0.034774101807238,0.983399612330604,,
2026-09-30T10:49:14,12400.0475135773,5.30728340148926,-0.042002079687512,0.139973999999999,0.8737165,0.103015554809627,0.152205226135052,0.2194,-0.6346,0.012092898871937,-0.017654174479793,0.01164915499848,,-0.038458560216091,-0.056822442194876,,
2026-09-30T11:04:59,12400.034824637,5.30728340148926,-0.041712079687562,0.140038499999999,0.873851000000002,0.102714193725642,0.152251956176556,0.22052,-0.64071,0.01188100007843,-0.012323516377797,0.013475582102897,-0.002578973845116,-0.042749327098526,-0.061238705041222,,
2026-09-30T11:39:23,12400,5.307,-0.042,0.140108499999998,0.873990000000001,0.102007521057185,0.152334925842084,0.22002,-0.64121,0.0135,-0.0108,0.0095,0.000379,-0.0371,-0.0659,5.64,-1.65
2026-09-30T11:45:21,12400,5.307,-0.0417,0.14,0.874,0.102,0.152,0.224,-0.639,0.014,-0.0129,0.0118,-0.0001,-0.0399,-0.0652,6.1,-1.63
1 timestamp energy_eV id_gap_mm pitch_offset_mrad fe_x fe_y bsf_x bsf_y ss_x ss_y lu_Xnorm lu_Ynorm ss_Xnorm ss_Ynorm bcu_Xnorm bcu_Ynorm bcu_beam_x bcu_beam_y
2 2026-09-24T21:42:20 12400.0338140146 5.307 -0.042640079687493 0.140288499999999 0.872397500000001 0.097923887634334 0.153298136901654 0.21542 -0.64411
3 2026-09-28T19:57:16 12399.9628462791 5.307 -0.044554079687435 0.140375499999999 0.872320000000001 0.105040205383357 0.148134944152631 0.22142 -0.6395
4 2026-09-28T20:08:25 12399.9609373482 5.307 -0.044496079687582 0.1403535 0.872312500000001 0.104503286743221 0.148356196594037 0.22431 -0.64021 -0.001605502500174 -0.011175883290173 -0.01409593110007 0.11351579437023 -0.118069917719052
5 2026-09-30T08:58:15 12399.7329928229 5.307 -0.044525079687622 0.139911 0.88608 0.10406555023199 0.17099928588847 0.19652 -0.2202 0.081590727629084 0.411812820368516 0.033582789254866 -0.112479632399972 -0.816516017074602
6 2026-09-30T09:08:53 12399.747477715 5.307 -0.042524079687558 0.139926999999998 0.864803500000001 0.103701246643123 0.143616435241498 0.24392 -1.0175 -0.063997780917417 -0.289248157407647 -0.079407668513141 0.034774101807238 0.983399612330604
7 2026-09-30T10:49:14 12400.0475135773 5.30728340148926 -0.042002079687512 0.139973999999999 0.8737165 0.103015554809627 0.152205226135052 0.2194 -0.6346 0.012092898871937 -0.017654174479793 0.01164915499848 -0.038458560216091 -0.056822442194876
8 2026-09-30T11:04:59 12400.034824637 5.30728340148926 -0.041712079687562 0.140038499999999 0.873851000000002 0.102714193725642 0.152251956176556 0.22052 -0.64071 0.01188100007843 -0.012323516377797 0.013475582102897 -0.002578973845116 -0.042749327098526 -0.061238705041222
9 2026-09-30T11:39:23 12400 5.307 -0.042 0.140108499999998 0.873990000000001 0.102007521057185 0.152334925842084 0.22002 -0.64121 0.0135 -0.0108 0.0095 0.000379 -0.0371 -0.0659 5.64 -1.65
10 2026-09-30T11:45:21 12400 5.307 -0.0417 0.14 0.874 0.102 0.152 0.224 -0.639 0.014 -0.0129 0.0118 -0.0001 -0.0399 -0.0652 6.1 -1.63
+18 -6
View File
@@ -65,15 +65,15 @@ aerotech:
mount: 0
work: 0
x:
in: 0.05999397
in: 0.05999735
out: -10
safe: -50
y:
mount: -0.0
work: -0.02799609
work: -0.03099898
z:
mount: 0
work: -0.0090036
work: -0.0090031
bcu_bpm1:
description: BCU BPM Channel 1
deviceClass: ophyd.EpicsSignalRO
@@ -302,7 +302,7 @@ bs_x:
onFailure: buffer
readoutPriority: baseline
userParameter:
in: 0.2038985
in: 0.44000227
bs_y:
description: Beamstop Y
deviceClass: ophyd_devices.EpicsMotor
@@ -314,7 +314,7 @@ bs_y:
onFailure: buffer
readoutPriority: baseline
userParameter:
in: 0.9064885
in: -3.3000017
bs_z:
description: Beamstop Z
deviceClass: ophyd_devices.EpicsMotor
@@ -560,6 +560,8 @@ dcm_pitch:
enabled: true
onFailure: buffer
readoutPriority: baseline
userParameter:
offset: 0
dcm_x:
description: DCM Lateral
deviceClass: ophyd_devices.EpicsMotorEC
@@ -1310,6 +1312,17 @@ samcam_sigma:
onFailure: buffer
readOnly: true
readoutPriority: monitored
samcam_thresh:
description: Sample Camera Threshold
deviceClass: ophyd.EpicsSignal
deviceConfig:
auto_monitor: true
read_pv: X10SA-ES-MS:Stats5:CentroidThreshold
deviceTags:
- scam
enabled: true
onFailure: buffer
readoutPriority: baseline
samcam_x:
description: Sample Camera X
deviceClass: ophyd.EpicsSignalRO
@@ -1758,7 +1771,6 @@ transm:
deviceClass: ophyd_devices.EpicsSignal
deviceConfig:
read_pv: X10SA-ES-SSFI:TRANSM-SET
write_pv: X10SA-ES-SSFI:TRANSM-SET
deviceTags:
- transm
enabled: true
File diff suppressed because it is too large. Load diff
+36 -33
View File
@@ -2,68 +2,71 @@ def evalflux():
from APscripts import read_data_csv, fitpoly
data=read_data_csv('FLUX_x10sa_20260709_174259.txt')
einv=data[:, 0]
fcalfinv = data[:, 6] # if energy top down
data = read_data_csv("FLUX_x10sa_20260709_174259.txt")
einv = data[:, 0]
fcalfinv = data[:, 6] # if energy top down
e = einv[::-1]
flcf = fcalfinv[::-1]
# omit the last values (>= 27 keV)
len(e) # = 25
len(e) # = 25
e = e[0:21]
flcf =flcf[0:21]/1.e9 ## divide by 1e9 for better readability
flcf = flcf[0:21] / 1.0e9 ## divide by 1e9 for better readability
fitpoly(e, flcf, 3)
# Polynomial coefficients of the fit fct: 3 [-0.00026213 0.01171065 -0.05379571 0.04478851]
def csplinex(x,y,en):
def csplinex(x, y, en):
from scipy.interpolate import CubicSpline
# Create spline
cs = CubicSpline(x, y)
y_cs = cs(en)
y_cs = cs(en)
return y_cs
def flux_bcu():
e = get_current_energy()/1000.
bcusum = read_av(dev.bcu_bpmsum,10)
flux = fl_bcubpm(e,bcusum)
return f"{flux:.2e}"
e = get_current_energy() / 1000.0
bcusum = read_av(dev.bcu_bpmsum, 10)
flux = fl_bcubpm(e, bcusum)
return f"{flux:.2e}"
def flux_i1():
e = get_current_energy()/1000
i1 = read_av(dev.i1,10)
e = get_current_energy() / 1000
i1 = read_av(dev.i1, 10)
flux = fl_i1(e, i1)
return f"{flux:.2e}"
def fl_bcubpm(e,bcusum):
import numpy as np
fact = 1.e9
coeff = [-0.00026213, 0.01171065, -0.05379571, 0.04478851]
if e > 24 :
coeff = [4.83704287e-05, -3.17174523e-03, 7.33131161e-02, -5.91926617e-01, 1.66572494e+00]
return f"{flux:.2e}"
def fl_bcubpm(e, bcusum):
import numpy as np
fact = 1.0e9
coeff = [-0.00026213, 0.01171065, -0.05379571, 0.04478851]
if e > 24:
coeff = [4.83704287e-05, -3.17174523e-03, 7.33131161e-02, -5.91926617e-01, 1.66572494e00]
polynomial = np.poly1d(coeff)
fl = polynomial(e) * bcusum * fact
#print(f'flux from {bcusum} with en {e} is {fl:.2e} ph/s')
return fl
def fl_i1(e,i1):
# print(f'flux from {bcusum} with en {e} is {fl:.2e} ph/s')
return fl
def fl_i1(e, i1):
import pandas as pd
file = "luts/I1flcalf.csv"
df = pd.read_csv(file)
df = pd.read_csv(file)
a = df["En"]
b = df["Fl/I1"]
fl_i1 = csplinex(a,b,e) *i1
print(f'flux from {i1} with en {e} is {fl_i1:.2} ph/s ')
fl_i1 = csplinex(a, b, e) * i1
print(f"flux from {i1} with en {e} is {fl_i1:.2} ph/s ")
return fl_i1
+15 -15
View File
@@ -13,10 +13,12 @@ class KBMirror:
self.P2 = 0.583490
self.P3 = -0.372950
self.L1 = -0.955798
self.curv_approx_fact = 0.9550 # 0.9550 # origin: 1.0121
self.s1 = 24.15
self.curv_approx_fact = 0.9550 # 0.9550 # origin: 1.0121
self.s1 = 24.15
self.s2 = 1.45
self.asym0 = 0.114 ## origin: 0.0.08 + 0.034 # user asymm, eg 0.4750, will be added ( - sign)
self.asym0 = (
0.114 ## origin: 0.0.08 + 0.034 # user asymm, eg 0.4750, will be added ( - sign)
)
elif self.mirror_type == "PXII_HFM":
self.C0 = 0.060453
@@ -24,10 +26,12 @@ class KBMirror:
self.P2 = 0.586057
self.P3 = -0.088093
self.L1 = -0.999445
self.curv_approx_fact = 0.8810 # origin: # 0.995
self.s1 = 24.90
self.curv_approx_fact = 0.8810 # origin: # 0.995
self.s1 = 24.90
self.s2 = 0.7
self.asym0 = 0.06455 ## origin: -0.0107 + 0.07525 # added user asymm 2.75 (-sign)
self.asym0 = (
0.06455 ## origin: -0.0107 + 0.07525 # added user asymm 2.75 (-sign)
)
else:
raise ValueError(f"Unknown mirror type: {self.mirror_type}")
@@ -59,7 +63,7 @@ class KBMirror:
return s2, R
def get_benders(self, th=3.0, defocus_mm=0.0, user_asymmetry=0.0):
asym = self.asym0 - user_asymmetry #### sign is important!
asym = self.asym0 - user_asymmetry #### sign is important!
s2_target = self.s2 + defocus_mm / 1000
curv = self.ellipse_to_curvature(s2_target, th)
BU, BD = self.curvature_to_bend(curv, asym)
@@ -69,16 +73,12 @@ class KBMirror:
curv, asym = self.bend_to_curvature(BU, BD)
s2_rb, R0 = self.curvature_to_ellipse(curv, th)
defocus_mm = (s2_rb - self.s2) * 1000
bend_rad_m = 1/curv *1000
bend_rad_m = 1 / curv * 1000
return {
"curvature": curv,
"bend_rad_m": bend_rad_m,
"bend_rad0_m": R0,
"bend_rad_m": bend_rad_m,
"bend_rad0_m": R0,
"asymmetry": asym,
"s2": s2_rb,
"defocus_mm": defocus_mm
"defocus_mm": defocus_mm,
}
+94 -31
View File
@@ -45,8 +45,40 @@ def exponential_func2(x, a, b, c, d):
##################################
# ##### Sept 2026 Data ######################################
def return_harmon():
# from 3rd to 19th Energy range from 6 keV to 30 keV
# harmonics, Sept 2026
import numpy as np
nharm = 19
h = [np.array([]) for _ in range(nharm + 1)]
h[0] = np.array([0])
h[1] = np.array([0])
h[2] = np.array([0])
h[3] = np.array([0.095, -0.276, 4.154]) # 3rd harmon
h[4] = np.array([0.00692593, -0.131504, 1.45763, -0.864603])
h[5] = np.array([0.00269444 , - 0.0616905 , 0.967925, - 0.295405])
h[6] = np.array([ 0.00248148 , - 0.0767908 , 1.2178 , - 1.91516 ])
h[7] = np.array([0.00110017 , - 0.0369968 , 0.77334 ,- 0.688198 ])
h[8] = np.array([0.000643939 , - 0.0226645 , 0.570453 , - 0.0479048 ])
h[9] = np.array([0.00021633 , -0.00619517 , 0.315392 , 0.971667 ])
h[10] = np.array([ 0.000708236 , - 0.0357576 , 0.851686 - 2.48765 ])
h[11] = np.array([ 0.000589549 , -0.0328631 , 0.837705 , - 2.90326 ])
h[12] = np.array([ 0.00218182 , 0.1212 , 1.74739 ])
h[13] = np.array([ 0.197702, 0.757869 ])
h[14] = np.array([ 0.183733, 0.762778 ])
h[15] = np.array([ 0.170381, 0.783155 ])
h[16] = np.array([ 0.157321, 0.850464 ])
h[17] = np.array([0.1466, 0.8906 ])
h[18] = np.array([0.1362, 0.9538 ])
h[19] = np.array([0.128, 0.985 ])
return h
# ##### July 2025 Data ######################################
def return_harmon_old():
# from 3rd to 21th Energy range from 6 keV to 30 keV
# harmonics, July 2025
import numpy as np
@@ -97,7 +129,7 @@ def plot_harmon(e_start, e_end, h_no, pr_out=False):
plt.show()
def setu19(en, *harm_no, detune=0, simul = 0):
def setu19(en, *harm_no, detune=0, simul = 0, iexp = 0):
"""
set the U19 to the gaps defined in Jul2025, or the "theoretical" ones for higher
harmonics
@@ -106,32 +138,43 @@ def setu19(en, *harm_no, detune=0, simul = 0):
en in keV, possibly select a special harmonics, or detune [0/1] to a value
with a nicer beam shape but less flux
"""
g0 = dev.id_gap.readback.get()
fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255]) # measured from U19
if not simul:
g0 = dev.id_gap.readback.get()
#fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255]) # measured from U19
fitpar_u19 = np.array([ 2.22322523, 0.50396248, -0.00783873]) # measured from U19, Sept2026
h_all = return_harmon()
# dep on energy -> select harmonics
if harm_no:
harm = int(harm_no[0])
print("Selected harmonics is:", harm)
else:
print("Using the default optimised harmonics")
if en <= 7:
harm = 3 # h = h[3]
elif 7 < en <= 10:
elif 7 < en <= 10.5:
harm = 5
elif 10 < en <= 13:
elif 10.5 < en < 13:
harm = 7
elif 13 < en <= 16:
elif 13 <= en <= 16.5:
harm = 9
elif 16 < en <= 19:
elif 16.5 < en <= 19.5:
harm = 11
elif 19 < en <= 22: ## 22
elif 19.5 < en <= 22.5:
harm = 13
elif 22.5 < en <= 25.5: ## 22
harm = 15
elif 25.5 < en <= 28.5: ## 22
harm = 17
elif 28.5 < en <= 30: ## 22
harm = 19
if (en <= 22 and harm <=13):
if (en <= 30 and harm <=19):
h = h_all[harm]
print(f"harmonics is {harm}.")
@@ -146,25 +189,17 @@ def setu19(en, *harm_no, detune=0, simul = 0):
# 29: 15, 17, 19
# 30: 19
##
if (en > 22 and harm_no):
harm = int(harm_no[0])
print("Selected harmonics is:", harm)
n= harm
if (iexp and harm_no):
harm_selected = int(harm_no[0])
print("Selected harmonics is:", harm_selected)
n= harm_selected
enorm = en / n
g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2])
else:
if 22 < en <= 25:
n = 15
enorm = en / n
g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2])
elif 25 < en <= 29:
n = 17
enorm = en / n
g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2])
elif 29 < en:
n = 19
enorm = en / n
g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2])
elif (iexp):
n = harm # default for that energy range, as set before
enorm = en / n
print('exp fct fit used')
g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2])
if not simul:
@@ -180,7 +215,7 @@ def setu19(en, *harm_no, detune=0, simul = 0):
# print("move disabled!!")
scans.umv(dev.id_gap, g, relative=False)
return g
return round(g,4)
##################################
@@ -201,7 +236,8 @@ def harmon_walk(estart=7.5, end_en=13):
##################################
def gap_harm(e=12.4):
fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255])
# old values fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255])
fitpar_u19 = np.array([2.22322523, 0.50396248, -0.00783873])
fitpar_u17 = np.array([2.17078572, 0.46477267, -0.005766])
e = float(input("Please enter an energy between 6 and 30: "))
@@ -396,7 +432,7 @@ def gscan(deltag = 0.05,centre=0, gomax=0, detune=0,sett=1, silent=0, iplot=1, i
indmax = np.argmax(bpm_data)
gmax = gap_data[indmax]
gcen, xm = fit_plot(gap_data, bpm_data, model="voigt", silent=silent, iplot=iplot)
gcen, xm = fit_plot(gap_data, bpm_data, tmodel="voigt", silent=silent, iplot=iplot)
if gomax:
gm = xm
@@ -419,3 +455,30 @@ def gscan(deltag = 0.05,centre=0, gomax=0, detune=0,sett=1, silent=0, iplot=1, i
print("Fit too far off, try using option gomax=1")
return gm, xm
##################################
def bfield_x10sa(gap):
if gap < 4.5 or gap > 20:
print("no valid gap!")
return
### values for the U19
l_u = 19
a = 3.22482942
b = -0.30100054
c = 0.00808649
b0 = exponential_func0(gap, a,b,c )
b0= round(b0,4)
# K = e/mc * l_u/2pi * B
k = round(0.0934 *l_u * b0,2)
print(f'### X10SA and U19 ### ')
print(f'for a gap of {gap} mm : ')
print(f'B0 = {b0}')
print(f'K = {k}')
return b0, k
##################################
+130 -16
View File
@@ -12,7 +12,7 @@ from pxii_bec.scripts import beamline_context as bl
def get_data(filename):
"""Open the raw DCM calibration data file."""
filename = bl.env.lut_dir / f"{filename}.csv"
filename = bl.env.lut_dir / f"{filename}"
return pd.read_csv(filename)
@@ -168,8 +168,69 @@ def lut_plot(
return fit
def pitch_analysis(filename, save=False):
"""Compare DCM pitch calibration against energy and Bragg angle."""
def pitch_analysis(filename, fit_order=3, save=False):
df = get_data(filename)
fits = {}
for xname, fit_order in [("energy", 4), ("bragg", 2)]:
x = df[xname].to_numpy()
pitch = df["pitch"].to_numpy()
fit = lut_plot(
df[[xname, "pitch"]].to_numpy(),
xname="Energy" if xname == "energy" else "Bragg angle",
yname="pitch",
title=f"DCM_Pitch_Calibration_{xname}",
fit_order=fit_order,
save=save,
)
# Calculate residuals
fitted_pitch = np.polyval(fit, x)
residuals = pitch - fitted_pitch
rms = np.sqrt(np.mean(residuals**2))
max_residual = np.max(np.abs(residuals))
print(f"\n{xname.capitalize()} fit (order {fit_order})")
print(f"RMS residual: {rms:.6g}")
print(f"Max residual: {max_residual:.6g}")
for xi, residual in zip(x, residuals):
print(f" {xi:10.3f}: {residual:+.6g}")
fits[xname] = {
"fit": fit,
"residuals": residuals,
"rms": rms,
"max_residual": max_residual,
}
return fits
def pitch_analysis_bragg(filename, fit_order=2, save=False):
"""Fit and plot the DCM pitch calibration."""
df = get_data(filename)
pitch = df[["bragg", "pitch"]]
fit = lut_plot(
pitch.to_numpy(),
xname="Bragg angle",
yname="pitch",
title="DCM_Pitch_Calibration",
fit_order=fit_order,
save=save,
)
return fit
def pitch_analysis_energy(filename, fit_order=3, save=False):
"""Fit and plot the DCM pitch calibration."""
df = get_data(filename)
@@ -328,8 +389,8 @@ def ge_edge_analysis(filename, save=False):
# ----------------------------------------------------------
if save:
signal_file = bl.env.lut_dir / f"{filename}_signal.png"
derivative_file = bl.env.lut_dir / f"{filename}_derivative.png"
signal_file = bl.env.daily_setup_dir / "Ge_edge_signal.png"
derivative_file = bl.env.daily_setup_dir / "Ge_edge_derivative.png"
fig1.savefig(signal_file, bbox_inches="tight", dpi=150)
fig2.savefig(derivative_file, bbox_inches="tight", dpi=150)
@@ -347,25 +408,77 @@ def ge_edge_analysis(filename, save=False):
"expected_edge": expected_edge,
"measured_edge": measured_edge,
"energy_offset": energy_offset,
"derivative": derivative,
"signal_png": signal_file,
"derivative_png": derivative_file,
}
def perp_analysis():
def perp_analysis(filename):
"""Select the DCM perpendicular translation calibration data."""
df = get_data()
df = get_data(filename)
sel = df[['energy','dcm_perp', 'xi_cam_x']]
savefile = bl.env.lut_dir / "perp_actual_calc.csv"
with open(savefile, 'w', encoding='utf-8') as f:
f.write("energy,calc_perp,actual_perp\n")
conv_factor = 12365.75 / (2 * 3.13481)
energies = [8000, 10000, 12400, 15000, 18000, 20000, 22000, 25000]
for energy in energies:
df["costheta"] = np.cos(conv_factor / df["energy"])
data = sel[sel['energy']== energy]
print(data)
perp = df[["costheta", "bsccam_x"]]
target = 149.4 # value of xi_cam_x at 12.4 keV
return (
perp.to_numpy(),
"costheta",
"bsccam_x",
)
x = data["dcm_perp"].to_numpy()
y = data["xi_cam_x"].to_numpy()
# Linear fit: gap = slope * energy + intercept
slope, intercept = np.polyfit(x, y, 1)
# perp_value = intercept/-slope
perp_value = (target - intercept)/slope
calc_per = calc_perp_position(energy)
with open(savefile, 'a', encoding='utf-8') as f:
f.write(f"{energy},{calc_per:.4f},{perp_value:.4f}\n")
# print(
# f"Energy = {energy} eV, "
# f"Calculated perp = {calc_per:.4f}, "
# f"Actual perp = {perp_value:.4f}"
# )
# fig, ax = plt.subplots(figsize = (5,7))
# ax.scatter(x,y)
# ax.set_title(f"{energy}")
# # Generate fitted line only over the measured range
# x_fit = np.linspace(x.min(), x.max(), 100)
# y_fit = slope * x_fit + intercept
# # # Plot fit first and get its automatically assigned colour
# line, = ax.plot(
# x_fit,
# y_fit,
# label=energy,
# )
# plt.show()
# return results
# conv_factor = 12365.75 / (2 * 3.13481)
# df["costheta"] = np.cos(conv_factor / df["energy"])
# perp = df[["costheta", "bsccam_x"]]
# return (
# perp.to_numpy(),
# "costheta",
# "bsccam_x",
# )
def roll_analysis():
@@ -528,4 +641,5 @@ def gap_analysis(save=False):
print("}")
return results
return results
+8 -24
View File
@@ -2,6 +2,7 @@
from collections import defaultdict, deque
from enum import Enum
# from pxii_bec.scripts import beamline_context as bl
# from enums import BeamlineState, TemperatureMode
@@ -74,7 +75,6 @@ class StateChangePlanner:
state_name = BeamlineState(state_name)
target = self._merged_state(state_name, modifier)
plan = self._plan(target)
print("PLAN:")
@@ -102,7 +102,7 @@ class StateChangePlanner:
def available_states(self):
"""Return a list of available states"""
return list(self.states.keys())
def state_devices(self):
"""Return the set of devices that participate in
beamline state definitions"""
@@ -111,14 +111,13 @@ class StateChangePlanner:
for state in self.states.values():
devices.update(state.keys())
return sorted(devices)
def get_positions(self):
"""Return current positions of devices that are used
in state transitions"""
return {name: self.devices[name].pos
for name in self.state_devices()}
return {name: self.devices[name].pos for name in self.state_devices()}
def print_positions(self):
"""Return current state of all devices"""
@@ -131,7 +130,7 @@ class StateChangePlanner:
"""Return a dict of {device: (before, after)} pairs for devices that changed state"""
after = self.get_positions()
return {k: (before[k], after[k]) for k in before if before[k] != after[k]}
def __get_closest_states(self):
"""
Return states ordered by number of mismatches.
@@ -148,21 +147,9 @@ class StateChangePlanner:
for dev, expected in config.items():
if not self.devices[dev].is_at(expected):
mismatches.append(
(
dev,
self.devices[dev].pos,
expected,
)
)
mismatches.append((dev, self.devices[dev].pos, expected))
results.append(
(
state.name,
len(mismatches),
mismatches,
)
)
results.append((state.name, len(mismatches), mismatches))
return sorted(results, key=lambda x: x[1])
@@ -173,10 +160,7 @@ class StateChangePlanner:
print(f"\n{state}: {count} mismatch(es)")
for dev, actual, expected in mismatches:
print(
f" {dev:15s} "
f"{actual:10s} -> {expected}"
)
print(f" {dev:15s} " f"{actual:10s} -> {expected}")
def current_state(self):
"""Return all current matching BeamlineState and TemperatureMode combinations,
+12 -12
View File
@@ -1,19 +1,19 @@
def beampos_with_en(planner):
deltat = 2
record_beampos_until("23:00",planner,interval_minutes=deltat)
deltat = 2
record_beampos_until("23:00", planner, interval_minutes=deltat)
bl_energy(6000)
record_beampos_until("00:00",planner,interval_minutes=deltat)
bl_energy(8000)
record_beampos_until("01:00",planner,interval_minutes=deltat)
bl_energy(10000)
record_beampos_until("02:00",planner,interval_minutes=deltat)
record_beampos_until("00:00", planner, interval_minutes=deltat)
bl_energy(8000)
record_beampos_until("01:00", planner, interval_minutes=deltat)
bl_energy(10000)
record_beampos_until("02:00", planner, interval_minutes=deltat)
bl_energy(12000)
record_beampos_until("03:00",planner,interval_minutes=deltat)
record_beampos_until("03:00", planner, interval_minutes=deltat)
bl_energy(12400)
record_beampos_until("04:00",planner,interval_minutes=deltat)
record_beampos_until("04:00", planner, interval_minutes=deltat)
bl_energy(14000)
record_beampos_until("05:00",planner,interval_minutes=deltat)
record_beampos_until("05:00", planner, interval_minutes=deltat)
bl_energy(16000)
record_beampos_until("06:00",planner,interval_minutes=deltat)
record_beampos_until("06:00", planner, interval_minutes=deltat)
bl_energy(18000)
record_beampos_until("07:00",planner,interval_minutes=deltat)
record_beampos_until("07:00", planner, interval_minutes=deltat)
+2 -15
View File
@@ -63,14 +63,7 @@ def build_devices(yaml_file):
return state_devices
def update_position(
device,
position,
value,
axis=None,
force=False,
max_delta=0.5,
):
def update_position(device, position, value, axis=None, force=False, max_delta=0.5):
"""
Update a single saved position in memory.
@@ -189,13 +182,7 @@ def update_positions(updates):
return save_and_reload()
def save_current_position(
device,
position,
axis=None,
force=False,
max_delta=0.5,
):
def save_current_position(device, position, axis=None, force=False, max_delta=0.5):
"""
Save the current motor position as a named position.
"""
+14 -22
View File
@@ -2,6 +2,7 @@
from dataclasses import dataclass
import numpy as np
# from pxii_parameters import (EnergyDefaults, CamConversion)
@@ -60,9 +61,7 @@ def convert_to_degrees(angle_mrad: float) -> float:
return np.rad2deg(angle_mrad / 1000)
def create_conversion_result(
energy_ev: float, wavelength: float, bragg_angle_mrad: float
) -> dict:
def create_conversion_result(energy_ev: float, wavelength: float, bragg_angle_mrad: float) -> dict:
"""
Creates a dictionary containing converted values of energy and angles.
@@ -226,9 +225,7 @@ def validate_energy(energy_ev):
return energy_ev
def convert_from_bragg(
bragg_angle_mrad: float, temp=120, print_result: bool = False
) -> dict:
def convert_from_bragg(bragg_angle_mrad: float, temp=120, print_result: bool = False) -> dict:
"""
Convert the Bragg angle to wavelength and energy, returning the result as a dictionary.
@@ -274,9 +271,7 @@ def convert_from_energy(energy_ev: float, temp=120, print_result: bool = False)
"""
energy_ev = validate_energy(energy_ev)
wavelength = calculate_wavelength_from_energy(energy_ev)
bragg_angle_mrad = float(
calculate_bragg_angle_from_wavelength(wavelength, temp=temp)
)
bragg_angle_mrad = float(calculate_bragg_angle_from_wavelength(wavelength, temp=temp))
result = create_conversion_result(energy_ev, wavelength, bragg_angle_mrad)
if print_result:
print_conversion_result(result)
@@ -284,9 +279,7 @@ def convert_from_energy(energy_ev: float, temp=120, print_result: bool = False)
def convert_from_wavelength(
wavelength: float,
temp: float = 120,
print_result: bool = False,
wavelength: float, temp: float = 120, print_result: bool = False
) -> dict:
"""
Convert a given wavelength value into corresponding energy, Bragg angle, and
@@ -312,19 +305,14 @@ def convert_from_wavelength(
outside of the permitted range, returns None.
"""
energy_ev = calculate_energy_from_wavelength(wavelength)
bragg_angle_mrad = float(
calculate_bragg_angle_from_wavelength(wavelength, temp=temp)
)
bragg_angle_mrad = float(calculate_bragg_angle_from_wavelength(wavelength, temp=temp))
result = create_conversion_result(energy_ev, wavelength, bragg_angle_mrad)
if print_result:
print_conversion_result(result)
return result
def calc_perp_position(
energy_ev: float,
print_result: bool = False,
) -> float:
def calc_perp_position(energy_ev: float, beam_offset = None, print_result: bool = False) -> float:
"""
Calculate the perpendicular motor position based on provided energy in electron-volts (eV).
@@ -344,8 +332,12 @@ def calc_perp_position(
None
"""
result = convert_from_energy(energy_ev, print_result=False)
if beam_offset is None:
beam_offset = EnergyDefaults.beam_offset
bragg_angle_rad = result["bragg_angle_mrad"] / 1000
perp_offset = float(EnergyDefaults.beam_offset / (2 * np.cos(bragg_angle_rad))) - 3
perp_offset = float(beam_offset / (2 * np.cos(bragg_angle_rad))) - 3
if print_result:
print(f"Perp = {perp_offset: .4f}")
return perp_offset
@@ -355,7 +347,7 @@ def calc_scam_microns(pixels, zoom=1000):
"""Convert pixels to microns for the sample camera"""
return float(pixels / (CamConversion.a * np.exp(CamConversion.b * zoom)))
def calc_sscam_microns(pixels):
"""Convert pixels to microns for the ss camera"""
return pixels*20
return pixels * 20
+166 -65
View File
@@ -8,35 +8,172 @@ import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pxii_bec.scripts import beamline_context as bl
from pxii_bec.macros.beamline_planner import BeamlineState
# def compute_norm(n_readings=5):
# """Average normalized BPM X/Y from repeated sets of four channels."""
# xn_values = []
# yn_values = []
def compute_norm_ss(n_readings=5):
"""Average normalized BPM X/Y from repeated sets of four channels."""
# for _ in range(n_readings):
# bpm1 = dev.bcu_bpm1.read()["bcu_bpm1"]["value"]
# bpm2 = dev.bcu_bpm2.read()["bcu_bpm2"]["value"]
# bpm3 = dev.bcu_bpm3.read()["bcu_bpm3"]["value"]
# bpm4 = dev.bcu_bpm4.read()["bcu_bpm4"]["value"]
xn_values = []
yn_values = []
for _ in range(n_readings):
bpm1 = dev.ss_bpm1.read()["ss_bpm1"]["value"]
bpm2 = dev.ss_bpm2.read()["ss_bpm2"]["value"]
bpm3 = dev.ss_bpm3.read()["ss_bpm3"]["value"]
bpm4 = dev.ss_bpm4.read()["ss_bpm4"]["value"]
# total = bpm1 + bpm2 + bpm3 + bpm4
total = bpm1 + bpm2 + bpm3 + bpm4
# if total == 0:
# continue
if total == 0:
continue
# xn = ((bpm1 + bpm2) - (bpm3 + bpm4)) / total
# yn = ((bpm1 + bpm3) - (bpm2 + bpm4)) / total
xn = ((bpm1 + bpm2) - (bpm3 + bpm4)) / total
yn = ((bpm1 + bpm3) - (bpm2 + bpm4)) / total
# xn_values.append(xn)
# yn_values.append(yn)
xn_values.append(xn)
yn_values.append(yn)
# time.sleep(0.1)
time.sleep(0.1)
# return float(np.mean(xn_values)), float(np.mean(yn_values))
return {
"ss_Xnorm": float(np.mean(xn_values)),
"ss_Ynorm": float(np.mean(yn_values)),
}
def compute_norm_lu(n_readings=5):
"""Average normalized BPM X/Y from repeated sets of four channels."""
xn_values = []
yn_values = []
for _ in range(n_readings):
bpm1 = dev.lu_bpm1.read()["lu_bpm1"]["value"]
bpm2 = dev.lu_bpm2.read()["lu_bpm2"]["value"]
bpm3 = dev.lu_bpm3.read()["lu_bpm3"]["value"]
bpm4 = dev.lu_bpm4.read()["lu_bpm4"]["value"]
total = bpm1 + bpm2 + bpm3 + bpm4
if total == 0:
continue
xn = ((bpm1 + bpm2) - (bpm3 + bpm4)) / total
yn = ((bpm1 + bpm3) - (bpm2 + bpm4)) / total
xn_values.append(xn)
yn_values.append(yn)
time.sleep(0.1)
return {
"lu_Xnorm": float(np.mean(xn_values)),
"lu_Ynorm": float(np.mean(yn_values)),
}
def run_calibration_ss():
"""Scan bpm in x and y and record normalised x and y positions"""
centred_x = 2.8625
centred_y = -1.3874
now = datetime.now()
fnow = filenow()
print(f"moving bpm to {centred_x}, {centred_y}")
umv(dev.ss_bpm_y, centred_y)
umv(dev.ss_bpm_x, centred_x)
# # # Calibrate in X
# umv(dev.bsf_sl_xsize, 0.3)
# umv(dev.bsf_sl_xsize, 0.4)
# filename = bl.env.lut_dir / "bpm_calib" / f"ss_bpm_x_{fnow}.csv"
# xn_data = []
# x_positions = np.linspace(centred_x - 0.3, centred_x + 0.3, 51)
# with open(filename, "w", encoding="utf-8") as f:
# f.write(f"Xpos,Xnorm,BPM1,BPM2,BPM3,BPM4\n")
# for x in x_positions:
# umv(dev.ss_bpm_x, x)
# print(f"Moving BPM X to {x} mm")
# time.sleep(0.2)
# xn, yn = compute_norm_ss()
# xn_data.append(xn)
# with open(filename, "a", encoding="utf-8") as f:
# f.write(f"{x},{xn}\n")
# # Calibrate in Y
umv(dev.ss_bpm_x, centred_x)
umv(dev.bsf_sl_xsize, 0.3)
umv(dev.bsf_sl_ysize, 0.4)
filename = bl.env.lut_dir / "bpm_calib" / f"ss_bpm_y_{fnow}.csv"
y_positions = np.linspace(centred_y - 0.04, centred_y + 0.04, 41)
yn_data = []
with open(filename, "w", encoding="utf-8") as f:
f.write(f"Ypos,Ynorm,BPM1,BPM2,BPM3,BPM4\n")
for y in y_positions:
umv(dev.ss_bpm_y, y)
print(f"Moving BPM Y to {y} mm")
time.sleep(0.2)
xn, yn = compute_norm_ss()
yn_data.append(yn)
with open(filename, "a", encoding="utf-8") as f:
f.write(f"{y},{yn}\n")
umv(dev.ss_bpm_x, centred_x)
umv(dev.ss_bpm_y, centred_y)
umv(dev.bsf_sl_ysize, 3.0)
umv(dev.bsf_sl_xsize, 3.0)
def run_calibration_lu():
"""Scan bpm in x and y and record normalised x and y positions"""
centred_x = 2.1816
centred_y = 3.0175
now = datetime.now()
fnow = filenow()
print(f"moving bpm to {centred_x}, {centred_y}")
umv(dev.lu_bpm_y, centred_y)
umv(dev.lu_bpm_x, centred_x)
# # Calibrate in X
# umv(dev.bsf_sl_xsize, 0.3)
# umv(dev.bsf_sl_xsize, 0.4)
# filename = bl.env.lut_dir / "bpm_calib" / f"lu_bpm_x_{fnow}.csv"
# xn_data = []
# x_positions = np.linspace(centred_x - 0.3, centred_x + 0.3, 51)
# with open(filename, "w", encoding="utf-8") as f:
# f.write(f"Xpos,Xnorm\n")
# for x in x_positions:
# umv(dev.lu_bpm_x, x)
# print(f"Moving BPM X to {x} mm")
# time.sleep(0.2)
# xn, yn = compute_norm_lu()
# xn_data.append(xn)
# with open(filename, "a", encoding="utf-8") as f:
# f.write(f"{x},{xn}\n")
# # Calibrate in Y
umv(dev.lu_bpm_x, centred_x)
umv(dev.bsf_sl_xsize, 0.3)
umv(dev.bsf_sl_ysize, 0.4)
filename = bl.env.lut_dir / "bpm_calib" / f"lu_bpm_y_{fnow}.csv"
y_positions = np.linspace(centred_y - 0.04, centred_y + 0.04, 41)
yn_data = []
with open(filename, "w", encoding="utf-8") as f:
f.write(f"Ypos,Ynorm,BPM1,BPM2,BPM3,BPM4\n")
for y in y_positions:
umv(dev.lu_bpm_y, y)
print(f"Moving BPM Y to {y} mm")
time.sleep(0.2)
xn, yn = compute_norm_lu()
yn_data.append(yn)
with open(filename, "a", encoding="utf-8") as f:
f.write(f"{y},{yn}\n")
umv(dev.lu_bpm_x, centred_x)
umv(dev.lu_bpm_y, centred_y)
umv(dev.bsf_sl_ysize, 3.0)
umv(dev.bsf_sl_xsize, 3.0)
def run_calibration(env):
"""Scan bpm in x and y and record normalised x and y positions"""
centred_x = 0.444
@@ -86,27 +223,20 @@ def run_calibration(env):
umv(dev.bcu_bpm_y, centred_y)
umv(dev.ss_sl_ysize, 3.0)
def read_bpm_calibration_data(
env,
x_y,
rundate,
bpm_name="bcu_bpm",
):
def read_bpm_calibration_data(env, x_y, rundate, bpm_name="bcu_bpm"):
"""Read BPM calibration data from CSV."""
filename = env.lut_dir / f"bpm_calib/{bpm_name}_{x_y}_{rundate}.csv"
data = np.loadtxt(
filename,
delimiter=",",
skiprows=1,
)
data = np.loadtxt(filename, delimiter=",", skiprows=1)
position = data[:, 0]
bpm_norm = data[:, 1]
return position, bpm_norm
# def fit_bpm_linear(env, filename, x_y, plot=True):
# """
# Fit the linear region of a BPM calibration scan.
@@ -200,31 +330,17 @@ def read_bpm_calibration_data(
# plt.tight_layout()
# plt.show()
# return result
# return result
def polynomial_calibration(
env,
x_y,
rundate,
bpm_name="bcu_bpm",
degree=5,
signal_limit=0.9,
plot=True,
env, x_y, rundate, bpm_name="bcu_bpm", degree=5, signal_limit=0.9, plot=True
):
# BPM centre during calibration run
bpm_centre = {"x": 0.441,"y": -1.5405,}
bpm_centre = {"x": 0.441, "y": -1.5405}
xdata, ydata = read_bpm_calibration_data(
env,
x_y,
rundate=rundate,
bpm_name=bpm_name,
)
xdata, ydata = read_bpm_calibration_data(env, x_y, rundate=rundate, bpm_name=bpm_name)
# Keep useful BPM range
mask = np.abs(ydata) < signal_limit
@@ -262,26 +378,13 @@ def polynomial_calibration(
print(f" crosshair_bpm_position = None")
if plot:
signal_fit = np.linspace(
signal.min(),
signal.max(),
500,
)
signal_fit = np.linspace(signal.min(), signal.max(), 500)
position_fit = np.polyval(coeffs, signal_fit)
plt.figure(figsize=(7, 5))
plt.scatter(
ydata,
xdata,
alpha=0.4,
label="Calibration data",
)
plt.plot(
signal_fit,
position_fit,
label=f"{degree}th-order polynomial",
)
plt.scatter(ydata, xdata, alpha=0.4, label="Calibration data")
plt.plot(signal_fit, position_fit, label=f"{degree}th-order polynomial")
plt.xlabel(f"BPM {x_y} normalized signal")
plt.ylabel(f"BPM {x_y} position (mm)")
@@ -292,5 +395,3 @@ def polynomial_calibration(
plt.show()
return coeffs
-1
View File
@@ -5,7 +5,6 @@ from datetime import datetime
from bec_lib.device import Signal, Positioner
# -------------------------------------------------------------------
# Status Enum
# -------------------------------------------------------------------
+81 -83
View File
@@ -1,136 +1,134 @@
import numpy as np
import math, time
import numpy as np
import math, time
import matplotlib.pyplot as plt
import scipy
########################################################
### scan FE slits and check BPMs before and after mirror
### scan FE slits and check BPMs before and after mirror
########################################################
def gaussfit(x,y,p):
# define a gaussian fitting function where
# p[0] = amplitude
# p[1] = mean
# p[2] = sigma
# p[3] = const offset
fitfct = lambda p, x0: p[0]*np.exp(-(x0-p[1])**2/(2.0*p[2]**2))+p[3]
#fitfct = lambda p, x0: p[0]*np.exp(-(x0-p[1])**2/(2.0*p[2]**2))
errfct = lambda p, x0,y0: fitfct(p,x0)-y0
def gaussfit(x, y, p):
# define a gaussian fitting function where
# p[0] = amplitude
# p[1] = mean
# p[2] = sigma
# p[3] = const offset
fitfct = lambda p, x0: p[0] * np.exp(-((x0 - p[1]) ** 2) / (2.0 * p[2] ** 2)) + p[3]
# fitfct = lambda p, x0: p[0]*np.exp(-(x0-p[1])**2/(2.0*p[2]**2))
errfct = lambda p, x0, y0: fitfct(p, x0) - y0
# guess fit parameters
ind0 = np.where(y==max(y))[0]
p0=np.c_[max(y), x[ind0], np.std(y), np.mean(y[0:5])]
#p0=scipy.c_[max(y), np.where(y==max(y))[0], np.std(y)]
# array generation [[]], and taking only one dimens
ind0 = np.where(y == max(y))[0]
p0 = np.c_[max(y), x[ind0], np.std(y), np.mean(y[0:5])]
# p0=scipy.c_[max(y), np.where(y==max(y))[0], np.std(y)]
# array generation [[]], and taking only one dimens
# fit a gaussian to the correlation function
#print('p0 = ' , p0)
p1, success = scipy.optimize.leastsq(errfct, p0.copy()[0],
args=(x,y))
# print('p0 = ' , p0)
p1, success = scipy.optimize.leastsq(errfct, p0.copy()[0], args=(x, y))
#plt.figure()
bestfit=fitfct(p1,x)
#print('************************', x,y)
plt.plot(x,y,'r*')
plt.plot(x,bestfit,'r-')
# plt.figure()
bestfit = fitfct(p1, x)
# print('************************', x,y)
plt.plot(x, y, "r*")
plt.plot(x, bestfit, "r-")
# different fit fct
#popt, pcov = curve_fit(fitfct, x, y)
#newfit=fitfct(popt,x)
#plt.plot(x,newfit,'g+')
# popt, pcov = curve_fit(fitfct, x, y)
# newfit=fitfct(popt,x)
# plt.plot(x,newfit,'g+')
plt.show()
return bestfit, p1
def scan_fe_sl(dir = "y"):
if dir in ["y","v"]:
sdir ="vertical"
def scan_fe_sl(dir="y"):
if dir in ["y", "v"]:
sdir = "vertical"
fe_size0 = dev.fe_sl_ysize.user_readback.get()
print('Closing vertical FE slits to 0.1')
print("Closing vertical FE slits to 0.1")
umv(dev.fe_sl_ysize, 0.1)
s = scans.line_scan(dev.fe_sl_ycen,-1,1, exp_time=02., steps=21, relative=True)
s = scans.line_scan(dev.fe_sl_ycen, -1, 1, exp_time=02.0, steps=21, relative=True)
time.sleep(0.1)
umv(dev.fe_sl_ysize, fe_size0)
print(f'Opening {sdir} FE slits to {fe_size0}')
if dir in ["x","h"]:
sdir ="horizontal"
print(f"Opening {sdir} FE slits to {fe_size0}")
if dir in ["x", "h"]:
sdir = "horizontal"
fe_size0 = dev.fe_sl_xsize.user_readback.get()
print('Closing horizontal FE slits to 0.1')
print("Closing horizontal FE slits to 0.1")
umv(dev.fe_sl_xsize, 0.1)
s = scans.line_scan(dev.fe_sl_xcen,-1,1, exp_time=02., steps=21, relative=True)
s = scans.line_scan(dev.fe_sl_xcen, -1, 1, exp_time=02.0, steps=21, relative=True)
time.sleep(0.1)
umv(dev.fe_sl_xsize, fe_size0)
print(f'Opening {sdir} FE slits to {fe_size0}')
print(f"Opening {sdir} FE slits to {fe_size0}")
else:
print('no valid direction, doing nothing')
def mirrh(dir='y'):
#dat_ss = read_data_csv("/home/anuschka/SS_pitch2p94.csv")
#dat_bcu = read_data_csv("/home/anuschka/BCU_pitch2p94.csv")
print("no valid direction, doing nothing")
def mirrh(dir="y"):
# dat_ss = read_data_csv("/home/anuschka/SS_pitch2p94.csv")
# dat_bcu = read_data_csv("/home/anuschka/BCU_pitch2p94.csv")
scan_fe_sl(dir=dir)
ind = -1
if dir in ["x","h"]:
slitmot = 'fe_sl_xcen'
if dir in ["y","v"]:
slitmot = 'fe_sl_ycen'
dat_ss = save_data(ind, slitmot, 'ss_bpmsum', isave = 0)
dat_bcu = save_data(ind, slitmot, 'bcu_bpmsum', isave = 0)
if dir in ["x", "h"]:
slitmot = "fe_sl_xcen"
if dir in ["y", "v"]:
slitmot = "fe_sl_ycen"
data_xs = dat_ss[0] # csv would be: dat_ss[:, 0]
dat_ss = save_data(ind, slitmot, "ss_bpmsum", isave=0)
dat_bcu = save_data(ind, slitmot, "bcu_bpmsum", isave=0)
data_xs = dat_ss[0] # csv would be: dat_ss[:, 0]
data_ys = dat_ss[1]
data_xb = dat_bcu[0]
data_yb = dat_bcu[1]
#plt.figure()
# plt.figure()
#plt.plot(data_xs, data_ys, "*")
#plt.plot(data_xb, data_yb, "+")
# plt.plot(data_xs, data_ys, "*")
# plt.plot(data_xb, data_yb, "+")
data_ys_norm = data_ys/max(data_ys) # looks better than data_ys/sum(data_ys)
data_yb_norm = data_yb/max(data_yb)
data_ys_norm = data_ys / max(data_ys) # looks better than data_ys/sum(data_ys)
data_yb_norm = data_yb / max(data_yb)
plt.figure()
plt.plot(data_xs, data_ys_norm, "*")
plt.plot(data_xb, data_yb_norm, "+")
y= data_ys_norm
xm = np.where(y==max(y))[0]
y = data_ys_norm
xm = np.where(y == max(y))[0]
xmi = data_xs[xm]
#print('xm, xmi', xm, xmi)
# print('xm, xmi', xm, xmi)
pf1 = [1, xmi , np.std(data_ys_norm), np.mean(y[0:5])] # bg = 0
fit_s, ps = gaussfit(data_xs,data_ys_norm, pf1)
pf1 = [1, xmi, np.std(data_ys_norm), np.mean(y[0:5])] # bg = 0
fit_s, ps = gaussfit(data_xs, data_ys_norm, pf1)
y= data_yb_norm
xm = np.where(y==max(y))[0]
y = data_yb_norm
xm = np.where(y == max(y))[0]
xmi = data_xb[xm]
#print('xm, xmi', xm, xmi)
# print('xm, xmi', xm, xmi)
pf2 = [1, xmi, np.std(data_yb_norm), np.mean(y[0:5])] # bg = -11
fit_b, pb = gaussfit(data_xb,data_yb_norm, pf2)
fit_b, pb = gaussfit(data_xb, data_yb_norm, pf2)
plt.figure()
plt.plot(data_xs, fit_s-ps[3], "*")
plt.plot(data_xs, fit_s-ps[3])
plt.plot(data_xb, fit_b-pb[3], "+")
plt.plot(data_xb, fit_b-pb[3])
plt.plot(data_xs, fit_s - ps[3], "*")
plt.plot(data_xs, fit_s - ps[3])
plt.plot(data_xb, fit_b - pb[3], "+")
plt.plot(data_xb, fit_b - pb[3])
print('Fit Params of First BPM, SS, ps', ps)
print('Fit Params of Second BPM, BCU, pb', pb)
print("Fit Params of First BPM, SS, ps", ps)
print("Fit Params of Second BPM, BCU, pb", pb)
print()
if abs(ps[1]-pb[1]) > 0.05:
print('***** WARNING ******, mirror height not ok')
if abs(ps[2]-pb[2]) > 0.05:
print('***** WARNING ******, mirror not catching full beam')
if abs(ps[1] - pb[1]) > 0.05:
print("***** WARNING ******, mirror height not ok")
if abs(ps[2] - pb[2]) > 0.05:
print("***** WARNING ******, mirror not catching full beam")
+29
View File
@@ -0,0 +1,29 @@
def create_daily_setup():
dock = bec.gui.new("DailySetup")
# plot1 = dock.new(widget="Waveform", object_name= "Plot_1")
# plot2 = dock.new(widget="Waveform", object_name= "Plot_2", relative_to="Plot_1", where="bottom")
# plot3 = dock.new(widget="Waveform", object_name= "Plot_3", relative_to = "Plot_2", where="bottom")
# plot4 = dock.new(widget="Waveform", object_name= "Plot_4", relative_to="Plot_1", where="right")
# plot5 = dock.new(widget="Waveform", object_name= "Plot_5", relative_to="Plot_2", where="right")
# plot6 = dock.new(widget="Waveform", object_name= "Plot_6", relative_to="Plot_3", where="right")
# log = dock.new(widget="TextBox", object_name= "Info", relative_to="Plot_1",where="left")
# progress = dock.new(widget="TextBox", object_name= "Progress", relative_to="Info", where="left")
progress = dock.new(widget="TextBox", object_name= "Progress")
log = dock.new(widget="TextBox", object_name= "Info", relative_to="Progress", where ="right")
plot1 = dock.new(widget="Waveform", object_name= "Plot_1", relative_to="Info", where ="right")
plot2 = dock.new(widget="Waveform", object_name= "Plot_2", relative_to="Plot_1", where="right")
plot3 = dock.new(widget="Waveform", object_name= "Plot_3", relative_to = "Plot_1", where="bottom")
plot4 = dock.new(widget="Waveform", object_name= "Plot_4", relative_to="Plot_2", where="bottom")
plot5 = dock.new(widget="Waveform", object_name= "Plot_5", relative_to = "Plot_3", where="bottom")
plot6 = dock.new(widget="Waveform", object_name= "Plot_6", relative_to="Plot_4", where="bottom")
dock.set_layout_ratios(
horizontal=[1,2,1.2,1.2],
vertical=[1,1,1],
)
progress.set_plain_text("")
log.set_plain_text("")
dock.save_profile()
+922 -459
View File
File diff suppressed because it is too large. Load diff
+3 -3
View File
@@ -1,9 +1,9 @@
"""
This module manages the initialization of devices."""
#from guards import attach_guards
#from policies import attach_policies
#from build_devices import build_devices
# from guards import attach_guards
# from policies import attach_policies
# from build_devices import build_devices
class DeviceManager:
+31 -30
View File
@@ -11,7 +11,7 @@ def en_plothist(hindex: int, signal_name: str, isave=1):
s=scans.line_scan(dev.dcm_bragg, 178.5, 179.5, steps=240, relative=False
data_x, data_y = en_plothist(-1,"bcu_bpmsum")
scanned with
scanned with
scans.line_scan(dev.aerotech.y,-0.05,0.05, steps=101, settling_time=0.5, relative=True)
"""
@@ -21,54 +21,56 @@ def en_plothist(hindex: int, signal_name: str, isave=1):
if hindex < 0:
h = bec.history[hindex]
print('by scan number')
print("by scan number")
else:
h = bec.history.get_by_scan_number(hindex)
print('by scan number')
print("by scan number")
md = h.metadata["bec"]
sno = md['dataset_number']
sno = md["dataset_number"]
print(f"number of scan = {sno}")
scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan
#scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan
# data = h.devices[device_name][signal].read()["value"]
# data_x = h.devices.dcm_pitch.dcm_pitch.read()["value"]
# data_y = h.devices.lu_bpmsum.lu_bpmsum.read()["value"]
# data_x = h.devices[device_name][device_name].read()["value"]
# that works ...
#print(list(md['args'].keys()))
val = list(md['args'].keys())
#val[0] = 'aerotech.x'
devicenam = val[0]
print('device = ', devicenam)
# that works ...
# print(list(md['args'].keys()))
## val = list(md["args"].keys()) no longer !!!!! to be checked !!!
# val[0] = 'aerotech.x'
##devicenam = val[0]
##print("device = ", devicenam)
devicenam = md["scan_report_devices"][0].decode()
data_xd = md["positions"] # last scan knows which device ... however, double array
data_x = data_xd.flatten()
print("dx = ", data_x)
#data_y = h.devices[signal_name][signal_name].read()["value"]
# data_y = h.devices[signal_name][signal_name].read()["value"]
data_y1 = h.devices["bcu_bpmsum"]["bcu_bpmsum"].read()["value"]
data_y2 = h.devices["ss_bpmsum"]["ss_bpmsum"].read()["value"]
#print("dy = ", data_y)
data_y = data_y1/data_y2
rev = 0
#if val[0][9] == 'x':
# print("dy = ", data_y)
data_y = data_y1 / data_y2
rev = 0
# if val[0][9] == 'x':
# rev = 1
smoothplotgrad(data_x, data_y, reverse = rev)
# g, xm = justfit(data_x, data_y, model=model, ibg=ibg)
smoothplotgrad(data_x, data_y, reverse=rev)
# g, xm = justfit(data_x, data_y, model=model, ibg=ibg)
# plt.ion()
# plt.figure()
# plt.plot(data_x, data_y, "*")
# plt.plot(data_x, g.best_fit)
# plt.xlabel(scanvar)
# plt.ylabel(signal_name)
# plt.show()
# plt.ion()
# plt.figure()
# plt.plot(data_x, data_y, "*")
# plt.plot(data_x, g.best_fit)
# plt.xlabel(scanvar)
# plt.ylabel(signal_name)
# plt.show()
# gcen = g.pars["center"].value
# gcen = g.pars["center"].value
if isave:
if isave:
ans = "n"
ans = input("Store data in csv file? y/n ")
if ans == "y":
@@ -79,5 +81,4 @@ def en_plothist(hindex: int, signal_name: str, isave=1):
with open(filename, "w") as f:
np.savetxt(f, combined, delimiter=",", fmt="%.9e")
return data_x, data_y
+11 -12
View File
@@ -3,8 +3,9 @@
# if you know the attribute you are searching for:
def check_attr(obj, attr):
# att as string
# att as string
attr = getattr(obj, attr)
@@ -13,7 +14,9 @@ def check_attr(obj, attr):
print("values:", attr.values())
print("items:", attr.items())
# Automatically Detect All Dictionary Attributes:
# Automatically Detect All Dictionary Attributes:
def list_dict_attr_single(obj):
for attr_name, value in vars(obj).items():
@@ -22,8 +25,9 @@ def list_dict_attr_single(obj):
print(" Keys:", list(value.keys()))
print(" Items:")
for key, val in value.items():
print(f" {key} -> {val}")
print(f" {key} -> {val}")
# Also Handle Nested Dictionaries:
@@ -34,16 +38,11 @@ def list_dict_attr(obj):
print(" " * indent + str(key) + ":", end=" ")
if isinstance(value, dict):
print()
print_dict(value, indent+1)
print_dict(value, indent + 1)
else:
print(value)
print(value)
for attr_name, value in vars(obj).items():
if isinstance(value, dict):
print(f"\nDictionary attribute: {attr_name}")
print_dict(value)
+76 -75
View File
@@ -1,131 +1,132 @@
#!/usr/bin/env python
# ### PYTHON pro to determine the flux from the current
# ### on a Si diode
# ### A Pauluhn, Dec 2012
# ### from IDL pro flux_diode.pro (2010)
# ### PYTHON pro to determine the flux from the current
# ### on a Si diode
# ### A Pauluhn, Dec 2012
# ### from IDL pro flux_diode.pro (2010)
## NOTE: for TRANSFER DIODE:
## switch off ANY ambient light
## note that: 10 um Si, and 0 um Al for transfer diode Hamamatsu
## switch off ANY ambient light
## note that: 10 um Si, and 0 um Al for transfer diode Hamamatsu
# ### import the standard
import os, sys, string, time
# ### import the standard
import os, sys, string, time
import re
import numpy as np
import math
def fluxcalc(curr, en, t_air, t_si, t_al):
#------ parameters:
rsi = 2.33 # g/cm^3 density of Si
ral = 2.699 # g/cm^3 density of Al
rair = 1.205e-3 # g/cm^3 density of air
# ------ parameters:
rsi = 2.33 # g/cm^3 density of Si
ral = 2.699 # g/cm^3 density of Al
rair = 1.205e-3 # g/cm^3 density of air
eps_si = 3.62 # eV , energy req for charge separation in Si (el/hole pair)
e = 1.602e-19 # As , elem charge
eps_si = 3.62 # eV , energy req for charge separation in Si (el/hole pair)
e = 1.602e-19 # As , elem charge
t_si = 0.0012 # thickness of diode in cm (==12 micrometres) ; [*10000]
t_al = 0.002 # thickness of diode in cm (==20 micrometres)
t_al = 0.002 # thickness of diode in cm (==20 micrometres)
#--------- calc----------------------------------------------------
#energy deposit in Silicon
#ratio of photoelectric cross section to density for Silicon
#alog10(A_Si)= 4.158 - 2.238*alog10(Ep) - 0.477*alog10(Ep)^2 + 0.0789*alog10(Ep)^3
# --------- calc----------------------------------------------------
# energy deposit in Silicon
# ratio of photoelectric cross section to density for Silicon
# alog10(A_Si)= 4.158 - 2.238*alog10(Ep) - 0.477*alog10(Ep)^2 + 0.0789*alog10(Ep)^3
ps = np.poly1d([0.0789, - 0.477, - 2.238, 4.158])
#print ps
# ps.c
# print ps(2.3)
ps = np.poly1d([0.0789, -0.477, -2.238, 4.158])
# print ps
# ps.c
# print ps(2.3)
leval = math.log10(en)
hlp_si = ps(leval)
a_si = np.pow(10, hlp_si)
#efact = np.exp(-A_Si*rsi*t_Si)
#sifact =1 - efact
sifact = - np.expm1(-a_si*rsi*t_si)
#print 'sifact = ', sifact
leval = math.log10(en)
hlp_si = ps(leval)
a_si = np.pow(10, hlp_si)
# efact = np.exp(-A_Si*rsi*t_Si)
# sifact =1 - efact
sifact = -np.expm1(-a_si * rsi * t_si)
# print 'sifact = ', sifact
fl = 1000.*curr * eps_si/1.602/en/sifact *1.e13 # curr expected in A
#print 'fl = ', fl
fl = 1000.0 * curr * eps_si / 1.602 / en / sifact * 1.0e13 # curr expected in A
# print 'fl = ', fl
# Aluminium attenuation
# ratio of photoelectric cross section to density for Aluminium
pa = np.poly1d([0.0638, -0.413, -2.349, 4.106])
#Aluminium attenuation
#ratio of photoelectric cross section to density for Aluminium
pa = np.poly1d([ 0.0638, - 0.413, - 2.349, 4.106])
hlp_al = pa(leval)
a_al = pow(10, hlp_al)
a_al = pow(10, hlp_al)
# attenuation due to aluminium
alfact = np.exp(-a_al*ral*t_al)
#print 'alfact = ', alfact
alfact = np.exp(-a_al * ral * t_al)
# print 'alfact = ', alfact
# Air attenuation
# ratio of photoelectric cross section to density for air
pair = np.poly1d([0.928, - 2.348, - 1.026, 3.153])
pair = np.poly1d([0.928, -2.348, -1.026, 3.153])
hlp_air = pair(leval)
a_air = np.pow(10, hlp_air)
a_air = np.pow(10, hlp_air)
#print('hlp_air, a_air, rair, t_air = ', hlp_air, a_air, rair , t_air)
# print('hlp_air, a_air, rair, t_air = ', hlp_air, a_air, rair , t_air)
# attenuation due to air
airfact = np.exp(-a_air*rair*t_air/10.)
#airfact = 1.
# attenuation due to air
airfact = np.exp(-a_air * rair * t_air / 10.0)
# airfact = 1.
#print 'airfact = ', airfact
#print ' t_air = ', t_air
# print 'airfact = ', airfact
# print ' t_air = ', t_air
# total flux from photocurrent
fl = fl/alfact/airfact
#print 'fl = ', fl
# total flux from photocurrent
fl = fl / alfact / airfact
# print 'fl = ', fl
return fl
return fl
#
# Main
#
def flux_x10sa(curr, en, silent = 0):
def flux_x10sa(curr, en, silent=0):
# curr = input('Please enter the current [in A] ')
curr = float(curr)
if not silent:
print('Current = ', curr)
print("Current = ", curr)
# en = input('Please enter the energy [in keV] ')
en = float(en)
if not silent:
print('Energy = ', en)
print("Energy = ", en)
## d_det = input('Please enter the detector distance [in mm] ')
d_det = dev.det_z.user_readback.get()
d_off = 15 ## at X10SA ### input('Please enter the OFFSET of the diode to det surface [in mm] ')
t_air = float(d_det) + float(d_off)
d_off = (
15 ## at X10SA ### input('Please enter the OFFSET of the diode to det surface [in mm] ')
)
t_si = 12 # um ## at X10SA
t_air = float(d_det) + float(d_off)
t_si = 12 # um ## at X10SA
# t_si = input('Please enter the Si thickness of diode [in um] ') # if not silent:
t_si = float(t_si) / 10000. # to cm
t_si = float(t_si) / 10000.0 # to cm
t_al = 20 # um ## at X10SA
# t_al = input('Please enter the Al thickness of diode [in um] ')
t_al = float(t_al) / 10000. # to cm
t_al = 20 # um ## at X10SA
# t_al = input('Please enter the Al thickness of diode [in um] ')
t_al = float(t_al) / 10000.0 # to cm
if not silent:
print('Air path length (CARE ! add det distance and offset of diode) = ', t_air) # include additional diode distance
print(
"Air path length (CARE ! add det distance and offset of diode) = ", t_air
) # include additional diode distance
fl = fluxcalc(curr, en, t_air,t_si, t_al)
fl = fluxcalc(curr, en, t_air, t_si, t_al)
if not silent:
print( " Diode Current = %.6f A " % curr)
print( " Energy = %.4f keV " % en )
print(" Diode Current = %.6f A " % curr)
print(" Energy = %.4f keV " % en)
#print( " Thickness of active Si layer = %.4f\t cm " % t_si) #*10000.
#print( " Thickness of Al layer in front of diode = %.4f\t cm " % t_al) #*10000.
print( " Length of path of air in front of diode = %.4f\t mm " % t_air) #*10000.
# print( " Thickness of active Si layer = %.4f\t cm " % t_si) #*10000.
# print( " Thickness of Al layer in front of diode = %.4f\t cm " % t_al) #*10000.
print(" Length of path of air in front of diode = %.4f\t mm " % t_air) # *10000.
print (" Flux = %6.2e\t ph/s " % fl)
print(" Flux = %6.2e\t ph/s " % fl)
return fl
+22 -8
View File
@@ -256,7 +256,7 @@ def bpm2flux(energy=None, bpmsum=None, transm=None):
"""
calibration_min_energy = 6500
calibration_max_energy = 21000
# calibration_max_energy = 21000
if energy is None:
energy = get_current_energy()
@@ -266,14 +266,14 @@ def bpm2flux(energy=None, bpmsum=None, transm=None):
# bpmsum = read_av(dev.bcu_bpmsum,10) # do not add to traffic jam
if transm is None:
transm = dev.transm.read()["transm"]["value"]
transm = dev.transm.read(cached=True)["transm"]["value"]
if not calibration_min_energy <= energy <= calibration_max_energy:
raise ValueError(
f"Energy {energy:.0f} eV is outside the calibrated range "
f"{calibration_min_energy:.0f}–"
f"{calibration_max_energy:.0f} eV"
)
# if not calibration_min_energy <= energy <= calibration_max_energy:
# raise ValueError(
# f"Energy {energy:.0f} eV is outside the calibrated range "
# f"{calibration_min_energy:.0f}–"
# f"{calibration_max_energy:.0f} eV"
# )
# coeffs = [
# 1.06436277e5,
@@ -296,3 +296,17 @@ def bpm2flux(energy=None, bpmsum=None, transm=None):
)
return float(flux), float(full_flux)
def transmission_for_flux(target_flux):
"""
Calculate the transmission required to give target_flux
at the current energy.
Transmission is returned as a fraction from 0 to 1.
"""
_, full_flux = bpm2flux()
transmission = target_flux / full_flux
return float(np.clip(transmission, 0.0, 1.0))
File diff suppressed because it is too large. Load diff
+25 -27
View File
@@ -10,7 +10,7 @@ def knife_plothist(hindex: int, signal_name: str, isave=1):
Example:
data_x, data_y = knife_plothist(-1,"xidode")
scanned with
scanned with
scans.line_scan(dev.aerotech.y,-0.05,0.05, steps=101, settling_time=0.5, relative=True)
"""
@@ -20,13 +20,13 @@ def knife_plothist(hindex: int, signal_name: str, isave=1):
if hindex < 0:
h = bec.history[hindex]
print('by scan number')
print("by scan number")
else:
h = bec.history.get_by_scan_number(hindex)
print('by scan number')
print("by scan number")
md = h.metadata["bec"]
sno = md['dataset_number']
sno = md["dataset_number"]
print(f"number of scan = {sno}")
scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan
# data = h.devices[device_name][signal].read()["value"]
@@ -34,37 +34,36 @@ def knife_plothist(hindex: int, signal_name: str, isave=1):
# data_y = h.devices.lu_bpmsum.lu_bpmsum.read()["value"]
# data_x = h.devices[device_name][device_name].read()["value"]
# that works ...
#print(list(md['args'].keys()))
val = list(md['args'].keys())
#val[0] = 'aerotech.x'
devicenam = val[0]
print('device = ', devicenam)
# that works ...
# print(list(md['args'].keys()))
val = list(md["args"].keys())
# val[0] = 'aerotech.x'
devicenam = val[0]
print("device = ", devicenam)
data_xd = md["positions"] # last scan knows which device ... however, double array
data_x = data_xd.flatten()
print("dx = ", data_x)
#data_y = h.devices[signal_name][signal_name].read()["value"]
data_y = h.devices["xidiode"]["xidiode"].read()["value"]
# data_y = h.devices[signal_name][signal_name].read()["value"]
data_y = h.devices["xidiode"]["xidiode"].read()["value"]
print("dy = ", data_y)
rev = 0
if val[0][9] == 'x':
rev = 0
if val[0][9] == "x":
rev = 1
smoothplotgrad(data_x, data_y, reverse = rev)
# g, xm = justfit(data_x, data_y, model=model, ibg=ibg)
smoothplotgrad(data_x, data_y, reverse=rev)
# g, xm = justfit(data_x, data_y, model=model, ibg=ibg)
# plt.ion()
# plt.figure()
# plt.plot(data_x, data_y, "*")
# plt.plot(data_x, g.best_fit)
# plt.xlabel(scanvar)
# plt.ylabel(signal_name)
# plt.show()
# plt.ion()
# plt.figure()
# plt.plot(data_x, data_y, "*")
# plt.plot(data_x, g.best_fit)
# plt.xlabel(scanvar)
# plt.ylabel(signal_name)
# plt.show()
# gcen = g.pars["center"].value
# gcen = g.pars["center"].value
if isave:
if isave:
ans = "n"
ans = input("Store data in csv file? y/n ")
if ans == "y":
@@ -75,5 +74,4 @@ def knife_plothist(hindex: int, signal_name: str, isave=1):
with open(filename, "w") as f:
np.savetxt(f, combined, delimiter=",", fmt="%.9e")
return data_x, data_y
@@ -0,0 +1 @@
,mcauley_k,x10sa-vcons-01.psi.ch,08.10.2026 15:28,file:///home/mcauley_k/.config/libreoffice/4;
+1
View File
@@ -0,0 +1 @@
,mcauley_k,x10sa-vcons-01.psi.ch,08.10.2026 13:22,file:///home/mcauley_k/.config/libreoffice/4;
+62
View File
@@ -0,0 +1,62 @@
Energy,Bragg,bcu_bpmsum
10953.10,181.54,470.19
10957.97,181.46,438.23
10962.84,181.38,400.62
10967.71,181.30,356.31
10972.59,181.22,306.11
10977.48,181.13,260.07
10982.37,181.05,220.42
10987.26,180.97,183.83
10992.16,180.89,149.68
10997.06,180.81,118.61
11001.97,180.73,92.83
11006.88,180.64,71.99
11011.79,180.56,55.37
11016.71,180.48,42.38
11021.64,180.40,32.61
11026.57,180.32,25.78
11031.50,180.24,20.77
11036.44,180.16,17.35
11041.38,180.07,14.84
11046.33,179.99,12.82
11051.28,179.91,11.37
11056.23,179.83,10.35
11061.19,179.75,9.51
11066.16,179.67,8.88
11071.13,179.59,8.40
11076.10,179.50,7.76
11081.08,179.42,7.14
11086.06,179.34,6.48
11091.05,179.26,5.77
11096.04,179.18,4.60
11101.04,179.10,2.02
11106.04,179.01,-0.36
11111.05,178.93,-0.44
11116.06,178.85,-0.49
11121.07,178.77,-0.56
11126.09,178.69,-0.61
11131.12,178.61,-0.59
11136.15,178.53,-0.78
11141.18,178.44,-0.69
11146.22,178.36,-0.77
11151.26,178.28,-0.95
11156.31,178.20,-0.89
11161.36,178.12,-0.93
11166.42,178.04,-0.83
11171.48,177.95,-0.80
11176.54,177.87,-0.86
11181.62,177.79,-0.84
11186.69,177.71,-0.84
11191.77,177.63,-0.81
11196.86,177.55,-0.87
11201.95,177.47,-0.81
11207.04,177.38,-0.87
11212.14,177.30,-0.85
11217.24,177.22,-0.87
11222.35,177.14,-0.89
11227.46,177.06,-0.89
11232.58,176.98,-0.98
11237.70,176.89,-1.00
11242.83,176.81,-0.91
11247.96,176.73,-0.94
11253.10,176.65,-0.93
1 Energy Bragg bcu_bpmsum
2 10953.10 181.54 470.19
3 10957.97 181.46 438.23
4 10962.84 181.38 400.62
5 10967.71 181.30 356.31
6 10972.59 181.22 306.11
7 10977.48 181.13 260.07
8 10982.37 181.05 220.42
9 10987.26 180.97 183.83
10 10992.16 180.89 149.68
11 10997.06 180.81 118.61
12 11001.97 180.73 92.83
13 11006.88 180.64 71.99
14 11011.79 180.56 55.37
15 11016.71 180.48 42.38
16 11021.64 180.40 32.61
17 11026.57 180.32 25.78
18 11031.50 180.24 20.77
19 11036.44 180.16 17.35
20 11041.38 180.07 14.84
21 11046.33 179.99 12.82
22 11051.28 179.91 11.37
23 11056.23 179.83 10.35
24 11061.19 179.75 9.51
25 11066.16 179.67 8.88
26 11071.13 179.59 8.40
27 11076.10 179.50 7.76
28 11081.08 179.42 7.14
29 11086.06 179.34 6.48
30 11091.05 179.26 5.77
31 11096.04 179.18 4.60
32 11101.04 179.10 2.02
33 11106.04 179.01 -0.36
34 11111.05 178.93 -0.44
35 11116.06 178.85 -0.49
36 11121.07 178.77 -0.56
37 11126.09 178.69 -0.61
38 11131.12 178.61 -0.59
39 11136.15 178.53 -0.78
40 11141.18 178.44 -0.69
41 11146.22 178.36 -0.77
42 11151.26 178.28 -0.95
43 11156.31 178.20 -0.89
44 11161.36 178.12 -0.93
45 11166.42 178.04 -0.83
46 11171.48 177.95 -0.80
47 11176.54 177.87 -0.86
48 11181.62 177.79 -0.84
49 11186.69 177.71 -0.84
50 11191.77 177.63 -0.81
51 11196.86 177.55 -0.87
52 11201.95 177.47 -0.81
53 11207.04 177.38 -0.87
54 11212.14 177.30 -0.85
55 11217.24 177.22 -0.87
56 11222.35 177.14 -0.89
57 11227.46 177.06 -0.89
58 11232.58 176.98 -0.98
59 11237.70 176.89 -1.00
60 11242.83 176.81 -0.91
61 11247.96 176.73 -0.94
62 11253.10 176.65 -0.93
@@ -0,0 +1,42 @@
Energy,Bragg,ss_bpmsum,bcu_bpmsum,i1,transmission
11003.00,180.71,40337.50,5034.70,-3.155e-08,0.124814
11007.91,180.63,37732.95,4708.18,-2.250e-08,0.124776
11012.83,180.55,34281.68,4266.30,-3.557e-08,0.124448
11017.75,180.46,30615.46,3784.28,-1.949e-08,0.123607
11022.67,180.38,26805.50,3293.21,-2.652e-08,0.122856
11027.60,180.30,22925.68,2777.94,-4.461e-08,0.121172
11032.54,180.22,19156.72,2341.29,-3.356e-08,0.122218
11037.47,180.14,15677.61,1953.26,-3.456e-08,0.124589
11042.42,180.06,12596.19,1561.34,-2.853e-08,0.123954
11047.36,179.98,9918.65,1227.28,-2.351e-08,0.123734
11052.32,179.89,7733.56,966.71,-4.260e-08,0.125003
11057.27,179.81,5977.05,749.14,-2.954e-08,0.125336
11062.23,179.73,4610.51,573.09,-3.155e-08,0.124301
11067.20,179.65,3555.33,435.38,-3.758e-08,0.122458
11072.17,179.57,2781.84,332.98,-3.255e-08,0.119699
11077.14,179.49,2220.76,256.63,-3.758e-08,0.115557
11082.12,179.40,1810.15,200.61,-2.552e-08,0.110823
11087.11,179.32,1511.84,158.34,-3.255e-08,0.104733
11092.09,179.24,1291.08,122.44,-2.753e-08,0.094832
11097.09,179.16,1134.07,85.85,4.825e-06,0.075699
11102.08,179.08,1016.08,26.46,1.285e-06,0.026045
11107.09,179.00,927.11,1.40,-3.959e-08,0.001512
11112.09,178.92,851.57,0.96,-3.657e-08,0.001123
11117.10,178.83,790.39,0.71,-3.657e-08,0.000900
11122.12,178.75,741.22,0.76,-3.858e-08,0.001029
11127.14,178.67,701.79,0.69,-3.858e-08,0.000981
11132.16,178.59,669.60,0.61,-3.858e-08,0.000907
11137.19,178.51,643.20,0.52,-4.763e-08,0.000803
11142.23,178.43,621.27,0.48,-3.758e-08,0.000771
11147.27,178.35,601.54,0.48,-3.959e-08,0.000794
11152.31,178.26,585.43,0.35,-4.763e-08,0.000592
11157.36,178.18,565.35,0.36,-3.255e-08,0.000640
11162.41,178.10,548.24,0.40,-3.858e-08,0.000726
11167.47,178.02,530.61,0.33,-2.250e-08,0.000621
11172.53,177.94,516.14,0.36,-4.562e-08,0.000707
11177.60,177.86,502.31,0.16,-3.054e-08,0.000326
11182.67,177.77,481.54,0.28,-4.763e-08,0.000577
11187.74,177.69,458.78,0.00,-2.853e-08,0.000007
11192.82,177.61,442.42,0.07,-5.064e-08,0.000160
11197.91,177.53,420.53,0.02,-2.753e-08,0.000050
11203.00,177.45,401.79,-0.06,-3.255e-08,-0.000153
1 Energy Bragg ss_bpmsum bcu_bpmsum i1 transmission
2 11003.00 180.71 40337.50 5034.70 -3.155e-08 0.124814
3 11007.91 180.63 37732.95 4708.18 -2.250e-08 0.124776
4 11012.83 180.55 34281.68 4266.30 -3.557e-08 0.124448
5 11017.75 180.46 30615.46 3784.28 -1.949e-08 0.123607
6 11022.67 180.38 26805.50 3293.21 -2.652e-08 0.122856
7 11027.60 180.30 22925.68 2777.94 -4.461e-08 0.121172
8 11032.54 180.22 19156.72 2341.29 -3.356e-08 0.122218
9 11037.47 180.14 15677.61 1953.26 -3.456e-08 0.124589
10 11042.42 180.06 12596.19 1561.34 -2.853e-08 0.123954
11 11047.36 179.98 9918.65 1227.28 -2.351e-08 0.123734
12 11052.32 179.89 7733.56 966.71 -4.260e-08 0.125003
13 11057.27 179.81 5977.05 749.14 -2.954e-08 0.125336
14 11062.23 179.73 4610.51 573.09 -3.155e-08 0.124301
15 11067.20 179.65 3555.33 435.38 -3.758e-08 0.122458
16 11072.17 179.57 2781.84 332.98 -3.255e-08 0.119699
17 11077.14 179.49 2220.76 256.63 -3.758e-08 0.115557
18 11082.12 179.40 1810.15 200.61 -2.552e-08 0.110823
19 11087.11 179.32 1511.84 158.34 -3.255e-08 0.104733
20 11092.09 179.24 1291.08 122.44 -2.753e-08 0.094832
21 11097.09 179.16 1134.07 85.85 4.825e-06 0.075699
22 11102.08 179.08 1016.08 26.46 1.285e-06 0.026045
23 11107.09 179.00 927.11 1.40 -3.959e-08 0.001512
24 11112.09 178.92 851.57 0.96 -3.657e-08 0.001123
25 11117.10 178.83 790.39 0.71 -3.657e-08 0.000900
26 11122.12 178.75 741.22 0.76 -3.858e-08 0.001029
27 11127.14 178.67 701.79 0.69 -3.858e-08 0.000981
28 11132.16 178.59 669.60 0.61 -3.858e-08 0.000907
29 11137.19 178.51 643.20 0.52 -4.763e-08 0.000803
30 11142.23 178.43 621.27 0.48 -3.758e-08 0.000771
31 11147.27 178.35 601.54 0.48 -3.959e-08 0.000794
32 11152.31 178.26 585.43 0.35 -4.763e-08 0.000592
33 11157.36 178.18 565.35 0.36 -3.255e-08 0.000640
34 11162.41 178.10 548.24 0.40 -3.858e-08 0.000726
35 11167.47 178.02 530.61 0.33 -2.250e-08 0.000621
36 11172.53 177.94 516.14 0.36 -4.562e-08 0.000707
37 11177.60 177.86 502.31 0.16 -3.054e-08 0.000326
38 11182.67 177.77 481.54 0.28 -4.763e-08 0.000577
39 11187.74 177.69 458.78 0.00 -2.853e-08 0.000007
40 11192.82 177.61 442.42 0.07 -5.064e-08 0.000160
41 11197.91 177.53 420.53 0.02 -2.753e-08 0.000050
42 11203.00 177.45 401.79 -0.06 -3.255e-08 -0.000153
@@ -0,0 +1,62 @@
Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission
11087.00,179.33,38560.26,4535.26,0.117615
11087.50,179.32,38275.33,4463.22,0.116608
11088.00,179.31,37999.53,4402.33,0.115852
11088.50,179.30,37721.18,4343.98,0.115160
11088.99,179.29,37433.34,4282.19,0.114395
11089.49,179.28,37162.01,4224.25,0.113671
11089.99,179.28,36904.09,4161.01,0.112752
11090.49,179.27,36648.40,4089.77,0.111595
11090.99,179.26,36323.22,4012.69,0.110472
11091.49,179.25,36017.72,3929.25,0.109092
11091.99,179.24,35694.92,3845.33,0.107728
11092.49,179.24,35384.70,3760.69,0.106280
11092.99,179.23,35063.40,3678.15,0.104900
11093.49,179.22,34734.79,3590.19,0.103360
11093.99,179.21,34414.03,3499.21,0.101680
11094.48,179.20,34086.77,3403.19,0.099839
11094.98,179.19,33768.33,3300.05,0.097726
11095.48,179.19,33447.18,3189.84,0.095369
11095.98,179.18,33094.10,3068.68,0.092726
11096.48,179.17,32745.61,2944.15,0.089910
11096.98,179.16,32377.90,2807.15,0.086699
11097.48,179.15,31997.60,2661.17,0.083168
11097.98,179.15,31669.44,2509.51,0.079241
11098.48,179.14,31301.86,2342.72,0.074843
11098.98,179.13,30946.58,2168.22,0.070063
11099.48,179.12,30599.35,1976.57,0.064595
11099.98,179.11,30238.94,1777.62,0.058786
11100.48,179.11,29827.78,1551.64,0.052020
11100.98,179.10,29476.59,1319.85,0.044776
11101.48,179.09,29100.97,1068.57,0.036719
11101.98,179.08,28749.53,815.70,0.028373
11102.48,179.07,28376.86,577.46,0.020350
11102.98,179.06,27983.70,363.72,0.012998
11103.48,179.06,27609.67,201.28,0.007290
11103.98,179.05,27256.50,93.88,0.003444
11104.48,179.04,26875.74,37.45,0.001394
11104.98,179.03,26496.50,13.07,0.000493
11105.48,179.02,26113.35,5.24,0.000200
11105.98,179.02,25731.34,2.71,0.000105
11106.48,179.01,25355.73,2.30,0.000091
11106.98,179.00,24961.87,1.74,0.000070
11107.48,178.99,24564.77,1.50,0.000061
11107.98,178.98,24188.86,1.34,0.000055
11108.48,178.97,23802.97,1.42,0.000059
11108.98,178.97,23424.93,1.32,0.000056
11109.48,178.96,23028.96,1.20,0.000052
11109.99,178.95,22653.38,1.05,0.000047
11110.49,178.94,22255.46,0.98,0.000044
11110.99,178.93,21872.37,0.91,0.000041
11111.49,178.93,21461.83,0.86,0.000040
11111.99,178.92,21102.15,0.76,0.000036
11112.49,178.91,20718.33,0.72,0.000035
11112.99,178.90,20363.01,0.66,0.000033
11113.49,178.89,19982.21,0.64,0.000032
11113.99,178.88,19623.79,0.57,0.000029
11114.49,178.88,19255.10,0.56,0.000029
11114.99,178.87,18913.77,0.49,0.000026
11115.50,178.86,18561.76,0.54,0.000029
11116.00,178.85,18178.33,0.53,0.000029
11116.50,178.84,17847.83,0.44,0.000024
11117.00,178.84,17486.73,0.48,0.000028
1 Energy Bragg ss_bpmsum bcu_bpmsum transmission
2 11087.00 179.33 38560.26 4535.26 0.117615
3 11087.50 179.32 38275.33 4463.22 0.116608
4 11088.00 179.31 37999.53 4402.33 0.115852
5 11088.50 179.30 37721.18 4343.98 0.115160
6 11088.99 179.29 37433.34 4282.19 0.114395
7 11089.49 179.28 37162.01 4224.25 0.113671
8 11089.99 179.28 36904.09 4161.01 0.112752
9 11090.49 179.27 36648.40 4089.77 0.111595
10 11090.99 179.26 36323.22 4012.69 0.110472
11 11091.49 179.25 36017.72 3929.25 0.109092
12 11091.99 179.24 35694.92 3845.33 0.107728
13 11092.49 179.24 35384.70 3760.69 0.106280
14 11092.99 179.23 35063.40 3678.15 0.104900
15 11093.49 179.22 34734.79 3590.19 0.103360
16 11093.99 179.21 34414.03 3499.21 0.101680
17 11094.48 179.20 34086.77 3403.19 0.099839
18 11094.98 179.19 33768.33 3300.05 0.097726
19 11095.48 179.19 33447.18 3189.84 0.095369
20 11095.98 179.18 33094.10 3068.68 0.092726
21 11096.48 179.17 32745.61 2944.15 0.089910
22 11096.98 179.16 32377.90 2807.15 0.086699
23 11097.48 179.15 31997.60 2661.17 0.083168
24 11097.98 179.15 31669.44 2509.51 0.079241
25 11098.48 179.14 31301.86 2342.72 0.074843
26 11098.98 179.13 30946.58 2168.22 0.070063
27 11099.48 179.12 30599.35 1976.57 0.064595
28 11099.98 179.11 30238.94 1777.62 0.058786
29 11100.48 179.11 29827.78 1551.64 0.052020
30 11100.98 179.10 29476.59 1319.85 0.044776
31 11101.48 179.09 29100.97 1068.57 0.036719
32 11101.98 179.08 28749.53 815.70 0.028373
33 11102.48 179.07 28376.86 577.46 0.020350
34 11102.98 179.06 27983.70 363.72 0.012998
35 11103.48 179.06 27609.67 201.28 0.007290
36 11103.98 179.05 27256.50 93.88 0.003444
37 11104.48 179.04 26875.74 37.45 0.001394
38 11104.98 179.03 26496.50 13.07 0.000493
39 11105.48 179.02 26113.35 5.24 0.000200
40 11105.98 179.02 25731.34 2.71 0.000105
41 11106.48 179.01 25355.73 2.30 0.000091
42 11106.98 179.00 24961.87 1.74 0.000070
43 11107.48 178.99 24564.77 1.50 0.000061
44 11107.98 178.98 24188.86 1.34 0.000055
45 11108.48 178.97 23802.97 1.42 0.000059
46 11108.98 178.97 23424.93 1.32 0.000056
47 11109.48 178.96 23028.96 1.20 0.000052
48 11109.99 178.95 22653.38 1.05 0.000047
49 11110.49 178.94 22255.46 0.98 0.000044
50 11110.99 178.93 21872.37 0.91 0.000041
51 11111.49 178.93 21461.83 0.86 0.000040
52 11111.99 178.92 21102.15 0.76 0.000036
53 11112.49 178.91 20718.33 0.72 0.000035
54 11112.99 178.90 20363.01 0.66 0.000033
55 11113.49 178.89 19982.21 0.64 0.000032
56 11113.99 178.88 19623.79 0.57 0.000029
57 11114.49 178.88 19255.10 0.56 0.000029
58 11114.99 178.87 18913.77 0.49 0.000026
59 11115.50 178.86 18561.76 0.54 0.000029
60 11116.00 178.85 18178.33 0.53 0.000029
61 11116.50 178.84 17847.83 0.44 0.000024
62 11117.00 178.84 17486.73 0.48 0.000028
@@ -0,0 +1,42 @@
Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission
11003.00,180.71,39854.34,5135.60,0.128859
11007.91,180.63,37192.26,4756.05,0.127877
11012.83,180.55,34019.56,4326.89,0.127188
11017.75,180.46,30427.58,3878.67,0.127472
11022.67,180.38,26633.96,3368.52,0.126474
11027.60,180.30,22820.00,2854.62,0.125093
11032.54,180.22,19140.74,2436.85,0.127312
11037.47,180.14,15684.96,1992.82,0.127053
11042.42,180.06,12620.92,1595.40,0.126409
11047.36,179.98,9966.27,1272.07,0.127637
11052.32,179.89,7781.57,998.18,0.128274
11057.27,179.81,6015.60,772.56,0.128426
11062.23,179.73,4630.19,586.27,0.126618
11067.20,179.65,3571.05,441.95,0.123758
11072.17,179.57,2779.62,332.68,0.119686
11077.14,179.49,2211.73,253.72,0.114715
11082.12,179.40,1796.12,194.46,0.108265
11087.11,179.32,1494.90,146.82,0.098212
11092.09,179.24,1287.16,101.68,0.078999
11097.09,179.16,1118.17,35.77,0.031992
11102.08,179.08,989.75,1.87,0.001892
11107.09,179.00,896.34,1.43,0.001593
11112.09,178.92,821.20,1.06,0.001293
11117.10,178.83,761.17,0.86,0.001135
11122.12,178.75,714.76,0.70,0.000980
11127.14,178.67,679.67,0.61,0.000890
11132.16,178.59,648.22,0.58,0.000899
11137.19,178.51,615.42,0.41,0.000660
11142.23,178.43,595.71,0.35,0.000590
11147.27,178.35,585.79,0.36,0.000606
11152.31,178.26,561.83,0.28,0.000495
11157.36,178.18,541.53,0.31,0.000567
11162.41,178.10,526.27,0.23,0.000435
11167.47,178.02,506.37,0.19,0.000376
11172.53,177.94,485.59,0.12,0.000238
11177.60,177.86,470.40,0.16,0.000341
11182.67,177.77,449.74,0.08,0.000184
11187.74,177.69,430.29,0.03,0.000063
11192.82,177.61,407.55,0.07,0.000167
11197.91,177.53,388.94,0.07,0.000178
11203.00,177.45,373.55,0.10,0.000264
1 Energy Bragg ss_bpmsum bcu_bpmsum transmission
2 11003.00 180.71 39854.34 5135.60 0.128859
3 11007.91 180.63 37192.26 4756.05 0.127877
4 11012.83 180.55 34019.56 4326.89 0.127188
5 11017.75 180.46 30427.58 3878.67 0.127472
6 11022.67 180.38 26633.96 3368.52 0.126474
7 11027.60 180.30 22820.00 2854.62 0.125093
8 11032.54 180.22 19140.74 2436.85 0.127312
9 11037.47 180.14 15684.96 1992.82 0.127053
10 11042.42 180.06 12620.92 1595.40 0.126409
11 11047.36 179.98 9966.27 1272.07 0.127637
12 11052.32 179.89 7781.57 998.18 0.128274
13 11057.27 179.81 6015.60 772.56 0.128426
14 11062.23 179.73 4630.19 586.27 0.126618
15 11067.20 179.65 3571.05 441.95 0.123758
16 11072.17 179.57 2779.62 332.68 0.119686
17 11077.14 179.49 2211.73 253.72 0.114715
18 11082.12 179.40 1796.12 194.46 0.108265
19 11087.11 179.32 1494.90 146.82 0.098212
20 11092.09 179.24 1287.16 101.68 0.078999
21 11097.09 179.16 1118.17 35.77 0.031992
22 11102.08 179.08 989.75 1.87 0.001892
23 11107.09 179.00 896.34 1.43 0.001593
24 11112.09 178.92 821.20 1.06 0.001293
25 11117.10 178.83 761.17 0.86 0.001135
26 11122.12 178.75 714.76 0.70 0.000980
27 11127.14 178.67 679.67 0.61 0.000890
28 11132.16 178.59 648.22 0.58 0.000899
29 11137.19 178.51 615.42 0.41 0.000660
30 11142.23 178.43 595.71 0.35 0.000590
31 11147.27 178.35 585.79 0.36 0.000606
32 11152.31 178.26 561.83 0.28 0.000495
33 11157.36 178.18 541.53 0.31 0.000567
34 11162.41 178.10 526.27 0.23 0.000435
35 11167.47 178.02 506.37 0.19 0.000376
36 11172.53 177.94 485.59 0.12 0.000238
37 11177.60 177.86 470.40 0.16 0.000341
38 11182.67 177.77 449.74 0.08 0.000184
39 11187.74 177.69 430.29 0.03 0.000063
40 11192.82 177.61 407.55 0.07 0.000167
41 11197.91 177.53 388.94 0.07 0.000178
42 11203.00 177.45 373.55 0.10 0.000264
@@ -0,0 +1,62 @@
Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission
11087.00,179.33,40803.39,4923.21,0.120657
11087.50,179.32,40632.73,4872.86,0.119925
11088.00,179.31,40434.30,4822.80,0.119275
11088.50,179.30,40234.38,4773.51,0.118643
11088.99,179.29,40033.04,4719.28,0.117885
11089.49,179.28,39790.80,4665.41,0.117248
11089.99,179.28,39643.25,4613.48,0.116375
11090.49,179.27,39445.42,4562.87,0.115676
11090.99,179.26,39261.94,4506.05,0.114769
11091.49,179.25,39036.39,4442.76,0.113811
11091.99,179.24,38813.22,4370.94,0.112615
11092.49,179.24,38567.29,4298.37,0.111451
11092.99,179.23,38327.95,4226.19,0.110264
11093.49,179.22,38047.01,4148.71,0.109042
11093.99,179.21,37755.27,4065.48,0.107680
11094.48,179.20,37502.19,3971.56,0.105902
11094.98,179.19,37253.79,3865.72,0.103767
11095.48,179.19,36959.52,3760.99,0.101760
11095.98,179.18,36698.11,3647.32,0.099387
11096.48,179.17,36424.81,3528.30,0.096865
11096.98,179.16,36123.06,3406.20,0.094294
11097.48,179.15,35824.28,3277.61,0.091491
11097.98,179.15,35526.06,3140.40,0.088397
11098.48,179.14,35257.47,2991.72,0.084853
11098.98,179.13,34954.34,2834.08,0.081080
11099.48,179.12,34632.96,2655.23,0.076668
11099.98,179.11,34339.50,2471.89,0.071984
11100.48,179.11,34007.19,2259.99,0.066456
11100.98,179.10,33662.66,2033.69,0.060414
11101.48,179.09,33330.11,1786.32,0.053595
11101.98,179.08,32997.13,1524.36,0.046197
11102.48,179.07,32674.09,1240.42,0.037963
11102.98,179.06,32266.53,951.76,0.029497
11103.48,179.06,31933.44,679.88,0.021291
11103.98,179.05,31636.60,435.79,0.013775
11104.48,179.04,31369.22,249.95,0.007968
11104.98,179.03,31027.85,120.78,0.003893
11105.48,179.02,30634.91,50.59,0.001651
11105.98,179.02,30266.85,18.11,0.000598
11106.48,179.01,30028.47,6.72,0.000224
11106.98,179.00,29680.09,3.60,0.000121
11107.48,178.99,29252.87,2.66,0.000091
11107.98,178.98,28968.99,2.14,0.000074
11108.48,178.97,28606.73,1.86,0.000065
11108.98,178.97,28298.05,1.75,0.000062
11109.48,178.96,27894.51,1.59,0.000057
11109.99,178.95,27513.24,1.50,0.000055
11110.49,178.94,27192.70,1.41,0.000052
11110.99,178.93,26814.59,1.44,0.000054
11111.49,178.93,26416.19,1.27,0.000048
11111.99,178.92,26059.44,1.25,0.000048
11112.49,178.91,25677.19,1.18,0.000046
11112.99,178.90,25304.06,1.06,0.000042
11113.49,178.89,24924.72,1.02,0.000041
11113.99,178.88,24519.39,0.98,0.000040
11114.49,178.88,24145.24,0.89,0.000037
11114.99,178.87,23793.34,0.87,0.000037
11115.50,178.86,23402.14,0.86,0.000037
11116.00,178.85,23018.34,0.82,0.000035
11116.50,178.84,22650.08,0.75,0.000033
11117.00,178.84,22289.77,0.75,0.000034
1 Energy Bragg ss_bpmsum bcu_bpmsum transmission
2 11087.00 179.33 40803.39 4923.21 0.120657
3 11087.50 179.32 40632.73 4872.86 0.119925
4 11088.00 179.31 40434.30 4822.80 0.119275
5 11088.50 179.30 40234.38 4773.51 0.118643
6 11088.99 179.29 40033.04 4719.28 0.117885
7 11089.49 179.28 39790.80 4665.41 0.117248
8 11089.99 179.28 39643.25 4613.48 0.116375
9 11090.49 179.27 39445.42 4562.87 0.115676
10 11090.99 179.26 39261.94 4506.05 0.114769
11 11091.49 179.25 39036.39 4442.76 0.113811
12 11091.99 179.24 38813.22 4370.94 0.112615
13 11092.49 179.24 38567.29 4298.37 0.111451
14 11092.99 179.23 38327.95 4226.19 0.110264
15 11093.49 179.22 38047.01 4148.71 0.109042
16 11093.99 179.21 37755.27 4065.48 0.107680
17 11094.48 179.20 37502.19 3971.56 0.105902
18 11094.98 179.19 37253.79 3865.72 0.103767
19 11095.48 179.19 36959.52 3760.99 0.101760
20 11095.98 179.18 36698.11 3647.32 0.099387
21 11096.48 179.17 36424.81 3528.30 0.096865
22 11096.98 179.16 36123.06 3406.20 0.094294
23 11097.48 179.15 35824.28 3277.61 0.091491
24 11097.98 179.15 35526.06 3140.40 0.088397
25 11098.48 179.14 35257.47 2991.72 0.084853
26 11098.98 179.13 34954.34 2834.08 0.081080
27 11099.48 179.12 34632.96 2655.23 0.076668
28 11099.98 179.11 34339.50 2471.89 0.071984
29 11100.48 179.11 34007.19 2259.99 0.066456
30 11100.98 179.10 33662.66 2033.69 0.060414
31 11101.48 179.09 33330.11 1786.32 0.053595
32 11101.98 179.08 32997.13 1524.36 0.046197
33 11102.48 179.07 32674.09 1240.42 0.037963
34 11102.98 179.06 32266.53 951.76 0.029497
35 11103.48 179.06 31933.44 679.88 0.021291
36 11103.98 179.05 31636.60 435.79 0.013775
37 11104.48 179.04 31369.22 249.95 0.007968
38 11104.98 179.03 31027.85 120.78 0.003893
39 11105.48 179.02 30634.91 50.59 0.001651
40 11105.98 179.02 30266.85 18.11 0.000598
41 11106.48 179.01 30028.47 6.72 0.000224
42 11106.98 179.00 29680.09 3.60 0.000121
43 11107.48 178.99 29252.87 2.66 0.000091
44 11107.98 178.98 28968.99 2.14 0.000074
45 11108.48 178.97 28606.73 1.86 0.000065
46 11108.98 178.97 28298.05 1.75 0.000062
47 11109.48 178.96 27894.51 1.59 0.000057
48 11109.99 178.95 27513.24 1.50 0.000055
49 11110.49 178.94 27192.70 1.41 0.000052
50 11110.99 178.93 26814.59 1.44 0.000054
51 11111.49 178.93 26416.19 1.27 0.000048
52 11111.99 178.92 26059.44 1.25 0.000048
53 11112.49 178.91 25677.19 1.18 0.000046
54 11112.99 178.90 25304.06 1.06 0.000042
55 11113.49 178.89 24924.72 1.02 0.000041
56 11113.99 178.88 24519.39 0.98 0.000040
57 11114.49 178.88 24145.24 0.89 0.000037
58 11114.99 178.87 23793.34 0.87 0.000037
59 11115.50 178.86 23402.14 0.86 0.000037
60 11116.00 178.85 23018.34 0.82 0.000035
61 11116.50 178.84 22650.08 0.75 0.000033
62 11117.00 178.84 22289.77 0.75 0.000034
@@ -0,0 +1,42 @@
Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission
11063.00,179.72,41623.66,5536.06,0.133003
11064.99,179.69,41032.06,5438.49,0.132542
11066.97,179.65,40347.29,5330.93,0.132126
11068.96,179.62,39509.59,5209.13,0.131845
11070.95,179.59,38586.20,5066.84,0.131312
11072.94,179.56,37583.59,4918.55,0.130870
11074.93,179.52,36431.57,4748.50,0.130340
11076.92,179.49,35194.73,4559.41,0.129548
11078.91,179.46,34009.67,4379.38,0.128769
11080.90,179.42,32659.75,4160.74,0.127396
11082.89,179.39,31263.11,3941.04,0.126061
11084.88,179.36,29835.56,3709.27,0.124324
11086.88,179.33,28378.22,3472.39,0.122361
11088.87,179.29,26821.81,3213.89,0.119824
11090.87,179.26,25347.66,2946.04,0.116225
11092.86,179.23,23851.62,2660.02,0.111524
11094.86,179.20,22343.16,2344.90,0.104949
11096.86,179.16,20904.96,2001.88,0.095761
11098.86,179.13,19466.62,1602.34,0.082312
11100.85,179.10,18046.81,1109.74,0.061492
11102.85,179.07,16677.32,503.70,0.030202
11104.85,179.03,15405.53,64.00,0.004154
11106.85,179.00,14160.19,4.63,0.000327
11108.86,178.97,12967.10,3.32,0.000256
11110.86,178.94,11840.61,2.65,0.000224
11112.86,178.90,10772.04,2.25,0.000209
11114.87,178.87,9778.05,1.91,0.000195
11116.87,178.84,8896.02,1.72,0.000193
11118.88,178.81,8040.33,1.58,0.000196
11120.88,178.77,7246.21,1.48,0.000205
11122.89,178.74,6527.67,1.31,0.000200
11124.90,178.71,5895.60,1.21,0.000205
11126.91,178.68,5300.24,1.12,0.000211
11128.92,178.64,4771.84,1.00,0.000209
11130.93,178.61,4293.77,0.96,0.000225
11132.94,178.58,3877.26,0.88,0.000227
11134.95,178.54,3486.78,1.04,0.000298
11136.96,178.51,3154.25,0.93,0.000296
11138.97,178.48,2852.14,0.87,0.000306
11140.99,178.45,2595.68,0.83,0.000321
11143.00,178.41,2371.33,0.67,0.000284
1 Energy Bragg ss_bpmsum bcu_bpmsum transmission
2 11063.00 179.72 41623.66 5536.06 0.133003
3 11064.99 179.69 41032.06 5438.49 0.132542
4 11066.97 179.65 40347.29 5330.93 0.132126
5 11068.96 179.62 39509.59 5209.13 0.131845
6 11070.95 179.59 38586.20 5066.84 0.131312
7 11072.94 179.56 37583.59 4918.55 0.130870
8 11074.93 179.52 36431.57 4748.50 0.130340
9 11076.92 179.49 35194.73 4559.41 0.129548
10 11078.91 179.46 34009.67 4379.38 0.128769
11 11080.90 179.42 32659.75 4160.74 0.127396
12 11082.89 179.39 31263.11 3941.04 0.126061
13 11084.88 179.36 29835.56 3709.27 0.124324
14 11086.88 179.33 28378.22 3472.39 0.122361
15 11088.87 179.29 26821.81 3213.89 0.119824
16 11090.87 179.26 25347.66 2946.04 0.116225
17 11092.86 179.23 23851.62 2660.02 0.111524
18 11094.86 179.20 22343.16 2344.90 0.104949
19 11096.86 179.16 20904.96 2001.88 0.095761
20 11098.86 179.13 19466.62 1602.34 0.082312
21 11100.85 179.10 18046.81 1109.74 0.061492
22 11102.85 179.07 16677.32 503.70 0.030202
23 11104.85 179.03 15405.53 64.00 0.004154
24 11106.85 179.00 14160.19 4.63 0.000327
25 11108.86 178.97 12967.10 3.32 0.000256
26 11110.86 178.94 11840.61 2.65 0.000224
27 11112.86 178.90 10772.04 2.25 0.000209
28 11114.87 178.87 9778.05 1.91 0.000195
29 11116.87 178.84 8896.02 1.72 0.000193
30 11118.88 178.81 8040.33 1.58 0.000196
31 11120.88 178.77 7246.21 1.48 0.000205
32 11122.89 178.74 6527.67 1.31 0.000200
33 11124.90 178.71 5895.60 1.21 0.000205
34 11126.91 178.68 5300.24 1.12 0.000211
35 11128.92 178.64 4771.84 1.00 0.000209
36 11130.93 178.61 4293.77 0.96 0.000225
37 11132.94 178.58 3877.26 0.88 0.000227
38 11134.95 178.54 3486.78 1.04 0.000298
39 11136.96 178.51 3154.25 0.93 0.000296
40 11138.97 178.48 2852.14 0.87 0.000306
41 11140.99 178.45 2595.68 0.83 0.000321
42 11143.00 178.41 2371.33 0.67 0.000284
@@ -0,0 +1,42 @@
Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission
11063.00,179.72,41667.03,5562.96,0.133510
11064.99,179.69,41240.92,5482.80,0.132946
11066.97,179.65,40665.57,5398.81,0.132761
11068.96,179.62,40004.77,5296.21,0.132390
11070.95,179.59,39198.19,5173.20,0.131975
11072.94,179.56,38308.99,5046.00,0.131718
11074.93,179.52,37308.79,4891.96,0.131121
11076.92,179.49,36198.94,4717.20,0.130313
11078.91,179.46,35098.92,4545.17,0.129496
11080.90,179.42,33826.54,4338.63,0.128261
11082.89,179.39,32524.71,4129.39,0.126962
11084.88,179.36,31194.30,3903.90,0.125148
11086.88,179.33,29761.99,3672.08,0.123381
11088.87,179.29,28270.14,3419.86,0.120971
11090.87,179.26,26795.87,3144.07,0.117334
11092.86,179.23,25330.33,2849.29,0.112485
11094.86,179.20,23815.25,2525.76,0.106057
11096.86,179.16,22366.92,2167.55,0.096909
11098.86,179.13,20882.63,1743.30,0.083481
11100.85,179.10,19439.42,1212.69,0.062383
11102.85,179.07,18039.23,555.41,0.030789
11104.85,179.03,16717.41,70.81,0.004235
11106.85,179.00,15439.94,3.98,0.000258
11108.86,178.97,14174.59,2.53,0.000178
11110.86,178.94,12986.81,2.03,0.000156
11112.86,178.90,11820.02,1.62,0.000137
11114.87,178.87,10770.63,1.37,0.000127
11116.87,178.84,9786.64,1.23,0.000125
11118.88,178.81,8871.50,1.20,0.000136
11120.88,178.77,8014.78,1.10,0.000138
11122.89,178.74,7217.88,0.99,0.000137
11124.90,178.71,6508.82,0.77,0.000119
11126.91,178.68,5862.46,0.69,0.000118
11128.92,178.64,5274.38,0.64,0.000121
11130.93,178.61,4750.03,0.55,0.000117
11132.94,178.58,4265.10,0.37,0.000087
11134.95,178.54,3846.43,0.35,0.000091
11136.96,178.51,3456.73,0.28,0.000080
11138.97,178.48,3116.88,0.37,0.000118
11140.99,178.45,2832.64,0.18,0.000063
11143.00,178.41,2559.37,0.18,0.000071
1 Energy Bragg ss_bpmsum bcu_bpmsum transmission
2 11063.00 179.72 41667.03 5562.96 0.133510
3 11064.99 179.69 41240.92 5482.80 0.132946
4 11066.97 179.65 40665.57 5398.81 0.132761
5 11068.96 179.62 40004.77 5296.21 0.132390
6 11070.95 179.59 39198.19 5173.20 0.131975
7 11072.94 179.56 38308.99 5046.00 0.131718
8 11074.93 179.52 37308.79 4891.96 0.131121
9 11076.92 179.49 36198.94 4717.20 0.130313
10 11078.91 179.46 35098.92 4545.17 0.129496
11 11080.90 179.42 33826.54 4338.63 0.128261
12 11082.89 179.39 32524.71 4129.39 0.126962
13 11084.88 179.36 31194.30 3903.90 0.125148
14 11086.88 179.33 29761.99 3672.08 0.123381
15 11088.87 179.29 28270.14 3419.86 0.120971
16 11090.87 179.26 26795.87 3144.07 0.117334
17 11092.86 179.23 25330.33 2849.29 0.112485
18 11094.86 179.20 23815.25 2525.76 0.106057
19 11096.86 179.16 22366.92 2167.55 0.096909
20 11098.86 179.13 20882.63 1743.30 0.083481
21 11100.85 179.10 19439.42 1212.69 0.062383
22 11102.85 179.07 18039.23 555.41 0.030789
23 11104.85 179.03 16717.41 70.81 0.004235
24 11106.85 179.00 15439.94 3.98 0.000258
25 11108.86 178.97 14174.59 2.53 0.000178
26 11110.86 178.94 12986.81 2.03 0.000156
27 11112.86 178.90 11820.02 1.62 0.000137
28 11114.87 178.87 10770.63 1.37 0.000127
29 11116.87 178.84 9786.64 1.23 0.000125
30 11118.88 178.81 8871.50 1.20 0.000136
31 11120.88 178.77 8014.78 1.10 0.000138
32 11122.89 178.74 7217.88 0.99 0.000137
33 11124.90 178.71 6508.82 0.77 0.000119
34 11126.91 178.68 5862.46 0.69 0.000118
35 11128.92 178.64 5274.38 0.64 0.000121
36 11130.93 178.61 4750.03 0.55 0.000117
37 11132.94 178.58 4265.10 0.37 0.000087
38 11134.95 178.54 3846.43 0.35 0.000091
39 11136.96 178.51 3456.73 0.28 0.000080
40 11138.97 178.48 3116.88 0.37 0.000118
41 11140.99 178.45 2832.64 0.18 0.000063
42 11143.00 178.41 2559.37 0.18 0.000071
@@ -0,0 +1,42 @@
Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission
11063.00,179.72,42766.45,5706.97,0.133445
11064.99,179.69,42362.26,5654.93,0.133490
11066.97,179.65,41803.16,5542.14,0.132577
11068.96,179.62,41174.13,5428.07,0.131832
11070.95,179.59,40377.74,5311.25,0.131539
11072.94,179.56,39491.34,5188.41,0.131381
11074.93,179.52,38488.72,5029.04,0.130663
11076.92,179.49,37359.12,4863.41,0.130180
11078.91,179.46,36273.09,4688.13,0.129245
11080.90,179.42,35001.62,4488.06,0.128224
11082.89,179.39,33697.03,4280.96,0.127043
11084.88,179.36,32311.73,4058.17,0.125594
11086.88,179.33,30905.01,3822.69,0.123691
11088.87,179.29,29361.59,3553.22,0.121016
11090.87,179.26,27887.20,3273.82,0.117395
11092.86,179.23,26398.36,2972.25,0.112592
11094.86,179.20,24844.98,2630.87,0.105891
11096.86,179.16,23367.16,2246.50,0.096139
11098.86,179.13,21824.37,1790.48,0.082041
11100.85,179.10,20348.11,1220.85,0.059998
11102.85,179.07,18918.98,519.55,0.027462
11104.85,179.03,17522.10,54.03,0.003083
11106.85,179.00,16196.63,3.72,0.000230
11108.86,178.97,14868.96,2.51,0.000169
11110.86,178.94,13647.45,1.93,0.000142
11112.86,178.90,12456.36,1.56,0.000125
11114.87,178.87,11361.93,1.55,0.000137
11116.87,178.84,10313.20,1.33,0.000129
11118.88,178.81,9359.12,1.24,0.000133
11120.88,178.77,8462.53,1.27,0.000150
11122.89,178.74,7636.72,1.05,0.000138
11124.90,178.71,6880.61,0.96,0.000140
11126.91,178.68,6203.29,0.83,0.000134
11128.92,178.64,5572.87,0.78,0.000141
11130.93,178.61,5016.50,0.64,0.000127
11132.94,178.58,4503.12,0.62,0.000138
11134.95,178.54,4049.98,0.54,0.000133
11136.96,178.51,3653.15,0.48,0.000130
11138.97,178.48,3302.12,0.44,0.000133
11140.99,178.45,2969.27,0.38,0.000128
11143.00,178.41,2685.31,0.35,0.000130
1 Energy Bragg ss_bpmsum bcu_bpmsum transmission
2 11063.00 179.72 42766.45 5706.97 0.133445
3 11064.99 179.69 42362.26 5654.93 0.133490
4 11066.97 179.65 41803.16 5542.14 0.132577
5 11068.96 179.62 41174.13 5428.07 0.131832
6 11070.95 179.59 40377.74 5311.25 0.131539
7 11072.94 179.56 39491.34 5188.41 0.131381
8 11074.93 179.52 38488.72 5029.04 0.130663
9 11076.92 179.49 37359.12 4863.41 0.130180
10 11078.91 179.46 36273.09 4688.13 0.129245
11 11080.90 179.42 35001.62 4488.06 0.128224
12 11082.89 179.39 33697.03 4280.96 0.127043
13 11084.88 179.36 32311.73 4058.17 0.125594
14 11086.88 179.33 30905.01 3822.69 0.123691
15 11088.87 179.29 29361.59 3553.22 0.121016
16 11090.87 179.26 27887.20 3273.82 0.117395
17 11092.86 179.23 26398.36 2972.25 0.112592
18 11094.86 179.20 24844.98 2630.87 0.105891
19 11096.86 179.16 23367.16 2246.50 0.096139
20 11098.86 179.13 21824.37 1790.48 0.082041
21 11100.85 179.10 20348.11 1220.85 0.059998
22 11102.85 179.07 18918.98 519.55 0.027462
23 11104.85 179.03 17522.10 54.03 0.003083
24 11106.85 179.00 16196.63 3.72 0.000230
25 11108.86 178.97 14868.96 2.51 0.000169
26 11110.86 178.94 13647.45 1.93 0.000142
27 11112.86 178.90 12456.36 1.56 0.000125
28 11114.87 178.87 11361.93 1.55 0.000137
29 11116.87 178.84 10313.20 1.33 0.000129
30 11118.88 178.81 9359.12 1.24 0.000133
31 11120.88 178.77 8462.53 1.27 0.000150
32 11122.89 178.74 7636.72 1.05 0.000138
33 11124.90 178.71 6880.61 0.96 0.000140
34 11126.91 178.68 6203.29 0.83 0.000134
35 11128.92 178.64 5572.87 0.78 0.000141
36 11130.93 178.61 5016.50 0.64 0.000127
37 11132.94 178.58 4503.12 0.62 0.000138
38 11134.95 178.54 4049.98 0.54 0.000133
39 11136.96 178.51 3653.15 0.48 0.000130
40 11138.97 178.48 3302.12 0.44 0.000133
41 11140.99 178.45 2969.27 0.38 0.000128
42 11143.00 178.41 2685.31 0.35 0.000130
@@ -0,0 +1,14 @@
Energy,I2_in,I2_out
30000,-2.406e-08, -1.616e-09
28000,-3.529e-08, 1.249e-07
26000,-2.202e-08, 5.239e-07
24000,-3.019e-08, 1.122e-06
22000,-2.61e-08, -3.223e-08
20000,-2.508e-08, 9.529e-06
18000,-3.019e-08, 4.014e-05
16000,-3.631e-08, 8.072e-05
14000,-1.998e-08, 0.0001758
12000,-1.692e-08, 0.0003101
10000,-1.488e-08, 0.0001962
8000,-2.202e-08, 4.622e-05
6000,-2.917e-08, 4.441e-05
1 Energy I2_in I2_out
2 30000 -2.406e-08 -1.616e-09
3 28000 -3.529e-08 1.249e-07
4 26000 -2.202e-08 5.239e-07
5 24000 -3.019e-08 1.122e-06
6 22000 -2.61e-08 -3.223e-08
7 20000 -2.508e-08 9.529e-06
8 18000 -3.019e-08 4.014e-05
9 16000 -3.631e-08 8.072e-05
10 14000 -1.998e-08 0.0001758
11 12000 -1.692e-08 0.0003101
12 10000 -1.488e-08 0.0001962
13 8000 -2.202e-08 4.622e-05
14 6000 -2.917e-08 4.441e-05
@@ -0,0 +1,2 @@
timestamp,energy_eV,flux_ph_s,beam_start_x_px,beam_start_y_px,vfm_ydr_start_mm,hfm_xd_start_mm,vfm_ydr_final_mm,hfm_xd_final_mm,beam_final_x_um,beam_final_y_um,vfm_y_mm,vfm_ydr_mm,vfm_pitch_mrad,hfm_x_mm,hfm_xd_mm,hfm_pitch_mrad
2026-09-20T20:56:20,12400.009895999128,8551180983998.611,992.9837196699019,966.3893864711606,-0.8453499999999963,1.9120150000000038,,1.9120100000000022,0.08792363645093884,0.23523677769901796,-1.5538537499999947,-0.8453549999999908,2.989410000000006,1.4117925000000042,1.9120100000000022,3.0009000000000015
1 timestamp energy_eV flux_ph_s beam_start_x_px beam_start_y_px vfm_ydr_start_mm hfm_xd_start_mm vfm_ydr_final_mm hfm_xd_final_mm beam_final_x_um beam_final_y_um vfm_y_mm vfm_ydr_mm vfm_pitch_mrad hfm_x_mm hfm_xd_mm hfm_pitch_mrad
2 2026-09-20T20:56:20 12400.009895999128 8551180983998.611 992.9837196699019 966.3893864711606 -0.8453499999999963 1.9120150000000038 1.9120100000000022 0.08792363645093884 0.23523677769901796 -1.5538537499999947 -0.8453549999999908 2.989410000000006 1.4117925000000042 1.9120100000000022 3.0009000000000015
@@ -0,0 +1,14 @@
energy,scan,reason
6000,-5.561
8000,-5.5432
10000,-5.5349
12000,-5.5297
14000,-5.5268
16000,-5.5244
18000,-5.5218
20000,-5.5203
22000,-5.5194
24000,-5.519
26000,-5.5183
28000,-5.5179
30000,-5.518
1 energy,scan,reason
2 6000,-5.561
3 8000,-5.5432
4 10000,-5.5349
5 12000,-5.5297
6 14000,-5.5268
7 16000,-5.5244
8 18000,-5.5218
9 20000,-5.5203
10 22000,-5.5194
11 24000,-5.519
12 26000,-5.5183
13 28000,-5.5179
14 30000,-5.518
@@ -0,0 +1,15 @@
energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
18500,-5.5278,0.079312,0.031407,0.57597,0.41821,21.95,0.86,0.4968,0.9468
19000,-5.5277,0.10892,0.034869,0.672,-0.043649,22.96,0.79,1.274,0.7789
19500,-5.5273,0.1123,0.037979,0.65287,0.41444,29.04,0.98,1.399,0.7602
20000,-5.527,0.10889,0.042196,0.76301,0.55486,280.03,-0.09,1.669,0.9976
20500,-5.5268,0.11885,0.048114,0.94538,0.64762,25.79,1.31,1.943,0.8993
21000,-5.5264,0.11568,0.055515,1.157,0.84596,22.99,2.12,2.15,1.261
21500,-5.5257,0.10583,0.061478,1.4832,1.0726,22.62,4.43,1.107,2.616
22000,-5.5253,0.14069,0.053697,1.1677,0.83326,25.98,7.66,1.164,7.532
22500,-5.5251,0.14969,0.059799,1.1592,-0.24509,26.08,6.51,1.278,8.663
23000,-5.5247,0.14373,0.075002,1.5391,0.66679,26.93,7.41,1.376,5.2
23500,-5.5243,0.14984,0.091189,2.0988,1.5083,27.65,6.24,0.9794,6.096
24000,-5.5242,0.14755,0.10074,2.6501,1.955,29.90,6.02,0.9268,5.937
24500,-5.5239,0.15082,0.11364,3.4195,2.5418,32.97,4.64,1.019,4.126
25000,-5.5237,0.18897,0.10096,2.2261,1.6208,39.12,3.63,2.495,3.873
1 energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
2 18500,-5.5278,0.079312,0.031407,0.57597,0.41821,21.95,0.86,0.4968,0.9468
3 19000,-5.5277,0.10892,0.034869,0.672,-0.043649,22.96,0.79,1.274,0.7789
4 19500,-5.5273,0.1123,0.037979,0.65287,0.41444,29.04,0.98,1.399,0.7602
5 20000,-5.527,0.10889,0.042196,0.76301,0.55486,280.03,-0.09,1.669,0.9976
6 20500,-5.5268,0.11885,0.048114,0.94538,0.64762,25.79,1.31,1.943,0.8993
7 21000,-5.5264,0.11568,0.055515,1.157,0.84596,22.99,2.12,2.15,1.261
8 21500,-5.5257,0.10583,0.061478,1.4832,1.0726,22.62,4.43,1.107,2.616
9 22000,-5.5253,0.14069,0.053697,1.1677,0.83326,25.98,7.66,1.164,7.532
10 22500,-5.5251,0.14969,0.059799,1.1592,-0.24509,26.08,6.51,1.278,8.663
11 23000,-5.5247,0.14373,0.075002,1.5391,0.66679,26.93,7.41,1.376,5.2
12 23500,-5.5243,0.14984,0.091189,2.0988,1.5083,27.65,6.24,0.9794,6.096
13 24000,-5.5242,0.14755,0.10074,2.6501,1.955,29.90,6.02,0.9268,5.937
14 24500,-5.5239,0.15082,0.11364,3.4195,2.5418,32.97,4.64,1.019,4.126
15 25000,-5.5237,0.18897,0.10096,2.2261,1.6208,39.12,3.63,2.495,3.873
@@ -0,0 +1,15 @@
energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583
7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887
8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068
9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653
10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665
11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373
12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301
13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576
14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838
15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581
16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958
17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908
18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236
energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
@@ -0,0 +1,14 @@
energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583
7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887
8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068
9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653
10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665
11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373
12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301
13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576
14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838
15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581
16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958
17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908
18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236
1 energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
2 6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583
3 7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887
4 8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068
5 9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653
6 10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665
7 11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373
8 12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301
9 13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576
10 14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838
11 15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581
12 16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958
13 17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908
14 18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236
@@ -0,0 +1,28 @@
energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583
7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887
8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068
9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653
10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665
11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373
12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301
13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576
14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838
15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581
16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958
17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908
18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236
18500,-5.5278,0.079312,0.031407,0.57597,0.41821,21.95,0.86,0.4968,0.9468
19000,-5.5277,0.10892,0.034869,0.672,-0.043649,22.96,0.79,1.274,0.7789
19500,-5.5273,0.1123,0.037979,0.65287,0.41444,29.04,0.98,1.399,0.7602
20000,-5.527,0.10889,0.042196,0.76301,0.55486,280.03,-0.09,1.669,0.9976
20500,-5.5268,0.11885,0.048114,0.94538,0.64762,25.79,1.31,1.943,0.8993
21000,-5.5264,0.11568,0.055515,1.157,0.84596,22.99,2.12,2.15,1.261
21500,-5.5257,0.10583,0.061478,1.4832,1.0726,22.62,4.43,1.107,2.616
22000,-5.5253,0.14069,0.053697,1.1677,0.83326,25.98,7.66,1.164,7.532
22500,-5.5251,0.14969,0.059799,1.1592,-0.24509,26.08,6.51,1.278,8.663
23000,-5.5247,0.14373,0.075002,1.5391,0.66679,26.93,7.41,1.376,5.2
23500,-5.5243,0.14984,0.091189,2.0988,1.5083,27.65,6.24,0.9794,6.096
24000,-5.5242,0.14755,0.10074,2.6501,1.955,29.90,6.02,0.9268,5.937
24500,-5.5239,0.15082,0.11364,3.4195,2.5418,32.97,4.64,1.019,4.126
25000,-5.5237,0.18897,0.10096,2.2261,1.6208,39.12,3.63,2.495,3.873
1 energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0
2 6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583
3 7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887
4 8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068
5 9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653
6 10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665
7 11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373
8 12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301
9 13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576
10 14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838
11 15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581
12 16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958
13 17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908
14 18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236
15 18500,-5.5278,0.079312,0.031407,0.57597,0.41821,21.95,0.86,0.4968,0.9468
16 19000,-5.5277,0.10892,0.034869,0.672,-0.043649,22.96,0.79,1.274,0.7789
17 19500,-5.5273,0.1123,0.037979,0.65287,0.41444,29.04,0.98,1.399,0.7602
18 20000,-5.527,0.10889,0.042196,0.76301,0.55486,280.03,-0.09,1.669,0.9976
19 20500,-5.5268,0.11885,0.048114,0.94538,0.64762,25.79,1.31,1.943,0.8993
20 21000,-5.5264,0.11568,0.055515,1.157,0.84596,22.99,2.12,2.15,1.261
21 21500,-5.5257,0.10583,0.061478,1.4832,1.0726,22.62,4.43,1.107,2.616
22 22000,-5.5253,0.14069,0.053697,1.1677,0.83326,25.98,7.66,1.164,7.532
23 22500,-5.5251,0.14969,0.059799,1.1592,-0.24509,26.08,6.51,1.278,8.663
24 23000,-5.5247,0.14373,0.075002,1.5391,0.66679,26.93,7.41,1.376,5.2
25 23500,-5.5243,0.14984,0.091189,2.0988,1.5083,27.65,6.24,0.9794,6.096
26 24000,-5.5242,0.14755,0.10074,2.6501,1.955,29.90,6.02,0.9268,5.937
27 24500,-5.5239,0.15082,0.11364,3.4195,2.5418,32.97,4.64,1.019,4.126
28 25000,-5.5237,0.18897,0.10096,2.2261,1.6208,39.12,3.63,2.495,3.873
@@ -0,0 +1 @@
energy,scan,reason
1 energy scan reason
@@ -0,0 +1 @@
energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y
1 energy lu_bpmsum lu_Xnorm lu_Ynorm samcam_x samcam_y
@@ -0,0 +1 @@
energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y
1 energy lu_bpmsum lu_Xnorm lu_Ynorm samcam_x samcam_y
@@ -0,0 +1 @@
energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y
1 energy lu_bpmsum lu_Xnorm lu_Ynorm samcam_x samcam_y
@@ -0,0 +1 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm samcam_x samcam_y
@@ -0,0 +1 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm samcam_x samcam_y
@@ -0,0 +1 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm samcam_x samcam_y
@@ -0,0 +1,21 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y
22000,4.5350,44.8,0.232,0.093,5.3,7.1
22000,4.5360,46.0,0.230,0.092,5.3,7.2
22000,4.5371,48.7,0.223,0.086,5.3,7.4
22000,4.5381,52.3,0.216,0.081,5.1,7.6
22000,4.5392,56.5,0.205,0.076,5.3,7.8
22000,4.5403,61.0,0.199,0.074,5.1,7.9
22000,4.5413,65.0,0.193,0.070,5.3,8.0
22000,4.5424,69.7,0.188,0.066,5.4,8.2
22000,4.5434,74.5,0.181,0.064,5.4,8.3
22000,4.5445,79.0,0.179,0.063,5.4,8.4
22000,4.5455,83.5,0.177,0.066,5.6,8.5
22000,4.5466,88.1,0.175,0.058,5.7,8.7
22000,4.5476,92.8,0.173,0.059,5.7,8.8
22000,4.5487,96.8,0.172,0.058,5.9,8.9
22000,4.5497,101.2,0.171,0.056,6.2,9.0
22000,4.5508,105.2,0.175,0.058,6.3,9.1
22000,4.5518,109.1,0.173,0.055,6.5,9.2
22000,4.5529,112.5,0.174,0.057,6.8,9.3
22000,4.5540,115.8,0.177,0.057,7.0,9.4
22000,4.5550,120.1,0.181,0.056,7.3,9.5
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm samcam_x samcam_y
2 22000 4.5350 44.8 0.232 0.093 5.3 7.1
3 22000 4.5360 46.0 0.230 0.092 5.3 7.2
4 22000 4.5371 48.7 0.223 0.086 5.3 7.4
5 22000 4.5381 52.3 0.216 0.081 5.1 7.6
6 22000 4.5392 56.5 0.205 0.076 5.3 7.8
7 22000 4.5403 61.0 0.199 0.074 5.1 7.9
8 22000 4.5413 65.0 0.193 0.070 5.3 8.0
9 22000 4.5424 69.7 0.188 0.066 5.4 8.2
10 22000 4.5434 74.5 0.181 0.064 5.4 8.3
11 22000 4.5445 79.0 0.179 0.063 5.4 8.4
12 22000 4.5455 83.5 0.177 0.066 5.6 8.5
13 22000 4.5466 88.1 0.175 0.058 5.7 8.7
14 22000 4.5476 92.8 0.173 0.059 5.7 8.8
15 22000 4.5487 96.8 0.172 0.058 5.9 8.9
16 22000 4.5497 101.2 0.171 0.056 6.2 9.0
17 22000 4.5508 105.2 0.175 0.058 6.3 9.1
18 22000 4.5518 109.1 0.173 0.055 6.5 9.2
19 22000 4.5529 112.5 0.174 0.057 6.8 9.3
20 22000 4.5540 115.8 0.177 0.057 7.0 9.4
21 22000 4.5550 120.1 0.181 0.056 7.3 9.5
@@ -0,0 +1 @@
energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
1 energy lu_bpmsum lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
@@ -0,0 +1 @@
energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
1 energy lu_bpmsum lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
@@ -0,0 +1,21 @@
energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
22000,44.0,0.231,0.097,151.6,207.8
22000,45.2,0.229,0.090,151.7,207.7
22000,47.8,0.219,0.085,151.8,207.7
22000,51.2,0.211,0.084,151.8,207.7
22000,55.3,0.200,0.079,152.0,207.9
22000,59.2,0.199,0.075,152.1,208.2
22000,63.9,0.191,0.074,152.3,208.3
22000,68.3,0.188,0.069,152.5,208.3
22000,72.8,0.179,0.067,152.6,208.5
22000,77.3,0.180,0.065,152.8,208.7
22000,82.3,0.175,0.063,152.9,208.9
22000,86.3,0.174,0.063,152.9,209.0
22000,90.6,0.175,0.062,153.1,209.1
22000,94.9,0.174,0.060,153.2,209.3
22000,99.3,0.173,0.059,153.2,209.5
22000,102.7,0.177,0.058,153.5,209.6
22000,106.3,0.179,0.060,153.7,209.7
22000,110.0,0.179,0.059,153.9,210.0
22000,113.4,0.182,0.055,154.5,210.1
22000,117.0,0.185,0.056,155.2,210.0
1 energy lu_bpmsum lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 22000 44.0 0.231 0.097 151.6 207.8
3 22000 45.2 0.229 0.090 151.7 207.7
4 22000 47.8 0.219 0.085 151.8 207.7
5 22000 51.2 0.211 0.084 151.8 207.7
6 22000 55.3 0.200 0.079 152.0 207.9
7 22000 59.2 0.199 0.075 152.1 208.2
8 22000 63.9 0.191 0.074 152.3 208.3
9 22000 68.3 0.188 0.069 152.5 208.3
10 22000 72.8 0.179 0.067 152.6 208.5
11 22000 77.3 0.180 0.065 152.8 208.7
12 22000 82.3 0.175 0.063 152.9 208.9
13 22000 86.3 0.174 0.063 152.9 209.0
14 22000 90.6 0.175 0.062 153.1 209.1
15 22000 94.9 0.174 0.060 153.2 209.3
16 22000 99.3 0.173 0.059 153.2 209.5
17 22000 102.7 0.177 0.058 153.5 209.6
18 22000 106.3 0.179 0.060 153.7 209.7
19 22000 110.0 0.179 0.059 153.9 210.0
20 22000 113.4 0.182 0.055 154.5 210.1
21 22000 117.0 0.185 0.056 155.2 210.0
@@ -0,0 +1 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
@@ -0,0 +1 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
@@ -0,0 +1,21 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
22000,4.5350,45.1,0.229,0.099,151.0,208.2
22000,4.5360,46.7,0.229,0.096,151.3,207.8
22000,4.5371,49.5,0.218,0.093,151.5,207.8
22000,4.5381,53.0,0.206,0.081,151.5,207.7
22000,4.5392,57.0,0.203,0.080,151.7,207.8
22000,4.5403,61.7,0.194,0.073,151.7,208.1
22000,4.5413,66.2,0.190,0.073,151.7,208.2
22000,4.5424,71.0,0.183,0.069,151.9,208.4
22000,4.5434,75.8,0.177,0.065,152.2,208.4
22000,4.5445,80.2,0.175,0.061,152.3,208.7
22000,4.5455,85.3,0.174,0.061,152.4,208.6
22000,4.5466,90.0,0.172,0.057,152.4,208.8
22000,4.5476,94.1,0.171,0.058,152.5,209.1
22000,4.5487,98.4,0.170,0.057,152.6,209.3
22000,4.5497,102.6,0.170,0.057,152.7,209.5
22000,4.5508,106.7,0.173,0.058,152.8,209.6
22000,4.5518,110.3,0.174,0.053,153.0,209.9
22000,4.5529,114.3,0.175,0.054,153.2,209.9
22000,4.5540,118.7,0.179,0.054,153.8,210.1
22000,4.5550,122.2,0.181,0.054,154.5,210.2
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 22000 4.5350 45.1 0.229 0.099 151.0 208.2
3 22000 4.5360 46.7 0.229 0.096 151.3 207.8
4 22000 4.5371 49.5 0.218 0.093 151.5 207.8
5 22000 4.5381 53.0 0.206 0.081 151.5 207.7
6 22000 4.5392 57.0 0.203 0.080 151.7 207.8
7 22000 4.5403 61.7 0.194 0.073 151.7 208.1
8 22000 4.5413 66.2 0.190 0.073 151.7 208.2
9 22000 4.5424 71.0 0.183 0.069 151.9 208.4
10 22000 4.5434 75.8 0.177 0.065 152.2 208.4
11 22000 4.5445 80.2 0.175 0.061 152.3 208.7
12 22000 4.5455 85.3 0.174 0.061 152.4 208.6
13 22000 4.5466 90.0 0.172 0.057 152.4 208.8
14 22000 4.5476 94.1 0.171 0.058 152.5 209.1
15 22000 4.5487 98.4 0.170 0.057 152.6 209.3
16 22000 4.5497 102.6 0.170 0.057 152.7 209.5
17 22000 4.5508 106.7 0.173 0.058 152.8 209.6
18 22000 4.5518 110.3 0.174 0.053 153.0 209.9
19 22000 4.5529 114.3 0.175 0.054 153.2 209.9
20 22000 4.5540 118.7 0.179 0.054 153.8 210.1
21 22000 4.5550 122.2 0.181 0.054 154.5 210.2
@@ -0,0 +1 @@
energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
1 energy gap lu_bpmsum lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
+49
View File
@@ -0,0 +1,49 @@
energy,dcm_pitch,dcm_perp,lu_bpmsum,lu_Xnorm,lu_Ynorm,bcu_bpmsum,bcu_x,bcu_y,samcam_x,samcam_y
8000,-5.55286,0.04620,10382.0,0.379,0.033,18703.1,52.99,-2.43,5.80,-4.14
8000,-5.55214,0.07155,10235.3,0.224,0.031,18875.3,32.89,-1.90,3.28,-2.77
8000,-5.55106,0.09660,10155.7,0.061,0.028,19050.1,12.94,-1.35,0.74,-1.51
8000,-5.55060,0.12182,10114.6,-0.106,0.027,19252.7,-7.66,-1.17,-1.65,-0.76
8000,-5.55019,0.14665,10160.7,-0.265,0.026,19396.7,-26.18,-1.09,-3.81,-0.36
8000,-5.55156,0.09607,10148.6,0.061,0.031,19026.9,13.57,-2.09,1.09,-3.13
10000,-5.54291,0.01022,2145.7,0.395,0.016,1868.8,57.74,-2.20,5.52,-2.71
10000,-5.54193,0.03547,2119.8,0.223,0.012,1888.9,35.16,-1.53,3.19,-1.74
10000,-5.54112,0.06052,2115.2,0.041,0.010,1901.9,13.97,-0.88,0.97,-0.60
10000,-5.53993,0.08536,2125.5,-0.146,0.010,1909.1,-7.71,-0.39,-0.88,0.21
10000,-5.53949,0.11065,2135.9,-0.326,0.009,1918.2,-28.53,-0.10,-3.06,0.73
10000,-5.54126,0.06029,2112.4,0.038,0.013,1902.3,13.15,-1.30,1.00,-1.26
12400,-5.53642,-0.01161,1782.3,0.388,0.022,657.9,277.26,-1.42,16.68,-1.23
12400,-5.53584,0.01365,1738.8,0.226,0.022,564.8,278.98,-1.21,17.51,-0.86
12400,-5.53465,0.03877,1731.9,0.050,0.021,471.9,279.66,-1.04,17.41,-0.62
12400,-5.53410,0.06384,1734.4,-0.126,0.021,386.5,280.28,-0.83,18.10,-0.14
12400,-5.53311,0.08874,1732.0,-0.296,0.020,308.4,281.61,-0.73,18.66,-0.46
12400,-5.53485,0.03841,1747.4,0.050,0.023,472.2,279.84,-1.26,17.85,-0.81
15000,-5.53253,-0.02426,695.1,0.421,0.022,866.3,62.69,-0.41,4.32,-0.26
15000,-5.53230,0.00104,674.9,0.253,0.022,861.4,43.33,-0.29,2.93,0.14
15000,-5.53088,0.02619,680.6,0.071,0.023,866.8,20.76,-0.07,0.83,0.76
15000,-5.53015,0.05115,677.3,-0.114,0.023,865.9,-0.27,0.16,-1.30,1.36
15000,-5.52958,0.07602,681.4,-0.292,0.023,870.8,-23.02,0.32,-3.59,1.77
15000,-5.53126,0.02545,679.7,0.072,0.024,866.9,20.39,-0.25,0.46,0.23
18000,-5.52928,-0.03216,243.5,0.435,0.029,640.6,69.31,-0.13,5.19,0.32
18000,-5.52882,-0.00703,239.0,0.274,0.028,631.6,49.69,0.09,3.54,0.90
18000,-5.52757,0.01802,238.9,0.097,0.030,629.4,29.03,0.24,3.00,1.11
18000,-5.52697,0.04316,238.0,-0.088,0.027,626.1,6.21,0.37,-0.28,1.66
18000,-5.52659,0.06831,238.2,-0.264,0.027,617.7,-14.69,0.48,-2.01,1.87
18000,-5.52807,0.01776,238.7,0.095,0.029,633.1,27.99,0.08,2.48,0.71
20000,-5.52754,-0.03533,149.7,0.435,0.037,527.0,66.01,-0.08,5.24,0.54
20000,-5.52694,-0.01034,147.6,0.285,0.043,521.3,47.09,0.16,3.74,1.26
20000,-5.52627,0.01477,145.6,0.120,0.042,518.5,26.86,0.26,2.06,1.62
20000,-5.52534,0.03981,146.5,-0.055,0.043,519.0,4.67,0.36,-0.09,1.78
20000,-5.52508,0.06494,145.3,-0.225,0.042,517.6,-16.06,0.51,-1.62,2.37
20000,-5.52659,0.01419,147.6,0.120,0.043,522.5,25.43,0.11,1.45,1.26
22000,-5.52673,-0.03786,94.7,0.439,0.053,313.7,67.87,7.18,5.76,6.28
22000,-5.52583,-0.01278,94.1,0.300,0.052,317.2,48.70,7.29,3.82,6.87
22000,-5.52511,0.01219,93.3,0.150,0.053,318.1,28.92,7.35,1.98,7.38
22000,-5.52459,0.03735,91.3,-0.004,0.053,312.0,11.65,7.40,0.96,7.75
22000,-5.52372,0.06234,92.6,-0.162,0.051,315.6,-8.83,7.44,-0.71,7.89
22000,-5.52560,0.01166,91.8,0.148,0.051,317.4,28.94,7.29,2.31,7.03
25000,-5.52520,-0.04066,48.7,0.451,0.079,29.4,77.93,3.13,7.55,3.69
25000,-5.52441,-0.01570,47.4,0.338,0.080,28.9,61.02,3.24,6.35,3.91
25000,-5.52372,0.00941,47.9,0.200,0.082,29.0,44.01,3.26,4.56,4.15
25000,-5.52285,0.03461,47.3,0.061,0.079,28.8,25.60,3.33,1.59,4.69
25000,-5.52227,0.05956,47.3,-0.066,0.086,28.3,9.14,3.37,-0.05,4.98
25000,-5.52407,0.00896,47.0,0.204,0.089,28.7,44.89,3.06,4.34,4.10
1 energy dcm_pitch dcm_perp lu_bpmsum lu_Xnorm lu_Ynorm bcu_bpmsum bcu_x bcu_y samcam_x samcam_y
2 8000 -5.55286 0.04620 10382.0 0.379 0.033 18703.1 52.99 -2.43 5.80 -4.14
3 8000 -5.55214 0.07155 10235.3 0.224 0.031 18875.3 32.89 -1.90 3.28 -2.77
4 8000 -5.55106 0.09660 10155.7 0.061 0.028 19050.1 12.94 -1.35 0.74 -1.51
5 8000 -5.55060 0.12182 10114.6 -0.106 0.027 19252.7 -7.66 -1.17 -1.65 -0.76
6 8000 -5.55019 0.14665 10160.7 -0.265 0.026 19396.7 -26.18 -1.09 -3.81 -0.36
7 8000 -5.55156 0.09607 10148.6 0.061 0.031 19026.9 13.57 -2.09 1.09 -3.13
8 10000 -5.54291 0.01022 2145.7 0.395 0.016 1868.8 57.74 -2.20 5.52 -2.71
9 10000 -5.54193 0.03547 2119.8 0.223 0.012 1888.9 35.16 -1.53 3.19 -1.74
10 10000 -5.54112 0.06052 2115.2 0.041 0.010 1901.9 13.97 -0.88 0.97 -0.60
11 10000 -5.53993 0.08536 2125.5 -0.146 0.010 1909.1 -7.71 -0.39 -0.88 0.21
12 10000 -5.53949 0.11065 2135.9 -0.326 0.009 1918.2 -28.53 -0.10 -3.06 0.73
13 10000 -5.54126 0.06029 2112.4 0.038 0.013 1902.3 13.15 -1.30 1.00 -1.26
14 12400 -5.53642 -0.01161 1782.3 0.388 0.022 657.9 277.26 -1.42 16.68 -1.23
15 12400 -5.53584 0.01365 1738.8 0.226 0.022 564.8 278.98 -1.21 17.51 -0.86
16 12400 -5.53465 0.03877 1731.9 0.050 0.021 471.9 279.66 -1.04 17.41 -0.62
17 12400 -5.53410 0.06384 1734.4 -0.126 0.021 386.5 280.28 -0.83 18.10 -0.14
18 12400 -5.53311 0.08874 1732.0 -0.296 0.020 308.4 281.61 -0.73 18.66 -0.46
19 12400 -5.53485 0.03841 1747.4 0.050 0.023 472.2 279.84 -1.26 17.85 -0.81
20 15000 -5.53253 -0.02426 695.1 0.421 0.022 866.3 62.69 -0.41 4.32 -0.26
21 15000 -5.53230 0.00104 674.9 0.253 0.022 861.4 43.33 -0.29 2.93 0.14
22 15000 -5.53088 0.02619 680.6 0.071 0.023 866.8 20.76 -0.07 0.83 0.76
23 15000 -5.53015 0.05115 677.3 -0.114 0.023 865.9 -0.27 0.16 -1.30 1.36
24 15000 -5.52958 0.07602 681.4 -0.292 0.023 870.8 -23.02 0.32 -3.59 1.77
25 15000 -5.53126 0.02545 679.7 0.072 0.024 866.9 20.39 -0.25 0.46 0.23
26 18000 -5.52928 -0.03216 243.5 0.435 0.029 640.6 69.31 -0.13 5.19 0.32
27 18000 -5.52882 -0.00703 239.0 0.274 0.028 631.6 49.69 0.09 3.54 0.90
28 18000 -5.52757 0.01802 238.9 0.097 0.030 629.4 29.03 0.24 3.00 1.11
29 18000 -5.52697 0.04316 238.0 -0.088 0.027 626.1 6.21 0.37 -0.28 1.66
30 18000 -5.52659 0.06831 238.2 -0.264 0.027 617.7 -14.69 0.48 -2.01 1.87
31 18000 -5.52807 0.01776 238.7 0.095 0.029 633.1 27.99 0.08 2.48 0.71
32 20000 -5.52754 -0.03533 149.7 0.435 0.037 527.0 66.01 -0.08 5.24 0.54
33 20000 -5.52694 -0.01034 147.6 0.285 0.043 521.3 47.09 0.16 3.74 1.26
34 20000 -5.52627 0.01477 145.6 0.120 0.042 518.5 26.86 0.26 2.06 1.62
35 20000 -5.52534 0.03981 146.5 -0.055 0.043 519.0 4.67 0.36 -0.09 1.78
36 20000 -5.52508 0.06494 145.3 -0.225 0.042 517.6 -16.06 0.51 -1.62 2.37
37 20000 -5.52659 0.01419 147.6 0.120 0.043 522.5 25.43 0.11 1.45 1.26
38 22000 -5.52673 -0.03786 94.7 0.439 0.053 313.7 67.87 7.18 5.76 6.28
39 22000 -5.52583 -0.01278 94.1 0.300 0.052 317.2 48.70 7.29 3.82 6.87
40 22000 -5.52511 0.01219 93.3 0.150 0.053 318.1 28.92 7.35 1.98 7.38
41 22000 -5.52459 0.03735 91.3 -0.004 0.053 312.0 11.65 7.40 0.96 7.75
42 22000 -5.52372 0.06234 92.6 -0.162 0.051 315.6 -8.83 7.44 -0.71 7.89
43 22000 -5.52560 0.01166 91.8 0.148 0.051 317.4 28.94 7.29 2.31 7.03
44 25000 -5.52520 -0.04066 48.7 0.451 0.079 29.4 77.93 3.13 7.55 3.69
45 25000 -5.52441 -0.01570 47.4 0.338 0.080 28.9 61.02 3.24 6.35 3.91
46 25000 -5.52372 0.00941 47.9 0.200 0.082 29.0 44.01 3.26 4.56 4.15
47 25000 -5.52285 0.03461 47.3 0.061 0.079 28.8 25.60 3.33 1.59 4.69
48 25000 -5.52227 0.05956 47.3 -0.066 0.086 28.3 9.14 3.37 -0.05 4.98
49 25000 -5.52407 0.00896 47.0 0.204 0.089 28.7 44.89 3.06 4.34 4.10
+50
View File
@@ -0,0 +1,50 @@
energy,dcm_pitch,dcm_perp,lu_bpmsum,lu_Xnorm,lu_Ynorm,bcu_bpmsum,bcu_x,bcu_y,samcam_x,samcam_y
8000,-5.54961,0.04605,10420.1,0.376,0.029,3631.0,49.15,0.67,11.52,5.97
8000,-5.54898,0.07155,10266.3,0.220,0.027,3667.0,29.02,1.31,8.43,7.53
8000,-5.54793,0.09656,10161.7,0.059,0.025,3697.5,11.59,1.91,6.77,8.73
8000,-5.54753,0.12181,10166.7,-0.108,0.025,3752.0,-7.62,2.08,4.52,9.47
8000,-5.54718,0.14661,10209.4,-0.268,0.027,3797.2,-25.53,1.91,2.31,9.32
8000,-5.54866,0.09602,10151.4,0.060,0.030,3694.3,11.21,0.85,6.54,6.97
10000,-5.53996,0.01018,2146.7,0.395,0.012,4173.7,66.21,1.79,12.24,7.50
10000,-5.53888,0.03533,2129.8,0.223,0.012,4200.4,45.58,2.36,10.50,8.66
10000,-5.53822,0.06040,2110.5,0.041,0.009,4217.4,23.42,2.99,8.02,9.71
10000,-5.53729,0.08533,2123.7,-0.144,0.009,4260.4,1.73,3.14,5.71,9.93
10000,-5.53651,0.11049,2146.2,-0.325,0.006,4305.9,-21.45,3.52,4.00,10.60
10000,-5.53804,0.06020,2128.3,0.039,0.008,4249.9,22.88,2.71,7.66,9.10
12400,-5.53337,-0.01144,1757.7,0.387,0.020,1127.9,58.33,2.14,10.95,9.30
12400,-5.53288,0.01365,1743.4,0.225,0.020,1130.1,39.95,2.37,9.01,10.02
12400,-5.53198,0.03880,1723.4,0.051,0.020,1129.9,21.41,2.61,7.42,10.79
12400,-5.53123,0.06387,1726.8,-0.127,0.020,1140.3,0.12,2.72,4.85,11.23
12400,-5.53050,0.08882,1727.8,-0.297,0.020,1142.7,-19.63,2.69,2.72,11.42
12400,-5.53219,0.03821,1723.1,0.052,0.022,1130.2,20.94,2.23,7.10,9.85
15000,-5.52989,-0.02420,705.4,0.420,0.020,836.9,69.62,2.37,11.75,9.80
15000,-5.52923,0.00090,694.1,0.253,0.020,838.2,48.10,2.62,9.44,10.55
15000,-5.52836,0.02601,681.9,0.074,0.020,831.4,28.62,2.82,8.14,10.89
15000,-5.52743,0.05101,684.3,-0.113,0.020,837.3,6.72,3.04,6.66,11.74
15000,-5.52688,0.07591,684.6,-0.288,0.020,837.2,-16.52,3.02,3.41,11.76
15000,-5.52865,0.02558,681.3,0.073,0.021,833.9,27.52,2.50,7.92,10.32
18000,-5.52676,-0.03221,243.0,0.439,0.026,634.8,75.86,2.82,12.73,10.09
18000,-5.52612,-0.00702,238.4,0.278,0.025,626.2,55.97,2.96,11.24,10.60
18000,-5.52531,0.01797,236.0,0.102,0.025,626.6,33.48,3.05,8.88,10.80
18000,-5.52351,0.04318,243.1,-0.093,0.026,641.4,6.43,3.06,6.04,11.37
18000,-5.52377,0.06826,237.3,-0.260,0.025,626.7,-11.72,3.15,4.89,11.57
18000,-5.52575,0.01770,237.0,0.100,0.027,630.1,33.64,2.92,9.20,10.65
20000,-5.52563,-0.03533,150.2,0.437,0.033,526.3,75.57,2.70,13.15,10.34
20000,-5.52511,-0.01018,146.9,0.289,0.038,522.3,55.49,2.87,11.72,10.80
20000,-5.52424,0.01472,145.2,0.127,0.038,520.9,35.38,2.91,9.80,11.07
20000,-5.52293,0.03993,151.1,-0.055,0.039,526.7,11.34,3.04,7.27,11.70
20000,-5.52270,0.06493,143.6,-0.216,0.040,519.3,-9.14,3.19,5.32,12.17
20000,-5.52456,0.01452,145.2,0.125,0.039,522.2,34.39,2.85,9.25,10.98
22000,-5.52438,-0.03785,95.3,0.442,0.050,307.4,74.28,8.27,13.62,17.13
22000,-5.52351,-0.01287,94.0,0.309,0.052,306.3,56.94,8.33,12.47,17.58
22000,-5.52293,0.01218,93.2,0.156,0.054,307.2,36.00,8.32,9.40,17.66
22000,-5.52198,0.03724,91.8,-0.001,0.053,304.4,16.82,8.36,7.67,18.17
22000,-5.52038,0.06232,95.9,-0.166,0.048,323.4,-11.03,8.43,3.74,18.77
22000,-5.52334,0.01195,93.4,0.156,0.054,310.4,35.98,8.32,10.02,17.56
25000,-5.52259,-0.04064,50.9,0.457,0.078,29.2,82.32,5.17,14.04,13.07
25000,-5.52192,-0.01571,49.8,0.333,0.084,28.7,66.11,5.27,12.11,13.34
25000,-5.52146,0.00935,49.5,0.200,0.084,28.4,48.09,5.35,9.55,13.67
25000,-5.52038,0.03446,48.4,0.067,0.078,28.1,32.60,5.32,7.63,13.82
25000,-5.52000,0.05949,47.6,-0.066,0.083,27.7,15.18,5.40,6.00,14.10
25000,-5.52198,0.00916,48.5,0.204,0.085,28.1,48.98,5.29,9.77,13.60
1 energy dcm_pitch dcm_perp lu_bpmsum lu_Xnorm lu_Ynorm bcu_bpmsum bcu_x bcu_y samcam_x samcam_y
2 8000 -5.54961 0.04605 10420.1 0.376 0.029 3631.0 49.15 0.67 11.52 5.97
3 8000 -5.54898 0.07155 10266.3 0.220 0.027 3667.0 29.02 1.31 8.43 7.53
4 8000 -5.54793 0.09656 10161.7 0.059 0.025 3697.5 11.59 1.91 6.77 8.73
5 8000 -5.54753 0.12181 10166.7 -0.108 0.025 3752.0 -7.62 2.08 4.52 9.47
6 8000 -5.54718 0.14661 10209.4 -0.268 0.027 3797.2 -25.53 1.91 2.31 9.32
7 8000 -5.54866 0.09602 10151.4 0.060 0.030 3694.3 11.21 0.85 6.54 6.97
8 10000 -5.53996 0.01018 2146.7 0.395 0.012 4173.7 66.21 1.79 12.24 7.50
9 10000 -5.53888 0.03533 2129.8 0.223 0.012 4200.4 45.58 2.36 10.50 8.66
10 10000 -5.53822 0.06040 2110.5 0.041 0.009 4217.4 23.42 2.99 8.02 9.71
11 10000 -5.53729 0.08533 2123.7 -0.144 0.009 4260.4 1.73 3.14 5.71 9.93
12 10000 -5.53651 0.11049 2146.2 -0.325 0.006 4305.9 -21.45 3.52 4.00 10.60
13 10000 -5.53804 0.06020 2128.3 0.039 0.008 4249.9 22.88 2.71 7.66 9.10
14 12400 -5.53337 -0.01144 1757.7 0.387 0.020 1127.9 58.33 2.14 10.95 9.30
15 12400 -5.53288 0.01365 1743.4 0.225 0.020 1130.1 39.95 2.37 9.01 10.02
16 12400 -5.53198 0.03880 1723.4 0.051 0.020 1129.9 21.41 2.61 7.42 10.79
17 12400 -5.53123 0.06387 1726.8 -0.127 0.020 1140.3 0.12 2.72 4.85 11.23
18 12400 -5.53050 0.08882 1727.8 -0.297 0.020 1142.7 -19.63 2.69 2.72 11.42
19 12400 -5.53219 0.03821 1723.1 0.052 0.022 1130.2 20.94 2.23 7.10 9.85
20 15000 -5.52989 -0.02420 705.4 0.420 0.020 836.9 69.62 2.37 11.75 9.80
21 15000 -5.52923 0.00090 694.1 0.253 0.020 838.2 48.10 2.62 9.44 10.55
22 15000 -5.52836 0.02601 681.9 0.074 0.020 831.4 28.62 2.82 8.14 10.89
23 15000 -5.52743 0.05101 684.3 -0.113 0.020 837.3 6.72 3.04 6.66 11.74
24 15000 -5.52688 0.07591 684.6 -0.288 0.020 837.2 -16.52 3.02 3.41 11.76
25 15000 -5.52865 0.02558 681.3 0.073 0.021 833.9 27.52 2.50 7.92 10.32
26 18000 -5.52676 -0.03221 243.0 0.439 0.026 634.8 75.86 2.82 12.73 10.09
27 18000 -5.52612 -0.00702 238.4 0.278 0.025 626.2 55.97 2.96 11.24 10.60
28 18000 -5.52531 0.01797 236.0 0.102 0.025 626.6 33.48 3.05 8.88 10.80
29 18000 -5.52351 0.04318 243.1 -0.093 0.026 641.4 6.43 3.06 6.04 11.37
30 18000 -5.52377 0.06826 237.3 -0.260 0.025 626.7 -11.72 3.15 4.89 11.57
31 18000 -5.52575 0.01770 237.0 0.100 0.027 630.1 33.64 2.92 9.20 10.65
32 20000 -5.52563 -0.03533 150.2 0.437 0.033 526.3 75.57 2.70 13.15 10.34
33 20000 -5.52511 -0.01018 146.9 0.289 0.038 522.3 55.49 2.87 11.72 10.80
34 20000 -5.52424 0.01472 145.2 0.127 0.038 520.9 35.38 2.91 9.80 11.07
35 20000 -5.52293 0.03993 151.1 -0.055 0.039 526.7 11.34 3.04 7.27 11.70
36 20000 -5.52270 0.06493 143.6 -0.216 0.040 519.3 -9.14 3.19 5.32 12.17
37 20000 -5.52456 0.01452 145.2 0.125 0.039 522.2 34.39 2.85 9.25 10.98
38 22000 -5.52438 -0.03785 95.3 0.442 0.050 307.4 74.28 8.27 13.62 17.13
39 22000 -5.52351 -0.01287 94.0 0.309 0.052 306.3 56.94 8.33 12.47 17.58
40 22000 -5.52293 0.01218 93.2 0.156 0.054 307.2 36.00 8.32 9.40 17.66
41 22000 -5.52198 0.03724 91.8 -0.001 0.053 304.4 16.82 8.36 7.67 18.17
42 22000 -5.52038 0.06232 95.9 -0.166 0.048 323.4 -11.03 8.43 3.74 18.77
43 22000 -5.52334 0.01195 93.4 0.156 0.054 310.4 35.98 8.32 10.02 17.56
44 25000 -5.52259 -0.04064 50.9 0.457 0.078 29.2 82.32 5.17 14.04 13.07
45 25000 -5.52192 -0.01571 49.8 0.333 0.084 28.7 66.11 5.27 12.11 13.34
46 25000 -5.52146 0.00935 49.5 0.200 0.084 28.4 48.09 5.35 9.55 13.67
47 25000 -5.52038 0.03446 48.4 0.067 0.078 28.1 32.60 5.32 7.63 13.82
48 25000 -5.52000 0.05949 47.6 -0.066 0.083 27.7 15.18 5.40 6.00 14.10
49 25000 -5.52198 0.00916 48.5 0.204 0.085 28.1 48.98 5.29 9.77 13.60
@@ -0,0 +1,9 @@
energy,calc_perp,actual_perp
8000,0.0961,0.1716
10000,0.0604,0.1549
12400,0.0389,0.1239
15000,0.0264,0.1273
18000,0.0183,0.1242
20000,0.0148,0.1322
22000,0.0122,0.1089
25000,0.0094,0.1293
1 energy calc_perp actual_perp
2 8000 0.0961 0.1716
3 10000 0.0604 0.1549
4 12400 0.0389 0.1239
5 15000 0.0264 0.1273
6 18000 0.0183 0.1242
7 20000 0.0148 0.1322
8 22000 0.0122 0.1089
9 25000 0.0094 0.1293
@@ -0,0 +1,7 @@
energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
12400,-5.54257,-0.01078,1691.2,0.385,0.022,154.5,207.5
12400,-5.54190,0.01438,1661.5,0.220,0.021,151.8,207.5
12400,-5.54071,0.03945,1650.8,0.043,0.021,149.4,207.8
12400,-5.54013,0.06453,1660.1,-0.135,0.019,146.7,207.9
12400,-5.53943,0.08952,1668.0,-0.309,0.018,144.3,207.8
12400,-5.54117,0.03912,1656.2,0.043,0.021,149.4,207.9
1 energy dcm_pitch dcm_perp lu_bpms lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 12400 -5.54257 -0.01078 1691.2 0.385 0.022 154.5 207.5
3 12400 -5.54190 0.01438 1661.5 0.220 0.021 151.8 207.5
4 12400 -5.54071 0.03945 1650.8 0.043 0.021 149.4 207.8
5 12400 -5.54013 0.06453 1660.1 -0.135 0.019 146.7 207.9
6 12400 -5.53943 0.08952 1668.0 -0.309 0.018 144.3 207.8
7 12400 -5.54117 0.03912 1656.2 0.043 0.021 149.4 207.9
@@ -0,0 +1,37 @@
energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
8000,-5.55530,0.04620,10382.2,0.377,0.034,155.1,206.7
8000,-5.55463,0.07151,10210.1,0.224,0.032,152.4,207.1
8000,-5.55347,0.09661,10150.2,0.060,0.030,149.9,207.1
8000,-5.55318,0.12173,10188.8,-0.105,0.027,147.2,207.1
8000,-5.55286,0.14660,10257.9,-0.265,0.026,144.9,207.2
8000,-5.55422,0.09602,10208.3,0.062,0.032,149.9,206.8
10000,-5.54581,0.01000,2154.1,0.399,0.014,154.9,206.8
10000,-5.54492,0.03521,2131.2,0.227,0.012,152.5,207.2
10000,-5.54387,0.06022,2124.8,0.043,0.011,149.8,206.9
10000,-5.54294,0.08527,2117.4,-0.142,0.010,147.2,207.1
10000,-5.54245,0.11042,2132.4,-0.321,0.009,144.6,207.2
10000,-5.54396,0.06000,2123.1,0.043,0.015,149.8,206.8
12400,-5.53932,-0.01168,1777.2,0.393,0.025,154.7,208.1
12400,-5.53857,0.01372,1753.2,0.226,0.023,151.9,208.0
12400,-5.53758,0.03879,1741.0,0.051,0.023,149.3,207.8
12400,-5.53680,0.06381,1746.4,-0.127,0.022,146.6,207.9
12400,-5.53578,0.08885,1735.1,-0.297,0.021,144.3,207.9
12400,-5.53784,0.03831,1738.9,0.053,0.024,149.4,207.9
15000,-5.53508,-0.02455,702.0,0.424,0.025,155.1,207.9
15000,-5.53491,0.00059,688.9,0.258,0.025,152.5,207.9
15000,-5.53346,0.02566,686.8,0.076,0.025,149.7,207.5
15000,-5.53282,0.05075,673.3,-0.108,0.023,147.2,207.7
15000,-5.53201,0.07570,676.5,-0.287,0.023,144.6,207.8
15000,-5.53387,0.02524,687.1,0.078,0.026,150.0,207.9
18000,-5.53155,-0.03228,247.5,0.441,0.031,155.1,207.5
18000,-5.53117,-0.00715,244.3,0.278,0.033,152.4,207.9
18000,-5.52992,0.01783,240.1,0.100,0.029,149.9,207.9
18000,-5.52894,0.04301,240.7,-0.085,0.029,147.3,207.7
18000,-5.52873,0.06809,238.2,-0.259,0.028,144.9,207.9
18000,-5.53033,0.01710,241.8,0.101,0.032,149.9,207.7
20000,-5.53007,-0.03591,151.9,0.442,0.041,155.5,208.0
20000,-5.52940,-0.01040,150.2,0.288,0.042,152.8,207.8
20000,-5.52841,0.01479,143.4,0.122,0.045,150.1,207.8
20000,-5.52754,0.03992,148.1,-0.056,0.042,147.5,207.7
20000,-5.52720,0.06484,147.1,-0.223,0.040,145.0,207.7
20000,-5.52897,0.01418,149.5,0.122,0.041,150.2,208.0
1 energy dcm_pitch dcm_perp lu_bpms lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 8000 -5.55530 0.04620 10382.2 0.377 0.034 155.1 206.7
3 8000 -5.55463 0.07151 10210.1 0.224 0.032 152.4 207.1
4 8000 -5.55347 0.09661 10150.2 0.060 0.030 149.9 207.1
5 8000 -5.55318 0.12173 10188.8 -0.105 0.027 147.2 207.1
6 8000 -5.55286 0.14660 10257.9 -0.265 0.026 144.9 207.2
7 8000 -5.55422 0.09602 10208.3 0.062 0.032 149.9 206.8
8 10000 -5.54581 0.01000 2154.1 0.399 0.014 154.9 206.8
9 10000 -5.54492 0.03521 2131.2 0.227 0.012 152.5 207.2
10 10000 -5.54387 0.06022 2124.8 0.043 0.011 149.8 206.9
11 10000 -5.54294 0.08527 2117.4 -0.142 0.010 147.2 207.1
12 10000 -5.54245 0.11042 2132.4 -0.321 0.009 144.6 207.2
13 10000 -5.54396 0.06000 2123.1 0.043 0.015 149.8 206.8
14 12400 -5.53932 -0.01168 1777.2 0.393 0.025 154.7 208.1
15 12400 -5.53857 0.01372 1753.2 0.226 0.023 151.9 208.0
16 12400 -5.53758 0.03879 1741.0 0.051 0.023 149.3 207.8
17 12400 -5.53680 0.06381 1746.4 -0.127 0.022 146.6 207.9
18 12400 -5.53578 0.08885 1735.1 -0.297 0.021 144.3 207.9
19 12400 -5.53784 0.03831 1738.9 0.053 0.024 149.4 207.9
20 15000 -5.53508 -0.02455 702.0 0.424 0.025 155.1 207.9
21 15000 -5.53491 0.00059 688.9 0.258 0.025 152.5 207.9
22 15000 -5.53346 0.02566 686.8 0.076 0.025 149.7 207.5
23 15000 -5.53282 0.05075 673.3 -0.108 0.023 147.2 207.7
24 15000 -5.53201 0.07570 676.5 -0.287 0.023 144.6 207.8
25 15000 -5.53387 0.02524 687.1 0.078 0.026 150.0 207.9
26 18000 -5.53155 -0.03228 247.5 0.441 0.031 155.1 207.5
27 18000 -5.53117 -0.00715 244.3 0.278 0.033 152.4 207.9
28 18000 -5.52992 0.01783 240.1 0.100 0.029 149.9 207.9
29 18000 -5.52894 0.04301 240.7 -0.085 0.029 147.3 207.7
30 18000 -5.52873 0.06809 238.2 -0.259 0.028 144.9 207.9
31 18000 -5.53033 0.01710 241.8 0.101 0.032 149.9 207.7
32 20000 -5.53007 -0.03591 151.9 0.442 0.041 155.5 208.0
33 20000 -5.52940 -0.01040 150.2 0.288 0.042 152.8 207.8
34 20000 -5.52841 0.01479 143.4 0.122 0.045 150.1 207.8
35 20000 -5.52754 0.03992 148.1 -0.056 0.042 147.5 207.7
36 20000 -5.52720 0.06484 147.1 -0.223 0.040 145.0 207.7
37 20000 -5.52897 0.01418 149.5 0.122 0.041 150.2 208.0
@@ -0,0 +1,7 @@
energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
22000,-5.52975,-0.03800,95.9,0.445,0.057,155.6,208.2
22000,-5.52920,-0.01307,95.4,0.305,0.054,153.2,208.1
22000,-5.52841,0.01204,94.1,0.155,0.059,150.5,207.8
22000,-5.52737,0.03716,91.9,-0.005,0.057,147.8,208.0
22000,-5.52685,0.06211,90.4,-0.163,0.055,145.3,208.3
22000,-5.52868,0.01139,93.3,0.156,0.058,150.5,207.9
1 energy dcm_pitch dcm_perp lu_bpms lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 22000 -5.52975 -0.03800 95.9 0.445 0.057 155.6 208.2
3 22000 -5.52920 -0.01307 95.4 0.305 0.054 153.2 208.1
4 22000 -5.52841 0.01204 94.1 0.155 0.059 150.5 207.8
5 22000 -5.52737 0.03716 91.9 -0.005 0.057 147.8 208.0
6 22000 -5.52685 0.06211 90.4 -0.163 0.055 145.3 208.3
7 22000 -5.52868 0.01139 93.3 0.156 0.058 150.5 207.9
@@ -0,0 +1,7 @@
energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
25000,-5.52920,-0.09079,52.0,0.654,0.081,164.6,209.6
25000,-5.52891,-0.06548,50.5,0.556,0.083,161.6,209.5
25000,-5.52778,-0.04040,49.8,0.454,0.092,158.6,209.5
25000,-5.52694,-0.01548,49.0,0.332,0.090,155.7,209.5
25000,-5.52641,0.00966,47.2,0.207,0.088,152.7,209.4
25000,-5.51861,-0.04039,29.1,0.349,0.120,149.6,208.4
1 energy dcm_pitch dcm_perp lu_bpms lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 25000 -5.52920 -0.09079 52.0 0.654 0.081 164.6 209.6
3 25000 -5.52891 -0.06548 50.5 0.556 0.083 161.6 209.5
4 25000 -5.52778 -0.04040 49.8 0.454 0.092 158.6 209.5
5 25000 -5.52694 -0.01548 49.0 0.332 0.090 155.7 209.5
6 25000 -5.52641 0.00966 47.2 0.207 0.088 152.7 209.4
7 25000 -5.51861 -0.04039 29.1 0.349 0.120 149.6 208.4
@@ -0,0 +1,6 @@
energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
25000,-5.52807,-0.04030,49.4,0.453,0.083,156.2,208.6
25000,-5.52737,-0.01540,49.3,0.331,0.086,153.0,208.6
25000,-5.52682,0.00982,47.5,0.208,0.088,150.5,208.3
25000,-5.52612,0.03493,46.4,0.075,0.087,148.0,208.2
25000,-5.52557,0.05990,47.5,-0.060,0.079,145.4,208.1
1 energy dcm_pitch dcm_perp lu_bpms lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 25000 -5.52807 -0.04030 49.4 0.453 0.083 156.2 208.6
3 25000 -5.52737 -0.01540 49.3 0.331 0.086 153.0 208.6
4 25000 -5.52682 0.00982 47.5 0.208 0.088 150.5 208.3
5 25000 -5.52612 0.03493 46.4 0.075 0.087 148.0 208.2
6 25000 -5.52557 0.05990 47.5 -0.060 0.079 145.4 208.1
@@ -0,0 +1,7 @@
energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y
25000,-5.52821,-0.04084,50.0,0.455,0.088,157.8,209.4
25000,-5.52786,-0.01596,49.2,0.338,0.087,155.0,209.1
25000,-5.52714,0.00910,48.2,0.205,0.088,152.1,209.2
25000,-5.52633,0.03430,47.3,0.074,0.094,149.2,209.0
25000,-5.52589,0.05926,46.6,-0.062,0.092,146.4,209.2
25000,-5.52743,0.00884,47.8,0.203,0.094,152.1,209.0
1 energy dcm_pitch dcm_perp lu_bpms lu_Xnorm lu_Ynorm xi_cam_x xi_cam_y
2 25000 -5.52821 -0.04084 50.0 0.455 0.088 157.8 209.4
3 25000 -5.52786 -0.01596 49.2 0.338 0.087 155.0 209.1
4 25000 -5.52714 0.00910 48.2 0.205 0.088 152.1 209.2
5 25000 -5.52633 0.03430 47.3 0.074 0.094 149.2 209.0
6 25000 -5.52589 0.05926 46.6 -0.062 0.092 146.4 209.2
7 25000 -5.52743 0.00884 47.8 0.203 0.094 152.1 209.0
+14
View File
@@ -0,0 +1,14 @@
energy,23rd Sep,6th Sep,offset
6000,-5.561,-5.5182,-0.0428
8000,-5.5432,-5.5032,-0.04
10000,-5.5349,-5.4956,-0.039300000000001
12000,-5.5297,-5.4906,-0.0391
14000,-5.5268,-5.4877,-0.0391
16000,-5.5244,-5.4856,-0.0388
18000,-5.5218,-5.4833,-0.0385
20000,-5.5203,-5.482,-0.0383
22000,-5.5194,-5.4807,-0.0387
24000,-5.519,-5.4791,-0.0399
26000,-5.5183,-5.4791,-0.0392
28000,-5.5179,-5.4791,-0.0388
30000,-5.518,,
1 energy 23rd Sep 6th Sep offset
2 6000 -5.561 -5.5182 -0.0428
3 8000 -5.5432 -5.5032 -0.04
4 10000 -5.5349 -5.4956 -0.039300000000001
5 12000 -5.5297 -5.4906 -0.0391
6 14000 -5.5268 -5.4877 -0.0391
7 16000 -5.5244 -5.4856 -0.0388
8 18000 -5.5218 -5.4833 -0.0385
9 20000 -5.5203 -5.482 -0.0383
10 22000 -5.5194 -5.4807 -0.0387
11 24000 -5.519 -5.4791 -0.0399
12 26000 -5.5183 -5.4791 -0.0392
13 28000 -5.5179 -5.4791 -0.0388
14 30000 -5.518
@@ -0,0 +1,10 @@
Roll,Y pos
3.000000,532.1747746692758
3.375000,646.8383766556484
3.750000,758.2370844371503
4.125000,870.6457787689487
4.500000,980.6793737229799
4.875000,1080.7759963202259
5.250000,1182.3265384715614
5.625000,1290.697731056017
6.000000,1376.2798011728055
1 Roll Y pos
2 3.000000 532.1747746692758
3 3.375000 646.8383766556484
4 3.750000 758.2370844371503
5 4.125000 870.6457787689487
6 4.500000 980.6793737229799
7 4.875000 1080.7759963202259
8 5.250000 1182.3265384715614
9 5.625000 1290.697731056017
10 6.000000 1376.2798011728055
@@ -0,0 +1,10 @@
Roll,Y pos
1.000000,692.942650491312
1.875000,755.6432908308136
2.750000,819.8962183038443
3.625000,883.0441749851776
4.500000,944.625963858652
5.375000,1004.513235574581
6.250000,1061.1821742077382
7.125000,1116.371127886505
8.000000,1169.189245633994
1 Roll Y pos
2 1.000000 692.942650491312
3 1.875000 755.6432908308136
4 2.750000 819.8962183038443
5 3.625000 883.0441749851776
6 4.500000 944.625963858652
7 5.375000 1004.513235574581
8 6.250000 1061.1821742077382
9 7.125000 1116.371127886505
10 8.000000 1169.189245633994
@@ -0,0 +1,10 @@
Roll,Y pos
3.000000,532.1747746692758
3.375000,646.8383766556484
3.750000,758.2370844371503
4.125000,870.6457787689487
4.500000,980.6793737229799
4.875000,1080.7759963202259
5.250000,1182.3265384715614
5.625000,1290.697731056017
6.000000,1376.2798011728055
1 Roll Y pos
2 3.000000 532.1747746692758
3 3.375000 646.8383766556484
4 3.750000 758.2370844371503
5 4.125000 870.6457787689487
6 4.500000 980.6793737229799
7 4.875000 1080.7759963202259
8 5.250000 1182.3265384715614
9 5.625000 1290.697731056017
10 6.000000 1376.2798011728055
@@ -0,0 +1,10 @@
Roll,Y pos
1.000000,620.3258474297603
1.875000,727.3412656967532
2.750000,831.2895400246484
3.625000,936.7106895320477
4.500000,1039.8208898439514
5.375000,1139.02499725308
6.250000,1232.640351083367
7.125000,1322.7239076386252
8.000000,1408.4337046604637
1 Roll Y pos
2 1.000000 620.3258474297603
3 1.875000 727.3412656967532
4 2.750000 831.2895400246484
5 3.625000 936.7106895320477
6 4.500000 1039.8208898439514
7 5.375000 1139.02499725308
8 6.250000 1232.640351083367
9 7.125000 1322.7239076386252
10 8.000000 1408.4337046604637
@@ -0,0 +1,10 @@
Roll,Y pos
3.000000,367.5626514183679
3.250000,490.76539071940647
3.500000,614.0409323259951
3.750000,734.2089839347528
4.000000,854.3453573633882
4.250000,969.9637066596362
4.500000,1084.8613752711697
4.750000,1195.432631465686
5.000000,1299.759493848411
1 Roll Y pos
2 3.000000 367.5626514183679
3 3.250000 490.76539071940647
4 3.500000 614.0409323259951
5 3.750000 734.2089839347528
6 4.000000 854.3453573633882
7 4.250000 969.9637066596362
8 4.500000 1084.8613752711697
9 4.750000 1195.432631465686
10 5.000000 1299.759493848411
@@ -0,0 +1,10 @@
Roll,Y pos
1.000000,645.3410172392396
1.875000,716.7857063422749
2.750000,798.4006801804591
3.625000,879.2062486869808
4.500000,948.0120679453303
5.375000,1010.590100145263
6.250000,1067.4532506840437
7.125000,1123.6687191435465
8.000000,1176.749800578109
1 Roll Y pos
2 1.000000 645.3410172392396
3 1.875000 716.7857063422749
4 2.750000 798.4006801804591
5 3.625000 879.2062486869808
6 4.500000 948.0120679453303
7 5.375000 1010.590100145263
8 6.250000 1067.4532506840437
9 7.125000 1123.6687191435465
10 8.000000 1176.749800578109
@@ -0,0 +1,10 @@
Roll,Y pos
2.000000,329.981417633099
2.250000,405.3057428861756
2.500000,483.27540977301703
2.750000,554.0746091974096
3.000000,630.9466804651072
3.250000,706.8771151250418
3.500000,782.8947653437505
3.750000,857.5768007188707
4.000000,931.2567888482613
1 Roll Y pos
2 2.000000 329.981417633099
3 2.250000 405.3057428861756
4 2.500000 483.27540977301703
5 2.750000 554.0746091974096
6 3.000000 630.9466804651072
7 3.250000 706.8771151250418
8 3.500000 782.8947653437505
9 3.750000 857.5768007188707
10 4.000000 931.2567888482613
@@ -0,0 +1 @@
Roll,Y pos
1 Roll Y pos
+10
View File
@@ -0,0 +1,10 @@
Roll,Y pos
2.000000,329.981417633099
2.250000,405.3057428861756
2.500000,483.27540977301703
2.750000,554.0746091974096
3.000000,630.9466804651072
3.250000,706.8771151250418
3.500000,782.8947653437505
3.750000,857.5768007188707
4.000000,931.2567888482613
1 Roll Y pos
2 2.000000 329.981417633099
3 2.250000 405.3057428861756
4 2.500000 483.27540977301703
5 2.750000 554.0746091974096
6 3.000000 630.9466804651072
7 3.250000 706.8771151250418
8 3.500000 782.8947653437505
9 3.750000 857.5768007188707
10 4.000000 931.2567888482613
+45 -6
View File
@@ -101,11 +101,38 @@ def fit(data, fit_params):
params["base_intercept"].set(value=y_min)
params["base_slope"].set(value=0)
# # Add peak-specific parameters
# params.update(peak_model.guess(processed_data["y_to_fit"], x=processed_data["x_data"]))
# # Perform the fitting
# lmfit_result = full_model.fit(processed_data["y_to_fit"], params, x=processed_data["x_data"])
# Add peak-specific parameters
params.update(peak_model.guess(processed_data["y_to_fit"], x=processed_data["x_data"]))
x_data = np.asarray(processed_data["x_data"])
params.update(
peak_model.guess(
processed_data["y_to_fit"],
x=x_data,
)
)
# Constrain peak width to something physically resolvable by the scan
step = np.median(np.diff(np.sort(x_data)))
scan_range = np.ptp(x_data)
if "peak_sigma" in params:
params["peak_sigma"].set(
min=0.5 * step,
max=0.5 * scan_range,
)
# Perform the fitting
lmfit_result = full_model.fit(processed_data["y_to_fit"], params, x=processed_data["x_data"])
lmfit_result = full_model.fit(
processed_data["y_to_fit"],
params,
x=x_data,
)
# Find the X that gives the max Y
max_index = np.argmax(processed_data["y_to_fit"])
@@ -125,6 +152,7 @@ def fit(data, fit_params):
centre_stderr = lmfit_result.params["peak_center"].stderr
height_stderr = lmfit_result.params["peak_height"].stderr
snr = height / noise if noise > 0 else np.inf
@@ -166,8 +194,8 @@ def check_peak_fit(x_data, result, min_fwhm_steps=3):
centre = result["centre"]
fwhm = result["fwhm"]
step_size = np.mean(np.diff(x_data))
fwhm_steps = result["fwhm"] / abs(step_size)
fwhm_steps = fwhm / step
problems = []
@@ -189,8 +217,19 @@ def check_peak_fit(x_data, result, min_fwhm_steps=3):
if centre_stderr is None:
problems.append("centre uncertainty could not be estimated")
elif centre_stderr > 0.2 * fwhm:
problems.append(f"centre uncertainty is large " f"({centre_stderr:.3g})")
elif centre_stderr > 0.5 * step:
problems.append(
f"centre uncertainty is large "
f"({centre_stderr:.3g}, "
f"{centre_stderr / step:.2f} scan steps)"
)
print("FIT DEBUG")
print(f"centre : {centre}")
print(f"fwhm : {fwhm}")
print(f"step : {step}")
print(f"fwhm/step : {fwhm / step}")
print(f"centre error : {result.get('centre_stderr')}")
return {"success": not problems, "problems": problems}
+2 -88
View File
@@ -4,104 +4,16 @@ import epics
import time
import numpy as np
import matplotlib.pyplot as plt
from pxii_bec.scripts import beamline_context as bl
# =============================================================================
# Camera utilities
# =============================================================================
def read_scintXY(zoom=800, image=False):
"""Get the X and Y beam positions from the sample camera at
a sepcified zoom. Default zoom is 800"""
# Target position on sample camera
x_target = BeamMove.scint_target_x
y_target = BeamMove.scint_target_y
results = {}
# Ensure shutter and detector cover are closed before changing states
dev.bcu_shutter.put(0)
if bl.d["det_cov"].pos != "close":
bl.d["det_cov"].move("close")
try:
# set transmission to 10%
current_transm = get_value(dev.transm)
if abs(current_transm - 0.1) > 0.01:
dev.transm.put(0.1)
# set camera zoom
if get_value(dev.scam_zoom) != zoom:
umv(dev.scam_zoom, zoom)
# move to beam visualisation
if not bl.planner.is_state(BeamlineState.BEAM_VISUALISATION):
bl.planner.move_to(BeamlineState.BEAM_VISUALISATION)
# open shutter
dev.bcu_shutter.put(1)
# set autoexposure and check there is a reading in the image
time.sleep(0.5)
auto_exposure(cam="samcam", max_iter=25)
time.sleep(0.2)
max_signal = get_value(dev.samcam_max)
results["max_signal"] = max_signal
if max_signal < BeamMove.min_scint_signal:
return {
"ok": False,
"message": (
f"No beam detected on the scintillator "
f"(max signal = {max_signal:.0f})"
),
"max_signal": max_signal,
}
x_px = dev.samcam_x.read()["samcam_x"]["value"]
y_px = dev.samcam_y.read()["samcam_y"]["value"]
results["X_pixels"] = x_px
results["Y_pixels"] = y_px
results["ok"] = True
results["message"] = (
f"Beam detected at X={x_px:.1f}, Y ={y_px:.1f} px"
)
# Calculate difference from target position
diff_x = x_target - x_px
diff_y = y_target - y_px
results["X_diff_px"] = diff_x
results["Y diff_px"] = diff_y
# Convert to pixels
diff_x_mic = calc_scam_microns(diff_x, zoom)
diff_y_mic = calc_scam_microns(diff_y, zoom)
results["X_diff_microns"] = diff_x_mic
results["Y_diff_microns"] = diff_y_mic
# Measure beamsize
x_fwhm, y_fwhm = measure_beamsize()
results["X_FWHM"] = x_fwhm
results["Y_FWHM"] = y_fwhm
print(f"Beam position: X = {results['X_pixels']:.1f} px, "
f"Y = {results['Y_pixels']:.1f} px\n"
f"Distance from crosshair: X = {results['X_diff_microns']:.1f} microns, "
f"Y = {results['Y_diff_microns']:.1f} microns\n",
f"X size (fwhm) = {results["X_FWHM"]:.1f} microns, "
f"Y size (fwhm) = {results["Y_FWHM"]:.1f} microns")
if image:
imagedata = get_cam_image(Cameras.sample)
results["image"] = imagedata
return results
finally:
# print("done")
dev.bcu_shutter.put(0)
def get_cam_image(prefix):
@@ -291,3 +203,5 @@ def create_empty_daily_report(filename):
return filename
+11 -6
View File
@@ -5,6 +5,7 @@ from typing import Callable, List, Dict, Optional, Union
from bec_lib.logger import bec_logger
from bec_lib.device import Device
def motor_resolver(bec_name):
"""Used to handle aerotech and smargon motors"""
@@ -24,6 +25,7 @@ def motor_resolver(bec_name):
raise ValueError(f"Cannot resolve motor for '{bec_name}'")
@dataclass
class PositionDevice:
"""Generic device that moves between named or numeric positions"""
@@ -53,14 +55,20 @@ class PositionDevice:
if isinstance(target, str):
name = target.lower()
try:
bec_logger.logger.info(f"attempting to find position {name} from bec device {self.bec_name} userParameter.")
bec_logger.logger.info(
f"attempting to find position {name} from bec device {self.bec_name} userParameter."
)
bec_device: Device = dev[self.bec_name]
position = bec_device.user_parameter[target]
bec_logger.logger.info(f"obtained position {position} - compare to cached value {self.positions.get(target)}")
bec_logger.logger.info(
f"obtained position {position} - compare to cached value {self.positions.get(target)}"
)
return position
except Exception as e:
bec_logger.logger.debug(f"Failed to fetch user parameter for device {self.bec_name} and target {target} from bec, falling back to cached position {e}")
bec_logger.logger.debug(
f"Failed to fetch user parameter for device {self.bec_name} and target {target} from bec, falling back to cached position {e}"
)
if name not in self.positions:
raise ValueError(f"Unknown position '{target}'")
@@ -100,7 +108,6 @@ class PositionDevice:
return scans.mv(self.mot_device, pos, relative=False)
# def set_position(self, target: Union[str, float]):
# """Only to be used for testing purposes, bypasses guards"""
# pos = self._resolve_target(target)
@@ -129,5 +136,3 @@ class PositionDevice:
pos = self._resolve_target(target)
return abs(self.actual - pos) <= self.tol
+131 -34
View File
@@ -88,42 +88,126 @@ def mono_pitch_scan(plot=True, window_name="Fitting", plot_widget=None):
# Set fine pitch to middle of its' travel range
scans.umv(EnergyDefaults.mono_fpitch, pos["dcm_fine_pitch"], relative=False)
# Move DCM pitch to starting value
scans.umv(EnergyDefaults.mono_pitch, pos["dcm_pitch"]-0.04, relative=False)
pitch_offset = dev.dcm_pitch.user_parameter["offset"]
scans.umv(EnergyDefaults.mono_pitch, pos["dcm_pitch"]+pitch_offset, relative=False)
# Go to peak using default parameters from EnergyDefaults
if plot:
print("Scanning monochromator pitch and moving to peak, with plotting.")
result = go_to_peak(
EnergyDefaults.mono_pitch,
EnergyDefaults.signals["sig1"],
-EnergyDefaults.pitch_scan["halfwidth"],
EnergyDefaults.pitch_scan["halfwidth"],
steps=EnergyDefaults.pitch_scan["steps"],
relative=True,
settle=0.01,
plot=plot,
confirm=False,
min_fwhm_steps=1.1,
window_name=window_name if plot else None,
plot_widget=plot_widget if plot else None,
)
extended_scan = False
if not result["success"]:
extended_scan = True
extended_range = 2 * EnergyDefaults.pitch_scan["halfwidth"]
extended_steps = 2 * EnergyDefaults.pitch_scan["steps"]
print("Scanning monochromator pitch over a broader range.")
result = go_to_peak(
EnergyDefaults.mono_pitch,
EnergyDefaults.signals["sig1"],
-EnergyDefaults.pitch_scan["halfwidth"],
EnergyDefaults.pitch_scan["halfwidth"],
steps=EnergyDefaults.pitch_scan["steps"],
-extended_range,
extended_range,
steps=extended_steps,
relative=True,
settle=0.01,
plot=True,
plot=plot,
confirm=False,
min_fwhm_steps=1.1,
window_name=window_name,
plot_widget=plot_widget,
)
else:
print("Scanning monochromator pitch and moving to peak, without plotting.")
result = go_to_peak(
EnergyDefaults.mono_pitch,
EnergyDefaults.signals["sig1"],
-EnergyDefaults.pitch_scan["halfwidth"],
EnergyDefaults.pitch_scan["halfwidth"],
steps=EnergyDefaults.pitch_scan["steps"],
relative=True,
settle=0.01,
plot=False,
min_fwhm_steps=1.5,
confirm=False,
window_name=window_name if plot else None,
plot_widget=plot_widget if plot else None,
)
result["extended_scan"] = extended_scan
return result
# if plot:
# print("Scanning monochromator pitch and moving to peak, with plotting.")
# result = go_to_peak(
# EnergyDefaults.mono_pitch,
# EnergyDefaults.signals["sig1"],
# -EnergyDefaults.pitch_scan["halfwidth"],
# EnergyDefaults.pitch_scan["halfwidth"],
# steps=EnergyDefaults.pitch_scan["steps"],
# relative=True,
# settle=0.01,
# plot=True,
# confirm=False,
# min_fwhm_steps=1.1,
# window_name=window_name,
# plot_widget=plot_widget,
# )
# result["extended_scan"] = False
# if not result["success"]:
# extended_range = 2 * EnergyDefaults.pitch_scan["halfwidth"]
# extended_steps = 2 * EnergyDefaults.pitch_scan["steps"]
# print("Scanning monochromator pitch over a broader range.")
# result = go_to_peak(
# EnergyDefaults.mono_pitch,
# EnergyDefaults.signals["sig1"],
# -extended_range,
# extended_range,
# steps=extended_steps,
# relative=True,
# settle=0.01,
# plot=True,
# confirm=False,
# min_fwhm_steps=1.1,
# window_name=window_name,
# plot_widget=plot_widget,
# )
# result["extended_scan"] = True
# else:
# print("Scanning monochromator pitch and moving to peak, without plotting.")
# result = go_to_peak(
# EnergyDefaults.mono_pitch,
# EnergyDefaults.signals["sig1"],
# -EnergyDefaults.pitch_scan["halfwidth"],
# EnergyDefaults.pitch_scan["halfwidth"],
# steps=EnergyDefaults.pitch_scan["steps"],
# relative=True,
# settle=0.01,
# plot=False,
# min_fwhm_steps=1.1,
# confirm=False,
# )
# result["extended_scan"] = False
# if not result["success"]:
# extended_range = 2 * EnergyDefaults.pitch_scan["halfwidth"]
# extended_steps = 2 * EnergyDefaults.pitch_scan["steps"]
# print("Scanning monochromator pitch over a broader range.")
# result2 = go_to_peak(
# EnergyDefaults.mono_pitch,
# EnergyDefaults.signals["sig1"],
# -extended_range,
# extended_range,
# steps=extended_steps,
# relative=True,
# settle=0.01,
# plot=True,
# confirm=False,
# min_fwhm_steps=1.1,
# )
# result["extended_scan"] = True
# return result
# Specific functions - need to be edited for each beamline
@@ -172,12 +256,13 @@ def get_dcm_motors_positions(energy_ev):
"""
# dcm_motor_values = get_value_from_lut(energy_ev)
dcm_motor_values = {}
pitch = float(np.poly1d(Calibration.pitch_calib)(energy_ev))
# pitch = float(np.poly1d(Calibration.pitch_calib)(energy_ev))
# pitch = -5.5
fpitch = 5.0
roll = EnergyDefaults.mono_roll_value
perp = calc_perp_position(energy_ev, print_result=False)
bragg_angle = convert_from_energy(energy_ev, print_result=False)["bragg_angle_mrad"]
pitch = float(np.poly1d(Calibration.pitch_calib)(bragg_angle))
dcm_motor_values.update(
{
"bragg_angle": bragg_angle,
@@ -309,24 +394,36 @@ def bl_energy(
# return gap
# def calc_gap(energy_ev, print_result=True):
# """Calculate the undulator gap for the given energy."""
# harmonic_values = Gap.get_harmonic_values(energy_ev)
# if harmonic_values is None:
# return None
# gap = np.poly1d(harmonic_values)(energy_ev)
# gap *= Gap.correction_factor
# if print_result:
# harmonic = Gap.get_harmonic_by_energy(energy_ev)
# print(f"Calculated gap is {gap:.3f} mm " f"using {harmonic}")
# return gap
def calc_gap(energy_ev, print_result=True):
"""Calculate the undulator gap for the given energy."""
harmonic_values = Gap.get_harmonic_values(energy_ev)
if harmonic_values is None:
return None
gap = np.poly1d(harmonic_values)(energy_ev)
gap *= Gap.correction_factor
harmonic, gap = Gap.calculate_gap(energy_ev)
if print_result:
harmonic = Gap.get_harmonic_by_energy(energy_ev)
print(f"Calculated gap is {gap:.3f} mm " f"using {harmonic}")
print(
f"Calculated gap is {gap:.4f} mm "
f"using H{harmonic}"
)
return gap
def set_gap(energy_ev, print_result=False):
"""Set the undulator gap."""
+347
View File
@@ -0,0 +1,347 @@
"""Script to change energy at PXII by setting gap, DCM motors and mirror stripe
Moving DCM motors - implemented for Bragg, pitch and perp
Gap - optional, can be switched off using move_gap=False
Mirrors - change of mirror stripe is not yet implemented
Plotting optional
"""
import numpy as np
# from pxii_gap import set_gap
# from mx_methods import go_to_peak
# from pxii_parameters import EnergyDefaults, Calibration
# from calculator import (
# calc_perp_position,
# validate_energy,
# convert_from_bragg,
# convert_from_energy,
# )
def get_current_energy():
"""
Returns the energy in eV from the current bragg angle.
"""
current_bragg_angle = dev.dcm_bragg.user_readback.get(cached=True)
current_energy = convert_from_bragg(current_bragg_angle, print_result=False)["energy_ev"]
return current_energy
# Functions below are common to all beamlines
def calculate_energy_difference(current_energy, target_energy):
"""
Calculate the absolute difference in energy between the current energy level
and the target energy level.
"""
return abs(target_energy - current_energy)
def get_mirror_stripe(energy_ev):
"""
Determines the mirror stripe material based on the energy level provided
and the specified thresholds for silicon, rhodium, and platinum.
Args:
energy_ev (float): Energy level in electron volts, used to determine
the corresponding material type.
Returns:
str: A string indicating the material type corresponding to the provided
energy level. Possible values are "silicon", "rhodium", or "platinum".
"""
if energy_ev <= EnergyDefaults.stripe_thresholds["silicon"]:
return "silicon"
if (
EnergyDefaults.stripe_thresholds["silicon"]
< energy_ev
<= EnergyDefaults.stripe_thresholds["rhodium"]
):
return "rhodium"
return "platinum"
def set_mirror_stripe(energy_ev):
"""
Selects and sets the appropriate mirror stripe based on the given energy value
in electron volts (eV).
Args:
energy_ev (float): The energy value in electron volts
Returns:
None
"""
selected_stripe = get_mirror_stripe(energy_ev)
print(f"Selected mirror stripe: {selected_stripe}")
def mono_pitch_scan(plot=True, window_name="Fitting", plot_widget=None):
"""Scan the monochromator pitch and move to the peak."""
# Move to the calculated pitch value for the current energy
print("Starting Mono Pitch Scan.")
energy = get_current_energy()
pos = get_dcm_motors_positions(energy)
print(f"Setting DCM Pitch to default value of {pos['dcm_pitch']}")
# Set fine pitch to middle of its' travel range
scans.umv(EnergyDefaults.mono_fpitch, pos["dcm_fine_pitch"], relative=False)
# Move DCM pitch to starting value
scans.umv(EnergyDefaults.mono_pitch, pos["dcm_pitch"]-0.12, relative=False)
# Go to peak using default parameters from EnergyDefaults
if plot:
print("Scanning monochromator pitch and moving to peak, with plotting.")
result = go_to_peak(
EnergyDefaults.mono_pitch,
EnergyDefaults.signals["sig1"],
-EnergyDefaults.pitch_scan["halfwidth"],
EnergyDefaults.pitch_scan["halfwidth"],
steps=EnergyDefaults.pitch_scan["steps"],
relative=True,
settle=0.01,
plot=True,
confirm=False,
min_fwhm_steps=1.1,
window_name=window_name,
plot_widget=plot_widget,
)
else:
print("Scanning monochromator pitch and moving to peak, without plotting.")
result = go_to_peak(
EnergyDefaults.mono_pitch,
EnergyDefaults.signals["sig1"],
-EnergyDefaults.pitch_scan["halfwidth"],
EnergyDefaults.pitch_scan["halfwidth"],
steps=EnergyDefaults.pitch_scan["steps"],
relative=True,
settle=0.01,
plot=False,
min_fwhm_steps=1.5,
confirm=False,
)
return result
# Specific functions - need to be edited for each beamline
def move_gap_if_needed(energy_ev, move_gap=True):
"""
Move the gap position based on energy if the move_gap flag is set.
Args:
energy_ev (float): The energy value in electron volts (eV) used for gap movement.
move_gap (bool): A flag indicating whether the gap position should be moved or not.
Returns:
None
"""
if move_gap:
set_gap(energy_ev)
else:
print("Not moving gap.")
# def get_roll(energy_ev):
# """Calculates the roll based on calibration data."""
# calib = Calibration()
# roll = np.poly1d(calib.roll)(energy_ev)
# if roll < 0:
# return 0
# if roll >= 9.95:
# return 9.95
# return float(roll)
def get_dcm_motors_positions(energy_ev):
"""
Pitch and roll are calculated based on fits of the measured calibration values.
Perp and Bragg are calculated based on the energy value via calculator.py.
Arguments:
energy_ev (float): The energy value in electron volts for which the
DCM motor positions are to be calculated.
Returns:
dict: A dictionary containing the calculated DCM motor positions
including values retrieved from the lookup table, Bragg angle
in milliradians, and perpendicular position.
"""
# dcm_motor_values = get_value_from_lut(energy_ev)
dcm_motor_values = {}
pitch = float(np.poly1d(Calibration.pitch_calib)(energy_ev))
# pitch = -5.5
fpitch = 5.0
roll = EnergyDefaults.mono_roll_value
perp = calc_perp_position(energy_ev, print_result=False)
bragg_angle = convert_from_energy(energy_ev, print_result=False)["bragg_angle_mrad"]
dcm_motor_values.update(
{
"bragg_angle": bragg_angle,
"perp": perp,
"dcm_pitch": pitch,
"dcm_roll": roll,
"dcm_fine_pitch": fpitch,
}
)
return dcm_motor_values
def move_dcm_motors(energy_ev):
"""
Move the DCM bragg, pitch and perp motors to the required positions
for the given energy in eV.
"""
dcm_pos = get_dcm_motors_positions(energy_ev)
print(
f"Moving DCM bragg: {dcm_pos['bragg_angle']: .5g} mrad, "
f"DCM perp: {dcm_pos['perp']: .3g} mm, "
# f"DCM pitch fixed at -5.304 mrad, "
f"DCM pitch: {dcm_pos['dcm_pitch']: .5g} mrad, "
f"DCM Roll: {dcm_pos['dcm_roll']:.5g} V"
)
# umv(EnergyDefaults.energy, dcm_pos["bragg_angle"])
# umv(EnergyDefaults.mono_perp, dcm_pos["perp"])
# umv(EnergyDefaults.mono_pitch, dcm_pos["dcm_pitch"])
# umv(EnergyDefaults.mono_roll, dcm_pos["dcm_roll"])
# print("\n***DCM Roll movement is currently disabled ***\n")
scans.umv(EnergyDefaults.mono_fpitch, dcm_pos["dcm_fine_pitch"], relative=False)
scans.umv(
EnergyDefaults.energy,
dcm_pos["bragg_angle"],
EnergyDefaults.mono_perp,
dcm_pos["perp"],
EnergyDefaults.mono_pitch,
dcm_pos["dcm_pitch"],
EnergyDefaults.mono_roll,
dcm_pos["dcm_roll"],
relative=False,
)
def bl_energy(
energy_ev, move_gap=True, mono_scan=True, plot=True, window_name="Fitting", plot_widget=None
):
"""
Adjusts the beamline's energy to the specified energy in electron volts (eV).
The function validates the target energy, checks the current energy, and makes
adjustments only if the energy difference is significant enough. It performs
necessary operations including moving the gap, changing DCM motors, updating
the mirror stripe, and scanning to find the optimal DCM pitch.
Args:
energy_ev: Target energy in electron volts to which the beamline should be adjusted.
move_gap: Boolean flag indicating whether to adjust the gap before setting energy.
plot: Boolean flag indicating whether to plot the DCM pitch scan for finding the peak.
Returns:
None
"""
energy_ev = validate_energy(energy_ev) # Ensure energy is valid.
# Check current energy to avoid unnecessary adjustments.
current_energy = get_current_energy()
energy_diff = calculate_energy_difference(current_energy, energy_ev)
if energy_diff <= EnergyDefaults.min_energy_change:
print(f"Energy change of {energy_diff:.2f} eV is too small, not changing energy.")
return
transmission = get_value(dev.transm)
# Step 1: Move the gap if needed.
move_gap_if_needed(energy_ev, move_gap)
# Step 2: Move and set the DCM motors.
move_dcm_motors(energy_ev)
# Step 3: Reset the transmission after the energy change
print(f"Setting transmission to {transmission}")
dev.transm.put(transmission)
# Step 4: Update the mirror stripe.
set_mirror_stripe(energy_ev)
# Step 5: Perform DCM pitch scan and move to peak.
if mono_scan:
if plot:
result = mono_pitch_scan(plot=True, window_name=window_name, plot_widget=plot_widget)
return result
else:
mono_pitch_scan(plot=False)
# def new_calc_gap(energy_ev):
# """
# Calculates the gap based on the given energy
# """
# gapval = Gap()
# harmonic_values = gapval.get_harmonic_values(energy_ev)
# if harmonic_values is not None:
# fit = np.poly1d(harmonic_values)(energy_ev)
# gap_value = fit * 0.9994
# return gap_value
# return None
# def set_gap(energy_ev, print_result=True):
# """
# set the gap
# """
# gap = new_calc_gap(energy_ev)
# # else:
# # gap = calc_gap(energy_kev)
# if gap is not None and Harmonics.min_gap_value <= gap <= 20:
# umv(dev.id_gap, gap)
# if print_result:
# print(f"Setting gap to {gap:.3f} mm")
# else:
# umv(dev.id_gap, Harmonics.min_gap_value)
# # msg = (
# # f"Position {gap: .3f} mm is outside the allowed scan range of "
# # f"4.5 to 20 mm. Not changing the gap."
# # )
# # raise ValueError(msg)
# return gap
def calc_gap(energy_ev, print_result=True):
"""Calculate the undulator gap for the given energy."""
harmonic_values = Gap.get_harmonic_values(energy_ev)
if harmonic_values is None:
return None
gap = np.poly1d(harmonic_values)(energy_ev)
gap *= Gap.correction_factor
if print_result:
harmonic = Gap.get_harmonic_by_energy(energy_ev)
print(f"Calculated gap is {gap:.3f} mm " f"using {harmonic}")
return gap
def set_gap(energy_ev, print_result=False):
"""Set the undulator gap."""
gap = calc_gap(energy_ev)
if gap is not None and Gap.minimum_gap <= gap <= 20:
umv(dev.id_gap, gap)
if print_result:
harmonic = Gap.get_harmonic_by_energy(energy_ev)
print(f"Setting gap to {gap:.3f} mm " f"using {harmonic}")
else:
raise ValueError(
f"Cannot calculate a valid gap for {energy_ev:.0f} eV. " f"Calculated gap: {gap}"
)
return gap
+60 -83
View File
@@ -20,8 +20,7 @@ class EnergyDefaults:
mono_fpitch = dev.dcm_fpitch
mono_perp = dev.dcm_perp
mono_roll = dev.dcm_froll
mono_roll_value = 4.36
LUT_table = "luts/energy_lut.csv"
mono_roll_value = 3.88
stripe_thresholds = {"silicon": 9000, "rhodium": 20000, "platinum": 40000}
pitch_scan = {"halfwidth": 0.075, "steps": 20}
@@ -30,127 +29,105 @@ class EnergyDefaults:
class Calibration:
"""Calibration parameters for PXII optics"""
pitch_calib = [-7.60082220e-19, 6.09893342e-14, -1.81702221e-09, 2.45457520e-05, -5.61275367e00]
# pitch_calib = [-7.60082220e-19, 6.09893342e-14, -1.81702221e-09, 2.45457520e-05, -5.61275367e00]
pitch_calib = [-1.84031410e-07,-6.76777668e-05, -5.59684124]
# roll = np.array([2.28291039e-03, -2.41928101e01])
@dataclass(frozen=True)
class Gap:
"""Fit parameters to calculate undulator gap from energy."""
"""PXII U19 undulator gap calibration.
Harmonic fits are from Anuschka's September 2026 calibration.
For a requested energy, use the highest odd harmonic whose
calculated gap remains >= minimum_gap.
"""
minimum_gap = 4.5
selection_min_gap = 4.505
maximum_gap = 20.0
correction_factor = 0.9994
# Anuschka's September 2026 harmonic fits.
# Energy input is in keV, gap output is in mm.
harmonics = {
"H3": np.array([9.37600000e-04, 2.98800000e-01]),
"H5": np.array([5.10102857e-04, 7.99666667e-01]),
"H7": np.array([3.58874286e-04, 8.60410476e-01]),
"H9": np.array([2.74520000e-04, 9.25540000e-01]),
"H11": np.array([2.24457143e-04, 9.25714286e-01]),
"H13": np.array([1.88834286e-04, 9.47505714e-01]),
"H15": np.array([1.63434286e-04, 9.52602857e-01]),
"H17": np.array([1.43320000e-04, 9.77500000e-01]),
"H19": np.array([1.27940000e-04, 9.85770000e-01]),
3: np.array([0.095, -0.276, 4.154]),
5: np.array([0.00269444, -0.0616905, 0.967925, -0.295405]),
7: np.array([0.00110017, -0.0369968, 0.77334, -0.688198]),
9: np.array([0.00021633, -0.00619517, 0.315392, 0.971667]),
11: np.array([0.000589549, -0.0328631, 0.837705, -2.90326]),
13: np.array([0.197702, 0.757869]),
15: np.array([0.170381, 0.783155]),
17: np.array([0.1466, 0.8906]),
19: np.array([0.128, 0.985]),
}
@classmethod
def minimum_energy(cls, harmonic):
"""
Return the lowest energy that can be reached with this harmonic
without the corrected gap going below the minimum gap.
"""
slope, intercept = cls.harmonics[harmonic]
# calc_gap() applies the correction factor afterwards,
# so account for it here as well.
raw_minimum_gap = cls.minimum_gap / cls.correction_factor
return (raw_minimum_gap - intercept) / slope
def calculate_gap_for_harmonic(cls, energy_ev, harmonic):
"""Calculate gap for a specified harmonic."""
energy_kev = energy_ev / 1000.0
return np.polyval(cls.harmonics[harmonic], energy_kev)
@classmethod
def get_harmonic_by_energy(cls, energy_ev):
"""
Return the appropriate harmonic for the requested energy.
Select the highest odd harmonic that gives a valid gap.
Switch to the next harmonic as soon as it can produce the
requested energy without requiring a gap below minimum_gap.
This selects the harmonic whose gap is closest to the
minimum allowed gap of 4.5 mm, while maintaining a small
safety margin of 0.005 mm.
"""
selected = None
valid = []
for harmonic in cls.harmonics:
if energy_ev >= cls.minimum_energy(harmonic):
selected = harmonic
else:
break
gap = cls.calculate_gap_for_harmonic(
energy_ev,
harmonic,
)
return selected
if cls.selection_min_gap <= gap <= cls.maximum_gap:
valid.append((harmonic, gap))
@classmethod
def get_harmonic_values(cls, energy_ev):
"""
Return the fit coefficients for the appropriate harmonic.
"""
harmonic = cls.get_harmonic_by_energy(energy_ev)
if harmonic is None:
if not valid:
return None
return cls.harmonics[harmonic]
# Closest valid gap to the minimum gap
harmonic, gap = min(
valid,
key=lambda x: x[1] - cls.selection_min_gap,
)
return harmonic
@classmethod
def calculate_gap(cls, energy_ev):
"""
Calculate the corrected undulator gap for the requested energy.
"""Return selected harmonic and calculated gap."""
Returns
-------
tuple
(harmonic, gap)
"""
harmonic = cls.get_harmonic_by_energy(energy_ev)
if harmonic is None:
raise ValueError(f"{energy_ev:.0f} eV is below the minimum calibrated energy.")
raise ValueError(
f"No valid harmonic found for {energy_ev:.0f} eV."
)
slope, intercept = cls.harmonics[harmonic]
gap = slope * energy_ev + intercept
gap *= cls.correction_factor
gap = cls.calculate_gap_for_harmonic(
energy_ev,
harmonic,
)
# Final check against actual motor limits
if not cls.minimum_gap <= gap <= cls.maximum_gap:
raise ValueError(
f"Calculated gap {gap:.3f} mm for {energy_ev:.0f} eV "
f"using {harmonic} is outside the allowed range "
f"using H{harmonic} is outside the allowed range "
f"{cls.minimum_gap:.1f}-{cls.maximum_gap:.1f} mm."
)
return harmonic, gap
@dataclass(frozen=True)
class Harmonics:
"""Anuschka's harmonics data for PXII U19 Undulator"""
min_gap_value = 4.5
map = {
3: np.array([1.07141725, -0.52834258]),
4: np.array([0.007111, -0.13678409, 1.52295567, -1.06882785]),
5: np.array([0.00315051, -0.0766359, 1.13107469, -0.86442062]),
6: np.array([0.00162862, -0.04452336, 0.82948259, -0.37329674]),
7: np.array([0.00080764, -0.02418882, 0.59212947, 0.15702886]),
8: np.array([1.16699242e-03, -4.68207543e-02, 9.43972396e-01, -1.94201019e00]),
9: np.array([0.00048419, -0.02010648, 0.55514114, -0.38180067]),
10: np.array([2.11583333e-04, -8.03503571e-03, 3.43141595e-01, 6.02318000e-01]),
11: np.array([0.00334392, -0.18405336, 3.58338994, -19.3640241]),
12: np.array([3.20520798e-05, 2.39253145e-03, 8.09198503e-02, 2.22897377e00]),
13: np.array([0.00278744, 0.07979874, 2.05143916]),
}
energy_ranges = {3: (0, 7), 5: (7, 10), 7: (10, 13), 9: (13, 16), 11: (16, 19), 13: (19, 22)}
high_energy = [(15, (23, 25)), (17, (25, 29)), (19, (29, float("inf")))]
@dataclass(frozen=True)
class CamConversion:
"""Convert pixels to microns for sample camera"""
@@ -165,8 +142,8 @@ class BCU_BPM_X_Calibration:
signal_limit = 0.90
# centred_position = 0.441
centred_position = -0.009 # where the bpm was during calibration
crosshair_signal = -0.00339158
crosshair_bpm_position = 0.0532
crosshair_signal = -0.0209
crosshair_bpm_position = 0.0738
# @dataclass(frozen=True)
@@ -174,8 +151,8 @@ class BCU_BPM_Y_Calibration:
coeffs = (-0.14645507, 0.010016, 0.08258468, -0.00547233, -0.02715706, -1.54419084)
signal_limit = 0.95
centred_position = -1.540 # where the bpm was during calibration
crosshair_signal = -0.00392027
crosshair_bpm_position = -1.548
crosshair_signal = 0.00156
crosshair_bpm_position = -1.5459
# @dataclass(frozen=True)
+353
View File
@@ -0,0 +1,353 @@
"""PXII-specific operational helpers used by routine daily/weekly setup.
BEC loads macro files into a shared namespace, so these functions deliberately use
the standard BEC globals (dev, umv, get_value, etc.) rather than importing other
macro files. Nothing in this module should be promoted to mxcomm_* unless it is
truly beamline-independent.
"""
import time
from dataclasses import dataclass
from datetime import datetime
import numpy as np
from pxii_bec.scripts import beamline_context as bl
from pxii_bec.macros.beamline_planner import BeamlineState
# =============================================================================
# Energy
# =============================================================================
def daily_energy(energy, scan_mono=True, plot_widget=None):
"""Set PXII energy/gap and optionally optimise DCM pitch."""
current_energy = get_current_energy()
mono_result = {"extended_scan": False}
if abs(energy - current_energy) > 1:
bl_energy(energy, window_name="DailySetup", plot_widget=plot_widget)
# bl_energy performs the normal energy move. Keep mono_result benign
# here so the result handling below is defined for both code paths.
else:
gap_actual = dev.id_gap.position
gap_req = calc_gap(energy)
if abs(gap_actual - gap_req) > 0.05:
if dev.id_gap.moving():
return {
"ok": False,
"message": "Undulator gap is moving",
"energy": current_energy,
}
umv(dev.id_gap, gap_req)
if scan_mono:
mono_result = mono_pitch_scan(
window_name="DailySetup", plot_widget=plot_widget
)
new_energy = get_current_energy()
calib_pitch = get_dcm_motors_positions(energy)["dcm_pitch"]
pitch_offset = get_value(dev.dcm_pitch) - calib_pitch
if not mono_result.get("extended_scan", False):
return {
"ok": True,
"message": (
f"Beamline energy set to {new_energy:.0f} eV, "
f"pitch offset = {pitch_offset:.3f} mrad"
),
"energy": new_energy,
"pitch_offset": pitch_offset,
}
return {
"ok": True,
"warning": True,
"message": (
"Warning - DCM pitch is not within expected tolerance. "
"The DCM may need to be re-calibrated. "
f"Pitch offset = {pitch_offset:.3f} mrad"
),
"energy": new_energy,
"pitch_offset": pitch_offset,
}
# =============================================================================
# Sample-camera scintillator measurements
# =============================================================================
def predict_scint_transmission(target_flux=None):
"""Predict PXII transmission required for a scintillator measurement."""
if target_flux is None:
target_flux = BeamMove.scint_target_flux
_, full_flux = bpm2flux()
if not np.isfinite(full_flux) or full_flux <= 0:
raise ValueError(
"Cannot predict scintillator transmission: "
f"invalid full flux ({full_flux:.3g} ph/s)"
)
return float(np.clip(target_flux / full_flux, 0.001, 1.0))
def auto_exposure(cam="samcam", target=200, tol=5, gain=0.9,
min_exp=0.00001, max_exp=0.2, max_iter=10):
"""Adjust PXII camera exposure to reach the requested maximum signal."""
if cam == "samcam":
exposure = dev.samcam_exp.read()["samcam_exp"]["value"]
else:
exposure = dev.ss_xicam_exp.read()["ss_xicam_exp"]["value"]
print(f"Starting exposure = {exposure:.4f} s")
for _ in range(max_iter):
time.sleep(0.1)
if cam == "samcam":
maxval = dev.samcam_max.read()["samcam_max"]["value"]
else:
maxval = dev.ss_xicam_max.read()["ss_xicam_max"]["value"]
if maxval is None:
print("No reading — check camera.")
break
error = target - maxval
if abs(error) <= tol:
break
new_exp = exposure * (1 + gain * error / target)
new_exp = max(min_exp, min(max_exp, new_exp))
if cam == "samcam":
dev.samcam_exp.put(new_exp)
else:
dev.ss_xicam_exp.put(new_exp)
exposure = new_exp
print(f"New exposure time is {exposure:.3g}")
return exposure
def prepare_scint_measurement(autoexp=True, zoom=1000):
"""Put PXII into the standard state for a scintillator measurement."""
transmission = predict_scint_transmission()
print(f"Predicted scintillator transmission: {transmission:.2%}")
dev.transm.put(transmission)
time.sleep(3)
if get_value(dev.scam_zoom) != zoom:
umv(dev.scam_zoom, zoom)
if not bl.planner.is_state(BeamlineState.BEAM_VISUALISATION):
bl.planner.move_to(BeamlineState.BEAM_VISUALISATION)
dev.bcu_shutter.put(1)
time.sleep(0.5)
if autoexp:
auto_exposure(cam="samcam", max_iter=25)
return zoom
def measure_beamsize(cam="samcam"):
"""Return PXII sample-camera beam FWHM in microns."""
a = dev.samcam_xsig.read()["samcam_xsig"]["value"]
b = dev.samcam_ysig.read()["samcam_ysig"]["value"]
zoom = dev.scam_zoom.read()["scam_zoom"]["value"]
sx = calc_scam_microns(a, zoom=zoom) * 2.35
sy = calc_scam_microns(b, zoom=zoom) * 2.35
print(f"FWHM in um : {(sx, sy)}")
return sx, sy
def read_scintXY(image=False, measure_size=True):
"""Read PXII beam position from the sample-camera scintillator image."""
x_target = BeamMove.scint_target_x
y_target = BeamMove.scint_target_y
zoom = get_value(dev.scam_zoom)
max_signal = get_value(dev.samcam_max)
thresh = get_value(dev.samcam_thresh)
if max_signal < thresh:
return {
"ok": False,
"message": (
"Insufficient signal for centroid calculation "
f"(max signal = {max_signal:.0f}, threshold = {thresh:.0f})"
),
"max_signal": max_signal,
}
x_px = dev.samcam_x.read()["samcam_x"]["value"]
y_px = dev.samcam_y.read()["samcam_y"]["value"]
diff_x = x_target - x_px
diff_y = y_target - y_px
results = {
"ok": True,
"message": f"Beam detected at X={x_px:.1f}, Y={y_px:.1f} px",
"max_signal": max_signal,
"X_pixels": x_px,
"Y_pixels": y_px,
"X_diff_px": diff_x,
"Y_diff_px": diff_y,
"X_diff_microns": calc_scam_microns(diff_x, zoom),
"Y_diff_microns": calc_scam_microns(diff_y, zoom),
}
if measure_size:
results["X_FWHM"], results["Y_FWHM"] = measure_beamsize()
print(
f"Beam position: X = {x_px:.1f} px, Y = {y_px:.1f} px\n"
f"Distance from crosshair: X = {results['X_diff_microns']:.1f} microns, "
f"Y = {results['Y_diff_microns']:.1f} microns\n"
)
if image:
results["image"] = get_cam_image(Cameras.sample)
return results
def finish_scint_measurement():
dev.bcu_shutter.put(0)
# =============================================================================
# Slit centring used by weekly checks
# =============================================================================
@dataclass
class SlitAxis:
name: str
centre_motor: object
size_motor: object
scan_range: float = 2.0
@dataclass
class Slit:
name: str
x: SlitAxis
y: SlitAxis
def centre_axis(axis, detector, slit_size=0.5, final_size=3.0, window_name=None, plot_widget=None):
print(f"\nAligning {axis.name}")
umv(axis.size_motor, slit_size)
start = axis.centre_motor.position
try:
go_to_peak(axis.centre_motor, detector, start-axis.scan_range,
start+axis.scan_range, 50, confirm=False, window_name=window_name,
plot_widget=plot_widget)
centre = get_value(axis.centre_motor)
print(f"{axis.name}: centre = {centre:.4f}")
return centre
finally:
umv(axis.size_motor, final_size)
def centre_slit(slit, detector, slit_size=0.5, final_size=3.0, window_name=None, x_plot_widget=None, y_plot_widget=None):
print(f"\n=== Aligning {slit.name} ===")
x = centre_axis(slit.x, detector, slit_size, final_size,window_name=window_name,plot_widget=x_plot_widget)
y = centre_axis(slit.y, detector, slit_size, final_size, window_name=window_name,plot_widget=y_plot_widget)
print(f"=== Finished {slit.name} ===")
return {"x": x, "y": y}
def define_slits():
def axis(prefix, direction):
return SlitAxis(
name=f"{prefix}_sl_{direction}",
centre_motor=getattr(dev, f"{prefix}_sl_{direction}cen"),
size_motor=getattr(dev, f"{prefix}_sl_{direction}size"),
)
return [Slit(name, axis(name, "x"), axis(name, "y"))
for name in ("bsf", "ss", "bcu")]
def centre_one(name, detector, window_name=None, x_plot_widget=None, y_plot_widget=None):
for slit in define_slits():
if slit.name == name:
return centre_slit(slit, detector,window_name=window_name,x_plot_widget=x_plot_widget,y_plot_widget=y_plot_widget)
raise ValueError(f"Unknown PXII slit set: {name}")
# =============================================================================
# Ge energy calibration diagnostic
# =============================================================================
def scan_ge(edge=11103.1, mode="coarse"):
"""Scan the PXII Ge K edge and return the generated CSV filename."""
if mode == "coarse":
scan_range, scanpoints = 100, 41
if mode == "medium":
scan_range, scanpoints = 40, 41
elif mode == "fine":
scan_range, scanpoints = 15, 61
else:
raise ValueError(f"Unknown scan mode '{mode}'. Use 'coarse', 'medium' or 'fine'.")
start_eV, end_eV = edge-scan_range, edge+scan_range
start_bragg = convert_from_energy(start_eV)["bragg_angle_mrad"]
end_bragg = convert_from_energy(end_eV)["bragg_angle_mrad"]
bragg_points = np.linspace(start_bragg, end_bragg, scanpoints)
filename = bl.env.lut_dir / f"{datetime.now():%Y%m%d}_ge_edge_{mode}.csv"
with open(filename, "w") as f:
f.write("Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission\n")
print(f"\nGe edge {mode} scan: {start_eV:.1f}-{end_eV:.1f} eV")
bl_energy(start_eV)
dev.transm.put(1)
time.sleep(2)
umv(dev.ss_f4_x, 6.0)
time.sleep(3)
try:
for bragg in bragg_points:
scans.umv(dev.dcm_bragg, bragg, relative=False)
energy = convert_from_bragg(bragg)["energy_ev"]
ss = get_value(dev.ss_bpmsum)
vals = []
for _ in range(5):
vals.append(dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"])
time.sleep(0.1)
inten = float(np.mean(vals))
transmission = inten / ss
with open(filename, "a") as f:
f.write(f"{energy:.2f},{bragg:.2f},{ss:.2f},{inten:.2f},{transmission:.6f}\n")
finally:
bl_energy(12400)
dev.transm.put(0.1)
time.sleep(2)
print(f"Scan complete. Results written to {filename}")
return filename
def prepare_ss_xi_measurement(autoexp=True):
"""Prepare for taking a reading of the beam from the SS Xray eye"""
# move to x-ray eye into the beam
umv(dev.ss_xi_x, 7.0)
# set autoexposure and check there is a reading in the image
if autoexp:
auto_exposure(cam="ss_xicam", max_iter=25)
def finish_ss_xi_measurement():
'''Move the SS xray eye out of the beam'''
umv(dev.ss_xi_x, -7)
def read_ss_xicamXY():
"""Read the beam position at the SS xray eye camera"""
results = {}
max_signal = get_value(dev.ss_xicam_max)
results["max_signal"] = max_signal
# thresh = get_value(dev.samcam_thresh)
thresh = 150
if max_signal < thresh:
return {
"ok": False,
"message": (
f"Insufficient signal for centroid calculation "
f"(max signal = {max_signal:.0f}, threshold = {thresh:.0f})"
),
"max_signal": max_signal,
}
x_px = dev.ss_xicam_x.read()["ss_xicam_x"]["value"]
y_px = dev.ss_xicam_y.read()["ss_xicam_y"]["value"]
results["X_pixels"] = x_px
results["Y_pixels"] = y_px
results["ok"] = True
results["message"] = (
f"Beam detected at X={x_px:.1f}, Y ={y_px:.1f} px"
)
print(f"Beam position: X = {results['X_pixels']:.1f} px, "
f"Y = {results['Y_pixels']:.1f} px\n")
return results
+30
View File
@@ -0,0 +1,30 @@
import time
import subprocess
import shlex
import csv
import base64
import numpy as np
from datetime import datetime
from contextlib import contextmanager
from dataclasses import dataclass
from pxii_bec.scripts import beamline_context as bl
from pxii_bec.macros.beamline_planner import BeamlineState
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
def test_daily_html_report():
filename = bl.env.daily_setup_dir / "daily_beam.png"
image_src = image_to_data_uri(filename)
html = f"""
<h1>Testing html</h1>
<img src = '{image_src}' width='450'>
<table>
<tr><th>Pre- checks</th><th>OK</th>
<tr><th>Set energy</th><th>OK</th>
<th>Measure flux</th><th>OK</th>
</table>
"""
plot1, plot2, plot3, plot4, info, progress, report = select_daily_setup_gui()
info.set_html_text(f"{html}")
Loaded 100 of 103 files, more files were not shown because too many files have changed in this diff. Show more