fileeval $cfPath(hmm)/hmm_configuration_common_1.tcl source $cfPath(hmm)/hmm_cylindrical_detector_configuration.tcl set sim_mode [SplitReply [hmm_simulation]] proc ::histogram_memory::init_OAT_TABLE {args} { if [ catch { array set pararr $args if [info exists pararr(res)] { set resolution $pararr(res) } else { set resolution "hires" } # We don't need a MAX_CHAN parameter for time because the time channel # is scaled by calling the ::histogram_memory::clock_scale function OAT_TABLE X -setdata MAX_CHAN 3872 OAT_TABLE X -setdata MAX_CHAN_PERSEG 992 OAT_TABLE Y -setdata MAX_CHAN 512 OAT_TABLE X -setdata ALLOWED_RESOLUTIONS {1 2 4 8 16 32} OAT_TABLE X -setdata BMIN -0.5 OAT_TABLE X -setdata BMAX 991.5 OAT_TABLE Y -setdata BMIN -0.5 OAT_TABLE Y -setdata BMAX 511.5 set clock_scale 1000 set freq 50 hmm configure fat_clock_scale $clock_scale hmm configure fat_frame_frequency $freq hmm configure fat_frame_source INTERNAL set resolution "double_x" switch $resolution { "hires" { FAT_TABLE -set MULTI_HOST_HISTO_STITCH_OVERLAP 32 MULTI_HOST_HISTO_JOIN_STITCH_ORDER INVERTED OAT_TABLE -set X { 991.5 990.5 } NXC 992 Y { -0.5 0.5 } NYC 512 T { 0 20000 } NTC 1 } "std_968x128" { FAT_TABLE -set MULTI_HOST_HISTO_STITCH_OVERLAP 8 MULTI_HOST_HISTO_JOIN_STITCH_ORDER INVERTED OAT_TABLE -set X { 991.5 987.5 } NXC 248 Y { -0.5 3.5 } NYC 128 T { 0 20000 } NTC 1 } "double_x" { FAT_TABLE -set MULTI_HOST_HISTO_SWITCH_OVERLAP 16 MULTI_HOST_HISTO_JOIN_STITCH_ORDER INVERTED OAT_TABLE -set X { 991.5 989.5 } NXC 496 Y { -0.5 3.5 } NYC 128 T { 0 20000 } NTC 1 } "double_y_968x128" { FAT_TABLE -set MULTI_HOST_HISTO_STITCH_OVERLAP 8 MULTI_HOST_HISTO_JOIN_STITCH_ORDER INVERTED BNL_STATUS_MASK_MULTI_Y 1000h OAT_TABLE -set X { 991.5 987.5 } NXC 248 Y { -0.5 1.5 } NYC 256 T { 0 20000 } NTC 1 } "lores_484x64" { FAT_TABLE -set MULTI_HOST_HISTO_STITCH_OVERLAP 4 MULTI_HOST_HISTO_JOIN_STITCH_ORDER INVERTED OAT_TABLE -set X { 991.5 983.5 } NXC 124 Y { -0.5 7.5 } NYC 64 T { 0 20000 } NTC 1 } default { # Default to std_968x128 FAT_TABLE -set MULTI_HOST_HISTO_STITCH_OVERLAP 8 MULTI_HOST_HISTO_JOIN_STITCH_ORDER INVERTED OAT_TABLE -set X { 991.5 987.5 } NXC 248 Y { -0.5 3.5 } NYC 128 T { 0 20000 } NTC 1 } } } message ] { if {$::errorCode=="NONE"} {return $message} return -code error $message } } ## # @brief Returns the oat table bin boundaries. proc ::histogram_memory::oat_bins {axis} { array set channID {X NXC Y NYC T NTC} if [ catch { if {$axis == "X"} { foreach {bb0 bb1} [OAT_TABLE -get $axis] {} set bstep [expr $bb1 - $bb0] if {$bstep < 0} { set bb0 3871.5 set bb1 [expr $bb0+$bstep] FAT_TABLE -set MULTI_HOST_HISTO_STITCH_OVERLAP [expr abs(32.0/$bstep)] } return [list $bb0 $bb1] } else { return [OAT_TABLE -get $axis] } } message ] { if {$::errorCode=="NONE"} {return $message} return -code error $message } } ## # @brief Returns the current number of channels for a given axis. proc ::histogram_memory::number_of_channels {axis} { array set channID {X NXC Y NYC T NTC} if [ catch { if {$axis == "X"} { set nch_perseg [OAT_TABLE -get $channID($axis)] set overlap [FAT_TABLE -get MULTI_HOST_HISTO_STITCH_OVERLAP] set nch [expr 4*$nch_perseg - 3*$overlap] return $nch } else { return [OAT_TABLE -get $channID($axis)] } } message ] { if {$::errorCode=="NONE"} {return $message} return -code error $message } } ## # @brief Return the detector position proc ::histogram_memory::detector_posn_degrees {} { if [ catch { return [SplitReply [stth]] } message ] { if {$::errorCode=="NONE"} {return $message} return -code error $message } } proc ::histogram_memory::pre_count {} {} proc ::histogram_memory::post_count {} {} proc ::histogram_memory::isc_initialize {} { # Instrument specific X and Y dimension names variable INST_NXC "stitch_nxc" variable INST_NYC "stitch_nyc" if [ catch { ::histogram_memory::init_hmm_objs if {$::sim_mode == "true"} { hmm configure oat_ntc_eff 1 hmm configure $INST_NYC 512 hmm configure $INST_NXC [expr 480*8 - 1] } BAT_TABLE -init CAT_TABLE -init SAT_TABLE -init OAT_TABLE -init FAT_TABLE -init MULTI_HOST_HISTO_STITCH_OVERLAP MULTI_HOST_HISTO_JOIN_STITCH_ORDER ::histogram_memory::ic_initialize ::histogram_memory::set_graphtype "two_theta" "boundaries" detector_active_height_mm 203.2 detector_active_height_mm lock # detector_active_width_mm 1524 # Adjusted to give 121 degrees detector_active_width_mm 1537.426 detector_active_width_mm lock detector_radius_mm 728.0 detector_radius_mm lock ::histogram_memory::init_OAT_TABLE res "std_968x128" # ::histogram_memory::init_OAT_TABLE res "double_x" ::histogram_memory::upload_config Filler_defaults set ::histogram_memory::histmem_axes(HOR) /instrument/detector/x_pixel_angular_offset set ::histogram_memory::histmem_axes(VER) /instrument/detector/y_pixel_offset } message ] { if {$::errorCode=="NONE"} {return $message} return -code error $message } } proc histmem {cmd args} { eval "_histmem $cmd $args" } publish histmem user