# 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 parameter BeamCenterZ BeamCenterZ float user mm parameter 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