public List <Core.Models.Signal> Read(string filename) { PDATReader reader = null; try { reader = new PDATReader(filename); } catch (Exception ex) { throw new Exception(ex.Message); } var signalList = new List <Core.Models.Signal>(); var signals = reader.GetAllSignalsFromPDATFile(); if (signals.Count() > 0) { decimal diff; var firstSig = signals.FirstOrDefault(); _numberOfDataPointInFile = firstSig.PointsList.Count(); if (_numberOfDataPointInFile >= 2) { //for (int i = 0; i < _numberOfDataPointInFile - 1; i++) //{ var time1 = firstSig.PointsList[0].T; var time2 = firstSig.PointsList[1].T; diff = time2 - time1; if (diff != 0) { _samplingRate = (int)Math.Round((1 / diff) / 10) * 10; //break; } else { //Console.WriteLine("sampling rate is 0 at: " + filename + "\nThe numbers are: " + time1.ToString() + " and " + time2.ToString()); } //} } var groupbyPMU = signals.GroupBy(x => x.ShortName).ToDictionary(y => y.Key, y => y.ToList()); foreach (var gr in groupbyPMU) { var stat = gr.Value.FirstOrDefault().stat.ToList(); foreach (var sig in gr.Value) { var newSignal = new Core.Models.Signal(sig.ShortName, sig.Header); //var name = sig.Name; _getDataTimeStamp(newSignal, sig.EventDate, sig.PointsList); var time = sig.EventDate; var data = sig.PointsList; newSignal.TypeAbbreviation = _getSignalType(sig.Type); newSignal.Unit = sig.Unit; newSignal.SamplingRate = _samplingRate; newSignal.Stat = stat; signalList.Add(newSignal); } } } return(signalList); }
private void _getDataTimeStamp(Core.Models.Signal newSignal, DateTimeOffset eventDate, List <Point> pointsList) { for (int i = 0; i < pointsList.Count; i++) { var d = pointsList[i]; var timeStamp = eventDate.DateTime.AddSeconds((double)d.T); newSignal.Data.Add(d.Value); newSignal.TimeStampNumber.Add(timeStamp.ToOADate()); newSignal.TimeStamps.Add(timeStamp); } }