Clone() public method

public Clone ( ) : Disturbance
return Disturbance
Ejemplo n.º 1
0
        private void DetectDisturbances(DataGroup dataGroup, VICycleDataGroup viCycleDataGroup)
        {
            List <Range <int> > aPhaseDisturbanceRanges  = DetectDisturbanceRanges(ToPerUnit(viCycleDataGroup.VA?.RMS));
            List <Range <int> > bPhaseDisturbanceRanges  = DetectDisturbanceRanges(ToPerUnit(viCycleDataGroup.VB?.RMS));
            List <Range <int> > cPhaseDisturbanceRanges  = DetectDisturbanceRanges(ToPerUnit(viCycleDataGroup.VC?.RMS));
            List <Range <int> > abPhaseDisturbanceRanges = DetectDisturbanceRanges(ToPerUnit(viCycleDataGroup.VAB?.RMS));
            List <Range <int> > bcPhaseDisturbanceRanges = DetectDisturbanceRanges(ToPerUnit(viCycleDataGroup.VBC?.RMS));
            List <Range <int> > caPhaseDisturbanceRanges = DetectDisturbanceRanges(ToPerUnit(viCycleDataGroup.VCA?.RMS));

            List <Disturbance> disturbanceList = aPhaseDisturbanceRanges.Select(range => ToDisturbance(viCycleDataGroup.VA.RMS, range, Phase.AN))
                                                 .Concat(bPhaseDisturbanceRanges.Select(range => ToDisturbance(viCycleDataGroup.VB.RMS, range, Phase.BN)))
                                                 .Concat(cPhaseDisturbanceRanges.Select(range => ToDisturbance(viCycleDataGroup.VC.RMS, range, Phase.CN)))
                                                 .Concat(abPhaseDisturbanceRanges.Select(range => ToDisturbance(viCycleDataGroup.VAB.RMS, range, Phase.AB)))
                                                 .Concat(bcPhaseDisturbanceRanges.Select(range => ToDisturbance(viCycleDataGroup.VBC.RMS, range, Phase.BC)))
                                                 .Concat(caPhaseDisturbanceRanges.Select(range => ToDisturbance(viCycleDataGroup.VCA.RMS, range, Phase.CA)))
                                                 .ToList();

            IEnumerable <Range <int> > allDisturbanceRanges = aPhaseDisturbanceRanges
                                                              .Concat(bPhaseDisturbanceRanges)
                                                              .Concat(cPhaseDisturbanceRanges)
                                                              .Concat(abPhaseDisturbanceRanges)
                                                              .Concat(bcPhaseDisturbanceRanges)
                                                              .Concat(caPhaseDisturbanceRanges);

            IEnumerable <Disturbance> worstDisturbances = Range <int> .MergeAllOverlapping(allDisturbanceRanges)
                                                          .Select(range =>
            {
                Disturbance worst = null;

                foreach (Disturbance disturbance in disturbanceList.Where(disturbance => ToRange(disturbance).Overlaps(range)))
                {
                    if ((object)worst == null || m_isMoreSevere(disturbance.PerUnitMagnitude, worst.PerUnitMagnitude))
                    {
                        worst = disturbance;
                    }
                }

                worst       = worst.Clone();
                worst.Phase = Phase.Worst;
                return(worst);
            });

            disturbanceList.AddRange(worstDisturbances);

            if (disturbanceList.Any())
            {
                m_disturbances.Add(dataGroup, disturbanceList);
            }
        }
Ejemplo n.º 2
0
        private void ProcessReportedDisturbances(Meter meter, DataGroup dataGroup)
        {
            Line line = dataGroup.Line;

            if ((object)line == null)
            {
                if (meter.MeterLocation.MeterLocationLines.Count != 1)
                {
                    return;
                }

                line = meter.MeterLocation.MeterLocationLines.Single().Line;
            }

            List <Disturbance> disturbanceList = dataGroup.Disturbances
                                                 .Select(disturbance => ToDisturbance(line, disturbance))
                                                 .Where(IsDisturbed)
                                                 .ToList();

            if (dataGroup.Samples > 0)
            {
                DateTime startTime = dataGroup.StartTime;
                DateTime endTime   = dataGroup.EndTime;
                TimeSpan duration  = (endTime - startTime);

                foreach (Disturbance disturbance in disturbanceList)
                {
                    TimeSpan startDuration = disturbance.StartTime - startTime;
                    TimeSpan endDuration   = disturbance.EndTime - startTime;
                    disturbance.StartIndex = (int)((startDuration.TotalSeconds / duration.TotalSeconds) * dataGroup.Samples);
                    disturbance.EndIndex   = (int)((endDuration.TotalSeconds / duration.TotalSeconds) * dataGroup.Samples);
                }
            }

            IEnumerable <Range <DateTime> > allDisturbanceRanges = disturbanceList
                                                                   .Select(ToDateRange);

            IEnumerable <Disturbance> worstDisturbances = Range <DateTime> .MergeAllOverlapping(allDisturbanceRanges)
                                                          .Select(range =>
            {
                Disturbance worst = null;

                foreach (Disturbance disturbance in disturbanceList.Where(disturbance => ToDateRange(disturbance).Overlaps(range)))
                {
                    if ((object)worst == null || m_isMoreSevere(disturbance.PerUnitMagnitude, worst.PerUnitMagnitude))
                    {
                        worst = disturbance;
                    }
                }

                worst       = worst.Clone();
                worst.Phase = Phase.Worst;
                return(worst);
            });

            disturbanceList.AddRange(worstDisturbances);

            if (disturbanceList.Any())
            {
                m_disturbances.Add(dataGroup, disturbanceList);
            }
        }