Add virtual motors (e.g. for wavelength)

r3729 | dcl | 2012-08-30 11:16:06 +1000 (Thu, 30 Aug 2012) | 1 line
This commit is contained in:
Douglas Clowes
2012-08-30 11:16:06 +10:00
parent acf91f494d
commit d287611f03
2 changed files with 28 additions and 12 deletions

View File

@@ -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