return dbm_sweep() finally: # final timestamp sys.stdout.write(time.strftime('# %Y%m%d %H:%M:%S HST\n', time.localtime())) sys.stdout.flush() agilent.set_dbm(agilent.safe_dbm) photonics.set_attenuation(photonics.max_att) if photonics else None drama.Exit('MAIN done') # MAIN try: logging.info('drama.init...') drama.init(taskname, actions=[MAIN]) drama.blind_obey(taskname, "MAIN") logging.info('drama.run...') drama.run() finally: logging.info('drama.stop...') drama.stop() logging.info('done.')
# the rest of this needs to be DRAMA to be able to talk to IFTASK. def MAIN(msg): try: adjust = [1, 2][int(args.level_only)] if if_setup(adjust, bws[0], ifs[0]): return main_loop() finally: # final timestamp sys.stdout.write( time.strftime('# %Y%m%d %H:%M:%S HST\n', time.localtime())) sys.stdout.flush() agilent.set_dbm(agilent.safe_dbm) drama.Exit('MAIN done') # MAIN try: logging.info('drama.init...') drama.init(taskname, tidefile=datapath + 'namakanui.tide', buffers=[64000, 8000, 8000, 2000], actions=[MAIN]) drama.blind_obey(taskname, "MAIN") logging.info('drama.run...') drama.run() finally: logging.info('drama.stop...') drama.stop() logging.info('done.')
dbm = dbm_max elif dbm < -20.0: dbm = -20.0 if dbm == old_dbm: # stuck at the limit, so it'll have to do break log.warning( 'band %d bad pll_if_power %.2f; retuning at %.2f dBm...', band, pll_if_power, dbm) agilent.set_dbm(dbm) time.sleep(0.05) log.info('band %d tuned to LO %g GHz, pll_if_power %.2f at %.2f dBm.', band, lo_ghz, pll_if_power, dbm) # CART_TUNE try: log.info('%s starting drama.', taskname) drama.init(taskname, tidefile=datapath + 'namakanui.tide', buffers=[64000, 8000, 8000, 2000], actions=[ UPDATE, INITIALISE, SET_SG_DBM, SET_SG_HZ, SET_SG_OUT, SET_ATT, SET_BAND, LOAD_HOME, LOAD_MOVE, CART_POWER, CART_TUNE ]) log.info('%s entering main loop.', taskname) drama.run() finally: drama.stop() log.info('%s done.', taskname)
vstr = '' if voltage is not None: vstr += ', %g V' % (voltage) if lock_only: vstr += ', LOCK_ONLY' log.info('tuning to LO %g GHz%s...', lo_ghz, vstr) cart.tune(lo_ghz, voltage, lock_only=lock_only) log.info('tuned.') def SEGFAULT(msg): '''Generate a segfault to test coredumps.''' log.fatal('SEGFAULT') drama.segfault() try: log.info('%s (%d) drama.init', taskname, pid) drama.init(taskname, buffers=[64000, 8000, 8000, 2000], actions=[UPDATE, INITIALISE, POWER, TUNE, SEGFAULT]) log.info('%s (%d) drama.run', taskname, pid) drama.run() except: log.exception('%s (%d) fatal exception', taskname, pid) sys.exit(1) finally: log.info('%s (%d) drama.stop', taskname, pid) drama.stop() log.info('%s (%d) done.', taskname, pid)
msg, f'obey({NAMAKANUI_TASK},CART_TUNE,{g_band},{lo_freq},{voltage})') g_state['LO_FREQUENCY'] = lo_freq g_state['LOCKED'] = 'YES' drama.set_param('LOCK_STATUS', numpy.int32(1)) # TODO: remove, we don't have a cold load t_cold = interpolate_t_cold(lo_freq) or g_state['TEMP_LOAD2'] g_state['TEMP_LOAD2'] = t_cold # sequence_frame def sequence_batch(batch): ''' Callback before publishing a list of frames. NOP for us. ''' pass try: drama.init(taskname, actions=[]) drama.rts.init(initialise, configure, setup_sequence, sequence, sequence_frame, sequence_batch) # publish initial parameters drama.set_param('STATE', [{'NUMBER': numpy.int32(0), **g_state}]) log.info('entering main loop.') drama.run() finally: drama.stop() log.info('done.')