diff --git a/site_ansto/instrument/tas/config/motors/motor_configuration.tcl b/site_ansto/instrument/tas/config/motors/motor_configuration.tcl index a6d62ea9..5d99a14f 100644 --- a/site_ansto/instrument/tas/config/motors/motor_configuration.tcl +++ b/site_ansto/instrument/tas/config/motors/motor_configuration.tcl @@ -836,4 +836,39 @@ make_gap_motors ss2vg gap ss2vo offset ps_top ps_bottom mm sample/vertical make_gap_motors ss2hg gap ss2ho offset ps_left ps_right mm sample/horizontal # END MOTOR CONFIGURATION +# Virtual motor for Ei on Taipan +# +# 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 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))] + 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 +} + +MakeConfigurableMotor vei +vei readscript get_vei +vei drivescript set_vei + +publish get_vei user +publish set_vei user