source $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 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 } 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 {} { if [ catch { ::histogram_memory::init_hmm_objs if {$::sim_mode == "true"} { hmm configure oat_ntc_eff 1 hmm configure stitch_nyc 512 hmm configure stitch_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::two_theta -boundaries detector_active_height_mm 203.2 detector_active_width_mm 1524 detector_radius_mm 728.0 ::histogram_memory::init_OAT_TABLE res "std_968x128" ::histogram_memory::upload_config Filler_defaults ::nexus::data alias ::histogram_memory::vertical_axis ::histogram_memory::y_pixel_offset ::nexus::data alias ::histogram_memory::horizontal_axis ::histogram_memory::two_theta } message ] { if {$::errorCode=="NONE"} {return $message} return -code error $message } } proc histmem {cmd args} { eval "_histmem $cmd $args" } publish histmem user