Files
sics/site_ansto/instrument/bilby/config/commands/commands.tcl

81 lines
2.1 KiB
Tcl

source $cfPath(commands)/commands_common.tcl
namespace eval beamstops {
array set bs_target {bs3 66.5 bs4 66 bs5 64}
namespace export selbs
}
namespace eval motor {
# is_homing_list = comma separated list of motors which are safe to send "home"
variable is_homing_list ""
}
# Some metadata variables about the beamstop and the beam
foreach {var lname type priv units klass} {
BeamCenterX BeamCenterX float user mm parameter
BeamCenterY BeamCenterY float user mm parameter
BeamStop BeamStop int user none parameter
} {
::utility::mkVar $var $type $priv $lname true $klass true true
if {$units != "none"} {
sicslist setatt $var units $units
}
}
# TODO Implement BeamStop as a macro which checks actual beamstop positions.
BeamStop -1
##
# @brief Beamstop select command
# @param bs beamstop, 1,2,3,4,5 or 6
command ::beamstops::selbs {int=3,4,5 bs} {
variable bs_target
set bsdriving false
array set bsl [subst {
3 [SplitReply [bs3 softlowerlim]]
4 [SplitReply [bs4 softlowerlim]]
5 [SplitReply [bs5 softlowerlim]]
}]
if [ catch {
switch $bs {
"3" {
set bsmot "bs3"
set bsdownCmd "drive bs4 $bsl(4) bs5 $bsl(5)"
}
"4" {
set bsmot "bs4"
set bsdownCmd "drive bs3 $bsl(3) bs5 $bsl(5)"
}
"5" {
set bsmot "bs5"
set bsdownCmd "drive bs4 $bsl(4) bs5 $bsl(5)"
}
default {
error "beamstop selection must be an integer from 3 to 5"
}
}
statemon start selbs
if {[info level] > 1} {statemon start [lindex [info level -1] 0]}
set bsdriving true
BeamStop -1
drive $bsmot $bs_target($bs)
eval $bsdownCmd
BeamStop $bs
set bsdriving false
statemon stop selbs
if {[info level] > 1} {statemon stop [lindex [info level -1] 0]}
} msg ] {
if {$bsdriving} {
statemon stop selbs
if {[info level] > 1} {statemon stop [lindex [info level -1] 0]}
}
return -code error $msg
}
}
namespace import ::beamstops::selbs
publish selbs user
proc ::commands::isc_initialize {} {
::commands::ic_initialize
}