source $cfPath(commands)/commands_common.tcl namespace eval beamstops { array set bs_target {3 66.5 4 66 5 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 "" } # TODO Implement BeamStop as a macro which checks actual beamstop positions. ::utility::mkVar BeamStop int user BeamStop true parameter true true 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 bs3 $bsl(3) bs4 $bsl(4)" } 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 }