"""
This python script runs AC sweep simulations for the design of the inner and outer loops of the LLC converter.
"""

#%%
import os
import numpy as np
from aesim.simba import ProjectRepository, Status
import pandas as pd

#%%###########
# Load project
##############
print('Load project')

script_folder = os.path.realpath(os.path.dirname(__file__))
file_path = os.path.join(script_folder, "LLC_Resonant_Converter_Tuning.jsimba")
project = ProjectRepository(file_path)

# %% ###########
# 1. Inner Loop
################
print ("1. Get AC sweep data for the inner Loop design")

# Simulation
LLC_inner_loop = project.GetDesignByName('1. LLC - AC Sweep_Inner Loop')
acsweep1 =  project.GetACSweepByName('AC Sweep Test Bench 1')
job1 = acsweep1.NewJob()
status1 = job1.Run()

# Get data
frequency_sim1 = np.array(job1.FrequencyPoints)
mag_sim1 = job1.GetSignalByName('CP1 - Out Magnitude').DataPoints
phase_sim1 = np.array(job1.GetSignalByName('CP1 - Out Angle').DataPoints)
phase_sim1 = list(map(lambda p : p if p<65 else p-360, phase_sim1)) #modulo 2.pi

# Write data to txt file
df = pd.DataFrame({'Frequency': frequency_sim1, 'Amplitude': mag_sim1, 'Phase': phase_sim1 })
SweepInner_txt = "SweepInner.txt"
df.to_csv(SweepInner_txt, sep='\t', index=False)

print("Success: " + str(status1==Status.OK))
print("Runtime: " + "{:.3f}".format(job1.RunTime) + "s")
print(f"Data has been exported to {SweepInner_txt}")

# %% ##########
# 2. Outer Loop
###############
print ("2. Get AC sweep data for the outer inner Loop design")

# Simulation
acsweep2 =  project.GetACSweepByName('AC Sweep Test Bench 2')
job2 = acsweep2.NewJob()
status2 = job2.Run()

# Get data
frequency_sim2 = np.array(job2.FrequencyPoints)
mag_sim2 = job2.GetSignalByName('Rout - Voltage Magnitude').DataPoints
phase_sim2 = np.array(job2.GetSignalByName('Rout - Voltage Angle').DataPoints)

# Write data to txt file
df2 = pd.DataFrame({'Frequency': frequency_sim2, 'Amplitude': mag_sim2, 'Phase': phase_sim2 })
SweepOuter_txt = "SweepOuter.txt"
df2.to_csv(SweepOuter_txt, sep='\t', index=False)

print("Success: " + str(status2 == Status.OK))
print("Runtime: " + "{:.3f}".format(job2.RunTime) + "s")
print(f"Data has been exported to {SweepOuter_txt}")
