#!/usr/bin/env python3

# Script switch BS M2 coils to required state. 
# Output matrix is adjusted to null control on every coil is series

import time

######################################
path = '/opt/rtcds/userapps/release/isc/h1/scripts/sus/'

# Switch to this state
actuatorState = 2

def m2_switch_fast():
    # Set ramping time
    eul2osemTramp = 8
    analogExtraSleep = 7  # how long to wait after matrix is loaded before doing analog switch

    ezca['SUS-BS_M2_EUL2OSEM_TRAMP'] = eul2osemTramp

    # Load configuration with no control on UL
    ezca.burtwb(path+'bs_m2_out_ul.snap')
    time.sleep(3)
    ezca['SUS-BS_M2_EUL2OSEM_LOAD_MATRIX'] = 1
    time.sleep(eul2osemTramp + analogExtraSleep)


    # Switch UL state
    gain_ul = ezca['SUS-BS_M2_COILOUTF_UL_GAIN']
    ezca['SUS-BS_M2_COILOUTF_UL_RSET'] = 2
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_UL_GAIN'] = 0
    time.sleep(3)
    ezca['SUS-BS_BIO_M2_UL_STATEREQ'] = 1
    time.sleep(1)
    ezca['SUS-BS_BIO_M2_UL_STATEREQ'] = actuatorState
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_UL_GAIN'] = gain_ul

    time.sleep(3)



    # Load configuration with no control on LL
    ezca.burtwb(path+'bs_m2_out_ll.snap')
    time.sleep(1)
    ezca['SUS-BS_M2_EUL2OSEM_LOAD_MATRIX'] = 1
    time.sleep(eul2osemTramp + analogExtraSleep)

    # Switch LL state
    gain_ll = ezca['SUS-BS_M2_COILOUTF_LL_GAIN']
    ezca['SUS-BS_M2_COILOUTF_LL_RSET'] = 2
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_LL_GAIN'] = 0
    time.sleep(3)
    ezca['SUS-BS_BIO_M2_LL_STATEREQ'] = 1
    time.sleep(1)
    ezca['SUS-BS_BIO_M2_LL_STATEREQ'] = actuatorState
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_LL_GAIN'] = gain_ll

    time.sleep(3)



    # Load configuration with no control on UR
    ezca.burtwb(path+'bs_m2_out_ur.snap')
    time.sleep(1)
    ezca['SUS-BS_M2_EUL2OSEM_LOAD_MATRIX'] = 1
    time.sleep(eul2osemTramp + analogExtraSleep)

    # Switch UR state
    gain_ur = ezca['SUS-BS_M2_COILOUTF_UR_GAIN']
    ezca['SUS-BS_M2_COILOUTF_UR_RSET'] = 2
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_UR_GAIN'] = 0
    time.sleep(3)
    ezca['SUS-BS_BIO_M2_UR_STATEREQ'] = 1
    time.sleep(1)
    ezca['SUS-BS_BIO_M2_UR_STATEREQ'] = actuatorState
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_UR_GAIN'] = gain_ur

    time.sleep(3)



    # Load configuration with no control on LR
    ezca.burtwb(path+'bs_m2_out_lr.snap')
    time.sleep(1)
    ezca['SUS-BS_M2_EUL2OSEM_LOAD_MATRIX'] = 1
    time.sleep(eul2osemTramp + analogExtraSleep)

    # Switch LR state
    gain_lr = ezca['SUS-BS_M2_COILOUTF_LR_GAIN']
    ezca['SUS-BS_M2_COILOUTF_LR_RSET'] = 2
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_LR_GAIN'] = 0
    time.sleep(3)
    ezca['SUS-BS_BIO_M2_LR_STATEREQ'] = 1
    time.sleep(1)
    ezca['SUS-BS_BIO_M2_LR_STATEREQ'] = actuatorState
    time.sleep(1)
    ezca['SUS-BS_M2_COILOUTF_LR_GAIN'] = gain_lr

    time.sleep(3)

    # Back to normal
    ezca.burtwb(path+'bs_m2_out_normal.snap')
    time.sleep(1)
    ezca['SUS-BS_M2_EUL2OSEM_LOAD_MATRIX'] = 1
    time.sleep(eul2osemTramp)

######################################

if __name__ == '__main__':

    #import __builtin__

    from ezca import Ezca

    ezca = Ezca()

    m2_switch_fast()
