From d287611f032c569a056c93f1fb6be294def88731 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Thu, 30 Aug 2012 11:16:06 +1000 Subject: [PATCH] Add virtual motors (e.g. for wavelength) r3729 | dcl | 2012-08-30 11:16:06 +1000 (Thu, 30 Aug 2012) | 1 line --- .../config/motors/motor_configuration.tcl | 2 +- .../tas/config/motors/motor_configuration.tcl | 38 +++++++++++++------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/site_ansto/instrument/pelican/config/motors/motor_configuration.tcl b/site_ansto/instrument/pelican/config/motors/motor_configuration.tcl index 783f3231..fa21a86f 100644 --- a/site_ansto/instrument/pelican/config/motors/motor_configuration.tcl +++ b/site_ansto/instrument/pelican/config/motors/motor_configuration.tcl @@ -891,7 +891,7 @@ proc get_vei {} { proc set_vwi {wavelength} { set dd 3.35416 set theta [expr (180.0 / 3.141592654) * asin($wavelength / (2.0 * $dd))] - set result [format "mom=%f,mtth=%f" $theta [expr 2.0 * $theta]] + set result [format "moma=%f,momb=%f,momc=%f,mtth=%f" $theta $theta $theta [expr 2.0 * $theta]] return $result } diff --git a/site_ansto/instrument/tas/config/motors/motor_configuration.tcl b/site_ansto/instrument/tas/config/motors/motor_configuration.tcl index 460e66f5..b831ca87 100644 --- a/site_ansto/instrument/tas/config/motors/motor_configuration.tcl +++ b/site_ansto/instrument/tas/config/motors/motor_configuration.tcl @@ -882,37 +882,53 @@ make_gap_motors ss2hg gap ss2ho offset ps_left ps_right mm sample/horizontal # Virtual motor for Ei on Taipan # +# Convert M2 angle to Wavelength in Angstroms +proc get_vwi {} { + set dd 3.35416 + set angle [expr 0.5 * [SplitReply [m2]]] + set wavelength [expr 2.0 * $dd * sin($angle * 3.141592654 / 180.0)] + return $wavelength +} + # Convert M2 angle to Energy in mEv proc get_vei {} { - set dd 3.35416e-10 set h_for_joules 6.62606957e-34 set neutron_mass 1.674927351e-27 set ev_to_joules 1.602176565e-19 - set angle [expr 0.5 * [SplitReply [m2]]] - set wavelength [expr 2.0 * $dd * sin($angle * 3.141592654 / 180.0)] + set wavelength [expr 1.0e-10 * [get_vwi]] set temp [expr ($h_for_joules / ($neutron_mass * $wavelength))] set joules [expr 0.5 * $neutron_mass * ($temp * $temp)] set mEv [expr 1000 * $joules / $ev_to_joules] return $mEv } -# Convert Energy in mEv to M1,M2 positions -proc set_vei {mEv} { - set dd 3.35416e-10 - set h_for_joules 6.62606957e-34 - set neutron_mass 1.674927351e-27 - set ev_to_joules 1.602176565e-19 - set joules [expr 0.001 * $mEv * $ev_to_joules] - set wavelength [expr $h_for_joules / ($neutron_mass * sqrt(2.0 * $joules / $neutron_mass))] +# Convert Wavelength in Angstroms to M1,M2 positions +proc set_vwi {wavelength} { + set dd 3.35416 set theta [expr (180.0 / 3.141592654) * asin($wavelength / (2.0 * $dd))] set result [format "m1=%f,m2=%f" $theta [expr 2.0 * $theta]] return $result } +# Convert Energy in mEv to M1,M2 positions +proc set_vei {mEv} { + set h_for_joules 6.62606957e-34 + set neutron_mass 1.674927351e-27 + set ev_to_joules 1.602176565e-19 + set joules [expr 0.001 * $mEv * $ev_to_joules] + set wavelength [expr $h_for_joules / ($neutron_mass * sqrt(2.0 * $joules / $neutron_mass))] + return [set_vwi [expr 1.0e10 * $wavelength]] +} + +MakeConfigurableMotor vwi +vwi readscript get_vwi +vwi drivescript set_vwi MakeConfigurableMotor vei vei readscript get_vei vei drivescript set_vei +publish get_vwi user +publish set_vwi user publish get_vei user publish set_vei user