From ce28a1fcc8538f82bedecdb4bbca2fb83b14918b Mon Sep 17 00:00:00 2001 From: Ferdi Franceschini Date: Mon, 5 Mar 2007 20:56:02 +1100 Subject: [PATCH] Common files for powder instrument nexus files r1599 | ffr | 2007-03-05 20:56:02 +1100 (Mon, 05 Mar 2007) | 2 lines --- .../config/nexus/nexus_in_bmon_common_1.dic | 6 + .../config/nexus/nexus_in_common_1.dic | 45 ++++ .../config/nexus/nexus_in_hmm_common_1.dic | 23 +++ .../config/nexus/nexus_in_scan_common_1.dic | 11 + .../config/nexus/nxscripts_common_1.tcl | 195 ++++++++++++++++++ 5 files changed, 280 insertions(+) create mode 100644 site_ansto/instrument/config/nexus/nexus_in_bmon_common_1.dic create mode 100644 site_ansto/instrument/config/nexus/nexus_in_common_1.dic create mode 100644 site_ansto/instrument/config/nexus/nexus_in_hmm_common_1.dic create mode 100644 site_ansto/instrument/config/nexus/nexus_in_scan_common_1.dic create mode 100644 site_ansto/instrument/config/nexus/nxscripts_common_1.tcl diff --git a/site_ansto/instrument/config/nexus/nexus_in_bmon_common_1.dic b/site_ansto/instrument/config/nexus/nexus_in_bmon_common_1.dic new file mode 100644 index 00000000..79c5a77a --- /dev/null +++ b/site_ansto/instrument/config/nexus/nexus_in_bmon_common_1.dic @@ -0,0 +1,6 @@ +#----------------- NXmonitor +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} +dlayout=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS layout -type NX_CHAR diff --git a/site_ansto/instrument/config/nexus/nexus_in_common_1.dic b/site_ansto/instrument/config/nexus/nexus_in_common_1.dic new file mode 100644 index 00000000..53e03dab --- /dev/null +++ b/site_ansto/instrument/config/nexus/nexus_in_common_1.dic @@ -0,0 +1,45 @@ +##NXDICT-1.0 +#---------------------------------------------------------------------------- +# +# DO NOT EDIT WHEN YOU DO NOT KNOW WHAT YOU ARE DOING! +# This file determines the placement of data items in the NeXus +# data file. Your data may not be readable if this file is messed up. +# +#---------------------------------------------------------------------------- +entryName=entry1 +inst=instrument +monochromator=monochromator +detector=detector +padim0=512 +padim1=128 +scan_variable=scanvar + +#---------- NXentry level +etitle=/$(entryName),NXentry/SDS title -type NX_CHAR +sics_release=/$(entryName),NXentry/SDS release_tag -type NX_CHAR +estart=/$(entryName),NXentry/SDS start_time -type NX_CHAR +eend=/$(entryName),NXentry/SDS end_time -type NX_CHAR + +#----------------- NXinstrument +iname=/$(entryName),NXentry/$(inst),NXinstrument/SDS name -type NX_CHAR \ + -rank 1 -dim {132} + +#----------------- NXuser +username=/$(entryName),NXentry/user,NXuser/SDS name -type NX_CHAR +userrole=/$(entryName),NXentry/user,NXuser/SDS role -type NX_CHAR +useraddress=/$(entryName),NXentry/user,NXuser/SDS address -type NX_CHAR +userphone=/$(entryName),NXentry/user,NXuser/SDS phone -type NX_CHAR +useremail=/$(entryName),NXentry/user,NXuser/SDS email -type NX_CHAR + +#----------------- NXsource +sname=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS name \ + -type NX_CHAR -rank 1 +stype=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS type -type NX_CHAR -rank 1 +sprobe=/$(entryName),NXentry/$(inst),NXinstrument/source,NXsource/SDS probe -type NX_CHAR -rank 1 + +#----------------- NXcrystal +clambda=/$(entryName),NXentry/$(inst),NXinstrument/$(monochromator),NXcrystal/SDS wavelength -type NX_FLOAT32 -attr {units,Angstrom} +ctype=/$(entryName),NXentry/$(inst),NXinstrument/$(monochromator),NXcrystal/SDS type -type NX_CHAR + +#--------------- NXsample +saname=/$(entryName),NXentry/sample,NXsample/SDS name -type NX_CHAR diff --git a/site_ansto/instrument/config/nexus/nexus_in_hmm_common_1.dic b/site_ansto/instrument/config/nexus/nexus_in_hmm_common_1.dic new file mode 100644 index 00000000..eb9ceb37 --- /dev/null +++ b/site_ansto/instrument/config/nexus/nexus_in_hmm_common_1.dic @@ -0,0 +1,23 @@ +#-------------- Detector +# histogram data + + +dradius=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS distance -type NX_FLOAT32 -attr {units,mm} +dheight=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS detector_height -type NX_FLOAT32 -attr {units,mm} -attr {long_name, active height} +detangle_rad=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS angular_coverage -type NX_FLOAT32 -attr {units,radians} +detangle_degrees=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS angular_coverage -type NX_FLOAT32 -attr {units,degrees} +dtheta=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS polar_angle -type NX_FLOAT32 -LZW -rank 2 -dim {$(padim0),$(padim1)} -attr {units,radians} +dvaxis=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS vertical_axis -type NX_FLOAT32 -LZW -rank 1 -dim {$(padim0)} -attr {units,mm} + +dcounts=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS \ + data -type NX_INT32 -LZW -rank 2 -dim {$(dim0),$(dim1)} \ + -attr {signal,1} + +deff=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/calibration,NXdata/SDS efficiency -type NX_INT32 -LZW -rank 2 -dim {$(dim0),$(dim1)} + +ddesc=/$(entryName),NXentry/$(inst),NXinstrument/$(detector),NXdetector/SDS description -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 + diff --git a/site_ansto/instrument/config/nexus/nexus_in_scan_common_1.dic b/site_ansto/instrument/config/nexus/nexus_in_scan_common_1.dic new file mode 100644 index 00000000..7a7f20b0 --- /dev/null +++ b/site_ansto/instrument/config/nexus/nexus_in_scan_common_1.dic @@ -0,0 +1,11 @@ + + +#----------------NXdata ------------------------------------------------ + +scandata=/$(entryName),NXentry/scan_data,NXdata/NXVGROUP +scanvertaxis=/$(entryName),NXentry/vertical_axis,NXdata/NXVGROUP +scanvar=/$(entryName),NXentry/scan_variable,NXdata/NXVGROUP +scanstep=/$(entryName),NXentry/scan_step,NXdata/SDS value -type NX_FLOAT32 -attr {units,degree} -attr {long_name,stepsize} +#histogram=/$(entryName),NXentry/histogram,NXdata/NXVGROUP +#scanvar=/$(entryName),NXentry/$(scan_variable),NXdata/NXVGROUP + diff --git a/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl b/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl new file mode 100644 index 00000000..5924b38a --- /dev/null +++ b/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl @@ -0,0 +1,195 @@ +# TODO Return filename from nxcreatefile and call nxreopen nxclose etc +# with filename + +MakeNXScript + +proc getVal {msg} { + return [string trim [lindex [split $msg =] 1 ] ] +} + +proc newFileName {} { + sicsdatanumber incr; + set idNum [SplitReply [sicsdatanumber]]; + set dataPath [SplitReply [sicsdatapath]]; + set prefix [SplitReply [sicsdataprefix]]; + set postfix [SplitReply [sicsdatapostfix]]; + set date_time_arr [split [sicstime] " "] + set isodate [lindex $date_time_arr 0]; + set isotime [string map {: -} [lindex $date_time_arr 1]]; + return [format "%s/%s_%sT%s_%05d%s" $dataPath $prefix $isodate $isotime $idNum $postfix]; +} + +proc nxcreatefile {nxdic {type nx.hdf}} { + global dataFileName nxFileOpen cfPath nexusdic; + SicsDataPostFix .$type; + + set nexusdic $nxdic + array set nxmode [list nx.hdf create5 h5 create5 nx5 create5 xml createxml]; + set dataFileName [newFileName] + nxscript $nxmode($type) $dataFileName $cfPath(nexus)/$nexusdic; + nxscript updatedictvar entryName sics_release + nxscript puttext sics_release [SplitReply [sics_release]] + set nxFileOpen true +} + + +proc nxreopenfile {} { + global dataFileName nxFileOpen cfPath nexusdic; + nxscript reopen $dataFileName $cfPath(nexus)/$nexusdic; + set nxFileOpen true; +} + +proc nxclosefile {} { + global dataFileName nxFileOpen; + if {$nxFileOpen == true} { + nxscript close; + set nxFileOpen false; + set flist [split $dataFileName "/"]; + set fname [lindex $flist [expr [llength $flist] - 1] ]; + clientput "$fname updated" "event"; + } +} + +set dradius 1.25 +set ndect 128 +set tubedia 0.0254 +set pi 3.1415926 +set angsep 1.25 +# stthmin = (180 - (1.25*127))/2 +proc polar_angle {dradius det_angle active_length zi zj det_rot y_offset dim0 dim1} { + global tharr det_height + + set angsep [expr $det_angle / ($dim1-1)] + set ysep [expr $active_length/($dim0-1)] + set imid [expr ($dim0 -1 )/2.0] + set jmid [expr ($dim1 -1 )/2.0] + + for {set i 0} {$i < $dim0} {incr i} { + set height [expr $y_offset - ($i - $imid)*$ysep] + set det_height($i) $height + for {set j 0} {$j < $dim1} {incr j} { +# set alpha [expr $det_rot - ($j - $jmid)*$angsep] +# set pang [expr acos($dradius * cos($alpha)/sqrt($dradius*$dradius + $height*$height))] +# set tharr([expr $i*$dim1+$j]) $pang + set tharr([expr $i*$dim1+$j]) 0 + } + } +} + +proc addnxentry {nxobj entryname scanVariable scanVarPos scanVarStep start_time} { + global dradius ndect angsep; + set dim0 [SplitReply [hmm configure dim0]] + set dim1 [SplitReply [hmm configure dim1]] +putcommon $nxobj $entryname $scanVariable +putcrystal $nxobj +putmonitor $nxobj +putsample $nxobj + set scanVar_value [string trim [lindex [split [$scanVariable] =] 1]] + $nxobj putfloat $scanVariable $scanVar_value + $nxobj putfloat detangle_degrees [SplitReply [detector_angle_deg]] + $nxobj puttext estart $start_time + putpolar_angle $nxobj $dim0 $dim1 + $nxobj puttext dtype [SplitReply [detector_type]] + $nxobj puttext ddesc [SplitReply [detector_description]] + $nxobj putfloat dradius [SplitReply [detector_radius_mm]] + $nxobj puttext dlayout area + $nxobj puthm dcounts hmm + $nxobj puthm deff hmm + $nxobj makelink scandata dcounts + $nxobj makelink scanvertaxis dvaxis + $nxobj makelink scandata dtheta + $nxobj makelink scanvar $scanVariable + $nxobj putfloat scanstep $scanVarStep + $nxobj puttext eend [sicstime]; +} + +proc bm_addnxentry {nxobj entryname scanVariable scanVarPos scanVarStep start_time} { + global dradius ndect angsep; +putcommon $nxobj $entryname $scanVariable +putcrystal $nxobj +putmonitor $nxobj +putsample $nxobj + set scanVar_value [string trim [lindex [split [$scanVariable] =] 1]] + $nxobj putfloat $scanVariable $scanVar_value +# 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 + $nxobj puttext dlayout point + $nxobj makelink scandata mdata + $nxobj makelink scanvar $scanVariable + $nxobj putfloat scanstep $scanVarStep + $nxobj puttext eend [sicstime]; +} + +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 [SplitReply [bmon_distance]] +} + +proc putpolar_angle {nxobj dim0 dim1} { + global tharr det_height + set det_radius_mm [SplitReply [detector_radius_mm]] + set det_angle_rad [SplitReply [detector_angle_rad]] + set det_active_ht_mm [SplitReply [detector_active_height_mm]] + set det_rot_rad [ expr [SplitReply [stth]]/[SplitReply [deg_per_rad]] ] + set det_zxp [ SplitReply [detector_zero_xpixel]] + set det_zyp [ SplitReply [detector_zero_ypixel]] + + polar_angle $det_radius_mm $det_angle_rad $det_active_ht_mm $det_zxp $det_zyp $det_rot_rad 0 $dim0 $dim1 + $nxobj updatedictvar padim0 $dim0 + $nxobj updatedictvar padim1 $dim1 + $nxobj putarray dvaxis det_height $dim0 + $nxobj putgenarray dtheta tharr [expr $dim0 * $dim1] +} + +proc putsample {nxobj} { + $nxobj puttext saname [getVal [Sample]] +} +proc putcrystal {nxobj} { + $nxobj puttext ctype [SplitReply [crystal_type]] + $nxobj putfloat clambda [SplitReply [crystal_wavelength_A]] +} +proc putcommon {nxobj entryName scanVariable} { + $nxobj updatedictvar entryName $entryName + $nxobj updatedictvar scan_variable $scanVariable + $nxobj puttext etitle [getVal [Title]] + $nxobj puttext iname [getVal [Instrument]] + $nxobj puttext username [SplitReply [user]] + $nxobj puttext useremail [SplitReply [email]] + $nxobj puttext userphone [SplitReply [phone]] + +# NXsource + $nxobj puttext sname OPAL + $nxobj puttext stype Reactor Neutron Source + $nxobj puttext sprobe Neutron + putsamplemotors $nxobj + putslitmotors $nxobj + putmonomotors $nxobj +} + +proc putsamplemotors {nxobj} { + foreach motor { som schi sphi sx sy stth sth } { + $nxobj putfloat $motor [getVal [$motor] ]; + } +} + +proc putmonomotors {nxobj} { + foreach motor { mom mchi mphi mx my mtth mth } { + $nxobj putfloat $motor [getVal [$motor] ]; + } +} + +proc putslitmotors {nxobj} { + foreach motor {ss1u ss1d ss1l ss1r ss1vg ss1vo ss1hg ss1ho ss2u ss2d ss2l ss2r ss2vg ss2vo ss2hg ss2ho } { + $nxobj putfloat $motor [getVal [$motor] ]; + } +} + +publish nxcreatefile user +publish addnxentry user +publish bm_addnxentry user +