42 lines
1.3 KiB
Tcl
42 lines
1.3 KiB
Tcl
VarMake detector_distance Float User
|
|
VarMake detector_base Float User
|
|
VarMake slit4_distance Float User
|
|
VarMake slit4_base Float User
|
|
VarMake sample_distance Float User
|
|
VarMake sample_base Float User
|
|
VarMake slit3_distance Float User
|
|
VarMake slit3_base Float User
|
|
|
|
detector_distance 10000
|
|
detector_base 300
|
|
slit4_distance 6000
|
|
slit4_base 20
|
|
sample_distance 5800
|
|
sample_base 50
|
|
slit3_distance 5600
|
|
slit3_base 20
|
|
|
|
proc set_two_theta { arg } {
|
|
set rad [expr ($arg/180.0)*3.1415926535897932384626433832795]
|
|
set d1 [expr [SplitReply [detector_distance]] - [SplitReply [sample_distance]]]
|
|
set d2 [expr [SplitReply [slit4_distance]] - [SplitReply [sample_distance]]]
|
|
set h1 [expr [SplitReply [detector_base]] + $d1 * tan($rad)]
|
|
set h2 [expr [SplitReply [slit4_base]] + $d2 * tan($rad)]
|
|
return "dz=$h1,st4vt=$h2"
|
|
}
|
|
publish set_two_theta user
|
|
|
|
proc get_two_theta {} {
|
|
set d1 [expr [SplitReply [detector_distance]] - [SplitReply [sample_distance]]]
|
|
set h1 [expr [SplitReply [dz]] - [SplitReply [detector_base]]]
|
|
return [expr (180.0*atan2($h1, $d1))/3.1415926535897932384626433832795]
|
|
}
|
|
publish get_two_theta user
|
|
|
|
MakeConfigurableMotor two_theta
|
|
two_theta readscript get_two_theta
|
|
two_theta drivescript set_two_theta
|
|
sicslist setatt two_theta klass sample
|
|
sicslist setatt two_theta long_name two_theta
|
|
sicslist setatt two_theta units degrees
|