histmem.c

sicvar.c
SICS-93 Save histogram data and instrument state during an acquisition

hipadaba_configuration_common.tcl
SICS-185 Preserve case on hdb node names

hmm_configuration_common_1.tcl
nxscripts_common_1.tcl
sicvar.c
SICS-174 Allow saving of histmem data and instrument status during a count operation.

wombat_configuration.tcl
echidna_configuration.tcl
platypus_configuration.tcl
kowari_configuration.tcl
quokka_configuration.tcl
SICS-153 Move setup of statemon to new server_init function for the new sics_uid state variable

server_config.tcl
SICS-153 set attributes on the sics_suid var which is now created by MakeStateMon
SICS-187 Add cold source info (TODO move to platypus,quokka and pelican configs)

utility.tcl
SICS-185 Added normalgetatt to preserve case on hdb node names etc.

sans/config/optics/aperture_configuration.tcl
New file, Provides lookup tables for attenuation and entrance apertures. (SICS-157)

sans/config/optics/optics.tcl
Load the new aperture_configuration.tcl

sans/config/parameters/parameters.tcl
SICS-157 Add instrument parameters section with derived parameters and their dependencies

statemon.c
SICS-153 Create sics_suid sicsvariable when loading statemon and increment it on each status change.

r2635 | ffr | 2008-06-23 12:41:12 +1000 (Mon, 23 Jun 2008) | 38 lines
This commit is contained in:
Ferdi Franceschini
2008-06-23 12:41:12 +10:00
committed by Douglas Clowes
parent eea4d4d9eb
commit ef7c2a6f87
15 changed files with 476 additions and 217 deletions

View File

@@ -0,0 +1,78 @@
namespace eval optics {
array set AttRotLookupTable {
0 0.0
30 1.5
60 3.4
90 4.9
120 6.4
150 8.3
180 9.8
210 11.2
240 13.2
270 18.1
300 23.0
330 25.0
}
array set EApLookupTable {
0 { 5 circ}
30 {10 circ}
60 {20 circ}
90 {30 circ}
120 {40 circ}
150 {50 circ}
180 {50 squ }
210 {open open}
240 {open open}
270 {open open}
300 {open open}
330 {open open}
}
}
proc ::optics::AttRotLookup {angle} {
variable AttRotLookupTable
set foundit false
foreach vangle [array names AttRotLookupTable] {
if {$vangle == [expr int($angle)]} {
set foundit true
break
}
}
if {$foundit == true} {
return [lindex $AttRotLookupTable($vangle) 0]
} else {
return -1
}
}
proc ::optics::EApLookUp {angle param} {
variable EApLookupTable
set foundit false
if [ catch {
switch $param {
"size" {set index 0}
"shape" {set index 1}
default {
error "ERROR: Invalid lookup parameter $param"
}
}
foreach vangle [array names EApLookupTable] {
if {$vangle == [expr int($angle)]} {
set foundit true
break
}
}
if {$foundit == true} {
return [lindex $EApLookupTable($vangle) $index]
} else {
switch $param {
"size" {return 0}
"shape" {return "UNKNOWN"}
}
}
} message ] {
if {$::errorCode == "NONE"} {return $message}
return -code error "$message"
}
}

View File

@@ -1 +1,2 @@
fileeval $cfPath(optics)/guide_configuration.tcl
fileeval $cfPath(optics)/aperture_configuration.tcl

View File

@@ -1,16 +1,16 @@
##
# @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 nxname} {
VelSelCoordScheme coordinate_scheme
SApCoordScheme coordinate_scheme
EApCoordScheme coordinate_scheme
SampleCoordScheme coordinate_scheme
DetCoordScheme coordinate_scheme
BeamstopCoordScheme coordinate_scheme
CollCoordScheme coordinate_scheme
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 $var true @none false true
::utility::mkVar $var text readonly $lname true @none false true
$var Cartesian
$var lock
}
@@ -22,68 +22,73 @@ foreach {var nxname} {
# 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 nxname priv} {
EApShape shape user
RotApshape shape readonly
SApShape shape readonly
BSShape shape user
foreach {var lname nxname priv klass} {
SApShape SApShape shape user parameter
BSShape BSShape shape user parameter
} {
::utility::mkVar $var text $priv $var true @none true true
::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 nxname units} {
VelSelPosXmm x mm
VelSelPosYmm y mm
VelSelPosZmm z mm
EndFacePosYmm y mm
RotApPosYmm y mm
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 $var true @none true true
::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 sample true true
::utility::mkVar SampleNum int readonly changer_position true parameter true true
foreach {var nxname units priv} {
LambdaA wavelength nm user
LambdaResFWHM% wavelength_spread 1 user
VSdeg twist degrees user
VSrpm rotation_speed rpm user
AttFactor attenuation_factor 1 user
AttRotDeg AttRotDeg degrees readonly
PleXmm x mm user
RotApXmm x mm user
RotApZmm z mm user
RotApDeg RotApDeg degrees readonly
EApXmm x mm user
EApYmm y mm user
EApZmm z mm user
EApPosYmm y mm user
SApXmm x mm readonly
SApZmm z mm readonly
SApPosXmm x mm user
SApPosYmm y mm user
SApPosZmm z mm user
SamplePosXmm x mm user
SamplePosYmm y mm user
SamplePosZmm z mm user
SampleRotDeg SampleRotDeg degrees user
SampleTiltXdeg SampleTiltXdeg degrees user
SampleTiltYdeg SampleTiltYdeg degrees user
DetPosYOffsetmm detposyoffset mm user
BSXmm x mm user
BSZmm z mm user
# 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 $var true @none true true
::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]]
@@ -91,9 +96,10 @@ proc sicsmsgfmt {args} {return "[info level -1] = $args"}
set eapy [SplitReply [EApPosYmm]]
return [sicsmsgfmt [expr {$efpy + $sapy - $eapy}]]
}
sicslist setatt L1mm klass sample
sicslist setatt L1mm long_name eap_sap_dist
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]]
@@ -101,23 +107,92 @@ sicslist setatt L1mm units mm
set sapy [SplitReply [SamplePosYmm]]
return [sicsmsgfmt [expr {$detpyos + $detpyos - $sapy}]]
}
sicslist setatt L2mm klass detector
sicslist setatt L2mm long_name sample_det_dist
sicslist setatt L2mm long_name L2mm
sicslist setatt L2mm klass derived_parameter
sicslist setatt L2mm units mm
sicslist setatt L2mm depends DetPosYmm,DetPosYOffsetmm,SamplePosYmm
foreach {pname motor hdbname units} {
DetPosXmm detoff x mm
DetPosYmm det y mm
BSPosXmm bsx x mm
BSPosZmm bsz z 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 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
@@ -153,12 +228,12 @@ foreach {pname motor hdbname units} {
refpos VelSelPosYmm
}
::hdb::MakeGeometry sample_geometry sample {
coordinate_scheme SampleCoordScheme
position {SamplePosXmm SamplePosYmm SamplePosZmm}
orientation {SampleTiltXdeg SampleTiltYdeg SampleRotDeg}
refpos {VelSelPosXmm EndFacePosYmm VelSelPosZmm}
}
#::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
@@ -204,82 +279,70 @@ RotApPosYmm 675
################################################################################
# Check Config
namespace eval parameters {
set paramlist {
AttRotDeg
BS1
BS2
BS3
BS4
BS5
BSPosXmm
BSPosZmm
BSShape
BSXmm
BSZmm
C1
C2
C3
C4
C5
C6
C7
C8
C9
DetPosXmm
DetPosYmm
DetPosYmm
DetPosYOffsetmm
EApPosYmm
EApShape
EApXmm
EApYmm
EApZmm
EndFacePosYmm
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
}
foreach p $paramlist {
if [::utility::obj_exists $p] {
sicslist setatt $p klass parameter
}
}
set derived_paramlist {
AttFactor
L1mm
L2mm
}
foreach p $derived_paramlist {
if [::utility::obj_exists $p] {
sicslist setatt $p klass derived_parameter
}
}
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
@@ -294,6 +357,8 @@ proc ::parameters::missingparams {} {
}
if {$num > 0} {
clientput "There are $num missing parameters"
} else {
clientput "OK"
}
}
@@ -302,7 +367,7 @@ proc ::parameters::missingparams {} {
proc check {args} {
switch $args {
"missing" {
missingparams
::parameters::missingparams
}
}
}

View File

@@ -1,5 +1,5 @@
# $Revision: 1.8 $
# $Date: 2008-06-11 23:05:36 $
# $Revision: 1.9 $
# $Date: 2008-06-23 02:41:12 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: ffr $
@@ -53,7 +53,6 @@ restore
::histogram_memory::initialize
MakeStateMon hmscan
if [file exists extraconfig.tcl] {
fileeval extraconfig.tcl
} else {
@@ -61,5 +60,5 @@ if [file exists extraconfig.tcl] {
}
::anticollider::init
server_set_sobj_attributes
server_init
buildHDB instrument_dictionary