166 lines
5.4 KiB
Tcl
166 lines
5.4 KiB
Tcl
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
|