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 InstXML.xml
extraconfig.tcl extraconfig.tcl
sim_configuration.tcl sim_configuration.tcl
hmm/*.xml

View File

@@ -12,7 +12,9 @@ entryName=entry1
dataName=histogram dataName=histogram
inst=HRPD inst=HRPD
detector=hrdetector detector=hrdetector
monochromator=monochromator
thetadim=128 thetadim=128
scan_variable=scanvar
#---------- NXentry level #---------- NXentry level
etitle=/$(entryName),NXentry/SDS title -type NX_CHAR etitle=/$(entryName),NXentry/SDS title -type NX_CHAR
estart=/$(entryName),NXentry/SDS start_time -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 mmode=/$(entryName),NXentry/monitor,NXmonitor/SDS mode -type NX_CHAR
mpreset=/$(entryName),NXentry/monitor,NXmonitor/SDS preset -type NX_FLOAT32 mpreset=/$(entryName),NXentry/monitor,NXmonitor/SDS preset -type NX_FLOAT32
mdata=/$(entryName),NXentry/monitor,NXmonitor/SDS data -type NX_INT32 mdata=/$(entryName),NXentry/monitor,NXmonitor/SDS data -type NX_INT32
mdistance=/$(entryName),NXentry/monitor,NXmonitor/SDS distance -type NX_FLOAT32 -attr {units,metre}
#----------------- NXsource #----------------- NXsource
sname=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS name \ 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 sprobe=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS probe -type NX_CHAR -rank 1
#----------------- NXcrystal #----------------- NXcrystal
clambda=/$(entryName),NXentry/$(inst),NXinstrument/Ge113,NXcrystal/SDS wavelength -type NX_FLOAT32 -attr {units,Angstrom} 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 #------------- counter
#-------------- histogram data #-------------- Detector
# histogram data
dradius=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS distance -type NX_FLOAT32 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} 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 dtype=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS type -type NX_CHAR
dlayout=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS layout -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 #--------------- NXsample
saname=/$(entryName),NXentry/sample,NXsample/SDS name -type NX_CHAR saname=/$(entryName),NXentry/sample,NXsample/SDS name -type NX_CHAR
sarot=/$(entryName),NXentry/sample,NXsample/SDS rotation_angle -type NX_FLOAT32 -attr {units,degree} 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 ------------------------------------------------ #----------------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 $ # $Revision: 1.9 $
# $Date: 2006-12-03 22:45:20 $ # $Date: 2006-12-07 22:12:48 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au) # Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: ffr $ # Last revision by: $Author: ffr $
@@ -17,6 +17,7 @@ source server_config.tcl
VarMake Instrument Text Internal VarMake Instrument Text Internal
Instrument Echidna Instrument Echidna
Instrument lock Instrument lock
VarMake bm_distance Float User
#MakeCounter simCtr SIM -1.0 #MakeCounter simCtr SIM -1.0
#MakeScanCommand xxxscan simCtr echidna.hdd recover.bin #MakeScanCommand xxxscan simCtr echidna.hdd recover.bin
@@ -37,7 +38,7 @@ publish nxcreatefile user
######## ########
source gen_hipadaba.tcl source gen_hipadaba.tcl
source counter.tcl #source counter.tcl
fileeval hmm_configuration.tcl fileeval hmm_configuration.tcl
fileeval scan.tcl fileeval scan.tcl
fileeval nxscripts.tcl fileeval nxscripts.tcl

View File

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

View File

@@ -1,14 +1,8 @@
# $Revision: 1.1 $ # $Revision: 1.2 $
# $Date: 2006-12-03 22:44:35 $ # $Date: 2006-12-07 22:12:48 $
# Author: Mark Lesha (mle@ansto.gov.au) # Author: Mark Lesha (mle@ansto.gov.au)
# Last revision by: $Author: ffr $ # 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) # System: Histogram Server (sample)
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@@ -21,7 +15,7 @@ source echidna_configuration.tcl
# remote histogram server via http, and acquisition # remote histogram server via http, and acquisition
# of histogram period data. # of histogram period data.
MakeHM hmm anstohttp 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 username spy
hmm configure password 007 hmm configure password 007
@@ -107,7 +101,7 @@ hmm init
############################################## ##############################################
# Make and configure an ANSTO beam monitor counter. # 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 bm SetExponent 0
# Make our special HMControl_ANSTO object with the bm controlling the hmm. # 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. # 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 # acquisition duration. In other words, the acquisition duration
# is controlled via SICS. This is fine if the duration doesn't # is controlled via SICS. This is fine if the duration doesn't
# need to be controlled to an accuracy of less than one second. # 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 # 17/11/06 NOTE: The Beam Monitor is not yet interfaced directly to the
# Histogram Server. This means that for BM-controlled acquisitions, # 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: # 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) # 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 MakeScanCommand scan2 bm echidna.hdd recover.bin
# #
# Call is: scan2_runa <n> # Call is: scan2_runa <n>
@@ -205,7 +199,7 @@ blockctr SetPreset 0
# Later on we can add some motors to drive... # Later on we can add some motors to drive...
#Motor som2 ASIM 0 100 -1.0 0.01 #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 # Support for using expanded histogram period
@@ -388,14 +382,14 @@ Publish hs_finish User
# are properly defined. # are properly defined.
# A different count callback is defined in the two cases. # A different count callback is defined in the two cases.
# #
scan1 configure script hmscan configure script
scan1 function prepare hs_prepare #hmscan function prepare hs_prepare
scan1 function count hs_count_bm_controlled hmscan function count hs_count_bm_controlled
scan1 function collect hs_collect hmscan function collect hs_collect
scan1 function finish hs_finish hmscan function finish hs_finish
# #
scan2 configure script scan2 configure script
scan2 function prepare hs_prepare #scan2 function prepare hs_prepare
scan2 function count hs_count_hs_controlled scan2 function count hs_count_hs_controlled
scan2 function collect hs_collect scan2 function collect hs_collect
scan2 function finish hs_finish scan2 function finish hs_finish

View File

@@ -1,6 +1,8 @@
MakeNXScript MakeNXScript
#nxscript createxml junk4.xml echidna.dic #nxscript createxml junk4.xml echidna.dic
proc getVal {msg} {
return [string trim [lindex [split $msg =] 1 ] ]
}
proc nxreopenfile {} { proc nxreopenfile {} {
global dataFileName; global dataFileName;
nxscript reopen $dataFileName echidna.dic; nxscript reopen $dataFileName echidna.dic;
@@ -12,50 +14,79 @@ set tubedia 0.0254
set pi 3.1415926 set pi 3.1415926
#set angsep [expr $tubedia/$dradius *(180/$pi)] #set angsep [expr $tubedia/$dradius *(180/$pi)]
set angsep 1.25 set angsep 1.25
proc addnxentry {nxobj entryname ompos } { # stthmin = (180 - (1.25*127))/2
global dradius ndect angsep; set stthmin 10.625
# file_time shows +10 for UTC offset, should be +11 for local summer in NSW. proc addnxentry {nxobj entryname scanVariable scanVarPos } {
# sicstime doesn't show UTC offset global dradius ndect angsep stthmin;
# ISO 8601 suggests that time and date are separated with 'T' in a time field. putcommon $nxobj $entryname $scanVariable
#nxscript createxml junk.xml echidna.dic putcrystal $nxobj
$nxobj updatedictvar entryName $entryname putmonitor $nxobj
$nxobj puttext etitle [title] putsample $nxobj
$nxobj puttext estart [sicstime] set mtth_val [string trim [lindex [split [mtth] =] 1]]
$nxobj puttext eend [sicstime] $nxobj putfloat $scanVariable $mtth_val
$nxobj puttext iname [instrument] # 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 # NXsource
$nxobj puttext sname OPAL $nxobj puttext sname OPAL
$nxobj puttext stype Reactor Neutron Source $nxobj puttext stype Reactor Neutron Source
$nxobj puttext sprobe Neutron $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 {} {
} }
publish addnxentry user publish addnxentry user
publish bm_addnxentry user

View File

@@ -1,48 +1,89 @@
namespace eval scanCommand {
#MakeScanCommand escan counter echidna.hdd recover.bin #MakeScanCommand escan counter echidna.hdd recover.bin
proc scan_prepare {sobj uobj} { variable scanVariable scan_var scanVarStart 0 scanVarStep 1
global omstart omstep; proc scan_prepare {sobj uobj} {
nxcreatefile variable scanVarStart;
# stdscan prepare $sobj $uobj; variable scanVarStep;
set vlist [split [$sobj getvarpar 0] = ]; variable scanVariable;
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;
}
proc scan_finish {sobj uobj} { nxcreatefile;
nxscript close # 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} { #proc scan_finish {sobj uobj} {
# nxscript close; # nxscript close;
#} #}
# Add an nxentry for the current scan point # Add an nxentry for the current scan point
proc nxaddpoint {sobj uobj pt} { proc nxaddpoint {sobj uobj pt} {
global omstart omstep; variable scanVarStart;
set ompos [expr $omstart + $pt * $omstep]; variable scanVarStep;
nxreopenfile; variable scanVariable;
addnxentry nxscript scan_$pt $ompos; set scanVarPos [expr $scanVarStart + $pt * $scanVarStep];
nxscript close 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} { publish ::scanCommand::bm_scan_prepare user
# hmc count; publish ::scanCommand::scan_finish user
#} publish ::scanCommand::bm_nxaddpoint user
publish ::scanCommand::donothing user
publish ::scanCommand::bmcount user
publish scan_prepare user hmscan function writeheader ::scanCommand::donothing
publish scan_finish user hmscan function writepoint ::scanCommand::nxaddpoint
publish nxaddpoint user hmscan function prepare ::scanCommand::scan_prepare
#publish ecount user
publish donothing user
#scan2 configure script scan2 function writeheader ::scanCommand::donothing
scan2 function writeheader donothing scan2 function writepoint ::scanCommand::nxaddpoint
scan2 function writepoint nxaddpoint scan2 function prepare ::scanCommand::scan_prepare
#scan2 function prepare scan_prepare
#scan2 function count ecount 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