import numpy as np
import time
import sys
import datetime


import ezca as ez
ezca = ez.Ezca()

def main(dB, sign):
    # dB is number of dB to change for increase or decrease
    chanlist = [
                'LSC-POP_A_RF9_I',
                'LSC-POP_A_RF9_Q',
                'LSC-REFL_A_RF9_I',
                'LSC-REFL_A_RF9_Q',
                'LSC-POPAIR_A_RF9_I',
                'LSC-POPAIR_A_RF9_Q',
                'LSC-REFLAIR_A_RF9_I',
                'LSC-REFLAIR_A_RF9_Q',
                'ASC-REFL_A_RF9_I1',
                'ASC-REFL_A_RF9_I2',
                'ASC-REFL_A_RF9_I3',
                'ASC-REFL_A_RF9_I4',
                'ASC-REFL_A_RF9_Q1',
                'ASC-REFL_A_RF9_Q2',
                'ASC-REFL_A_RF9_Q3',
                'ASC-REFL_A_RF9_Q4',
                'ASC-REFL_B_RF9_I1',
                'ASC-REFL_B_RF9_I2',
                'ASC-REFL_B_RF9_I3',
                'ASC-REFL_B_RF9_I4',
                'ASC-REFL_B_RF9_Q1',
                'ASC-REFL_B_RF9_Q2',
                'ASC-REFL_B_RF9_Q3',
                'ASC-REFL_B_RF9_Q4',
                'ASC-AS_A_RF36_I1',
                'ASC-AS_A_RF36_I2',
                'ASC-AS_A_RF36_I3',
                'ASC-AS_A_RF36_I4',
                'ASC-AS_A_RF36_Q1',
                'ASC-AS_A_RF36_Q2',
                'ASC-AS_A_RF36_Q3',
                'ASC-AS_A_RF36_Q4',
                'ASC-AS_B_RF36_I1',
                'ASC-AS_B_RF36_I2',
                'ASC-AS_B_RF36_I3',
                'ASC-AS_B_RF36_I4',
                'ASC-AS_B_RF36_Q1',
                'ASC-AS_B_RF36_Q2',
                'ASC-AS_B_RF36_Q3',
                'ASC-AS_B_RF36_Q4',
                ]

    chanlist2 = [
                'LSC-POPAIR_B_RF18_I',
                'LSC-POPAIR_B_RF18_Q',
                ]

    dB = float(dB)

    '''if sys.argv[1][0] == '+':
        sign = 1
    elif sys.argv[1][0] == '-':
        sign = -1
    else:
        raise ValueError
    dB = float(sys.argv[1][1:])'''

    
    ezca['LSC-MOD_RF9_AM_RFSET'] += sign*dB
    time.sleep(0.1)

    for chan in chanlist:
        ezca[chan+'_TRAMP'] = 3
        ezca[chan+'_GAIN'] *= 10**(-1*sign*dB/20.)

    for chan in chanlist2:
        ezca[chan+'_TRAMP'] = 3
        ezca[chan+'_GAIN'] *= 10**(-1*sign*2*dB/20.)

    ezca['LSC-REFL_SERVO_IN1GAIN'] += -sign*dB





if __name__ == '__main__':
    startVal = ezca['LSC-MOD_RF9_AM_RFSET']
    
    if startVal == 23.4:
        # start by reducing
        print str(datetime.datetime.now()) + ' RF9 started at ' + str(startVal) + '. Reducing by 6dB'
        for ii in range(6):
            main(1, -1)
            print str(datetime.datetime.now()) + ' ' + str(ezca['LSC-MOD_RF9_AM_RFSET']) + 'dB'
            time.sleep(3.5)
        print str(datetime.datetime.now()) + ' starting a 10 min sleep'
        time.sleep(600)
    else:
        print str(datetime.datetime.now()) + ' RF9 started at ' + str(startVal) + '.' 

    # now increase, then decrease, repeat
    for numIter in range(5):
        print str(datetime.datetime.now()) + ' starting iteration ' + str(numIter) + ' of 5.' 
        for ii in range(6):
            main(1, 1)
            print str(datetime.datetime.now()) + ' ' + str(ezca['LSC-MOD_RF9_AM_RFSET']) + 'dB'
            time.sleep(3.5)
        print str(datetime.datetime.now()) + ' starting a 10 min sleep'
        time.sleep(600)
        for ii in range(6):
            main(1, -1)
            print str(datetime.datetime.now()) + ' ' + str(ezca['LSC-MOD_RF9_AM_RFSET']) + 'dB'
            time.sleep(3)
        print str(datetime.datetime.now()) + ' starting a 10 min sleep'
        time.sleep(600)

    if startVal == 23.4:
        # Put it back by increasing
        for ii in range(6): 
            main(1, 1)
            print str(datetime.datetime.now()) + ' ' + str(ezca['LSC-MOD_RF9_AM_RFSET']) + 'dB'
            time.sleep(3.5)
        print str(datetime.datetime.now()) + ' starting a 10 min sleep'
        time.sleep(600)

















