Implement a virtuel Ei motor (vei) that does not drive anything but M1 and M2
r3609 | dcl | 2012-06-19 13:44:11 +1000 (Tue, 19 Jun 2012) | 1 line
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user