diff --git a/site_ansto/Makefile b/site_ansto/Makefile index 7d046db8..368b541d 100644 --- a/site_ansto/Makefile +++ b/site_ansto/Makefile @@ -163,6 +163,8 @@ kookaburra: all make -C instrument/kookaburra dingo: all make -C instrument/dingo +bilby: all +emu: all libansto.a: $(OBJ) rm -f libansto.a diff --git a/site_ansto/instrument/bilby/MANIFEST.TXT b/site_ansto/instrument/bilby/MANIFEST.TXT new file mode 100644 index 00000000..06aa801e --- /dev/null +++ b/site_ansto/instrument/bilby/MANIFEST.TXT @@ -0,0 +1,6 @@ +runsics_def.py +bilby_configuration.tcl +config +util +hostport_config.tcl +hostport_config_test.tcl diff --git a/site_ansto/instrument/bilby/bilby_configuration.tcl b/site_ansto/instrument/bilby/bilby_configuration.tcl new file mode 100644 index 00000000..22ac8031 --- /dev/null +++ b/site_ansto/instrument/bilby/bilby_configuration.tcl @@ -0,0 +1,62 @@ +# Author: Ferdi Franceschini (ffr@ansto.gov.au) + +# Required by server_config.tcl +VarMake Instrument Text Internal +Instrument bilby +Instrument lock + +#START SERVER CONFIGURATION SECTION +source util/dmc2280/dmc2280_util.tcl +source server_config.tcl +MakeDrive +#END SERVER CONFIGURATION SECTION + +######################################## +# INSTRUMENT SPECIFIC CONFIGURATION + +fileeval $cfPath(motors)/motor_configuration.tcl + + +fileeval $cfPath(source)/source.tcl +source $cfPath(hipadaba)/hipadaba_configuration.tcl +fileeval $cfPath(motors)/positmotor_configuration.tcl +fileeval $cfPath(velsel)/velsel.tcl +fileeval $cfPath(parameters)/parameters.tcl +fileeval $cfPath(plc)/plc.tcl +fileeval $cfPath(optics)/optics.tcl +fileeval $cfPath(counter)/counter.tcl +fileeval $cfPath(environment)/temperature/sct_lakeshore_340.tcl +fileeval $cfPath(environment)/temperature/sct_lakeshore_336.tcl +fileeval $cfPath(hmm)/hmm_configuration.tcl +fileeval $cfPath(nexus)/nxscripts.tcl +fileeval $cfPath(hmm)/detector.tcl +fileeval $cfPath(scan)/scan.tcl +fileeval $cfPath(commands)/commands.tcl +fileeval $cfPath(anticollider)/anticollider.tcl +fileeval $cfPath(environment)/temperature/sct_julabo_lh45.tcl +fileeval $cfPath(environment)/temperature/sct_qlink.tcl +fileeval $cfPath(environment)/temperature/sct_watlow_st4.tcl +fileeval $cfPath(environment)/temperature/sct_watlow_rm.tcl +fileeval $cfPath(environment)/temperature/sct_rvasm2.tcl +fileeval $cfPath(environment)/temperature/sct_oxford_itc.tcl +fileeval $cfPath(environment)/magneticField/oxford_labview.tcl +fileeval $cfPath(environment)/magneticField/sct_bruker_BEC1.tcl +fileeval $cfPath(environment)/environment.tcl +fileeval $cfPath(environment)/sct_rheometer.tcl +fileeval $cfPath(environment)/sct_protek_common.tcl +fileeval $cfPath(beamline)/spin_flipper.tcl +fileeval $cfPath(commands)/pulser.tcl +fileeval $cfPath(commands)/hvcommands.tcl + +source gumxml.tcl + +::utility::mkVar ::anticollider::protect_detector text manager protect_detector false detector true false +::anticollider::protect_detector "true" + +server_init +########################################### +# WARNING: Do not add any code below server_init, if you do SICS may fail to initialise properly. + +# You can add extra-configuration code in ../extraconfig.tcl +sicspoll intervall /instrument/detector/max_binrate 1 +sicspoll intervall /instrument/detector/total_maprate 1 diff --git a/site_ansto/instrument/bilby/config/INSTCFCOMMON.TXT b/site_ansto/instrument/bilby/config/INSTCFCOMMON.TXT new file mode 100644 index 00000000..e8a87ed3 --- /dev/null +++ b/site_ansto/instrument/bilby/config/INSTCFCOMMON.TXT @@ -0,0 +1,31 @@ +config/source/source_common.tcl +config/anticollider/anticollider_common.tcl +config/plc/plc_common_1.tcl +config/counter/counter_common_1.tcl +config/hipadaba/hipadaba_configuration_common.tcl +config/hipadaba/common_instrument_dictionary.tcl +config/hipadaba/instdict_specification.tcl +config/hmm/hmm_configuration_common_1.tcl +config/hmm/hmm_object.tcl +config/hmm/anstohm_linked.xml +config/hmm/sct_orhvps_common.tcl +config/scan/scan_common_1.hdd +config/scan/scan_common_1.tcl +config/nexus/nxscripts_common_1.tcl +config/commands/commands_common.tcl +config/commands/pulser.tcl +config/commands/hvcommands.tcl +config/motors/sct_positmotor_common.tcl +config/environment/sct_protek_common.tcl +config/environment/temperature/sct_julabo_lh45.tcl +config/environment/temperature/sct_lakeshore_340.tcl +config/environment/temperature/sct_lakeshore_336.tcl +config/environment/temperature/sct_qlink.tcl +config/environment/temperature/sct_watlow_st4.tcl +config/environment/temperature/sct_rvasm2.tcl +config/environment/temperature/sct_oxford_itc.tcl +config/environment/magneticField/sct_bruker_BEC1.tcl +config/environment/magneticField/sct_oxford_ips.tcl +config/environment/magneticField/sct_oxford_labview.tcl + +config/motors/sct_jogmotor_common.tcl diff --git a/site_ansto/instrument/bilby/config/anticollider/acscript.txt b/site_ansto/instrument/bilby/config/anticollider/acscript.txt new file mode 100644 index 00000000..e69de29b diff --git a/site_ansto/instrument/bilby/config/anticollider/anticollider.tcl b/site_ansto/instrument/bilby/config/anticollider/anticollider.tcl new file mode 100644 index 00000000..db8cb21a --- /dev/null +++ b/site_ansto/instrument/bilby/config/anticollider/anticollider.tcl @@ -0,0 +1,14 @@ +# Author: Ferdi Franceschini (ffr@ansto.gov.au) + +source $cfPath(anticollider)/anticollider_common.tcl + +# NOTE: This is called with a list of motorname target pairs +proc ::anticollider::enable {args} { + if {[SplitReply [::anticollider::protect_detector]] == "false"} { + return "false" + } else { + return "true" + } +} + +::anticollider::loadscript acscript.txt diff --git a/site_ansto/instrument/bilby/config/commands/commands.tcl b/site_ansto/instrument/bilby/config/commands/commands.tcl new file mode 100644 index 00000000..f6a0a1cc --- /dev/null +++ b/site_ansto/instrument/bilby/config/commands/commands.tcl @@ -0,0 +1,216 @@ +source $cfPath(commands)/commands_common.tcl + +namespace eval motor { +# is_homing_list = comma separated list of motors which are safe to send "home" + variable is_homing_list "" +} + +#namespace eval sample { +# command select {int=0:8 sampid} { +# SampleNum $sampid +# } +#} + +## +# @brief Beamstop select command +# @param bs beamstop, 1,2,3,4,5 or 6 +# @param bx beam position in detector coordinates +# @param bz beam position in detector coordinates +# Given +# (Xbf,Zbf) = beam pos in frame coords +# (Xbd,Zbd) = beam pos in detector coords +# (Xbbs, Zbbs) = beam pos in beamstop coords +# (Xdf,Zdf) = detector pos in frame coords +# (Xbsf,Zbsf) = beamstop pos in frame coords +# +# (Xbf,Zbf) = (Xdf+Xbd, Zdf+Zbd) = (Xbsf+Xbbs, Zbsf+Zbbs) +# Origin of detector coords = frame origin +# +# Detector and beamstop motor readings with beamstop disk centers +# overlapping over detector center mark. +# Xdf = 264.542 (7283813) Zdf = 0 +# Xbbs = 296.291 (8054270) +# Zbbs = 259.641 (13488244) +# Xbd = dethw, Zbd = (dethh) +# +# 264.542+dethw = Xbsf+296.291 +# 0+dethh = Zbsf+259.641 +# +# Xbsf = -31.749 + dethw, Zbsf = -259.641 + dethh +proc selbs {bs {bx "UNDEF"} {bz "UNDEF"}} { + set bsdriving false + set dethw [expr {[SplitReply [detector_active_height_mm]]/2.0}] + set dethh [expr {[SplitReply [detector_active_width_mm]]/2.0}] + set Xbsf [expr -31.749 + $dethw] + set Zbsf [expr -259.641 + $dethh] + array set bsl [subst { + 1 [SplitReply [bs1 softlowerlim]] + 2 [SplitReply [bs2 softlowerlim]] + 3 [SplitReply [bs3 softlowerlim]] + 4 [SplitReply [bs4 softlowerlim]] + 5 [SplitReply [bs5 softlowerlim]] + 6 [SplitReply [bs6 softlowerlim]] + }] + if [ catch { + switch $bs { + "1" { + set bsmot "bs1" + set bs_target 93.20 + set bs_diameter 110 + set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs4 $bsl(4) bs5 $bsl(5) bs6 $bsl(6)" + } + "2" { + set bsmot "bs2" + set bs_target 86.84 + set bs_diameter 88 + set bsdownCmd "drive bs1 $bsl(1) bs3 $bsl(3) bs4 $bsl(4) bs5 $bsl(5) bs6 $bsl(6)" + } + "3" { + set bsmot "bs3" + set bs_target 93.35 + set bs_diameter 66 + set bsdownCmd "drive bs2 $bsl(2) bs1 $bsl(1) bs4 $bsl(4) bs5 $bsl(5) bs6 $bsl(6)" + } + "4" { + set bsmot "bs4" + set bs_target 86.85 + set bs_diameter 44 + set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs1 $bsl(1) bs5 $bsl(5) bs6 $bsl(6)" + } + "5" { + set bsmot "bs5" + set bs_target 93.27 + set bs_diameter 22 + set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs4 $bsl(4) bs1 $bsl(1) bs6 $bsl(6)" + } + "6" { + set bsmot "bs6" + set bs_target 86.98 + set bs_diameter 11 + set bsdownCmd "drive bs2 $bsl(2) bs3 $bsl(3) bs4 $bsl(4) bs5 $bsl(5) bs1 $bsl(1)" + } + default { + error "beamstop selection must be an integer from 1 to 6" + } + } + + set detoff_val [SplitReply [detoff]] + + if {$bx == "UNDEF" || $bz == "UNDEF"} { + statemon start selbs + if {[info level] > 1} {statemon start [lindex [info level -1] 0]} + set bsdriving true + BeamStop -1 + BSdiam -1 + drive $bsmot $bs_target + eval $bsdownCmd + BeamStop $bs + BSdiam $bs_diameter + set bsdriving false + statemon stop selbs + if {[info level] > 1} {statemon stop [lindex [info level -1] 0]} + } else { + if { [string is double $bx] == false } { + if { [string is double $bz] == false } { + error "beam coordinates must be floats" + } + } + set bsx_target [expr {$bx-$Xbsf+$detoff_val}] + set bsz_target [expr {$bz-$Zbsf}] + + statemon start selbs + if {[info level] > 1} {statemon start [lindex [info level -1] 0]} + set bsdriving true + BeamStop -1 + BSdiam -1 + drive $bsmot $bs_target bsx $bsx_target bsz $bsz_target + eval $bsdownCmd + BeamStop $bs + BSdiam $bs_diameter + set bsdriving false + statemon stop selbs + if {[info level] > 1} {statemon stop [lindex [info level -1] 0]} + } + } msg ] { + if {$bsdriving} { + statemon stop selbs + if {[info level] > 1} {statemon stop [lindex [info level -1] 0]} + } + return -code error $msg + } +} +publish selbs user +namespace eval beamstops { + command selbsn {int=1,2,3,4,5,6 bs} { + selbs $bs "UNDEF" "UNDEF" + } + command selbsxz {int=1,2,3,4,5,6 bs float bx float bz} { + selbs $bs $bx $bz + } +} + +namespace eval optics { + VarMake ::optics::select::section text user + VarMake ::optics::polarizer::in text user + VarMake ::optics::lens::selection text user + + command rotary_attenuator {int=0,15,45,90,180 angle} { + drive att $angle + } + + command entrance_aperture { + int=0,45,90,135,180,270 angle + } { + drive srce $angle + } + +# TODO Do we need this +# command sample_aperture { +# int=25,50 size +# text=circ,squ,open,rect shape +# } { +# SApXmm $size +# SApZmm $size +# SApShape $shape +# } + +############################## +## +# @brief The "guide" command uses a lookup table to setup the collimation system +# @param row, selects a row from the guide configuration table +# +# eg\n +# guide ga + command guide " + text=[join [array names ::optics::guide_configuration] , ] configuration + " { + + variable guide_configuration + variable guide_configuration_columns + + if [ catch { + + foreach {compselection position} $guide_configuration($configuration) { + foreach el $compselection guide $guide_configuration_columns { + lappend to_config $guide + lappend to_config [set ::optics::${guide}_map($el)] + } + ::optics::guide -set feedback status BUSY + set msg [eval "drive $to_config"] + EApPosY $position + } + GuideConfig $configuration + } message ] { + ::optics::guide -set feedback status IDLE + if {$::errorCode=="NONE"} {return $message} + return -code error $message + } + ::optics::guide -set feedback status IDLE + } + ::optics::guide -addfb text status + ::optics::guide -set feedback status IDLE +} + +proc ::commands::isc_initialize {} { + ::commands::ic_initialize +} diff --git a/site_ansto/instrument/bilby/config/counter/counter.tcl b/site_ansto/instrument/bilby/config/counter/counter.tcl new file mode 100644 index 00000000..4f7e802b --- /dev/null +++ b/site_ansto/instrument/bilby/config/counter/counter.tcl @@ -0,0 +1,32 @@ +source $cfPath(counter)/counter_common_1.tcl + +## TODO Put all the counter macros in the counter namespace +namespace eval counter { + variable isc_numchannels + variable isc_monitor_address + variable isc_portlist + variable isc_beam_monitor_list + proc set_sobj_attributes {} { + } +} + +proc ::counter::isc_initialize {} { + if [catch { + variable isc_numchannels + variable isc_monitor_address + variable isc_portlist + + dict for {k v} $::MONITOR_HOSTPORT { + lappend monlist $k + lappend hostlist [dict get $v HOST] + lappend isc_portlist [dict get $v PORT] + } + variable isc_beam_monitor_list $monlist + set isc_monitor_address [lindex $hostlist 0] + set isc_numchannels [llength $isc_beam_monitor_list] + ::counter::ic_initialize + } message ] { + if {$::errorCode=="NONE"} {return $message} + return -code error "$message" + } +} diff --git a/site_ansto/instrument/bilby/config/hipadaba/hipadaba_configuration.tcl b/site_ansto/instrument/bilby/config/hipadaba/hipadaba_configuration.tcl new file mode 100644 index 00000000..3aaa4d83 --- /dev/null +++ b/site_ansto/instrument/bilby/config/hipadaba/hipadaba_configuration.tcl @@ -0,0 +1 @@ +source $cfPath(hipadaba)/hipadaba_configuration_common.tcl diff --git a/site_ansto/instrument/bilby/config/hmm/hmm_configuration.tcl b/site_ansto/instrument/bilby/config/hmm/hmm_configuration.tcl new file mode 100644 index 00000000..f13b11d2 --- /dev/null +++ b/site_ansto/instrument/bilby/config/hmm/hmm_configuration.tcl @@ -0,0 +1,70 @@ + +fileeval $cfPath(hmm)/hmm_configuration_common_1.tcl +set sim_mode [SplitReply [hmm_simulation]] + +proc ::histogram_memory::init_OAT_TABLE {} { + if [ catch { + # 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 192 + OAT_TABLE Y -setdata MAX_CHAN 192 + OAT_TABLE X -setdata BMIN -0.5 + OAT_TABLE X -setdata BMAX 191.5 + OAT_TABLE Y -setdata BMIN -0.5 + OAT_TABLE Y -setdata BMAX 191.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 + + OAT_TABLE -set X { 191.5 190.5 } NXC 192 Y { -0.5 0.5 } NYC 192 T { 0 20000 } NTC 1 + } 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 "oat_nxc_eff" + variable INST_NYC "oat_nyc_eff" + + if [ catch { + ::histogram_memory::init_hmm_objs + if {$::sim_mode == "true"} { + hmm configure oat_ntc_eff 1 + hmm configure $INST_NYC 127 + hmm configure $INST_NXC 127 + } + BAT_TABLE -init + CAT_TABLE -init + SAT_TABLE -init + OAT_TABLE -init + FAT_TABLE -init + ::histogram_memory::ic_initialize + + detector_active_height_mm [expr 5.08 * 192] + detector_active_width_mm [expr 5.08 * 192] + detector_active_height_mm lock + detector_active_width_mm lock + + # hmm configure FAT_SIMULATED_EVENT_Y0 $y_bb0 + # hmm configure FAT_SIMULATED_EVENT_Y1 $ybbmax + # hmm configure FAT_SIMULATED_EVENT_X0 $x_bb0 + # hmm configure FAT_SIMULATED_EVENT_X1 $xbbmax + ::histogram_memory::init_OAT_TABLE + ::histogram_memory::upload_config Filler_defaults + + set ::histogram_memory::histmem_axes(HOR) /instrument/detector/x_pixel_offset + set ::histogram_memory::histmem_axes(VER) /instrument/detector/y_pixel_offset + } message ] { + return -code error $message + } +} + +proc histmem {cmd args} { + eval "_histmem $cmd $args" +} +publish histmem user diff --git a/site_ansto/instrument/bilby/config/nexus/nxscripts.tcl b/site_ansto/instrument/bilby/config/nexus/nxscripts.tcl new file mode 100644 index 00000000..5f4166ab --- /dev/null +++ b/site_ansto/instrument/bilby/config/nexus/nxscripts.tcl @@ -0,0 +1,4 @@ +source $cfPath(nexus)/nxscripts_common_1.tcl +proc ::nexus::isc_initialize {} { + ::nexus::ic_initialize +} diff --git a/site_ansto/instrument/bilby/config/optics/README.TXT b/site_ansto/instrument/bilby/config/optics/README.TXT new file mode 100644 index 00000000..bd84ac14 --- /dev/null +++ b/site_ansto/instrument/bilby/config/optics/README.TXT @@ -0,0 +1 @@ +Optical Components: Neutron Guides, Apertures, Polariser, Focussing Lenses and Prisms diff --git a/site_ansto/instrument/bilby/config/optics/aperture_configuration.tcl b/site_ansto/instrument/bilby/config/optics/aperture_configuration.tcl new file mode 100644 index 00000000..d795ba10 --- /dev/null +++ b/site_ansto/instrument/bilby/config/optics/aperture_configuration.tcl @@ -0,0 +1,94 @@ +namespace eval optics { + array set AttRotLookupTable { + 0 { 0.0 1 } + 30 { 1.3 0.498782 } + 60 { 3.3 0.176433 } + 90 { 4.9 0.0761367 } + 120 { 6.4 0.0353985 } + 150 { 8.3 0.0137137 } + 180 { 9.6 0.00614167 } + 210 {11.2 0.00264554 } + 240 {13.1 0.000994504 } + 270 {15.0 0.000358897 } + 300 {18.0 7.2845e-05 } + 330 {25.0 1.67827e-06 } + } + + array set EApLookupTable { + 0 { 5 circ} + 30 {10 circ} + 60 {20 circ} + 90 {30 circ} + 120 {40 circ} + 150 {50 circ} + 180 {50 squ } + 210 {open open} + 240 {open open} + 270 {open open} + 300 {open open} + 330 {open open} + } +} + +proc ::optics::AttRotLookup {angle column tol} { + variable AttRotLookupTable + + set catch_status [ catch { + set foundit false + foreach vangle [array names AttRotLookupTable] { + if {$vangle >= [expr {$angle-$tol}] && $vangle <= [expr {$angle+$tol}]} { + set foundit true + break + } + } + if {$foundit == true} { + switch $column { + "plex" { set index 0 } + "attfactor" { set index 1 } + default { error "$column is unknown, allowed values are plex or attfactor" } + } + return [lindex $AttRotLookupTable($vangle) $index] + } else { + return -1 + } + } message ] + handle_exception $catch_status $message +} + +proc ::optics::EApLookUp {angle param tol} { + variable EApLookupTable + + set foundit false + if [ catch { + if {$param == "size"} { + set cgf [SplitReply [GuideConfig]] + if {[string first $cgf "g1 g2 g3 g4 g5 g6 g7 g8 g9 p1 p2 p3 p4 p5 p6 p7 p8 p9"] != -1} { + return 50 + } + } + switch $param { + "size" {set index 0} + "shape" {set index 1} + default { + error "ERROR: Invalid lookup parameter $param" + } + } + foreach vangle [array names EApLookupTable] { + if {$vangle >= [expr {$angle-$tol}] && $vangle <= [expr {$angle+$tol}]} { + set foundit true + break + } + } + if {$foundit == true} { + return [lindex $EApLookupTable($vangle) $index] + } else { + switch $param { + "size" {return 0} + "shape" {return "UNKNOWN"} + } + } + } message ] { + if {$::errorCode == "NONE"} {return $message} + return -code error "$message" + } +} diff --git a/site_ansto/instrument/bilby/config/optics/guide_configuration.tcl b/site_ansto/instrument/bilby/config/optics/guide_configuration.tcl new file mode 100644 index 00000000..a66f2b84 --- /dev/null +++ b/site_ansto/instrument/bilby/config/optics/guide_configuration.tcl @@ -0,0 +1,66 @@ +## +# @file +# A guide configuration table where each line describes the setup +# for a mode of operation. +# The table will have a corresponding interpretation list which provides +# commands to setup the instrument. + +namespace eval optics { +## +# @brief These arrays map the component identifiers (G, MT, etc) to the +# position index for each guide motor (c1, c2 ... c9) + array set c1_map {G 1 MT 2 P 3} + array set c2_map {MT 1 G 2 A 3} + array set c3_map {MT 1 G 2 A 3} + array set c4_map {MT 1 G 2 A 3} + array set c5_map {MT 1 G 2 A 3} + array set c6_map {MT 1 G 2 A 3} + array set c7_map {MT 1 G 2 A 3} + array set c8_map {MT 1 G 2 A 3} + array set c9_map {L 1 MT 2 G 3 A 4 LP 5} + +# The guide configuration table is indexed by a configuration +# identifier (ga, mt, lp, etc). Each row has two elements, +# 1. A list of components selected for each guide (MT A ... etc) +# 2. The entrance aperature position in mm +# Eg $guide_configuration(p2) returns the following list +# {{P G A A A A A A A } 6934} +array set guide_configuration { + ga {{MT A A A A A A A A } 675} + mt {{MT MT MT MT MT MT MT MT MT} 675} + lp {{MT MT MT MT MT MT MT MT LP} 675} + lens {{MT A A A A A A A L } 675} + p1 {{P A MT MT MT MT MT MT MT} 4621} + p1lp {{P A MT MT MT MT MT MT LP} 4621} + p1lens {{P A MT MT MT MT MT MT L } 4621} + g1 {{G A A A A A A A A } 4929} + p2 {{P G A A A A A A A } 6934} + g2 {{G G A A A A A A A } 6934} + p3 {{P G G A A A A A A } 8949} + g3 {{G G G A A A A A A } 8949} + p4 {{P G G G A A A A A } 10955} + g4 {{G G G G A A A A A } 10955} + p5 {{P G G G G A A A A } 12943} + g5 {{G G G G G A A A A } 12943} + p6 {{P G G G G G A A A } 14970} + g6 {{G G G G G G A A A } 14970} + p7 {{P G G G G G G A A } 16971} + g7 {{G G G G G G G A A } 16971} + p8 {{P G G G G G G G A } 18937} + g8 {{G G G G G G G G A } 18937} + p9 {{P G G G G G G G G } 19925} + g9 {{G G G G G G G G G } 19925} +} + +# This list maps the motor names to columns of the +# guide_configuration table. +set guide_configuration_columns { + c1 c2 c3 c4 c5 c6 c7 c8 c9 +} + +} + +namespace eval optics { + variable guide_configuration + variable guide_configuration_columns +} diff --git a/site_ansto/instrument/bilby/config/optics/optics.tcl b/site_ansto/instrument/bilby/config/optics/optics.tcl new file mode 100644 index 00000000..766cd383 --- /dev/null +++ b/site_ansto/instrument/bilby/config/optics/optics.tcl @@ -0,0 +1,2 @@ +fileeval $cfPath(optics)/guide_configuration.tcl +fileeval $cfPath(optics)/aperture_configuration.tcl diff --git a/site_ansto/instrument/bilby/config/scan/scan.tcl b/site_ansto/instrument/bilby/config/scan/scan.tcl new file mode 100644 index 00000000..dd396f62 --- /dev/null +++ b/site_ansto/instrument/bilby/config/scan/scan.tcl @@ -0,0 +1,6 @@ +source $cfPath(scan)/scan_common_1.tcl +proc ::scan::pre_hmm_scan_prepare {} {} + +proc ::scan::isc_initialize {} { + ::scan::ic_initialize +} diff --git a/site_ansto/instrument/bilby/config/source/source.tcl b/site_ansto/instrument/bilby/config/source/source.tcl new file mode 100644 index 00000000..730c4f55 --- /dev/null +++ b/site_ansto/instrument/bilby/config/source/source.tcl @@ -0,0 +1,6 @@ +source $cfPath(source)/source_common.tcl + +proc ::source::isc_initialize {} { + ::source::ic_initialize "cold" +} + diff --git a/site_ansto/instrument/bilby/hostport_config.tcl b/site_ansto/instrument/bilby/hostport_config.tcl new file mode 100644 index 00000000..96d879de --- /dev/null +++ b/site_ansto/instrument/bilby/hostport_config.tcl @@ -0,0 +1,48 @@ +# MOTOR HOST AND PORT +foreach {mc host port} { + MC1 mc1-bilby pmc1-bilby + MC2 mc2-bilby pmc2-bilby + MC3 mc3-bilby pmc3-bilby + MC4 mc4-bilby pmc4-bilby +} { + dict set MOTOR_HOSTPORT $mc HOST $host + dict set MOTOR_HOSTPORT $mc PORT $port +} + +# BEAM MONITOR HOST AND PORT +foreach {bm host port} { + MONITOR_1 das1-bilby 30000 + MONITOR_2 das1-bilby 30001 + MONITOR_3 das1-bilby 30002 +} { + dict set MONITOR_HOSTPORT $bm HOST $host + dict set MONITOR_HOSTPORT $bm PORT $port +} + +# HISTOGRAM SERVER HOST AND PORT +foreach {key host port} { + HMM das1-bilby.nbi.ansto.gov.au 8080 + HMSTAT das1-bilby.nbi.ansto.gov.au 8081 + ORDELA 137.157.202.71 4001 + NHQ200 ca1-bilby 4002 +} { + dict set HISTMEM_HOSTPORT $key HOST $host + dict set HISTMEM_HOSTPORT $key PORT $port +} + +# SPIN FLIPPER HOST AND PORT +foreach {key host port} { + ANSFR83B 137.157.202.71 4002 +} { + dict set ACGEN_HOSTPORT $key HOST $host + dict set ACGEN_HOSTPORT $key PORT $port +} + +# VELOCITY SELECTOR HOST AND PORT +foreach {key host port} { + NVS40 137.157.202.73 10000 + NVS43 137.157.202.74 10000 +} { + dict set VELSEL_HOSTPORT $key HOST $host + dict set VELSEL_HOSTPORT $key PORT $port +} diff --git a/site_ansto/instrument/bilby/hostport_config_test.tcl b/site_ansto/instrument/bilby/hostport_config_test.tcl new file mode 100644 index 00000000..fc6cae22 --- /dev/null +++ b/site_ansto/instrument/bilby/hostport_config_test.tcl @@ -0,0 +1,50 @@ +# Specify NONE for HOST and PORT if there is no fake device to talk to. + +# TEST MOTOR HOST AND PORT +foreach {key host port} { + MC1 localhost 63030 + MC2 localhost 63031 + MC3 localhost 63032 + MC4 localhost 63033 +} { + dict set MOTOR_HOSTPORT $key HOST $host + dict set MOTOR_HOSTPORT $key PORT $port +} + +# TEST BEAM MONITOR HOST AND PORT +foreach {key host port} { + MONITOR_1 localhost 30000 + MONITOR_2 localhost 30001 + MONITOR_3 localhost 30002 +} { + dict set MONITOR_HOSTPORT $key HOST $host + dict set MONITOR_HOSTPORT $key PORT $port +} + +# TEST HISTOGRAM SERVER HOST AND PORT +foreach {key host port} { + HMM das1-test.nbi.ansto.gov.au 8080 + HMSTAT das1-test.nbi.ansto.gov.au 8081 + ORDELA localhost 4001 + NHQ200 localhost 4002 +} { + dict set HISTMEM_HOSTPORT $key HOST $host + dict set HISTMEM_HOSTPORT $key PORT $port +} + +# SPIN FLIPPER HOST AND PORT +foreach {key host port} { + ANSFR83B localhost 64001 +} { + dict set ACGEN_HOSTPORT $key HOST $host + dict set ACGEN_HOSTPORT $key PORT $port +} + +# VELOCITY SELECTOR HOST AND PORT +foreach {key host port} { + NVS40 localhost 10000 + NVS43 localhost 10000 +} { + dict set VELSEL_HOSTPORT $key HOST $host + dict set VELSEL_HOSTPORT $key PORT $port +} diff --git a/site_ansto/instrument/bilby/runsics_def.py b/site_ansto/instrument/bilby/runsics_def.py new file mode 100644 index 00000000..45b2f839 --- /dev/null +++ b/site_ansto/instrument/bilby/runsics_def.py @@ -0,0 +1,3 @@ +inst_user = 'bilby_sics' +inst_name = 'bilby' +inst_config = 'bilby_configuration.tcl' diff --git a/site_ansto/instrument/config/hmm/hmm_configuration_common_1.tcl b/site_ansto/instrument/config/hmm/hmm_configuration_common_1.tcl index bd975ff8..113e24c1 100644 --- a/site_ansto/instrument/config/hmm/hmm_configuration_common_1.tcl +++ b/site_ansto/instrument/config/hmm/hmm_configuration_common_1.tcl @@ -67,19 +67,21 @@ namespace eval histogram_memory { # Frame source for each instrument if freq = 0, this can happen when automatically # setting frequencies from choppers. - array set default_frame_source_when_there_is_no_frame_signal { - echidna INTERNAL - koala INTERNAL - kowari EXTERNAL - pelican INTERNAL - platypus EXTERNAL - quokka INTERNAL - taipan INTERNAL - wombat INTERNAL - lyrebird INTERNAL - kookaburra INTERNAL - dingo INTERNAL - } + array set default_frame_source_when_there_is_no_frame_signal { + echidna INTERNAL + koala INTERNAL + kowari EXTERNAL + pelican INTERNAL + platypus EXTERNAL + quokka INTERNAL + taipan INTERNAL + wombat INTERNAL + lyrebird INTERNAL + kookaburra INTERNAL + dingo INTERNAL + bilby INTERNAL + emu INTERNAL + } array set default_frame_source_always_internal { echidna "true" @@ -93,6 +95,8 @@ namespace eval histogram_memory { lyrebird "false" kookaburra "false" dingo "false" + bilby "false" + emu "false" } ::utility::mkVar detector_active_height_mm Float user active_height true detector true true diff --git a/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl b/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl index 4662ab93..34b59969 100644 --- a/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl +++ b/site_ansto/instrument/config/nexus/nxscripts_common_1.tcl @@ -54,6 +54,8 @@ namespace eval nexus { "taipan" "simple" "kookaburra" "simple" "dingo" "simple" + "bilby" "simple" + "emu" "simple" } } namespace eval ::nexus::histmem {} @@ -120,7 +122,7 @@ proc ::nexus::datapath {} { # @param postfix This is the filename suffix, must be one of: nx.hdf, hdf, h5, nx5, xml proc newFileName {idNum postfix} { if [ catch { - array set inst_mnem {quokka QKK wombat WBT echidna ECH kowari KWR koala KOL taipan TPN platypus PLP pelican PLN lyrebird LBD kookaburra KKB dingo DNG} + array set inst_mnem {quokka QKK wombat WBT echidna ECH kowari KWR koala KOL taipan TPN platypus PLP pelican PLN lyrebird LBD kookaburra KKB dingo DNG bilby BBY emu EMU} # set prefix [SplitReply [sicsdataprefix]] set date_time_arr [split [sicstime] " "] set isodate [lindex $date_time_arr 0] diff --git a/site_ansto/instrument/deploySICS.sh b/site_ansto/instrument/deploySICS.sh index 1d719fd1..8e528cba 100755 --- a/site_ansto/instrument/deploySICS.sh +++ b/site_ansto/instrument/deploySICS.sh @@ -152,6 +152,14 @@ dingo|dingo) INSTRUMENT=dingo DESTHOST=${2:-ics1-dingo.nbi.ansto.gov.au} INSTSRC=$SRCDIR/dingo;; +bilby|bilby) +INSTRUMENT=bilby +DESTHOST=${2:-ics1-bilby.nbi.ansto.gov.au} +INSTSRC=$SRCDIR/bilby;; +emu|emu) +INSTRUMENT=emu +DESTHOST=${2:-ics1-emu.nbi.ansto.gov.au} +INSTSRC=$SRCDIR/emu;; esac INSTCFDIR=$INSTSRC/config diff --git a/site_ansto/instrument/util/utility.tcl b/site_ansto/instrument/util/utility.tcl index 1722bc99..556e872a 100644 --- a/site_ansto/instrument/util/utility.tcl +++ b/site_ansto/instrument/util/utility.tcl @@ -197,7 +197,7 @@ sicslist setatt $setpoint_script mutable true ## TODO put all the utility macros in the utility namespace namespace eval utility { - variable instrument_names [list echidna wombat kowari quokka platypus pelican taipan lyrebird kookaburra] + variable instrument_names [list bilby dingo echidna emu kookaburra kowari lyrebird pelican platypus quokka taipan wombat] variable sics_port set base_port 60000 set currbase $base_port