Example #1
0
            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.')
    





Example #2
0
# 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)
Example #4
0
    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)
Example #5
0
            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.')