예제 #1
0
        private Dictionary <string, DataSeries> GetFaultCurveLookup()
        {
            FaultCurveTableAdapter faultCurveAdapter = m_dbAdapterContainer.GetAdapter <FaultCurveTableAdapter>();

            FaultLocationData.FaultCurveDataTable faultCurveTable = faultCurveAdapter.GetDataBy(m_eventID);

            Func <FaultLocationData.FaultCurveRow, DataSeries> toDataSeries = faultCurve =>
            {
                DataGroup dataGroup = new DataGroup();
                dataGroup.FromData(faultCurve.Data);
                return(dataGroup[0]);
            };

            return(faultCurveTable
                   .GroupBy(faultCurve => faultCurve.Algorithm)
                   .ToDictionary(grouping => grouping.Key, grouping =>
            {
                if (grouping.Count() > 1)
                {
                    Log.Warn($"Duplicate fault curve ({grouping.Key}) found for event {grouping.First().EventID}");
                }

                return toDataSeries(grouping.First());
            }));
        }
 public DoubleEndedFaultOperation()
 {
     m_faultLocationSettings         = new FaultLocationSettings();
     m_processedMappingNodes         = new List <MappingNode>();
     m_faultCurveTable               = new FaultLocationData.FaultCurveDataTable();
     m_doubleEndedFaultDistanceTable = new FaultLocationData.DoubleEndedFaultDistanceDataTable();
 }
예제 #3
0
            public FaultSummarizer(double systemFrequency)
            {
                FaultGroupTable   = new FaultLocationData.FaultGroupDataTable();
                FaultSegmentTable = new FaultLocationData.FaultSegmentDataTable();
                FaultCurveTable   = new FaultLocationData.FaultCurveDataTable();
                FaultSummaryTable = new FaultLocationData.FaultSummaryDataTable();

                m_faultGroupList   = new List <Tuple <Tuple <int, DateTime, DateTime>, FaultLocationData.FaultGroupRow> >();
                m_faultSegmentList = new List <Tuple <EventKey, FaultLocationData.FaultSegmentRow> >();
                m_faultCurveList   = new List <Tuple <EventKey, FaultLocationData.FaultCurveRow> >();
                m_faultSummaryList = new List <Tuple <EventKey, FaultLocationData.FaultSummaryRow> >();

                m_systemFrequency = systemFrequency;
            }
예제 #4
0
        private Dictionary <string, DataSeries> GetFaultCurveLookup()
        {
            FaultCurveTableAdapter faultCurveAdapter = m_dbAdapterContainer.GetAdapter <FaultCurveTableAdapter>();

            FaultLocationData.FaultCurveDataTable faultCurveTable = faultCurveAdapter.GetDataBy(m_eventID);

            Func <FaultLocationData.FaultCurveRow, DataSeries> toDataSeries = faultCurve =>
            {
                DataGroup dataGroup = new DataGroup();
                dataGroup.FromData(faultCurve.Data);
                return(dataGroup[0]);
            };

            return(faultCurveTable.ToDictionary(faultCurve => faultCurve.Algorithm, toDataSeries));
        }
예제 #5
0
        public static void Write(Meter meter, DataGroup waveFormData, FaultLocationData.FaultCurveDataTable faultCurveTable, List <FaultSegment> segments, string originalFilePath, string filePath)
        {
            List <DataSeries> waveFormSeriesList = GetWaveFormSeriesList(waveFormData);
            DataGroup         faultLocationData  = GetFaultLocationData(meter, faultCurveTable);

            string absoluteFilePath = FilePath.GetAbsolutePath(filePath);

            using (StreamWriter fileStream = new StreamWriter(File.OpenWrite(absoluteFilePath)))
            {
                string originalDirectory;
                string originalRootFileName;
                string originalSchemaFilePath;
                string absoluteOriginalFilePath;
                Schema originalSchema = null;

                string headerRow;

                absoluteOriginalFilePath = FilePath.GetAbsolutePath(originalFilePath);

                if (File.Exists(absoluteOriginalFilePath))
                {
                    originalDirectory      = FilePath.GetDirectoryName(absoluteOriginalFilePath);
                    originalRootFileName   = FilePath.GetFileNameWithoutExtension(originalFilePath);
                    originalSchemaFilePath = Path.Combine(originalDirectory, originalRootFileName + ".cfg");
                    originalSchema         = new Schema(originalSchemaFilePath);
                }

                headerRow = waveFormData.DataSeries
                            .Select(series => GetOriginalChannelName(originalSchema, series))
                            .Concat(faultCurveTable.Select(row => string.Format("Fault Location ({0} Algorithm)", row.Algorithm)))
                            .Aggregate("Time", (s, s1) => s + "," + s1);

                fileStream.WriteLine(headerRow);

                for (int i = 0; i < waveFormData.Samples; i++)
                {
                    DateTime time = waveFormSeriesList[0].DataPoints[i].Time;

                    double[] values = waveFormSeriesList
                                      .Select(series => series.DataPoints[i].Value)
                                      .Concat(faultLocationData.DataSeries.Select(series => series.DataPoints.Count > i ? series.DataPoints[i].Value : 0.0D))
                                      .ToArray();

                    fileStream.WriteLine(values.Aggregate(time.ToString("yyyy-MM-dd HH:mm:ss.ffffff"), (s, d) => s + "," + d));
                }
            }
        }
예제 #6
0
        private static DataGroup GetFaultLocationData(Meter meter, FaultLocationData.FaultCurveDataTable faultCurveTable)
        {
            DataGroup faultLocationData = new DataGroup();
            DataGroup parsedGroup       = new DataGroup();

            foreach (FaultLocationData.FaultCurveRow faultCurveRow in faultCurveTable)
            {
                parsedGroup.FromData(meter, faultCurveRow.Data);

                foreach (DataSeries series in parsedGroup.DataSeries)
                {
                    faultLocationData.Add(series);
                }
            }

            return(faultLocationData);
        }