public void SummarizeFault() { using (AdoDataConnection connection = MeterDataSet.CreateDbConnection()) { TableOperations <Event> eventTable = new TableOperations <Event>(connection); TableOperations <SegmentType> segmentTypeTable = new TableOperations <SegmentType>(connection); TableOperations <openXDA.Model.FaultGroup> faultGroupTable = new TableOperations <openXDA.Model.FaultGroup>(connection); TableOperations <FaultSegment> faultSegmentTable = new TableOperations <FaultSegment>(connection); TableOperations <FaultSummary> faultSummaryTable = new TableOperations <FaultSummary>(connection); Event evt = eventTable.GetEvent(MeterDataSet.FileGroup, DataGroup); SegmentType faultSegmentType = segmentTypeTable.GetOrAdd("Fault"); // Create a fault group row for the whole group of faults if (FaultGroup.FaultDetectionLogicResult != false || FaultGroup.FaultValidationLogicResult != false) { faultGroupTable.AddNewRecord(CreateFaultGroup(evt.ID, FaultGroup)); } for (int faultIndex = 0; faultIndex < FaultGroup.Faults.Count; faultIndex++) { Fault fault = FaultGroup.Faults[faultIndex]; // Create a fault segment for the fault itself faultSegmentTable.AddNewRecord(CreateFaultSegment(evt.ID, fault, faultSegmentType)); // Create fault segments for each fault type found within the fault foreach (Fault.Segment segment in fault.Segments) { string segmentTypeName = string.Format("{0} Fault", segment.FaultType).Replace("ABC", "3-Phase"); SegmentType segmentType = segmentTypeTable.GetOrAdd(segmentTypeName); faultSegmentTable.AddNewRecord(CreateFaultSegment(evt.ID, segment, segmentType)); } // Create the fault summary rows for this fault foreach (FaultSummary faultSummary in CreateFaultSummaries(evt.ID, faultIndex + 1, fault)) { faultSummaryTable.AddNewRecord(faultSummary); } } // Generate fault curves for each algorithm used to analyze the fault TableOperations <FaultCurve> faultCurveTable = new TableOperations <FaultCurve>(connection); TableOperations <FaultCurveStatistic> faultCurveStatisticTable = new TableOperations <FaultCurveStatistic>(connection); if (FaultGroup.Faults.Any()) { for (int i = 0; i < FaultGroup.Faults[0].Curves.Count; i++) { FaultCurve faultCurve = CreateFaultCurve(evt.ID, i); faultCurveTable.AddNewRecord(faultCurve); faultCurve.ID = connection.ExecuteScalar <int>("SELECT @@IDENTITY"); for (int faultIndex = 0; faultIndex < FaultGroup.Faults.Count; faultIndex++) { Fault fault = FaultGroup.Faults[faultIndex]; if (fault.Curves[i].Series.DataPoints.Count == 0) { continue; } FaultCurveStatistic faultCurveStatistic = new FaultCurveStatistic() { FaultCurveID = faultCurve.ID, FaultNumber = faultIndex + 1, Maximum = ToDbFloat(fault.Curves[i].Maximum), Minimum = ToDbFloat(fault.Curves[i].Minimum), Average = ToDbFloat(fault.Curves[i].Average), StandardDeviation = ToDbFloat(fault.Curves[i].StandardDeviation) }; faultCurveStatisticTable.AddNewRecord(faultCurveStatistic); } } } } }