157 lines
4.5 KiB
Tcl
157 lines
4.5 KiB
Tcl
# TODO Make readonly getset macro for AttFactor
|
|
|
|
##
|
|
# @file The velocity selector position is used as the reference for other instrument
|
|
# component positions. For simplicity we set it as the origin x=y=z=0.
|
|
|
|
##
|
|
# Note EndFacePosY and RotApPosY are surveyed positions
|
|
foreach {var lname type priv units klass} {
|
|
BeamCenterX BeamCenterX float user mm reduce
|
|
BeamCenterZ BeamCenterZ float user mm reduce
|
|
BeamStop BeamStop int user none parameter
|
|
BSdiam BSdiam float user mm parameter
|
|
DetPosYOffset DetPosYOffset float user mm parameter
|
|
EApPosY EApPosY float user mm parameter
|
|
EndFacePosY EndFacePosY float readonly mm parameter
|
|
GuideConfig GuideConfig text user none parameter
|
|
magnetic_field magnetic_field float user T sample
|
|
RotApPosY RotApPosY float readonly mm @none
|
|
SampleThickness SampleThickness float user mm sample
|
|
SamYOffset SamYOffset float user mm parameter
|
|
Transmission Transmission float user 1 parameter
|
|
TransmissionFlag TransmissionFlag int user none sample
|
|
} {
|
|
::utility::mkVar $var $type $priv $lname true $klass true true
|
|
if {$units != "none"} {
|
|
sicslist setatt $var units $units
|
|
}
|
|
}
|
|
sicslist setatt Transmission link data_set
|
|
|
|
proc sicsmsgfmt {args} {return "[info level -1] = $args"}
|
|
|
|
::utility::macro::getset float Plex {} {
|
|
return [sicsmsgfmt [ ::optics::AttRotLookup [SplitReply [att]] "plex" [SplitReply [att precision]] ]]
|
|
}
|
|
sicslist setatt Plex units mm
|
|
sicslist setatt Plex long_name Plex
|
|
sicslist setatt Plex klass parameter
|
|
|
|
::utility::macro::getset float AttFactor {} {
|
|
return [sicsmsgfmt [ ::optics::AttRotLookup [SplitReply [att]] "attfactor" [SplitReply [att precision]] ]]
|
|
}
|
|
sicslist setatt AttFactor long_name AttFactor
|
|
sicslist setatt AttFactor klass parameter
|
|
|
|
::utility::macro::getset float EApX {} {
|
|
return [sicsmsgfmt [::optics::EApLookUp [SplitReply [srce]] "size" [SplitReply [srce precision]] ]]
|
|
}
|
|
sicslist setatt EApX units mm
|
|
sicslist setatt EApX long_name EApX
|
|
sicslist setatt EApX klass parameter
|
|
|
|
::utility::macro::getset float EApZ {} {
|
|
return [sicsmsgfmt [::optics::EApLookUp [SplitReply [srce]] "size" [SplitReply [srce precision]] ]]
|
|
}
|
|
sicslist setatt EApZ units mm
|
|
sicslist setatt EApZ long_name EApZ
|
|
sicslist setatt EApZ klass parameter
|
|
|
|
::utility::macro::getset text EApShape {} {
|
|
return [sicsmsgfmt [::optics::EApLookUp [SplitReply [srce]] "shape" [SplitReply [srce precision]] ]]
|
|
}
|
|
sicslist setatt EApShape long_name EApShape
|
|
sicslist setatt EApShape klass parameter
|
|
sicslist setatt EApShape mutable false
|
|
|
|
::utility::macro::getset float L1 {} {
|
|
set efpy [SplitReply [EndFacePosY]]
|
|
set samposy [SplitReply [samy]]
|
|
set eapy [SplitReply [EApPosY]]
|
|
return [sicsmsgfmt [expr {$efpy + $samposy - $eapy}]]
|
|
}
|
|
sicslist setatt L1 long_name L1
|
|
sicslist setatt L1 klass parameter
|
|
sicslist setatt L1 units mm
|
|
|
|
::utility::macro::getset float L2 {} {
|
|
set detpy [SplitReply [det]]
|
|
set detpyos [SplitReply [DetPosYOffset]]
|
|
set sapy [SplitReply [samy]]
|
|
return [sicsmsgfmt [expr {$detpy + $detpyos - $sapy}]]
|
|
}
|
|
sicslist setatt L2 long_name L2
|
|
sicslist setatt L2 klass parameter
|
|
sicslist setatt L2 units mm
|
|
|
|
|
|
################################################################################
|
|
# INITIALISE PARAMETERS
|
|
# The collimation system aperture positions
|
|
# Reference position is outer wall of velocity selector bunker, ie EndFacePosY
|
|
array set collapposmm {
|
|
inputguide 633
|
|
apwheel 675
|
|
ap1 4929
|
|
ap2 6934
|
|
ap3 8949
|
|
ap4 10955
|
|
ap5 12943
|
|
ap6 14970
|
|
ap7 16971
|
|
ap9 19925
|
|
}
|
|
|
|
EndFacePosY 20095
|
|
RotApPosY 675
|
|
|
|
################################################################################
|
|
# Check Config
|
|
namespace eval parameters {
|
|
set paramlist {
|
|
AttFactor
|
|
BSdiam
|
|
DetPosYOffset
|
|
EApPosY
|
|
EApShape
|
|
EApX
|
|
EApZ
|
|
EndFacePosY
|
|
L1
|
|
L2
|
|
Plex
|
|
SamYOffset
|
|
Transmission
|
|
}
|
|
}
|
|
##
|
|
# @brief List undefined parameters
|
|
proc ::parameters::missingparams {} {
|
|
variable paramlist
|
|
set num 0
|
|
foreach param $paramlist {
|
|
if {[sicslist match $param] == " "} {
|
|
clientput $param
|
|
incr num
|
|
}
|
|
}
|
|
if {$num > 0} {
|
|
clientput "There are $num missing parameters"
|
|
} else {
|
|
clientput "OK"
|
|
}
|
|
}
|
|
|
|
##
|
|
# @brief Check list
|
|
proc check {args} {
|
|
switch $args {
|
|
"missing" {
|
|
::parameters::missingparams
|
|
}
|
|
}
|
|
}
|
|
publish check user
|
|
|