Integrated hmm with nexus data file writing.

Now have hm and bm scans.

r1354 | ffr | 2006-12-08 09:12:48 +1100 (Fri, 08 Dec 2006) | 3 lines
This commit is contained in:
Ferdi Franceschini
2006-12-08 09:12:48 +11:00
committed by Douglas Clowes
parent 280d440494
commit 641ed5227e
7 changed files with 185 additions and 104 deletions

View File

@@ -12,3 +12,4 @@ hpaths.tcl
InstXML.xml
extraconfig.tcl
sim_configuration.tcl
hmm/*.xml

View File

@@ -12,7 +12,9 @@ entryName=entry1
dataName=histogram
inst=HRPD
detector=hrdetector
monochromator=monochromator
thetadim=128
scan_variable=scanvar
#---------- NXentry level
etitle=/$(entryName),NXentry/SDS title -type NX_CHAR
estart=/$(entryName),NXentry/SDS start_time -type NX_CHAR
@@ -26,6 +28,7 @@ iname=/$(entryName),NXentry/$(inst),NXinstrument/SDS name -type NX_CHAR \
mmode=/$(entryName),NXentry/monitor,NXmonitor/SDS mode -type NX_CHAR
mpreset=/$(entryName),NXentry/monitor,NXmonitor/SDS preset -type NX_FLOAT32
mdata=/$(entryName),NXentry/monitor,NXmonitor/SDS data -type NX_INT32
mdistance=/$(entryName),NXentry/monitor,NXmonitor/SDS distance -type NX_FLOAT32 -attr {units,metre}
#----------------- NXsource
sname=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS name \
@@ -34,8 +37,10 @@ stype=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS type -type
sprobe=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS probe -type NX_CHAR -rank 1
#----------------- NXcrystal
clambda=/$(entryName),NXentry/$(inst),NXinstrument/Ge113,NXcrystal/SDS wavelength -type NX_FLOAT32 -attr {units,Angstrom}
ctype=/$(entryName),NXentry/$(inst),NXinstrument/Ge113,NXcrystal/SDS type -type NX_CHAR
#------------- counter
#-------------- histogram data
#-------------- Detector
# histogram data
dradius=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS distance -type NX_FLOAT32
dtheta=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS polar_angle -type NX_FLOAT32 -LZW -rank 1 -dim {$(thetadim)} -attr {units,degree}
@@ -50,9 +55,15 @@ ddesc=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS des
dtype=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS type -type NX_CHAR
dlayout=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS layout -type NX_CHAR
#--------------- NXmonochromator
mtth=/$(entryName),NXentry/$(inst),NXinstrument/$(monochromator),NXmonochromator/mtth,NXpositioner/SDS value -type NX_FLOAT32 -attr {units,degree} -attr {long_name,mtth}
#--------------- NXsample
saname=/$(entryName),NXentry/sample,NXsample/SDS name -type NX_CHAR
sarot=/$(entryName),NXentry/sample,NXsample/SDS rotation_angle -type NX_FLOAT32 -attr {units,degree}
stth=/$(entryName),NXentry/sample,NXsample/stth,NXpositioner/SDS value -type NX_FLOAT32 -attr {units,degree} -attr {long_name,stth}
#----------------NXdata ------------------------------------------------
dana=/$(entryName),NXentry/data,NXdata/NXVGROUP
scandata=/$(entryName),NXentry/scan_data,NXdata/NXVGROUP
scanvar=/$(entryName),NXentry/scan_variable,NXdata/NXVGROUP
#histogram=/$(entryName),NXentry/histogram,NXdata/NXVGROUP
#scanvar=/$(entryName),NXentry/$(scan_variable),NXdata/NXVGROUP

View File

@@ -1,5 +1,5 @@
# $Revision: 1.8 $
# $Date: 2006-12-03 22:45:20 $
# $Revision: 1.9 $
# $Date: 2006-12-07 22:12:48 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: ffr $
@@ -17,6 +17,7 @@ source server_config.tcl
VarMake Instrument Text Internal
Instrument Echidna
Instrument lock
VarMake bm_distance Float User
#MakeCounter simCtr SIM -1.0
#MakeScanCommand xxxscan simCtr echidna.hdd recover.bin
@@ -37,7 +38,7 @@ publish nxcreatefile user
########
source gen_hipadaba.tcl
source counter.tcl
#source counter.tcl
fileeval hmm_configuration.tcl
fileeval scan.tcl
fileeval nxscripts.tcl

View File

@@ -1,4 +1,6 @@
# Put extra config info here.
Motor nix ASIM 0 100 -1.0 0.01
# It is useful during the testing stage to set
# some axes as fixed.
mom fixed 1

View File

@@ -1,14 +1,8 @@
# $Revision: 1.1 $
# $Date: 2006-12-03 22:44:35 $
# $Revision: 1.2 $
# $Date: 2006-12-07 22:12:48 $
# Author: Mark Lesha (mle@ansto.gov.au)
# Last revision by: $Author: ffr $
# Provides simulated motors for experimenting with scan and batch commands
#START SERVER CONFIGURATION SECTION
set sicsroot ../
source echidna_configuration.tcl
#END SERVER CONFIGURATION SECTION
#-------------------------------------------------------------------------
# System: Histogram Server (sample)
#------------------------------------------------------------------------
@@ -21,7 +15,7 @@ source echidna_configuration.tcl
# remote histogram server via http, and acquisition
# of histogram period data.
MakeHM hmm anstohttp
hmm configure hmaddress http://137.157.201.12:8080
hmm configure hmaddress http://das1-echidna:8080
hmm configure username spy
hmm configure password 007
@@ -107,7 +101,7 @@ hmm init
##############################################
# Make and configure an ANSTO beam monitor counter.
MakeCounter bm anstomonitor [ params host "137.157.201.12" port "30000" ]
MakeCounter bm anstomonitor [ params host "das1-echidna" port "30000" ]
bm SetExponent 0
# Make our special HMControl_ANSTO object with the bm controlling the hmm.
@@ -126,7 +120,7 @@ MakeHMControl_ANSTO hmc bm hmm
#
# Define two scan objects which use the beam monitor counter.
#
# For scan1, the hmc object uses the bm counter to control
# For hmscan, the hmc object uses the bm counter to control
# acquisition duration. In other words, the acquisition duration
# is controlled via SICS. This is fine if the duration doesn't
# need to be controlled to an accuracy of less than one second.
@@ -160,13 +154,13 @@ MakeHMControl_ANSTO hmc bm hmm
#
# 17/11/06 NOTE: The Beam Monitor is not yet interfaced directly to the
# Histogram Server. This means that for BM-controlled acquisitions,
# SICS needs to use the BM counter (i.e. use scan1 not scan2).
# SICS needs to use the BM counter (i.e. use hmscan not scan2).
#
# EXAMPLES: For scan running over 5 stops and acquisition of 1 sec at each stop:
# scan1 run 5 timer 1 (termination controlled by the beam monitor)
# hmscan run 5 timer 1 (termination controlled by the beam monitor)
# scan2_runb 5 TIME 100 IMMEDIATE (termination controlled by the histogram server)
#
MakeScanCommand scan1 bm echidna.hdd recover.bin
MakeScanCommand hmscan bm echidna.hdd recover.bin
MakeScanCommand scan2 bm echidna.hdd recover.bin
#
# Call is: scan2_runa <n>
@@ -205,7 +199,7 @@ blockctr SetPreset 0
# Later on we can add some motors to drive...
#Motor som2 ASIM 0 100 -1.0 0.01
#scan1 add som2 0 1
#hmscan add som2 0 1
##############################################
# Support for using expanded histogram period
@@ -388,14 +382,14 @@ Publish hs_finish User
# are properly defined.
# A different count callback is defined in the two cases.
#
scan1 configure script
scan1 function prepare hs_prepare
scan1 function count hs_count_bm_controlled
scan1 function collect hs_collect
scan1 function finish hs_finish
hmscan configure script
#hmscan function prepare hs_prepare
hmscan function count hs_count_bm_controlled
hmscan function collect hs_collect
hmscan function finish hs_finish
#
scan2 configure script
scan2 function prepare hs_prepare
#scan2 function prepare hs_prepare
scan2 function count hs_count_hs_controlled
scan2 function collect hs_collect
scan2 function finish hs_finish

View File

@@ -1,6 +1,8 @@
MakeNXScript
#nxscript createxml junk4.xml echidna.dic
proc getVal {msg} {
return [string trim [lindex [split $msg =] 1 ] ]
}
proc nxreopenfile {} {
global dataFileName;
nxscript reopen $dataFileName echidna.dic;
@@ -12,50 +14,79 @@ set tubedia 0.0254
set pi 3.1415926
#set angsep [expr $tubedia/$dradius *(180/$pi)]
set angsep 1.25
proc addnxentry {nxobj entryname ompos } {
global dradius ndect angsep;
# file_time shows +10 for UTC offset, should be +11 for local summer in NSW.
# sicstime doesn't show UTC offset
# ISO 8601 suggests that time and date are separated with 'T' in a time field.
#nxscript createxml junk.xml echidna.dic
$nxobj updatedictvar entryName $entryname
$nxobj puttext etitle [title]
$nxobj puttext estart [sicstime]
$nxobj puttext eend [sicstime]
$nxobj puttext iname [instrument]
# stthmin = (180 - (1.25*127))/2
set stthmin 10.625
proc addnxentry {nxobj entryname scanVariable scanVarPos } {
global dradius ndect angsep stthmin;
putcommon $nxobj $entryname $scanVariable
putcrystal $nxobj
putmonitor $nxobj
putsample $nxobj
set mtth_val [string trim [lindex [split [mtth] =] 1]]
$nxobj putfloat $scanVariable $mtth_val
# Add thetamin and stth to tharr(i)
set sampletwotheta [string trim [lindex [split [stth] =] 1]]
for {set i 0} {$i < $ndect} {incr i} {
set tharr($i) [expr ($i-63.5)*$angsep + $sampletwotheta]
}
$nxobj updatedictvar thetadim $ndect
$nxobj putarray dtheta tharr $ndect
$nxobj puttext dtype He-3 position sensitive detector, tube active length=335+/-5mm, tube diameter=25.4 +/- 0.8mm
$nxobj puttext ddesc 128 He-3 proportional counter detector tubes (GE Energy Reuter Stokes Inc. item=RS-P4-0814-217)
$nxobj putfloat dradius $dradius
$nxobj puttext dlayout area
$nxobj puthm dcounts hmm
$nxobj puthm deff hmm
$nxobj makelink scandata dcounts
$nxobj makelink scandata dtheta
$nxobj makelink scanvar $scanVariable
}
proc bm_addnxentry {nxobj entryname scanVariable scanVarPos } {
global dradius ndect angsep stthmin;
putcommon $nxobj $entryname $scanVariable
putcrystal $nxobj
putmonitor $nxobj
putsample $nxobj
set mtth_val [string trim [lindex [split [mtth] =] 1]]
$nxobj putfloat $scanVariable $mtth_val
# Add thetamin and stth to tharr(i)
# $nxobj puttext dtype He-3 position sensitive detector, tube active length=335+/-5mm, tube diameter=25.4 +/- 0.8mm
# $nxobj puttext ddesc 128 He-3 proportional counter detector tubes (GE Energy Reuter Stokes Inc. item=RS-P4-0814-217)
# $nxobj putfloat dradius $dradius
$nxobj puttext dlayout point
$nxobj makelink scandata mdata
$nxobj makelink scanvar $scanVariable
}
proc putmonitor {nxobj} {
$nxobj puttext mmode [string trim [lindex [split [bm getmode] =] 1]]
$nxobj putfloat mpreset [string trim [lindex [split [bm getpreset] =] 1]]
$nxobj putint mdata [string trim [lindex [split [bm getcounts] =] 1]]
$nxobj putfloat mdistance [getVal [bm_distance]]
}
proc putsample {nxobj} {
$nxobj puttext saname [getVal [Sample]]
}
proc putcrystal {nxobj} {
$nxobj puttext ctype "Ge 113"
}
proc putcommon {nxobj entryName scanVariable} {
$nxobj updatedictvar entryName $entryName
$nxobj updatedictvar scan_variable $scanVariable
$nxobj puttext etitle [getVal [title]]
$nxobj puttext estart [sicstime]
$nxobj puttext eend [sicstime]
$nxobj puttext iname [getVal [instrument]]
# NXsource
$nxobj puttext sname OPAL
$nxobj puttext stype Reactor Neutron Source
$nxobj puttext sprobe Neutron
# NXcrystal
$nxobj putfloat clambda 1.89
# NXmonitor
$nxobj puttext mmode timer
$nxobj putfloat mpreset 1000
$nxobj putint mdata 500
#NXsample
$nxobj puttext saname Air
$nxobj putfloat sarot $ompos
#array set tharr [list 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 ]
#nxscript putarray dtheta tharr 10
for {set i 0} {$i < $ndect} {incr i} { set tharr($i) [expr $i*$angsep] }
$nxobj updatedictvar thetadim $ndect
nxscript putarray dtheta tharr $ndect
$nxobj puttext dtype He-3 position sensitive detector, tube active length=335+/-5mm, tube diameter=25.4 +/- 0.8mm
$nxobj puttext ddesc 128 He-3 proportional counter detector tubes (GE Energy Reuter Stokes Inc. item=RS-P4-0814-217)
$nxobj putfloat dradius $dradius
$nxobj puttext dlayout area
$nxobj puthm dcounts hmc
### TEST ###
# hmc initVal 1
### TEST ###
$nxobj puthm deff hmc
$nxobj makelink dana dcounts
$nxobj makelink dana dtheta
#nxscript close
}
proc addeff {} {
$nxobj puttext sname OPAL
$nxobj puttext stype Reactor Neutron Source
$nxobj puttext sprobe Neutron
}
publish addnxentry user
publish bm_addnxentry user

View File

@@ -1,48 +1,89 @@
namespace eval scanCommand {
#MakeScanCommand escan counter echidna.hdd recover.bin
proc scan_prepare {sobj uobj} {
global omstart omstep;
nxcreatefile
# stdscan prepare $sobj $uobj;
set vlist [split [$sobj getvarpar 0] = ];
set omstart [lindex $vlist 1];
set omstep [lindex $vlist 2];
hs_prepare $sobj $uobj
# clientput [$sobj getvarpar 0] value;
# nxscript create5 junk5.nx5 echidna.dic;
}
variable scanVariable scan_var scanVarStart 0 scanVarStep 1
proc scan_prepare {sobj uobj} {
variable scanVarStart;
variable scanVarStep;
variable scanVariable;
proc scan_finish {sobj uobj} {
nxscript close
}
nxcreatefile;
# stdscan prepare $sobj $uobj;
set vlist [split [$sobj getvarpar 0] = ];
set scanVariable [string trim [lindex [split [lindex $vlist 0] . ] 1]];
set scanVarStart [lindex $vlist 1];
set scanVarStep [lindex $vlist 2];
hs_prepare $sobj $uobj
}
proc scan_finish {sobj uobj} {
nxscript close
}
#proc scan_finish {sobj uobj} {
# nxscript close;
#}
# Add an nxentry for the current scan point
proc nxaddpoint {sobj uobj pt} {
global omstart omstep;
set ompos [expr $omstart + $pt * $omstep];
nxreopenfile;
addnxentry nxscript scan_$pt $ompos;
nxscript close
proc nxaddpoint {sobj uobj pt} {
variable scanVarStart;
variable scanVarStep;
variable scanVariable;
set scanVarPos [expr $scanVarStart + $pt * $scanVarStep];
nxreopenfile;
addnxentry nxscript scan_$pt $scanVariable $scanVarPos;
nxscript close
}
proc donothing {args} {}
proc bmcount {sobj uobj pt mode preset} {
bm setmode $mode
bm count $preset;
}
proc bm_scan_prepare {sobj uobj} {
variable scanVarStart;
variable scanVarStep;
variable scanVariable;
nxcreatefile;
set vlist [split [$sobj getvarpar 0] = ];
set scanVariable [string trim [lindex [split [lindex $vlist 0] . ] 1]];
set scanVarStart [lindex $vlist 1];
set scanVarStep [lindex $vlist 2];
stdscan prepare $sobj $uobj;
}
proc bm_nxaddpoint {sobj uobj pt} {
variable scanVarStart;
variable scanVarStep;
variable scanVariable;
set scanVarPos [expr $scanVarStart + $pt * $scanVarStep];
nxreopenfile;
bm_addnxentry nxscript scan_$pt $scanVariable $scanVarPos;
nxscript close
}
}
proc donothing {args} {}
publish ::scanCommand::scan_prepare user
publish ::scanCommand::scan_finish user
publish ::scanCommand::nxaddpoint user
publish ::scanCommand::donothing user
#proc ecount {sobj uobj pt mode preset} {
# hmc count;
#}
publish ::scanCommand::bm_scan_prepare user
publish ::scanCommand::scan_finish user
publish ::scanCommand::bm_nxaddpoint user
publish ::scanCommand::donothing user
publish ::scanCommand::bmcount user
publish scan_prepare user
publish scan_finish user
publish nxaddpoint user
#publish ecount user
publish donothing user
hmscan function writeheader ::scanCommand::donothing
hmscan function writepoint ::scanCommand::nxaddpoint
hmscan function prepare ::scanCommand::scan_prepare
#scan2 configure script
scan2 function writeheader donothing
scan2 function writepoint nxaddpoint
#scan2 function prepare scan_prepare
#scan2 function count ecount
scan2 function writeheader ::scanCommand::donothing
scan2 function writepoint ::scanCommand::nxaddpoint
scan2 function prepare ::scanCommand::scan_prepare
MakeScanCommand bmonscan bm echidna.hdd recover.bin
bmonscan configure script
bmonscan function writeheader ::scanCommand::donothing
bmonscan function writepoint ::scanCommand::bm_nxaddpoint
bmonscan function prepare ::scanCommand::bm_scan_prepare
bmonscan function count ::scanCommand::bmcount