# %%
from gwpy.timeseries import TimeSeries, TimeSeriesDict
import numpy as np
import sys
Tp = 0.031
input_power_channel = 'H1:IMC-IM4_TRANS_NSUM_OUT_DQ'

# %%
t0 = 1432657515

grd_state_channel = 'H1:GRD-ISC_LOCK_STATE_N'
isc_grd_state = TimeSeries.fetch(grd_state_channel,start=t0, end=t0+1,
                                 )
isc_grd_state = int(np.average(isc_grd_state).value)
if isc_grd_state == 16:
    print(f"\n{t0}: FIND_IR state")
else:
    sys.exit(1)

trx_channels = ['H1:ASC-X_TR_A_NSUM_OUT_DQ', 'H1:ASC-X_TR_B_NSUM_OUT_DQ']
trx_series = TimeSeriesDict.fetch(trx_channels,
                                  start=t0, end=t0+1)
trx_powers = [ np.average(trx_series[channel].value) for channel in trx_channels]
trx_power_find_ir = np.average(trx_powers)
print(f"\tTRX Power: {trx_power_find_ir:.1f} W")

input_power = TimeSeries.fetch(input_power_channel,start=t0, end=t0+1,
                                 )
input_power_find_ir = int(np.average(input_power).value)
print(f"\tInput Power: {input_power_find_ir:.3f} W")

# %%
t1 = 1432658239

grd_state_channel = 'H1:GRD-ISC_LOCK_STATE_N'
isc_grd_state = TimeSeries.fetch(grd_state_channel,start=t1, end=t1+1,
                                 )
isc_grd_state = int(np.average(isc_grd_state).value)
if isc_grd_state == 429:
    print(f"{t1}: PREP_ASC_FOR_FULL_IFO state")
else:
    print(f"{t1} is not a FULL_IFO state time")
    sys.exit(1)

trx_channels = ['H1:ASC-X_TR_A_NSUM_OUT_DQ', 'H1:ASC-X_TR_B_NSUM_OUT_DQ']
trx_series = TimeSeriesDict.fetch(trx_channels,
                                  start=t1, end=t1+1)
trx_powers = [ np.average(trx_series[channel].value) for channel in trx_channels]
trx_power_full_ifo = np.average(trx_powers)
print(f"\tTRX Power: {trx_power_full_ifo:.1f} W")

input_power = TimeSeries.fetch(input_power_channel,start=t1, end=t1+1,
                                 )
input_power_full_ifo = int(np.average(input_power).value)
print(f"\tInput Power: {input_power_full_ifo:.3f} W")

# %%
prg_estimate = Tp * trx_power_full_ifo / trx_power_find_ir * input_power_find_ir/input_power_full_ifo
print(f"PRG Estimate: {prg_estimate:.1f}\n")