Merges from ics1-wombat
r2834 | ffr | 2009-12-09 17:07:45 +1100 (Wed, 09 Dec 2009) | 2 lines
This commit is contained in:
committed by
Douglas Clowes
parent
64ab146a44
commit
c73c4c85c8
@@ -16,55 +16,72 @@ namespace eval motor {
|
||||
# @param bs beamstop, 1,2,3,4,5 or 6
|
||||
# @param bx beam position in detector coordinates
|
||||
# @param bz beam position in detector coordinates
|
||||
# Origin of beamstop coordinate system is (bsxo, bszo) relative to frame
|
||||
# Origin of detector coordinate system is (0, 0) relative to frame
|
||||
# Given
|
||||
# (Xb,Zb) = beam position in frame coordinates
|
||||
# bx = beam x pos in detector coordinates
|
||||
# bz = beam z pos in detector coordinates
|
||||
# detoff = detector x pos in detector coordinates
|
||||
# bsx = beamstop x pos in beamstop coordinates
|
||||
# bsz = beamstop z pos in beamstop coordinates
|
||||
# bszo = beamstop z origin relative to frame
|
||||
# (bx+detoff, bz) = (Xb,Zb)
|
||||
# (bsx, bsz+bszo) = (Xb,Zb)
|
||||
# (Xbf,Zbf) = beam pos in frame coords
|
||||
# (Xbd,Zbd) = beam pos in detector coords
|
||||
# (Xbbs, Zbbs) = beam pos in beamstop coords
|
||||
# (Xdf,Zdf) = detector pos in frame coords
|
||||
# (Xbsf,Zbsf) = beamstop pos in frame coords
|
||||
#
|
||||
# (Xbf,Zbf) = (Xdf+Xbd, Zdf+Zbd) = (Xbsf+Xbbs, Zbsf+Zbbs)
|
||||
# Origin of detector coords = frame origin
|
||||
#
|
||||
# Detector and beamstop motor readings with beamstop disk centers
|
||||
# overlapping over detector center mark.
|
||||
# Xdf = 264.542 (7283813) Zdf = 0
|
||||
# Xbbs = 296.291 (8054270)
|
||||
# Zbbs = 259.641 (13488244)
|
||||
# Xbd = dethw, Zbd = (dethh)
|
||||
#
|
||||
# 264.542+dethw = Xbsf+296.291
|
||||
# 0+dethh = Zbsf+259.641
|
||||
#
|
||||
# Xbsf = -31.749 + dethw, Zbsf = -259.641 + dethh
|
||||
proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} {
|
||||
set bsdriving false
|
||||
set dethw [expr {[SplitReply detector_active_height_mm]/2.0}]
|
||||
set dethh [expr {[SplitReply detector_active_width_mm]/2.0}]
|
||||
set bsxo -33.112 + $dethw
|
||||
set bszo -329.440 + $dethh
|
||||
set dethw [expr {[SplitReply [detector_active_height_mm]]/2.0}]
|
||||
set dethh [expr {[SplitReply [detector_active_width_mm]]/2.0}]
|
||||
set Xbsf [expr -31.749 + $dethw]
|
||||
set Zbsf [expr -259.641 + $dethh]
|
||||
array set bsl [subst {
|
||||
1 [SplitReply [bs1 softlowerlim]]
|
||||
2 [SplitReply [bs2 softlowerlim]]
|
||||
3 [SplitReply [bs3 softlowerlim]]
|
||||
4 [SplitReply [bs4 softlowerlim]]
|
||||
5 [SplitReply [bs5 softlowerlim]]
|
||||
6 [SplitReply [bs6 softlowerlim]]
|
||||
}]
|
||||
if [ catch {
|
||||
switch $bs {
|
||||
"1" {
|
||||
set bsmot "bs1"
|
||||
set bs_target 92.79
|
||||
set bsdownCmd "drive bs2 0 bs3 0 bs4 0 bs5 0 bs6 0"
|
||||
set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs4 $bsl(4) bs5 $bsl(5) bs6 $bsl(6)"
|
||||
}
|
||||
"2" {
|
||||
set bsmot "bs2"
|
||||
set bs_target 86.20
|
||||
set bsdownCmd "drive bs1 0 bs3 0 bs4 0 bs5 0 bs6 0"
|
||||
set bsdownCmd "drive bs1 $bsl(1) bs3 $bsl(3) bs4 $bsl(4) bs5 $bsl(5) bs6 $bsl(6)"
|
||||
}
|
||||
"3" {
|
||||
set bsmot "bs3"
|
||||
set bs_target 92.54
|
||||
set bsdownCmd "drive bs2 0 bs1 0 bs4 0 bs5 0 bs6 0"
|
||||
set bsdownCmd "drive bs2 $bsl(2) bs1 $bsl(1) bs4 $bsl(4) bs5 $bsl(5) bs6 $bsl(6)"
|
||||
}
|
||||
"4" {
|
||||
set bsmot "bs4"
|
||||
set bs_target 86.66
|
||||
set bsdownCmd "drive bs2 0 bs3 0 bs1 0 bs5 0 bs6 0"
|
||||
set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs1 $bsl(1) bs5 $bsl(5) bs6 $bsl(6)"
|
||||
}
|
||||
"5" {
|
||||
set bsmot "bs5"
|
||||
set bs_target 92.50
|
||||
set bsdownCmd "drive bs2 0 bs3 0 bs4 0 bs1 0 bs6 0"
|
||||
set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs4 $bsl(4) bs1 $bsl(1) bs6 $bsl(6)"
|
||||
}
|
||||
"6" {
|
||||
set bsmot "bs6"
|
||||
set bs_target 85.87
|
||||
set bsdownCmd "drive bs2 0 bs3 0 bs4 0 bs5 0 bs1 0"
|
||||
set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs4 $bsl(4) bs5 $bsl(5) bs1 $bsl(1)"
|
||||
}
|
||||
default {
|
||||
error "beamstop selection must be an integer from 1 to 6"
|
||||
@@ -76,8 +93,8 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} {
|
||||
if {$bx == "UNDEF" || $bz == "UNDEF"} {
|
||||
statemon start selbs
|
||||
set bsdriving true
|
||||
drive $bsmot $bs_target
|
||||
BeamStop -1
|
||||
drive $bsmot $bs_target
|
||||
eval $bsdownCmd
|
||||
BeamStop $bs
|
||||
set bsdriving false
|
||||
@@ -88,13 +105,13 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} {
|
||||
error "beam coordinates must be floats"
|
||||
}
|
||||
}
|
||||
set bsx_target [expr {$bx-$bsxo+$detoff_val}]
|
||||
set bsz_target [expr {$bz-$bszo}]
|
||||
set bsx_target [expr {$bx-$Xbsf+$detoff_val}]
|
||||
set bsz_target [expr {$bz-$Zbsf}]
|
||||
|
||||
statemon start selbs
|
||||
set bsdriving true
|
||||
drive $bsmot $bs_target bsx $bsx_target bsz $bsz_target
|
||||
BeamStop -1
|
||||
drive $bsmot $bs_target bsx $bsx_target bsz $bsz_target
|
||||
eval $bsdownCmd
|
||||
BeamStop $bs
|
||||
set bsdriving false
|
||||
|
||||
Reference in New Issue
Block a user