Create single entry nexus files for scans with instrument state in 1D arrays indexed by scan point.

Use putslab and sics data objects to grow arrays.

r1725 | ffr | 2007-03-27 08:04:19 +1000 (Tue, 27 Mar 2007) | 3 lines
This commit is contained in:
Ferdi Franceschini
2007-03-27 08:04:19 +10:00
committed by Douglas Clowes
parent 6921d0426c
commit d49a7be3bb
5 changed files with 78 additions and 51 deletions

View File

@@ -2,6 +2,7 @@
# with filename
MakeNXScript
sicsdatafactory new nxscript_data
proc getVal {msg} {
return [string trim [lindex [split $msg =] 1 ] ]
@@ -67,11 +68,11 @@ proc det_height_arr {active_height_mm row_zero dim0} {
}
}
proc hmm_save {nxobj entryname} {
proc hmm_save {nxobj entryname point} {
global dradius ndect angsep;
set dim0 [SplitReply [hmm configure dim0]];
set dim1 [SplitReply [hmm configure dim1]];
putcommon $nxobj $entryname;
putcommon $nxobj $entryname $point;
putcrystal $nxobj;
putmonitor $nxobj;
putsample $nxobj;
@@ -88,52 +89,64 @@ proc hmm_save {nxobj entryname} {
$nxobj makelink scanvertaxis dvaxis
}
proc hmm_addnxscanentry {nxobj entryname scanVariable scanVarPos scanVarStep start_time} {
proc hmm_addnxscanentry {nxobj entryname point scanVariable scanVarPos scanVarStep start_time} {
$nxobj puttext estart $start_time
$nxobj updatedictvar scan_variable $scanVariable
set scanVar_value [string trim [lindex [split [$scanVariable] =] 1]]
$nxobj updatedictvar scanvar_name $scanVariable
$nxobj updatedictvar scanvar_units [SplitReply [$scanVariable units]]
#TODO $nxobj updatedictvar scanvar_units [SplitReply [$scanVariable units]]
$nxobj updatedictvar scanvar_units "unknown"
$nxobj updatedictvar scanvar_longname $scanVariable
$nxobj putfloat scanvar $scanVar_value
$nxobj putfloat scanstep $scanVarStep
nxscript_data clear
nxscript_data putfloat 0 $scanVar_value
$nxobj putslab scanvar [list $point] [list 1] nxscript_data
# $nxobj putfloat scanstep $scanVarStep
hmm_save $nxobj $entryname;
hmm_save $nxobj $entryname $point;
$nxobj puttext eend [sicstime];
}
#TODO Refactor: Add bm_save command and use it here.
proc bm_addnxscanentry {nxobj entryname scanVariable scanVarPos scanVarStep start_time} {
proc bm_save {nxobj entryname point} {
global dradius ndect angsep;
$nxobj updatedictvar scan_variable $scanVariable;
putcommon $nxobj $entryname
# $nxobj updatedictvar scan_variable $scanVariable;
putcommon $nxobj $entryname $point
putcrystal $nxobj
putmonitor $nxobj
putmonitor $nxobj $point
putsample $nxobj
$nxobj puttext dlayout point
$nxobj makelink scandata dcounts
}
#TODO Refactor: Add bm_save command and use it here.
proc bm_addnxscanentry {nxobj entryname point scanVariable scanVarPos scanVarStep start_time} {
$nxobj puttext estart $start_time
set scanVar_value [string trim [lindex [split [$scanVariable] =] 1]]
$nxobj updatedictvar scanvar_name $scanVariable
#TODO $nxobj updatedictvar scanvar_units [SplitReply [$scanVariable units]]
$nxobj updatedictvar scanvar_units "unknown"
$nxobj updatedictvar scanvar_units "unknown"
$nxobj updatedictvar scanvar_longname $scanVariable
$nxobj putfloat scanvar $scanVar_value
$nxobj putfloat scanstep $scanVarStep
nxscript_data clear
nxscript_data putfloat 0 $scanVar_value
$nxobj putslab scanvar [list $point] [list 1] nxscript_data
bm_save $nxobj $entryname $point
# $nxobj putfloat scanstep $scanVarStep
# 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 estart $start_time
#TODO add dtype ddesc
$nxobj puttext dlayout point
$nxobj makelink scandata mdata
$nxobj puttext eend [sicstime];
}
proc putmonitor {nxobj} {
proc putmonitor {nxobj point} {
$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 putint mdata [string trim [lindex [split [bm getcounts] =] 1]]
nxscript_data clear
nxscript_data putfloat 0 [SplitReply [bm getcounts]]
$nxobj putslab dcounts [list $point] [list 1] nxscript_data
$nxobj putfloat mdistance [SplitReply [bmon_distance]]
}
@@ -168,7 +181,7 @@ proc putcrystal {nxobj} {
$nxobj puttext ctype [SplitReply [crystal_type]]
$nxobj putfloat clambda [SplitReply [crystal_wavelength_A]]
}
proc putcommon {nxobj entryName} {
proc putcommon {nxobj entryName point} {
$nxobj updatedictvar entryName $entryName
$nxobj puttext etitle [getVal [Title]]
$nxobj puttext iname [getVal [Instrument]]
@@ -180,42 +193,54 @@ proc putcommon {nxobj entryName} {
$nxobj puttext sname OPAL
$nxobj puttext stype Reactor Neutron Source
$nxobj puttext sprobe Neutron
putsamplemotors $nxobj
putslitmotors $nxobj
putmonomotors $nxobj
putsamplemotors $nxobj $point
putslitmotors $nxobj $point
putmonomotors $nxobj $point
}
proc putsamplemotors {nxobj} {
proc putsamplemotors {nxobj point} {
foreach motor { som schi sphi sx sy stth } {
$nxobj updatedictvar mot_name $motor;
$nxobj updatedictvar mot_long_name $motor;
$nxobj updatedictvar mot_units [SplitReply [$motor units]];
$nxobj putfloat nxsample_mot [getVal [$motor] ];
nxscript_data clear
nxscript_data putfloat 0 [getVal [$motor] ]
$nxobj putslab nxsample_mot [list $point] [list 1] nxscript_data;
}
# sth is a virtual motor
$nxobj putfloat sth [getVal [sth ]];
nxscript_data clear
nxscript_data putfloat 0 [getVal [sth ]]
$nxobj putslab sth [list $point] [list 1] nxscript_data;
}
proc putmonomotors {nxobj} {
proc putmonomotors {nxobj point} {
foreach motor { mom mchi mphi mx my mtth } {
$nxobj updatedictvar mot_name $motor;
$nxobj updatedictvar mot_long_name $motor;
$nxobj updatedictvar mot_units [SplitReply [$motor units]];
$nxobj putfloat nxcrystal_mot [getVal [$motor] ];
nxscript_data clear
nxscript_data putfloat 0 [getVal [$motor] ]
$nxobj putslab nxcrystal_mot [list $point] [list 1] nxscript_data;
}
# mth is a virtual motor
$nxobj putfloat mth [getVal [mth ]];
nxscript_data clear
nxscript_data putfloat 0 [getVal [mth ]]
$nxobj putslab mth [list $point] [list 1] nxscript_data;
}
proc putslitmotors {nxobj} {
proc putslitmotors {nxobj point} {
foreach motor {ss1u ss1d ss1l ss1r ss2u ss2d ss2l ss2r } {
$nxobj updatedictvar mot_name $motor;
$nxobj updatedictvar mot_long_name $motor;
$nxobj updatedictvar mot_units [SplitReply [$motor units]];
$nxobj putfloat nxfilter_mot [getVal [$motor] ];
nxscript_data clear
nxscript_data putfloat 0 [getVal [$motor] ]
$nxobj putslab nxfilter_mot [list $point] [list 1] nxscript_data;
}
foreach motor {ss1vg ss1vo ss1hg ss1ho ss2vg ss2vo ss2hg ss2ho } {
$nxobj putfloat $motor [getVal [$motor] ];
nxscript_data clear
nxscript_data putfloat 0 [getVal [$motor] ]
$nxobj putslab $motor [list $point] [list 1] nxscript_data;
}
}