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
This commit is contained in:
Ferdi Franceschini
2010-01-11 16:12:40 +11:00
committed by Douglas Clowes
parent 3f53864468
commit 343f874b70
6 changed files with 99 additions and 337 deletions

View File

@@ -36,19 +36,13 @@ set instrument_dictionary [subst {
privilege spy privilege spy
sobj {@any parameter} sobj {@any parameter}
datatype @none 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 { instrument/parameters/parameters_group {
privilege spy privilege spy
datatype @none datatype @none
property {data true control false nxsave false klass @none type nxvgroup nxalias parameters_group} 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 { instrument/aperture {
privilege spy privilege spy
sobj {@any aperture} sobj {@any aperture}

View File

@@ -11,7 +11,7 @@ set boolean {true false}
#} #}
# SICS OBJECTS MUST PROVIDE THE FOLLOWING INFORMATION # 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} 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. # 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. # command: This is something a client can run with hset /a/b/c start, it may have parameters and feedback.

View File

@@ -720,10 +720,8 @@ proc ::nexus::_gen_nxdict {hpath dictPath name nxc} {
set nxclass [hgetpropval /$hpath/$child klass] set nxclass [hgetpropval /$hpath/$child klass]
if {$nxc == "NXentry"} { if {$nxc == "NXentry"} {
::nexus::_gen_nxdict $hpath/$child $dictPath $child $nxclass ::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 { } 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 tmpstr [string map {"$" ""} {$Name: not supported by cvs2svn $}]
set nx_content_release_tag [lindex $tmpstr [expr [llength $tmpstr] - 1]] 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]] set nx_content_revision_num [lindex $tmpstr [expr [llength $tmpstr] - 1]]
#namespace eval data { #namespace eval data {

View File

@@ -92,6 +92,7 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} {
if {$bx == "UNDEF" || $bz == "UNDEF"} { if {$bx == "UNDEF" || $bz == "UNDEF"} {
statemon start selbs statemon start selbs
if {[info level] > 1} {statemon start [lindex [info level -1] 0]}
set bsdriving true set bsdriving true
BeamStop -1 BeamStop -1
drive $bsmot $bs_target drive $bsmot $bs_target
@@ -99,6 +100,7 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} {
BeamStop $bs BeamStop $bs
set bsdriving false set bsdriving false
statemon stop selbs statemon stop selbs
if {[info level] > 1} {statemon stop [lindex [info level -1] 0]}
} else { } else {
if { [string is double $bx] == false } { if { [string is double $bx] == false } {
if { [string is double $bz] == false } { if { [string is double $bz] == false } {
@@ -109,6 +111,7 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} {
set bsz_target [expr {$bz-$Zbsf}] set bsz_target [expr {$bz-$Zbsf}]
statemon start selbs statemon start selbs
if {[info level] > 1} {statemon start [lindex [info level -1] 0]}
set bsdriving true set bsdriving true
BeamStop -1 BeamStop -1
drive $bsmot $bs_target bsx $bsx_target bsz $bsz_target drive $bsmot $bs_target bsx $bsx_target bsz $bsz_target
@@ -116,10 +119,12 @@ proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} {
BeamStop $bs BeamStop $bs
set bsdriving false set bsdriving false
statemon stop selbs statemon stop selbs
if {[info level] > 1} {statemon stop [lindex [info level -1] 0]}
} }
} msg ] { } msg ] {
if {$bsdriving} { if {$bsdriving} {
statemon stop selbs statemon stop selbs
if {[info level] > 1} {statemon stop [lindex [info level -1] 0]}
} }
return -code error $msg return -code error $msg
} }
@@ -136,29 +141,28 @@ namespace eval beamstops {
namespace eval optics { namespace eval optics {
VarMake ::optics::select::section text user VarMake ::optics::select::section text user
VarMake ::optics::polarizer::in text user VarMake ::optics::polarizer::in text user
VarMake ::optics::lens::selection text user VarMake ::optics::lens::selection text user
command rotary_attenuator {int=0,15,45,90,180 angle} { command rotary_attenuator {int=0,15,45,90,180 angle} {
AttRotDeg $angle drive att $angle
} }
command entrance_aperture { command entrance_aperture {
int=0,45,90,135,180,270 angle int=0,45,90,135,180,270 angle
text=circ,squ,open,rect shape
} { } {
RotApDeg $angle drive srce $angle
RotApShape $shape
} }
command sample_aperture { # TODO Do we need this
int=25,50 size # command sample_aperture {
text=circ,squ,open,rect shape # int=25,50 size
} { # text=circ,squ,open,rect shape
SApXmm $size # } {
SApZmm $size # SApXmm $size
SApShape $shape # SApZmm $size
} # SApShape $shape
# }
############################## ##############################
## ##

View File

@@ -1,30 +1,25 @@
## # TODO Make readonly getset macro for AttFactor
# @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
}
## ##
# @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} { foreach {var lname type priv units klass} {
SApShape SApShape text user none parameter BeamCenterX BeamCenterX float user mm parameter
BSShape BSShape text user none parameter BeamCenterZ BeamCenterZ float user mm parameter
BeamStop BeamStop int user none parameter BeamStop BeamStop int user none parameter
SampleThickness thickness float user mm sample BSdiam BSdiam float user mm parameter
TransmissionFlag transmission_flag int user none sample DetPosYOffset DetPosYOffsetfloat float user mm parameter
magnetic_field magnetic_field float user T sample EApPosY EApPosY float user mm parameter
lambda lambda float user Ao data 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 ::utility::mkVar $var $type $priv $lname true $klass true true
if {$units != "none"} { 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"} proc sicsmsgfmt {args} {return "[info level -1] = $args"}
::utility::macro::getset float SamplePosYmm {} { ::utility::macro::getset float SamplePosYmm {} {
set sy [SplitReply [samy]] set sy [SplitReply [samy]]
set syo [SplitReply [SamYOffsetmm]] set syo [SplitReply [SamYOffset]]
return [sicsmsgfmt [expr {$sy+$syo}]] return [sicsmsgfmt [expr {$sy+$syo}]]
} }
sicslist setatt SamplePosYmm long_name SamplePosYmm 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 units mm
sicslist setatt SamplePosYmm depends samy,SamYOffsetmm
::utility::macro::getset float L1mm {} { ::utility::macro::getset float Plex {} {
set efpy [SplitReply [EndFacePosYmm]] 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 samposy [SplitReply [SamplePosYmm]]
set eapy [SplitReply [EApPosYmm]] set eapy [SplitReply [EApPosY]]
return [sicsmsgfmt [expr {$efpy + $samposy - $eapy}]] return [sicsmsgfmt [expr {$efpy + $samposy - $eapy}]]
} }
sicslist setatt L1mm long_name L1mm sicslist setatt L1 long_name L1
sicslist setatt L1mm klass derived_parameter sicslist setatt L1 klass parameter
sicslist setatt L1mm units mm sicslist setatt L1 units mm
sicslist setatt L1mm depends EndFacePosYmm,SApPosYmm,EApPosYmm
::utility::macro::getset float L2mm {} { ::utility::macro::getset float L2 {} {
set detpy [SplitReply [DetPosYmm]] set detpy [SplitReply [det]]
set detpyos [SplitReply [DetPosYOffsetmm]] set detpyos [SplitReply [DetPosYOffset]]
set sapy [SplitReply [SamplePosYmm]] set sapy [SplitReply [SamplePosYmm]]
return [sicsmsgfmt [expr {$detpy + $detpyos - $sapy}]] return [sicsmsgfmt [expr {$detpy + $detpyos - $sapy}]]
} }
sicslist setatt L2mm long_name L2mm sicslist setatt L2 long_name L2
sicslist setatt L2mm klass derived_parameter sicslist setatt L2 klass parameter
sicslist setatt L2mm units mm sicslist setatt L2 units mm
sicslist setatt L2mm depends DetPosYmm,DetPosYOffsetmm,SamplePosYmm
# 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 # INITIALISE PARAMETERS
# The collimation system aperture positions # The collimation system aperture positions
# Reference position is outer wall of velocity selector bunker, ie VelSelPosYmm # Reference position is outer wall of velocity selector bunker, ie VelSelPosYmm
@@ -281,73 +104,27 @@ array set collapposmm {
ap9 19925 ap9 19925
} }
EndFacePosYmm 20095 EndFacePosY 20095
RotApPosYmm 675 RotApPosY 675
################################################################################ ################################################################################
# Check Config # Check Config
namespace eval parameters { namespace eval parameters {
set paramlist { set paramlist {
AttFactor AttFactor
AttRotDeg BSdiam
BS1 DetPosYOffset
BS2 EApPosY
BS3
BS4
BS5
BSPosXmm
BSPosZmm
BSShape
BSXmm
BSZmm
C1
C2
C3
C4
C5
C6
C7
C8
C9
DetPosXmm
DetPosYmm
DetPosYOffsetmm
EApPosYmm
EApShape EApShape
EApShape EApX
EApXmm EApZ
EApYmm EndFacePosY
EApZmm L1
EndFacePosYmm L2
L1mm Plex
L2mm SamYOffset
LambdaA SamplePosYmm
LambdaResFWHM_percent Transmission
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
} }
} }
## ##

View File

@@ -1,5 +1,5 @@
# $Revision: 1.20 $ # $Revision: 1.20.2.1 $
# $Date: 2009-11-24 22:56:48 $ # $Date: 2010-01-11 05:12:40 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au) # Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: ffr $ # 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. # 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 # 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
}