diff --git a/site_ansto/instrument/config/hmm/hmm_cylindrical_detector_configuration.tcl b/site_ansto/instrument/config/hmm/hmm_cylindrical_detector_configuration.tcl new file mode 100644 index 00000000..76625a30 --- /dev/null +++ b/site_ansto/instrument/config/hmm/hmm_cylindrical_detector_configuration.tcl @@ -0,0 +1,50 @@ +namespace eval histogram_memory { + ::utility::mkVar detector_radius_mm Float user radius true detector true true + sicslist setatt detector_radius_mm units mm + + ##\brief Calculate two_theta array from X bin boundaries + # + # requires detector_active_width_mm det_radius_mm deg_per_rad + proc two_theta {args} { + variable state + set opt [lindex $args 0] + set arglist [lrange $args 1 end] + set proc_name [namespace origin [lindex [info level 0] 0]] + set det_width_mm [SplitReply [detector_active_width_mm]] + set det_radius_mm [SplitReply [detector_radius_mm]] + set deg_per_radian [SplitReply [deg_per_rad]] + switch -- $opt { + "-centres" - "-boundaries" - "-graph_type" { + return [calc_axis $proc_name @none @none @none $opt $args] + } + "-arrayname" { + set max_b [OAT_TABLE -get X_max] + set min_b [OAT_TABLE -get X_min] + set scale_factor [expr {$deg_per_radian*($det_width_mm/$det_radius_mm) / ($max_b - $min_b)}] + set offset [::histogram_memory::detector_posn_degrees] + return [calc_axis $proc_name $scale_factor $offset [OAT_TABLE -get X_boundaries] $opt $arglist] + } + "-units" { + return "degrees" + } + default { + set max_b [OAT_TABLE -get X_max] + set min_b [OAT_TABLE -get X_min] + set scale_factor [expr {$deg_per_radian*($det_width_mm/$det_radius_mm) / ($max_b - $min_b)}] + set offset [lindex $arglist 0] + return [calc_axis $proc_name $scale_factor $offset [OAT_TABLE -get X_boundaries] $args] + } + } + } + set script_name ::histogram_memory::two_theta + publish $script_name user + sicslist setatt $script_name privilege internal + sicslist setatt $script_name kind script + sicslist setatt $script_name access read_only + sicslist setatt $script_name dtype floatvarar + sicslist setatt $script_name dlen 100 + sicslist setatt $script_name klass detector + sicslist setatt $script_name mutable false + sicslist setatt $script_name long_name two_theta + sicslist setatt $script_name units [::histogram_memory::two_theta -units] +}