示例#1
0
        // 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);
        }
示例#2
0
        // 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();
        }
示例#3
0
        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
                });
            }
        }