129{
130 if (ValidateData()) {
131 wxString errorMsg;
132 m_emtElement->UpdateData(m_properties);
133 if (!m_emtElement->CalculateCurrent(errorMsg, true)) {
134 wxMessageDialog msgDialog(m_parent, errorMsg, _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
135 msgDialog.ShowModal();
136 return;
137 }
138 std::vector<double> time, in, timeSamp, inSamp, outR, outI, outM, outP, freq;
139 auto atpData = m_emtElement->GetEMTElementData().atpData;
140 auto inFFTData = m_emtElement->GetEMTElementData().inFFTData;
141 auto outFFTData = m_emtElement->GetEMTElementData().outFFTData;
142 for (auto data : atpData) {
143 time.emplace_back(data.first);
144 in.emplace_back(data.second);
145 }
146 for (auto data : inFFTData) {
147 timeSamp.emplace_back(data.first);
148 inSamp.emplace_back(data.second);
149 }
150 for (auto data : outFFTData) {
151 outR.emplace_back(data.second.real());
152 outI.emplace_back(data.second.imag());
153 outM.emplace_back(abs(data.second));
154 outP.emplace_back(arg(data.second) * 180.0 / M_PI);
155 freq.emplace_back(data.first);
156 }
157
158
159 std::vector<double> currMag, currPha, harmOrder;
160 auto harmData = m_emtElement->GetEMTElementData().currHarmonics;
161
162
163
164
165
166
167 for(auto const& data : harmData){
168 currMag.emplace_back(abs(data.second));
169 currPha.emplace_back(arg(data.second) * 180.0 / M_PI);
170 harmOrder.emplace_back(static_cast<double>(data.first));
171 }
172
173 std::vector<ElementPlotData> plotDataList;
174 ElementPlotData plotATPData(_(
"ATP Output"), ElementPlotData::CurveType::CT_TEST);
175 ElementPlotData plotFFTData(_(
"Fourier Analysis"), ElementPlotData::CurveType::CT_TEST);
176 ElementPlotData plotCurrData(_(
"Current Phasor"), ElementPlotData::CurveType::CT_TEST);
177
178 plotATPData.AddData(in, _("Data"));
179
180 plotFFTData.AddData(inSamp, _("Input"));
181 plotFFTData.AddData(timeSamp, _("Time Sampled"));
182 plotFFTData.AddData(outR, _("Real"));
183 plotFFTData.AddData(outI, _("Imaginary"));
184 plotFFTData.AddData(outM, _("Magnitude"));
185 plotFFTData.AddData(outP, _("Phase"));
186 plotFFTData.AddData(freq, _("Frequency"));
187
188 plotCurrData.AddData(currMag, _("Magnitude"));
189 plotCurrData.AddData(currPha, _("Phase"));
190 plotCurrData.AddData(harmOrder, _("Harmonic Order"));
191
192 plotDataList.push_back(plotATPData);
193 plotDataList.push_back(plotFFTData);
194 plotDataList.push_back(plotCurrData);
195 ChartView* cView =
new ChartView(
this, plotDataList, time, m_properties->GetGeneralPropertiesData().plotLib);
196 cView->Show();
197 }
198}
This class is responsible to manage the charts generated in the transient electromechanical studies.