// created by sudhir 30.12.2017 public PMUMeasDataLists GetDataOfMeasId(Dictionary <object, List <PMUDataStructure> > parsedData, uint measId, bool checkMeasExistence = false) { if (checkMeasExistence) { // check if the measId is the measurements list of parsed Data List <uint> measIds = GetMeasIDs(parsedData); int measIndex = measIds.IndexOf(measId); if (measIndex == -1) { return(new PMUMeasDataLists()); } } List <PMUDataStructure> pmuData = parsedData[measId]; List <float> pmuVals = new List <float>(); List <string> pmuQualities = new List <string>(); List <DateTime> pmuTimeStamps = new List <DateTime>(); for (int i = 0; i < pmuData.Count; i++) { PMUDataStructure data = parsedData[measId][i]; pmuVals.Add(data.Value[0]); pmuQualities.Add(data.Quality.ToString()); pmuTimeStamps.Add(DateTime.SpecifyKind((TimeZoneInfo.ConvertTime(data.TimeStamp, TimeZoneInfo.Utc, TimeZoneInfo.Local)), DateTimeKind.Local)); } PMUMeasDataLists lists = new PMUMeasDataLists(pmuVals, pmuQualities, pmuTimeStamps); return(lists); }
// worker thread completed stuff void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { AddLinesToConsole("Finished fetching data"); object res = e.Result; bool isSuccess = (bool)res.GetType().GetProperty("isSuccess").GetValue(res, null); string errorMsg = (string)res.GetType().GetProperty("errorMsg").GetValue(res, null); if (isSuccess == false) { AddLinesToConsole(errorMsg); return; } List <PMUMeasDataLists> measurementsData = (List <PMUMeasDataLists>)res.GetType().GetProperty("measurementsData").GetValue(res, null); List <int> measurementIDs = (List <int>)res.GetType().GetProperty("measurementIDs").GetValue(res, null); List <string> measurementNames = (List <string>)res.GetType().GetProperty("measurementNames").GetValue(res, null); int dataRate = (int)res.GetType().GetProperty("dataRate").GetValue(res, null); // SeriesCollection = new SeriesCollection(); SeriesCollection.Clear(); // Todo change step as per the plot preferences. Step = dataRate; // get 1st measurement Data and add to SeriesCollection, also update the timestamps and dataRate PMUMeasDataLists lists = measurementsData.ElementAt(0); timeStamps_ = new List <DateTime>(lists.pmuTimeStamps); SeriesCollection.Add(new GLineSeries() { Title = measurementNames.ElementAt(0) + "_" + measurementIDs.ElementAt(0).ToString(), Values = new GearedValues <float>(lists.pmuVals), PointGeometry = null, Fill = Brushes.Transparent, StrokeThickness = 2, LineSmoothness = 0 }); // get the data of remaining measurements and add to SeriesCollection for (int i = 1; i < measurementIDs.Count; i++) { lists = measurementsData.ElementAt(i); SeriesCollection.Add(new GLineSeries() { Title = measurementNames.ElementAt(i).ToString() + "_" + measurementIDs.ElementAt(i).ToString(), Values = new GearedValues <float>(lists.pmuVals), PointGeometry = null, Fill = Brushes.Transparent, StrokeThickness = 2, LineSmoothness = 0 }); } ResetAxes(); }
public async Task PlotMeasIdsAsync(DateTime startTime, DateTime endTime, CancellationToken cancellationToken) { AddLinesToConsole("Started fetching async data"); int dataRate = plotTemplate_.dataRate; List <int> measurementIDs = plotTemplate_.measIds; List <string> measurementNames = plotTemplate_.measurementNames; VariableTime fetchWindow = plotTemplate_.fetchWindow; if (measurementIDs.Count == 0) { return; } //ConfigurationManager _configManager = new ConfigurationManager(); //_configManager.Initialize(); //HistoryDataAdapter _historyAdapter = new HistoryDataAdapter(); //_historyAdapter.Initialize(_configManager); if (dataRate <= 0 || dataRate > 25) { // default dataRate of PMU dataRate = 25; } int numWindows = 1; // find the number of seconds in a fetch window //stub int reportFetchWindowSecs = (int)(fetchWindow.hours * 60 * 60 + fetchWindow.mins * 60 + fetchWindow.secs); if (reportFetchWindowSecs <= 0) { numWindows = 1; reportFetchWindowSecs = Convert.ToInt32(Math.Ceiling((endTime - startTime).TotalSeconds)); } else { // find the number of fetch windows as Ceil(Fetchspan/windowspan) int reportfetchSpanSecs = Convert.ToInt32(Math.Ceiling((endTime - startTime).TotalSeconds)); numWindows = reportfetchSpanSecs / reportFetchWindowSecs; } DateTime fetchEndTime = startTime; Dictionary <object, List <PMUDataStructure> > parsedData; List <PMUMeasDataLists> measurementsData = new List <PMUMeasDataLists>(); for (int window = 0; window < numWindows; window++) { // fetch and update for ith window DateTime fetchStartTime = fetchEndTime; fetchEndTime = fetchStartTime.AddSeconds(reportFetchWindowSecs); if (fetchEndTime > endTime) { fetchEndTime = endTime; } // get the data of all measurementIds for the window parsedData = await _historyAdapter.GetDataAsync(fetchStartTime, fetchEndTime, measurementIDs, true, false, dataRate); cancellationToken.ThrowIfCancellationRequested(); // check if we have atleast one measurement if (parsedData != null) { // get the data of measurements and add to List for (int i = 0; i < measurementIDs.Count; i++) { PMUMeasDataLists measurementData; measurementData = await _historyAdapter.GetDataOfMeasIdAsync(parsedData, (uint)measurementIDs.ElementAt(i), true); cancellationToken.ThrowIfCancellationRequested(); if (window == 0) { measurementsData.Add(measurementData); } else { measurementsData.ElementAt(i).pmuQualities.AddRange(measurementData.pmuQualities); measurementsData.ElementAt(i).pmuTimeStamps.AddRange(measurementData.pmuTimeStamps); measurementsData.ElementAt(i).pmuVals.AddRange(measurementData.pmuVals); } } } else { // we didnot get the required result return; } // todo update plot AddLinesToConsole($"Completed async fetching of {window + 1} of {numWindows} windows"); } // fetch completed, now update plot AddLinesToConsole("Finished async fetching data"); SeriesCollection.Clear(); // Todo change step as per the plot preferences. Step = dataRate; // get 1st measurement Data and add to SeriesCollection, also update the timestamps and dataRate PMUMeasDataLists lists = measurementsData.ElementAt(0); timeStamps_ = new List <DateTime>(lists.pmuTimeStamps); SeriesCollection.Add(new GLineSeries() { Title = measurementNames.ElementAt(0) + "_" + measurementIDs.ElementAt(0).ToString(), Values = new GearedValues <float>(lists.pmuVals), PointGeometry = null, Fill = Brushes.Transparent, StrokeThickness = 2, LineSmoothness = 0 }); // get the data of remaining measurements and add to SeriesCollection for (int i = 1; i < measurementIDs.Count; i++) { lists = measurementsData.ElementAt(i); SeriesCollection.Add(new GLineSeries() { Title = measurementNames.ElementAt(i).ToString() + "_" + measurementIDs.ElementAt(i).ToString(), Values = new GearedValues <float>(lists.pmuVals), PointGeometry = null, Fill = Brushes.Transparent, StrokeThickness = 2, LineSmoothness = 0 }); } }