From 343f874b70aadd3b3c5b34781255e965ab4f6d60 Mon Sep 17 00:00:00 2001 From: Ferdi Franceschini Date: Mon, 11 Jan 2010 16:12:40 +1100 Subject: [PATCH] sans/config/parameters/parameters.tcl SICS-365 Refactored quokka nexus structure, the parameters group has been greatly simplified. sans/config/commands/commands.tcl If "selbs" is called by "selbsn" or "selbsxy" it now reports "startt selbsn/selbsxy" and "stop selbsn/selsxy" as well as start and stop for selbs. The rotary attenuator and entrance aperture commands now drive the "att" and "srce" motors directly. quokka_configuration.tcl Removed obsolete code. SICS-365 nxscripts_common_1.tcl, instdict_specification.tcl, common_instrument_dictionary.tcl Don't create unnofficial nexus classes. r2856 | ffr | 2010-01-11 16:12:40 +1100 (Mon, 11 Jan 2010) | 13 lines --- .../hipadaba/common_instrument_dictionary.tcl | 8 +- .../hipadaba/instdict_specification.tcl | 2 +- .../config/nexus/nxscripts_common_1.tcl | 6 +- .../sans/config/commands/commands.tcl | 30 +- .../sans/config/parameters/parameters.tcl | 375 ++++-------------- .../instrument/sans/quokka_configuration.tcl | 15 +- 6 files changed, 99 insertions(+), 337 deletions(-) diff --git a/site_ansto/instrument/config/hipadaba/common_instrument_dictionary.tcl b/site_ansto/instrument/config/hipadaba/common_instrument_dictionary.tcl index 5d6eec67..5fbe266b 100644 --- a/site_ansto/instrument/config/hipadaba/common_instrument_dictionary.tcl +++ b/site_ansto/instrument/config/hipadaba/common_instrument_dictionary.tcl @@ -36,19 +36,13 @@ set instrument_dictionary [subst { privilege spy sobj {@any parameter} datatype @none - property {data true control true nxsave true klass NXparameter type part} + property {data true control true nxsave true klass parameters type part} } instrument/parameters/parameters_group { privilege spy datatype @none property {data true control false nxsave false klass @none type nxvgroup nxalias parameters_group} } - instrument/parameters/derived_parameters { - privilege spy - sobj {@any derived_parameter} - datatype @none - property {data true control true nxsave true klass NXderived_parameter type part} - } instrument/aperture { privilege spy sobj {@any aperture} diff --git a/site_ansto/instrument/config/hipadaba/instdict_specification.tcl b/site_ansto/instrument/config/hipadaba/instdict_specification.tcl index bd00dcf7..8a174fb1 100644 --- a/site_ansto/instrument/config/hipadaba/instdict_specification.tcl +++ b/site_ansto/instrument/config/hipadaba/instdict_specification.tcl @@ -11,7 +11,7 @@ set boolean {true false} #} # SICS OBJECTS MUST PROVIDE THE FOLLOWING INFORMATION -set sobj_klass_list {@none aperture attenuator collimator command crystal data detector disk_chopper entry environment experiment graphics instrument slits monitor monochromator parameter derived_parameter plc sample scan sensor source user} +set sobj_klass_list {@none aperture attenuator collimator command crystal data detector disk_chopper entry environment experiment graphics instrument slits monitor monochromator parameter plc sample scan sensor source user} set sobj_sicstype_list {chopperadapter environment_controller sicsvariable macro motor configurablevirtualmotor singlecounter histmem nxscript sicsdata scanobject sct_object} # Different kinds of things are added to the hdb in different ways. # command: This is something a client can run with hset /a/b/c start, it may have parameters and feedback. diff --git a/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl b/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl index 68ddb04c..b5362cdb 100644 --- a/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl +++ b/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl @@ -720,10 +720,8 @@ proc ::nexus::_gen_nxdict {hpath dictPath name nxc} { set nxclass [hgetpropval /$hpath/$child klass] if {$nxc == "NXentry"} { ::nexus::_gen_nxdict $hpath/$child $dictPath $child $nxclass - } elseif {[string range $nxc 0 1] == "NX"} { - ::nexus::_gen_nxdict $hpath/$child $dictPath/$name,$nxc $child $nxclass } else { - ::nexus::_gen_nxdict $hpath/$child $dictPath ${name}_$child $nxclass + ::nexus::_gen_nxdict $hpath/$child $dictPath/$name,$nxc $child $nxclass } } } @@ -1336,7 +1334,7 @@ foreach expt $::nexus::exports { set tmpstr [string map {"$" ""} {$Name: not supported by cvs2svn $}] set nx_content_release_tag [lindex $tmpstr [expr [llength $tmpstr] - 1]] -set tmpstr [string map {"$" ""} {$Revision: 1.51 $}] +set tmpstr [string map {"$" ""} {$Revision: 1.51.2.1 $}] set nx_content_revision_num [lindex $tmpstr [expr [llength $tmpstr] - 1]] #namespace eval data { diff --git a/site_ansto/instrument/sans/config/commands/commands.tcl b/site_ansto/instrument/sans/config/commands/commands.tcl index 9e108211..bfd1d925 100644 --- a/site_ansto/instrument/sans/config/commands/commands.tcl +++ b/site_ansto/instrument/sans/config/commands/commands.tcl @@ -92,6 +92,7 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} { if {$bx == "UNDEF" || $bz == "UNDEF"} { statemon start selbs + if {[info level] > 1} {statemon start [lindex [info level -1] 0]} set bsdriving true BeamStop -1 drive $bsmot $bs_target @@ -99,6 +100,7 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} { BeamStop $bs set bsdriving false statemon stop selbs + if {[info level] > 1} {statemon stop [lindex [info level -1] 0]} } else { if { [string is double $bx] == false } { if { [string is double $bz] == false } { @@ -109,6 +111,7 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} { set bsz_target [expr {$bz-$Zbsf}] statemon start selbs + if {[info level] > 1} {statemon start [lindex [info level -1] 0]} set bsdriving true BeamStop -1 drive $bsmot $bs_target bsx $bsx_target bsz $bsz_target @@ -116,10 +119,12 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} { 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 } @@ -136,29 +141,28 @@ namespace eval beamstops { namespace eval optics { VarMake ::optics::select::section text user - VarMake ::optics::polarizer::in text user + VarMake ::optics::polarizer::in text user VarMake ::optics::lens::selection text user command rotary_attenuator {int=0,15,45,90,180 angle} { - AttRotDeg $angle + drive att $angle } command entrance_aperture { int=0,45,90,135,180,270 angle - text=circ,squ,open,rect shape } { - RotApDeg $angle - RotApShape $shape + drive srce $angle } - command sample_aperture { - int=25,50 size - text=circ,squ,open,rect shape - } { - SApXmm $size - SApZmm $size - SApShape $shape - } +# TODO Do we need this +# command sample_aperture { +# int=25,50 size +# text=circ,squ,open,rect shape +# } { +# SApXmm $size +# SApZmm $size +# SApShape $shape +# } ############################## ## diff --git a/site_ansto/instrument/sans/config/parameters/parameters.tcl b/site_ansto/instrument/sans/config/parameters/parameters.tcl index b96b08e7..5f9a881c 100644 --- a/site_ansto/instrument/sans/config/parameters/parameters.tcl +++ b/site_ansto/instrument/sans/config/parameters/parameters.tcl @@ -1,30 +1,25 @@ -## -# @brief We can't change the coordinate scheme at runtime because this would require -# restructuring the hdb tree, but we should save it. -foreach {var lname nxname} { - SApCoordScheme SApCoordScheme coordinate_scheme - EApCoordScheme EApCoordScheme coordinate_scheme - SampleCoordScheme SampleCoordScheme coordinate_scheme - DetCoordScheme DetCoordScheme coordinate_scheme - BeamstopCoordScheme BeamstopCoordScheme coordinate_scheme - CollCoordScheme CollCoordScheme coordinate_scheme -} { - ::utility::mkVar $var text readonly $lname true @none false true - $var Cartesian - $var lock -} +# TODO Make readonly getset macro for AttFactor ## -# @brief User privilege text variables -# +# @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} { - SApShape SApShape text user none parameter - BSShape BSShape text user none parameter - BeamStop BeamStop int user none parameter - SampleThickness thickness float user mm sample - TransmissionFlag transmission_flag int user none sample - magnetic_field magnetic_field float user T sample - lambda lambda float user Ao data + 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 DetPosYOffsetfloat float user mm parameter + EApPosY EApPosY float user mm parameter + EndFacePosY EndFacePosY float readonly mm 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"} { @@ -32,239 +27,67 @@ foreach {var lname type priv units klass} { } } -## -# @brief 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. -foreach {var lname nxname units klass} { - EndFacePosYmm EndFacePosYmm y mm parameter - RotApPosYmm RotApPosYmm y mm @none -} { - ::utility::mkVar $var float readonly $lname true $klass true true - if {$units != 1} { - sicslist setatt $var units $units - } -} - -# ::utility::mkVar SampleNum int readonly changer_position true parameter true true - -## -# @brief Parameter SicsVariables -foreach {var lname nxname units priv } { - LambdaA LambdaA wavelength Ao user - LambdaResFWHM_percent LambdaResFWHM_percent wavelength_spread 1 user - VSdeg VSdeg twist degrees user - VSrpm VSrpm rotation_speed rpm user - EApYmm EApYmm y mm user - EApPosYmm EApPosYmm y mm user - SApXmm SApXmm x mm user - SApZmm SApZmm z mm user - SApPosXmm SApPosXmm x mm user - SApPosYmm SApPosYmm y mm user - SApPosZmm SApPosZmm z mm user - SamplePosXmm SamplePosXmm x mm user - SamYOffsetmm SamYOffsetmm y mm user - SamplePosZmm SamplePosZmm z mm user - DetPosYOffsetmm DetPosYOffsetmm detposyoffset mm user - BSXmm BSXmm x mm user - BSZmm BSZmm z mm user - Transmission Transmission Transmission 1 user - BeamCenterX BeamCenterX BeamCenterX mm user - BeamCenterZ BeamCenterZ BeamCenterZ mm user -} { - ::utility::mkVar $var float $priv $lname true parameter true true - if {$units != 1} { - sicslist setatt $var units $units - } -} - -# Derived Parameter SicsVariables -foreach {var type lname units depends} { - AttFactor float AttFactor 1 AttRotDeg,LambdaA,LambdaResFWHM_percent - PleXmm float PleXmm mm AttRotDeg - EApXmm float EApXmm mm RotApDeg - EApZmm float EApZmm mm RotApDeg - RotApXmm float RotApXmm mm RotApDeg - RotApZmm float RotApZmm mm RotApDeg - EApShape text EApShape 1 RotApDeg - RotApShape text RotApShape 1 RotApDeg -} { - ::utility::mkVar $var $type user $lname true derived_parameter true true - sicslist setatt $var depends $depends - if {$units != 1} { - sicslist setatt $var units $units - } -} proc sicsmsgfmt {args} {return "[info level -1] = $args"} + ::utility::macro::getset float SamplePosYmm {} { set sy [SplitReply [samy]] - set syo [SplitReply [SamYOffsetmm]] + set syo [SplitReply [SamYOffset]] return [sicsmsgfmt [expr {$sy+$syo}]] } sicslist setatt SamplePosYmm long_name SamplePosYmm -sicslist setatt SamplePosYmm klass derived_parameter +sicslist setatt SamplePosYmm klass parameter sicslist setatt SamplePosYmm units mm -sicslist setatt SamplePosYmm depends samy,SamYOffsetmm -::utility::macro::getset float L1mm {} { - set efpy [SplitReply [EndFacePosYmm]] +::utility::macro::getset float Plex {} { + return [sicsmsgfmt [ ::optics::AttRotLookup [SplitReply [att]] ]] +} +sicslist setatt Plex units mm +sicslist setatt Plex long_name Plex +sicslist setatt Plex klass parameter + +::utility::macro::getset float EApX {} { + return [sicsmsgfmt [::optics::EApLookUp [SplitReply [srce]] "size"]] +} +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"]] +} +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"]] +} +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 [SamplePosYmm]] - set eapy [SplitReply [EApPosYmm]] + set eapy [SplitReply [EApPosY]] return [sicsmsgfmt [expr {$efpy + $samposy - $eapy}]] } -sicslist setatt L1mm long_name L1mm -sicslist setatt L1mm klass derived_parameter -sicslist setatt L1mm units mm -sicslist setatt L1mm depends EndFacePosYmm,SApPosYmm,EApPosYmm +sicslist setatt L1 long_name L1 +sicslist setatt L1 klass parameter +sicslist setatt L1 units mm -::utility::macro::getset float L2mm {} { - set detpy [SplitReply [DetPosYmm]] - set detpyos [SplitReply [DetPosYOffsetmm]] +::utility::macro::getset float L2 {} { + set detpy [SplitReply [det]] + set detpyos [SplitReply [DetPosYOffset]] set sapy [SplitReply [SamplePosYmm]] return [sicsmsgfmt [expr {$detpy + $detpyos - $sapy}]] } -sicslist setatt L2mm long_name L2mm -sicslist setatt L2mm klass derived_parameter -sicslist setatt L2mm units mm -sicslist setatt L2mm depends DetPosYmm,DetPosYOffsetmm,SamplePosYmm +sicslist setatt L2 long_name L2 +sicslist setatt L2 klass parameter +sicslist setatt L2 units mm -# Derive motor parameters -foreach {pname motor units} { - DetPosXmm detoff mm - DetPosYmm det mm - BSPosXmm bsx mm - BSPosZmm bsz mm - SampleTiltXDeg samphi degrees - SampleTiltYDeg samchi degrees - SampleRotDeg samthet degrees -} { - ::utility::macro::getset float $pname {} [subst -nocommands { - return [sicsmsgfmt [SplitReply [$motor]]] - }] - sicslist setatt $pname units $units - sicslist setatt $pname long_name $pname - sicslist setatt $pname klass derived_parameter -# sicslist setatt $pname depends $motor -} -foreach {pname motor units} { - AttRotDeg att degrees -} { - ::utility::macro::getset float $pname {args} [subst -nocommands { -# TODO AttFactor - if {[set args] == ""} { - return [sicsmsgfmt [SplitReply [$motor]]] - } else { - set target [lindex [set args] 0] - Plexmm -1 - ${pname}_status "BUSY" - drive $motor \$target - set motpos [SplitReply [$motor]] - set tolerance [SplitReply [$motor precision] ] - if {[expr abs(\$motpos - \$target)] > \$tolerance} { - ${pname}_status "IDLE" - error "ERROR: failed to set $pname target \$target" - } else { - Plexmm [::optics::AttRotLookup \$target] - } - ${pname}_status "IDLE" - } - }] - sicslist setatt $pname units $units - sicslist setatt $pname long_name $pname - sicslist setatt $pname klass derived_parameter -# sicslist setatt $pname depends $motor - # TODO SICS-198 add feedback support to getset macro generator - VarMake ${pname}_status text user - ${pname}_status "IDLE" -} - -foreach {pname motor units} { - RotApDeg srce degrees -} { - ::utility::macro::getset float $pname {args} [subst -nocommands { - if {[set args] == ""} { - return [sicsmsgfmt [SplitReply [$motor]]] - } else { - set target [lindex [set args] 0] - RotApXmm 0 - RotApZmm 0 - RotApShape "UNKNOWN" - EApXmm 0 - EApZmm 0 - EApShape "UNKNOWN" - ${pname}_status "BUSY" - drive $motor \$target - set motpos [SplitReply [$motor]] - set tolerance [SplitReply [$motor precision] ] - if {[expr abs(\$motpos - \$target)] > \$tolerance} { - ${pname}_status "IDLE" - error "ERROR: failed to set $pname target \$target" - } else { - set size [::optics::EApLookUp \$target "size"] - set shape [::optics::EApLookUp \$target "shape"] - RotApXmm \$size - RotApZmm \$size - RotApShape \$shape - EApXmm \$size - EApZmm \$size - EApShape \$shape - } - ${pname}_status "IDLE" - } - }] - sicslist setatt $pname units $units - sicslist setatt $pname long_name $pname - sicslist setatt $pname klass derived_parameter -# sicslist setatt $pname depends $motor - # TODO SICS-198 add feedback support to getset macro generator - VarMake ${pname}_status text user - ${pname}_status "IDLE" -} ################################################################################ -::hdb::MakeAperture sample_aperture { - shape SApShape - size {SApXmm SApZmm} - coordinate_scheme SApCoordScheme - position {SApPosXmm SApPosYmm SApPosZmm} -} - -::hdb::MakeAperture entrance_aperture { - shape EApShape - size {EApXmm EApYmm EApZmm} - coordinate_scheme EApCoordScheme - position EApPosYmm -} - -::hdb::MakeAperture rotary_aperture { - shape RotApShape - size {RotApXmm RotApZmm} - position RotApPosYmm - orientation RotApDeg -} - -#::hdb::MakeGeometry sample_geometry sample { -# coordinate_scheme SampleCoordScheme -# position {SamplePosXmm SamplePosYmm SamplePosZmm} -# orientation {SampleTiltXDeg SampleTiltYDeg SampleRotDeg} -#} - -::hdb::MakeGeometry detector_geometry detector { - coordinate_scheme DetCoordScheme - position {DetPosXmm DetPosYmm} - offset DetPosYOffsetmm -} - -::hdb::MakeGeometry collimator_geometry collimator { - coordinate_scheme CollCoordScheme - position EndFacePosYmm -} - -::hdb::MakeGeometry beamstop_geometry beam_stop { - shape BSShape - position {BSPosXmm BSPosZmm} - size {BSXmm BSZmm} -} - # INITIALISE PARAMETERS # The collimation system aperture positions # Reference position is outer wall of velocity selector bunker, ie VelSelPosYmm @@ -281,73 +104,27 @@ array set collapposmm { ap9 19925 } -EndFacePosYmm 20095 -RotApPosYmm 675 +EndFacePosY 20095 +RotApPosY 675 ################################################################################ # Check Config namespace eval parameters { set paramlist { AttFactor - AttRotDeg - BS1 - BS2 - BS3 - BS4 - BS5 - BSPosXmm - BSPosZmm - BSShape - BSXmm - BSZmm - C1 - C2 - C3 - C4 - C5 - C6 - C7 - C8 - C9 - DetPosXmm - DetPosYmm - DetPosYOffsetmm - EApPosYmm + BSdiam + DetPosYOffset + EApPosY EApShape - EApShape - EApXmm - EApYmm - EApZmm - EndFacePosYmm - L1mm - L2mm - LambdaA - LambdaResFWHM_percent - Pent - Plexmm - RotApDeg - RotApShape - RotApXmm - RotApZmm - SampleAttributes - SampleComments - SampleName - SampleNum - SamplePosXmm - SamplePosYmm - SamplePosZmm - SampleRotDeg - SampleTiltXDeg - SampleTiltYDeg - SampleTitle - SApPosXmm - SApPosYmm - SApPosZmm - SApShape - SApXmm - SApZmm - VSdeg - VSrpm + EApX + EApZ + EndFacePosY + L1 + L2 + Plex + SamYOffset + SamplePosYmm + Transmission } } ## diff --git a/site_ansto/instrument/sans/quokka_configuration.tcl b/site_ansto/instrument/sans/quokka_configuration.tcl index c9d75623..8ae9eb5d 100644 --- a/site_ansto/instrument/sans/quokka_configuration.tcl +++ b/site_ansto/instrument/sans/quokka_configuration.tcl @@ -1,5 +1,5 @@ -# $Revision: 1.20 $ -# $Date: 2009-11-24 22:56:48 $ +# $Revision: 1.20.2.1 $ +# $Date: 2010-01-11 05:12:40 $ # Author: Ferdi Franceschini (ffr@ansto.gov.au) # Last revision by: $Author: ffr $ @@ -54,14 +54,3 @@ server_init # WARNING: Do not add any code below server_init, if you do SICS may fail to initialise properly. # You can add extra-configuration code in ../extraconfig.tcl - - # TODO SICS-198 add feedback support to getset macro generator - foreach pname {AttRotDeg RotApDeg} { - hmake /instrument/parameters/derived_parameters/$pname/feedback spy none - hsetprop /instrument/parameters/derived_parameters/$pname/feedback data false - hsetprop /instrument/parameters/derived_parameters/$pname/feedback control true - hattach /instrument/parameters/derived_parameters/$pname/feedback ${pname}_status status - hsetprop /instrument/parameters/derived_parameters/$pname/feedback/status control true - hsetprop /instrument/parameters/derived_parameters/$pname/feedback/status data false - hsetprop /instrument/parameters/derived_parameters/$pname/feedback/status nxsave false - }