diff --git a/dataprocessing/plotdpsim.py b/dataprocessing/plotdpsim.py deleted file mode 100644 index 759b55e375c815189fea98524200b425a7eadeeb..0000000000000000000000000000000000000000 --- a/dataprocessing/plotdpsim.py +++ /dev/null @@ -1,440 +0,0 @@ -from .readtools import * -from .plottools import * -from .calc import * -import matplotlib -import matplotlib.pyplot as plt -from scipy.interpolate import interp1d -matplotlib.rcParams.update({'font.size': 8}) - -def plot_dpsim_abs_diff(filename1, label1, node1, filename2, label2, node2): - ts_dpsim1 = read_timeseries_DPsim(filename1) - ts_dpsim2 = read_timeseries_DPsim(filename2) - - ts_dpsim1_length = len(ts_dpsim1) - im_offset1 = int(ts_dpsim1_length / 2) - if im_offset1 <= node1 or node1 < 0: - print('Node 1 not available') - exit() - - ts_dpsim2_length = len(ts_dpsim2) - im_offset2 = int(ts_dpsim2_length / 2) - if im_offset2 <= node1 or node1 < 0: - print('Node 2 not available') - exit() - - # this assumes same timestep for both simulations - ts_abs1 = complex_abs('node ' + str(node1) + 'abs', ts_dpsim1[node1], ts_dpsim1[node1 + im_offset1]) - ts_abs1 = scale_ts(ts_abs1.name, ts_abs1, 0.001) - ts_abs1.label = label1 - ts_abs2 = complex_abs('node ' + str(node2) + 'abs', ts_dpsim2[node1], ts_dpsim2[node1 + im_offset2]) - ts_abs2 = scale_ts(ts_abs2.name, ts_abs2, 0.001) - ts_abs2.label = label2 - ts_diff = diff('diff', ts_abs1, ts_abs2) - ts_diff.label = 'difference' - - figure_id = 1 - #plt.figure(figure_id) - plt.figure(figure_id, figsize=(12 / 2.54, 6 / 2.54), facecolor='w', edgecolor='k') - #plot_single_ts(figure_id, ts_abs1) - #plot_single_ts(figure_id, ts_abs2) - plot_single_ts(figure_id, ts_diff) - plt.xlabel('Time [s]') - plt.ylabel('Voltage [kV]') - plt.grid(True) - plt.tight_layout() - plt.show() - -def plot_dpsim_abs(filename1, label1, node1, filename2, label2, node2): - ts_dpsim1 = read_timeseries_DPsim(filename1) - ts_dpsim2 = read_timeseries_DPsim(filename2) - - ts_dpsim1_length = len(ts_dpsim1) - im_offset1 = int(ts_dpsim1_length / 2) - if im_offset1 <= node1 or node1 < 0: - print('Node 1 not available') - exit() - - ts_dpsim2_length = len(ts_dpsim2) - im_offset2 = int(ts_dpsim2_length / 2) - if im_offset2 <= node1 or node1 < 0: - print('Node 2 not available') - exit() - - # this assumes same timestep for both simulations - ts_abs1 = complex_abs('node ' + str(node1) + 'abs', ts_dpsim1[node1], ts_dpsim1[node1 + im_offset1]) - ts_abs1 = scale_ts(ts_abs1.name, ts_abs1, 0.001) - ts_abs1.label = label1 - ts_abs2 = complex_abs('node ' + str(node2) + 'abs', ts_dpsim2[node1], ts_dpsim2[node1 + im_offset2]) - ts_abs2 = scale_ts(ts_abs2.name, ts_abs2, 0.001) - ts_abs2.label = label2 - - figure_id = 1 - # plt.figure(figure_id) - plt.figure(figure_id, figsize=(12 / 2.54, 6 / 2.54), facecolor='w', edgecolor='k') - plot_single_ts(figure_id, ts_abs1) - plot_single_ts(figure_id, ts_abs2) - plt.xlabel('Time [s]') - plt.ylabel('Voltage [kV]') - plt.grid(True) - plt.tight_layout() - plt.show() - - -def plot_dpsim_emt_abs(filenameDP, nodeDP, filenameEMT, nodeEMT): - ts_dpsimDP = read_timeseries_DPsim(filenameDP) - ts_dpsimEMT = read_timeseries_DPsim(filenameEMT) - - ts_dpsimDP_length = len(ts_dpsimDP) - im_offsetDP = int(ts_dpsimDP_length / 2) - if im_offsetDP <= nodeDP or nodeDP < 0: - print('Node DP not available') - exit() - - ts_dpsimEMT_length = len(ts_dpsimEMT) - if ts_dpsimEMT_length <= nodeEMT or nodeEMT < 0: - print('Node EMT not available') - exit() - - ts_absDP = complex_abs('node ' + str(nodeDP) + 'abs', ts_dpsimDP[nodeDP], ts_dpsimDP[nodeDP + im_offsetDP]) - ts_absDP = scale_ts(ts_absDP.name, ts_absDP, 0.001) - ts_absDP.label = 'DP abs' - - ts_shiftDP = dyn_phasor_shift_to_emt('node ' + str(nodeDP) + 'shift', ts_dpsimDP[nodeDP], ts_dpsimDP[nodeDP + im_offsetDP], 50) - ts_shiftDP = scale_ts(ts_shiftDP.name, ts_shiftDP, 0.001) - ts_shiftDP.label = 'DP shift' - - ts_EMT = TimeSeries('node ' + str(nodeEMT), ts_dpsimEMT[nodeEMT].time, ts_dpsimEMT[nodeEMT].values) - ts_EMT = scale_ts(ts_EMT.name, ts_EMT, 0.001) - ts_EMT.label = 'EMT' - - figure_id = 1 - # plt.figure(figure_id) - plt.figure(figure_id, figsize=(12 / 2.54, 6 / 2.54), facecolor='w', edgecolor='k') - plot_timeseries(figure_id, ts_EMT) - plot_timeseries(figure_id, ts_absDP) - plot_timeseries(figure_id, ts_shiftDP) - plt.xlabel('Time [s]') - plt.ylabel('Voltage [kV]') - plt.grid(True) - plt.tight_layout() - plt.show() - -def plot_dpsim_abs_single(filename, node): - ts_dpsim = read_timeseries_DPsim(filename) - - ts_dpsim_length = len(ts_dpsim) - print('DPsim results file length:') - print(ts_dpsim_length) - for result in ts_dpsim: - print(result.name) - - im_offset = int(ts_dpsim_length / 2) - if im_offset <= node or node < 0: - print('Node 1 not available') - exit() - - abs1 = complex_abs('node ' + str(node) + 'abs', ts_dpsim[node], ts_dpsim[node + im_offset]) - abs1.label = 'absolute' - - figure_id = 1 - plt.figure(figure_id) - plot_single_ts(figure_id, abs1) - plt.xlabel('Time [s]') - plt.ylabel('Voltage [V]') - plt.grid(True) - plt.show() - - -def plotNodeVoltageInterpDpRef(filenameRef, filenameDP, node): - node = node - 1 - dfRef = pd.read_csv(filenameRef, header=None) - dfDP = pd.read_csv(filenameDP, header=None) - - if (dfRef.shape[1] - 1) < node or node < 0: - print('Node not available') - exit() - - if (dfDP.shape[1] - 1) / 2 < node or node < 0: - print('Node not available') - exit() - - # Ref - timeRef = np.array(dfRef.ix[:, 0]) - voltageRef = np.array(dfRef.ix[:, node + 1]) - - # DP interpolated - timeDP = np.array(dfDP.ix[:, 0]) - voltageReDP = np.array(dfDP.ix[:, node + 1]) - voltageImDP = np.array(dfDP.ix[:, int((dfDP.shape[1] - 1) / 2 + node + 1)]) - - interpTime = np.arange(dfDP.ix[0, 0], dfDP.ix[dfDP.shape[0] - 1, 0], 0.00005) - fVoltageRe = interp1d(timeDP, voltageReDP) - fVoltageIm = interp1d(timeDP, voltageImDP) - interpVoltageRe = fVoltageRe(interpTime) - interpVoltageIm = fVoltageIm(interpTime) - - voltageShiftDPInterp = interpVoltageRe * np.cos(2 * np.pi * 50 * interpTime) - interpVoltageIm * np.sin( - 2 * np.pi * 50 * interpTime) - voltageAbsDP = np.sqrt(voltageReDP ** 2 + voltageImDP ** 2) - - fig, ax1 = plt.subplots() - ax1.plot(timeRef, voltageRef, 'm:', label='Ref') - ax1.plot(interpTime, voltageShiftDPInterp, 'b--', label='DP interp') - ax1.plot(timeDP, voltageAbsDP, 'r-', label='DP abs') - - # Now add the legend with some customizations. - legend = ax1.legend(loc='lower right', shadow=True) - - # The frame is matplotlib.patches.Rectangle instance surrounding the legend. - frame = legend.get_frame() - frame.set_facecolor('0.90') - - ax1.set_xlabel('time [s]') - ax1.set_ylabel('mag [V]') - ax1.grid(True) - plt.show() - - -def plotNodeVoltageDpEmtRef(filenameRef, filenameDP, filenameEMT, node): - node = node - 1 - dfRef = pd.read_csv(filenameRef, header=None) - dfEMT = pd.read_csv(filenameEMT, header=None) - dfDP = pd.read_csv(filenameDP, header=None) - - if (dfRef.shape[1] - 1) < node or node < 0: - print('Node not available') - exit() - - if (dfEMT.shape[1] - 1) < node or node < 0: - print('Node not available') - exit() - - if (dfDP.shape[1] - 1) / 2 < node or node < 0: - print('Node not available') - exit() - - # Ref - timeRef = np.array(dfRef.ix[:, 0]) - voltageRef = np.array(dfRef.ix[:, node + 1]) - - # EMT - timeEMT = np.array(dfEMT.ix[:, 0]) - voltageEMT = np.array(dfEMT.ix[:, node + 1]) - - # DP - timeDP = np.array(dfDP.ix[:, 0]) - voltageReDP = np.array(dfDP.ix[:, node + 1]) - voltageImDP = np.array(dfDP.ix[:, int((dfDP.shape[1] - 1) / 2 + node + 1)]) - voltageAbsDP = np.sqrt(voltageReDP ** 2 + voltageImDP ** 2) - voltageShiftDP = voltageReDP * np.cos(2 * np.pi * 50 * timeDP) - voltageImDP * np.sin(2 * np.pi * 50 * timeDP) - - fig, ax1 = plt.subplots() - ax1.plot(timeRef, voltageRef, 'm:', label='Ref') - ax1.plot(timeEMT, voltageEMT, 'g--', label='EMT') - ax1.plot(timeDP, voltageShiftDP, 'b--', label='DP shift') - ax1.plot(timeDP, voltageAbsDP, 'r-', label='DP abs') - - # Now add the legend with some customizations. - legend = ax1.legend(loc='lower right', shadow=True) - - # The frame is matplotlib.patches.Rectangle instance surrounding the legend. - frame = legend.get_frame() - frame.set_facecolor('0.90') - - ax1.set_xlabel('time [s]') - ax1.set_ylabel('mag [V]') - ax1.grid(True) - plt.show() - - -def plotNodeVoltageDpEmt(filenameDP, filenameEMT, node): - node = node - 1 - dfEMT = pd.read_csv(filenameEMT, header=None) - dfDP = pd.read_csv(filenameDP, header=None) - - if (dfEMT.shape[1] - 1) < node or node < 0: - print('Node not available') - exit() - - if (dfDP.shape[1] - 1) / 2 < node or node < 0: - print('Node not available') - exit() - - # EMT - timeEMT = np.array(dfEMT.ix[:, 0]) - voltageEMT = np.array(dfEMT.ix[:, node + 1]) - - # DP - timeDP = np.array(dfDP.ix[:, 0]) - voltageReDP = np.array(dfDP.ix[:, node + 1]) - voltageImDP = np.array(dfDP.ix[:, int((dfDP.shape[1] - 1) / 2 + node + 1)]) - voltageAbsDP = np.sqrt(voltageReDP ** 2 + voltageImDP ** 2) - voltageShiftDP = voltageReDP * np.cos(2 * np.pi * 50 * timeDP) - voltageImDP * np.sin(2 * np.pi * 50 * timeDP) - - fig, ax1 = plt.subplots() - ax1.plot(timeEMT, voltageEMT, 'g--', label='EMT') - ax1.plot(timeDP, voltageShiftDP, 'b--', label='DP shift') - ax1.plot(timeDP, voltageAbsDP, 'r-', label='DP abs') - - # Now add the legend with some customizations. - legend = ax1.legend(loc='lower right', shadow=True) - - # The frame is matplotlib.patches.Rectangle instance surrounding the legend. - frame = legend.get_frame() - frame.set_facecolor('0.90') - - ax1.set_xlabel('time [s]') - ax1.set_ylabel('mag [V]') - ax1.grid(True) - plt.show() - - -def plotEmtNodeResults(filename, node): - node = node - 1 - df = pd.read_csv(filename, header=None) - print(df.shape) - - if (df.shape[1] - 1) < node or node < 0: - print('Node not available') - exit() - - time = np.array(df.ix[:, 0]) - voltage = np.array(df.ix[:, node + 1]) - - fig, ax1 = plt.subplots() - ax1.plot(time, voltage, 'b-') - # plt.yticks(np.arange(-10, 10, 1.0)) - ax1.set_xlabel('time [s]') - ax1.set_ylabel('mag [V] or [A]') - ax1.grid(True) - plt.show() - - -def plotNodeResults(filename, node): - node = node - 1 - df = pd.read_csv(filename, header=None) - print(df.shape) - - if (df.shape[1] - 1) / 2 < node or node < 0: - print('Node not available') - exit() - - time = np.array(df.ix[:, 0]) - voltageRe = np.array(df.ix[:, node + 1]) - voltageIm = np.array(df.ix[:, int((df.shape[1] - 1) / 2 + node + 1)]) - - voltage = np.sqrt(voltageRe ** 2 + voltageIm ** 2) - voltageEmt = voltageRe * np.cos(2 * np.pi * 50 * time) - voltageIm * np.sin(2 * np.pi * 50 * time) - fig, ax1 = plt.subplots() - ax1.plot(time, voltageEmt, 'b-', time, voltage, 'r-') - # plt.yticks(np.arange(-10, 10, 1.0)) - ax1.set_xlabel('time [s]') - ax1.set_ylabel('mag [V] or [A]') - ax1.grid(True) - plt.show() - - -def plotInterpolatedNodeResults(filename, node): - node = node - 1 - df = pd.read_csv(filename, header=None) - print(df.shape) - - if (df.shape[1] - 1) / 2 < node or node < 0: - print('Node not available') - exit() - - time = np.array(df.ix[:, 0]) - voltageRe = np.array(df.ix[:, node + 1]) - voltageIm = np.array(df.ix[:, int((df.shape[1] - 1) / 2 + node + 1)]) - - interpTime = np.arange(df.ix[0, 0], df.ix[df.shape[0] - 1, 0], 0.00005) - fVoltageRe = interp1d(time, voltageRe) - fVoltageIm = interp1d(time, voltageIm) - - interpVoltageRe = fVoltageRe(interpTime) - interpVoltageIm = fVoltageIm(interpTime) - - voltageMeas = np.sqrt(voltageRe ** 2 + voltageIm ** 2) - voltage = np.sqrt(interpVoltageRe ** 2 + interpVoltageIm ** 2) - voltageEmt = interpVoltageRe * np.cos(2 * np.pi * 50 * interpTime) - interpVoltageIm * np.sin( - 2 * np.pi * 50 * interpTime) - fig, ax1 = plt.subplots() - ax1.plot(interpTime, voltageEmt, 'b-') - ax1.plot(time, voltageMeas, 'r-') - ax1.set_xlabel('time [s]') - ax1.set_ylabel('mag [V] or [A]') - ax1.grid(True) - plt.show() - - -def plotResultsInterfacedInductor(filename, node): - node = node - 1 - df = pd.read_csv(filename, header=None) - print(df.shape) - - if (df.shape[1] - 1) / 2 < node or node < 0: - print('Voltage not available') - exit() - - time = np.array(df.ix[:, 0]) - voltageRe = np.array(df.ix[:, node + 1]) - voltageIm = np.array(df.ix[:, int((df.shape[1] - 1) / 2 + node + 1)]) - - voltage = np.sqrt(voltageRe ** 2 + voltageIm ** 2) - voltageEmt = voltageRe * np.cos(2 * np.pi * 50 * time) - voltageIm * np.sin(2 * np.pi * 50 * time) - fig, ax1 = plt.subplots() - ax1.plot(time, voltageEmt, 'b-', time, voltage, 'r-') - plt.yticks(np.arange(-10, 10, 1.0)) - ax1.set_xlabel('time [s]') - ax1.set_ylabel('voltage [V]') - ax1.grid(True) - plt.show() - - -def plotResultsSynGenUnitTest(filename, node1, node2, node3): - node1 = node1 - 1 - node2 = node2 - 1 - node3 = node3 - 1 - df = pd.read_csv(filename, header=None) - print(df.shape) - - if (df.shape[1] - 1) / 2 < node1 or node1 < 0 or \ - (df.shape[1] - 1) / 2 < node2 or node2 < 0 or \ - (df.shape[1] - 1) / 2 < node3 or node3 < 0: - print('Voltage not available') - exit() - - time = np.array(df.ix[:, 0]) - mag1 = np.array(df.ix[:, node1 + 1]) - mag2 = np.array(df.ix[:, node2 + 1]) - mag3 = np.array(df.ix[:, node3 + 1]) - - fig, ax1 = plt.subplots() - ax1.plot(time, mag1, 'b-', time, mag2, 'r-', time, mag3, 'g-') - # ax1.plot(time, voltageEmt, 'b-', time, voltage, 'r-') - # plt.yticks(np.arange(-10, 10, 1.0)) - ax1.set_xlabel('time [s]') - ax1.set_ylabel('Magnitude') - ax1.grid(True) - plt.show() - - -def plotResultsSynGenUnitTestVar(filename, varNum): - df = pd.read_csv(filename, header=None) - print(df.shape) - - if (df.shape[1]) < varNum or varNum < 0: - print('Variable not available') - exit() - - time = np.array(df.ix[:, 0]) - mag = np.array(df.ix[:, varNum]) - - fig, ax1 = plt.subplots() - ax1.plot(time, mag, 'b-') - # plt.yticks(np.arange(-10, 10, 1.0)) - ax1.set_xlabel('time [s]') - ax1.set_ylabel('Magnitude') - ax1.grid(True) - plt.show() -