namespace eval counter { variable isc_numchannels variable isc_monitor_address variable isc_portlist variable isc_beam_monitor_list } proc ::counter::transferscript {} { variable isc_numchannels set val [SplitReply [bm1 gettime]] for {set i 1} {$i <= $isc_numchannels} {incr i} { append val " [SplitReply [bm$i getcounts] ]" } # broadcast $val return $val } publish ::counter::transferscript user proc ::counter::ic_initialize {} { if [ catch { variable isc_numchannels variable isc_monitor_address variable isc_portlist variable isc_beam_monitor_list set sim_mode [SplitReply [counter_simulation]] if {$sim_mode == "true"} { # MakeCounter bm SIM 0.0; for {set n 1} {$n <= $isc_numchannels} {incr n} { MakeCounter bm$n SIM 0.0 append bm_list "bm$n " } } else { # Make and configure an ANSTO beam monitor counter. # This must be sourced before the hmm_configuration.tcl until we separate the scan setup from the hmm setup for {set i 0; set n 1} {$i < $isc_numchannels} {incr i; incr n} { MakeCounter bm$n anstomonitor [ params host $isc_monitor_address port [lindex $isc_portlist $i] ] append bm_list "bm$n " } } eval "MakeMultiCounter bm $bm_list" bm transferscript ::counter::transferscript bm SetExponent 0 sicslist setatt bm privilege internal ::utility::macro::getset text bm_mode {} { return [bm getmode] } sicslist setatt bm_mode klass monitor sicslist setatt bm_mode long_name mode sicslist setatt bm_mode mutable false ::utility::macro::getset float bm_preset {} { return [bm getpreset] } sicslist setatt bm_preset klass monitor sicslist setatt bm_preset long_name preset sicslist setatt bm_preset mutable false ::utility::macro::getset float monitor_counts {} { return "monitor_counts = [SplitReply [bm getcounts]]" } sicslist setatt monitor_counts klass monitor sicslist setatt monitor_counts long_name data sicslist setatt monitor_counts mutable true ::utility::macro::getset float monitor_time {} { return "monitor_time = [SplitReply [bm gettime]]" } sicslist setatt monitor_time klass monitor sicslist setatt monitor_time long_name time sicslist setatt monitor_time mutable true for {set bm_num 1} {$bm_num <= $isc_numchannels} {incr bm_num} { set bm_counts bm${bm_num}_counts set bmon bm${bm_num} ::utility::macro::getset int $bm_counts {} [subst -nocommands { return "[$bmon getcounts]" }] sicslist setatt $bm_counts klass monitor sicslist setatt $bm_counts long_name $bm_counts sicslist setatt $bm_counts mutable true set bm_time bm${bm_num}_time set bmon bm${bm_num} ::utility::macro::getset float $bm_time {} [subst -nocommands { return "[$bmon gettime]" }] sicslist setatt $bm_time klass monitor sicslist setatt $bm_time long_name $bm_time sicslist setatt $bm_time mutable true } } message ] { if {$::errorCode=="NONE"} {return $message} return -code error $message } }