189 lines
6.1 KiB
Tcl
189 lines
6.1 KiB
Tcl
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 isodate [lindex [split [sicstime] " "] 0];
|
|
return [format "%s/%s_%s_%s%s" $dataPath $prefix $isodate $idNum $postfix];
|
|
}
|
|
|
|
proc nxcreatefile {{type nx.hdf}} {
|
|
global dataFileName nxFileOpen cfPath;
|
|
SicsDataPostFix .$type;
|
|
|
|
array set nxmode [list nx.hdf create5 h5 create5 nx5 create5 xml createxml];
|
|
set dataFileName [newFileName]
|
|
nxscript $nxmode($type) $dataFileName $cfPath(nexus)/nexus.dic;
|
|
set nxFileOpen true
|
|
}
|
|
|
|
|
|
proc nxreopenfile {} {
|
|
global dataFileName nxFileOpen cfPath;
|
|
nxscript reopen $dataFileName $cfPath(nexus)/nexus.dic;
|
|
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 dim0 dim1} {
|
|
global tharr det_height
|
|
|
|
set angsep [expr 1.0*$det_angle / ($dim1-1.0)]
|
|
set ysep [expr 1.0*$active_length/($dim0-1.0)]
|
|
set izero [expr ($dim0 -1.0 )+$zi]
|
|
set jzero [expr ($dim1 -1.0 )/2.0+$zj]
|
|
|
|
for {set i 0} {$i < $dim0} {incr i} {
|
|
set height [expr ($i - $izero)*$ysep]
|
|
set det_height($i) $height
|
|
for {set j 0} {$j < $dim1} {incr j} {
|
|
set alpha [expr $det_rot - ($j - $jzero)*$angsep]
|
|
set pang [expr acos($dradius * cos($alpha)/sqrt($dradius*$dradius + $height*$height))]
|
|
set tharr([expr $i*$dim1+$j]) $pang
|
|
}
|
|
}
|
|
}
|
|
|
|
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 puttext estart $start_time
|
|
putpolar_angle $nxobj $dim0 $dim1
|
|
$nxobj puttext dtype He-3 position sensitive detector
|
|
$nxobj puttext ddesc 8 curved multiwire segments.
|
|
$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 scandata dtheta
|
|
$nxobj makelink scanvar $scanVariable
|
|
$nxobj putfloat scanstep $scanVarStep
|
|
|
|
}
|
|
|
|
proc bm_addnxentry {nxobj entryname scanVariable scanVarPos scanVarStep start_time} {
|
|
global dradius ndect angsep;
|
|
putcommon $nxobj $entryname $scanVariable
|
|
putcrystal $nxobj
|
|
# 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
|
|
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
|
|
|
|
}
|
|
|
|
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_xpixel_zero_offset]]
|
|
set det_zyp [ SplitReply [detector_ypixel_zero_offset]]
|
|
|
|
polar_angle $det_radius_mm $det_angle_rad $det_active_ht_mm $det_zxp $det_zyp $det_rot_rad $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]]
|
|
|
|
# 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
|
|
|