Files
sics/site_ansto/instrument/sans/config/parameters/parameters.tcl
Ferdi Franceschini 0f96e4f82f server_config.tcl
server_init now calls ::counter::isc_initialize, ::histogram_memory::isc_initialize and ::scan::isc_initialize

scan.c
SICS-158  Restrict bmonscan and hmscan to only one scan variable

count_common.tcl
Create a mulicounter which uses the available monitors as channels.  The multicounter is used in bmonscans

hipadaba_configuration_common.tcl
Use _link as the suffix for the nxvgroup name when making nexus file links.

hmm_configuration_common.tcl
SICS-190 Create hdb entries for bm_counts, bm_event_rate, bm_status
SICS-164 Allow running histmem in simulated mode.

hmm_cylindrical_detector_configuration.tcl
Only refer to detector SICSVariables when necessary, otherwise we get dependency problems.

nxscripts_common_1.tcl
Separate histmem_filtype_spec from bmon_filetype_spec so that we can use the histem_filetyp_spec names to restrict the histmem scan filetypes.
Close the data file on error in proc ::nexus::save
Allow int and text types when saving macro data

scan_common_1.tcl
SICS-173  Allow users to force a scan when the instrument isn't ready
Added ic_initialize proc so we can make dependencies explicit in the init_server proc
SICS-186 Allow monitor modes for histmem scans
Allow selection of histmem file policies from runscan command

echidna, wombat, kowari, quokka and platypus component and server configurations
Added instrument specific configuration initialisation functions in the component configuration files.
Add a catch block to the top-level instrument server configuration file and printout the errorContext and callStack

r2641 | ffr | 2008-07-01 17:02:26 +1000 (Tue, 01 Jul 2008) | 34 lines
2012-11-15 13:39:55 +11:00

375 lines
11 KiB
Tcl

##
# @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} {
VelSelCoordScheme VelSelCoordScheme coordinate_scheme
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
#
# TODO SICS-117 Redo as get/set macros like the "kind=command" macros but kind=getset and it is saveable
# The set parameter will have a domain. If the param is readonly then the hdb privilege is readonly
# Pros, GumTree will know the data type of the parameter (text params will have a list of valid values).
# Cons, There is no "instant" feedback, macros are polled on the hdb tree.
foreach {var lname nxname priv klass} {
SApShape SApShape shape user parameter
BSShape BSShape shape user parameter
} {
::utility::mkVar $var text $priv $lname true $klass true true
}
# 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} {
VelSelPosXmm VelSelPosXmm x mm @none
VelSelPosYmm VelSelPosYmm y mm @none
VelSelPosZmm VelSelPosZmm z mm @none
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
# Parameter SicsVariables
foreach {var lname nxname units priv } {
LambdaA LambdaA wavelength nm user
LambdaResFWHM% LambdaResFWHM% 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
SamplePosYmm SamplePosYmm y mm user
SamplePosZmm SamplePosZmm z mm user
DetPosYOffsetmm DetPosYOffsetmm detposyoffset mm user
BSXmm BSXmm x mm user
BSZmm BSZmm z 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%
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 L1mm {} {
set efpy [SplitReply [EndFacePosYmm]]
set sapy [SplitReply [SApPosYmm]]
set eapy [SplitReply [EApPosYmm]]
return [sicsmsgfmt [expr {$efpy + $sapy - $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
::utility::macro::getset float L2mm {} {
set detpy [SplitReply [DetPosYmm]]
set detpyos [SplitReply [DetPosYOffsetmm]]
set sapy [SplitReply [SamplePosYmm]]
return [sicsmsgfmt [expr {$detpyos + $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
# 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
drive $motor \$target
set motpos [SplitReply [$motor]]
set tolerance [SplitReply [$motor precision] ]
if {[expr abs(\$motpos - \$target)] > \$tolerance} {
error "ERROR: failed to set $pname target \$target"
} else {
Plexmm [::optics::AttRotLookup \$target]
}
}
}]
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} {
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"
drive $motor \$target
set motpos [SplitReply [$motor]]
set tolerance [SplitReply [$motor precision] ]
if {[expr abs(\$motpos - \$target)] > \$tolerance} {
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
}
}
}]
sicslist setatt $pname units $units
sicslist setatt $pname long_name $pname
sicslist setatt $pname klass derived_parameter
# sicslist setatt $pname depends $motor
}
################################################################################
##
# @brief This is the position of the velocity selector bunker face. It is used
# as the reference for other positions. x=y=z=0.
::hdb::MakeVelocity_Selector velocity_selector {
wavelength LambdaA
wavelength_spread LambdaResFWHM%
coordinate_scheme VelSelCoordScheme
position {VelSelPosXmm VelSelPosYmm VelSelPosZmm}
}
::hdb::MakeAperture sample_aperture {
shape SApShape
size {SApXmm SApZmm}
coordinate_scheme SApCoordScheme
position {SApPosXmm SApPosYmm SApPosZmm}
refpos {VelSelPosXmm EndFacePosYmm VelSelPosZmm}
}
::hdb::MakeAperture entrance_aperture {
shape EApShape
size {EApXmm EApYmm EApZmm}
coordinate_scheme EApCoordScheme
position EApPosYmm
refpos VelSelPosYmm
}
::hdb::MakeAperture rotary_aperture {
shape RotApShape
size {RotApXmm RotApZmm}
position RotApPosYmm
orientation RotApDeg
refpos VelSelPosYmm
}
#::hdb::MakeGeometry sample_geometry sample {
# coordinate_scheme SampleCoordScheme
# position {SamplePosXmm SamplePosYmm SamplePosZmm}
# orientation {SampleTiltXDeg SampleTiltYDeg SampleRotDeg}
# refpos {VelSelPosXmm EndFacePosYmm VelSelPosZmm}
#}
::hdb::MakeGeometry detector_geometry detector {
coordinate_scheme DetCoordScheme
position {DetPosXmm DetPosYmm}
offset DetPosYOffsetmm
refpos {VelSelPosXmm EndFacePosYmm}
}
::hdb::MakeGeometry collimator_geometry collimator {
coordinate_scheme CollCoordScheme
position EndFacePosYmm
refpos VelSelPosYmm
}
::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
array set collapposmm {
inputguide 633
apwheel 675
ap1 4929
ap2 6934
ap3 8949
ap4 10955
ap5 12943
ap6 14970
ap7 16971
ap9 19925
}
VelSelPosXmm 0.0
VelSelPosYmm 0.0
VelSelPosZmm 0.0
EndFacePosYmm 20095
RotApPosYmm 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
EApShape
EApShape
EApXmm
EApYmm
EApZmm
EndFacePosYmm
L1mm
L2mm
LambdaA
LambdaResFWHM%
Pent
Plexmm
RotApDeg
RotApShape
RotApXmm
RotApZmm
SampleAttributes
SampleComments
SampleName
SampleNum
SamplePosXmm
SamplePosYmm
SamplePosYmm
SamplePosZmm
SampleRotDeg
SampleTiltXDeg
SampleTiltYDeg
SampleTitle
SApPosXmm
SApPosYmm
SApPosYmm
SApPosZmm
SApShape
SApXmm
SApZmm
VSdeg
VSrpm
}
}
##
# @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