Example #1
0
        public void TestMetric24HrVs15Min()
        {
            //5030 has 8 phases, with 6 to 8 detectors per phase.  There is Stop Bar, Lane-by-Lane Count,
            // Lane-by-Lane with Speed Restriction, Advanced Count, Advanced Spped as the detectin types for he different
            // detectors.  THis signals has everything and is a good one to test for everything UDOT uses for a signal.

            var signalId        = "5030";
            int metricTypeId    = 6;
            var stringstartTime = "10/24/2018 3:30 PM";

            var startTime        = DateTime.Parse(stringstartTime, System.Globalization.CultureInfo.InvariantCulture);
            var endTime24Hrs     = startTime.AddDays(1);
            var endTime15Mins    = startTime.AddMinutes(15);
            var signalRepository = SignalsRepositoryFactory.Create();
            var signal           = signalRepository.GetVersionOfSignalByDate(signalId, startTime);
            var metricApproaches = signal.GetApproachesForSignalThatSupportMetric(metricTypeId);

            if (metricApproaches.Count > 0)
            {
                foreach (var approach in metricApproaches)
                {
                    var signalPhase24Hrs  = new Common.Business.SignalPhase(startTime, endTime24Hrs, approach, true, 15, metricTypeId, false);
                    var signalPhase15Mins = new Common.Business.SignalPhase(startTime, endTime15Mins, approach, true, 15, metricTypeId, false);
                    Assert.IsTrue(signalPhase24Hrs.Cycles.Count > signalPhase15Mins.Cycles.Count);
                    for (int i = 0; i < signalPhase15Mins.Cycles.Count; i++)
                    {
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].EndTime == signalPhase15Mins.Cycles[i].EndTime);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].GreenEvent == signalPhase15Mins.Cycles[i].GreenEvent);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].GreenLineY == signalPhase15Mins.Cycles[i].GreenLineY);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].RedLineY == signalPhase15Mins.Cycles[i].RedLineY);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].StartTime == signalPhase15Mins.Cycles[i].StartTime);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalArrivalOnGreen == signalPhase15Mins.Cycles[i].TotalArrivalOnGreen);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalArrivalOnRed == signalPhase15Mins.Cycles[i].TotalArrivalOnRed);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalArrivalOnYellow == signalPhase15Mins.Cycles[i].TotalArrivalOnYellow);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalDelay == signalPhase15Mins.Cycles[i].TotalDelay);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalGreenTime == signalPhase15Mins.Cycles[i].TotalGreenTime);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalGreenTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalGreenTimeMilliseconds);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalRedTime == signalPhase15Mins.Cycles[i].TotalRedTime);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalRedTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalRedTimeMilliseconds);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalTime == signalPhase15Mins.Cycles[i].TotalTime);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalTimeMilliseconds);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalVolume == signalPhase15Mins.Cycles[i].TotalVolume);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalYellowTime == signalPhase15Mins.Cycles[i].TotalYellowTime);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalYellowTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalYellowTimeMilliseconds);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].YellowEvent == signalPhase15Mins.Cycles[i].YellowEvent);
                        Assert.IsTrue(signalPhase24Hrs.Cycles[i].YellowLineY == signalPhase15Mins.Cycles[i].YellowLineY);
                        for (int j = 0; j < signalPhase15Mins.Cycles[i].DetectorEvents.Count; j++)
                        {
                            Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].ArrivalType == signalPhase15Mins.Cycles[i].DetectorEvents[j].ArrivalType);
                            Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].Delay == signalPhase15Mins.Cycles[i].DetectorEvents[j].Delay);
                            Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].TimeStamp == signalPhase15Mins.Cycles[i].DetectorEvents[j].TimeStamp);
                            Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].YPoint == signalPhase15Mins.Cycles[i].DetectorEvents[j].YPoint);
                        }
                    }
                }
            }
        }
Example #2
0
        public void PCDVolumeUnitTest()
        {
            DateTime start = Convert.ToDateTime("1/1/2014 12:00 AM");
            DateTime end   = Convert.ToDateTime("1/1/2014 12:15 AM");
            var      directionRepository = DirectionTypeRepositoryFactory.Create();
            var      directions          = directionRepository.GetAllDirections();
            var      signalRepository    = MOE.Common.Models.Repositories.SignalsRepositoryFactory.Create();
            var      signal     = signalRepository.GetVersionOfSignalByDate("7328", start);
            var      approaches = signal.GetApproachesForSignalThatSupportMetric(6);

            List <Common.Business.SignalPhase> signalPhaseList = new List <Common.Business.SignalPhase>();

            foreach (MOE.Common.Models.Approach approach in approaches)
            {
                var protectedSignalPhase = new Common.Business.SignalPhase(start, end, approach, false, 15,
                                                                           6, false);
                signalPhaseList.Add(protectedSignalPhase);
                if (approach.PermissivePhaseNumber.HasValue)
                {
                    var permissiveSignalPhase = new Common.Business.SignalPhase(start, end, approach, false, 15,
                                                                                6, true);
                    signalPhaseList.Add(permissiveSignalPhase);
                }
            }

            ApproachVolumeOptions approachVolumeOptions = new ApproachVolumeOptions("7328", start, end, null, 15, true, true, true, true, true, true);

            Common.Business.ApproachVolume.ApproachVolume nSadvanceCountApproachVolume    = null;
            Common.Business.ApproachVolume.ApproachVolume nSlaneByLaneCountApproachVolume = null;
            Common.Business.ApproachVolume.ApproachVolume eWadvanceCountApproachVolume    = null;
            Common.Business.ApproachVolume.ApproachVolume eWlaneByLaneCountApproachVolume = null;
            if (directions.Any(d => d.Description == "Northbound") || directions.Any(d => d.Description == "Southbound"))
            {
                DirectionType northboundDirection = directions.FirstOrDefault(d => d.Description == "Northbound");
                DirectionType southboundDirection = directions.FirstOrDefault(d => d.Description == "Southbound");
                List <MOE.Common.Models.Approach> northboundApproaches = signal.Approaches
                                                                         .Where(a => a.DirectionTypeID == northboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList();
                List <MOE.Common.Models.Approach> southboundApproaches = signal.Approaches
                                                                         .Where(a => a.DirectionTypeID == southboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList();
                nSadvanceCountApproachVolume =
                    new Common.Business.ApproachVolume.ApproachVolume(northboundApproaches, southboundApproaches, approachVolumeOptions, northboundDirection, southboundDirection, 2);
                nSlaneByLaneCountApproachVolume =
                    new Common.Business.ApproachVolume.ApproachVolume(northboundApproaches, southboundApproaches, approachVolumeOptions, northboundDirection, southboundDirection, 4);
            }
            if (directions.Any(d => d.Description == "Westbound") || directions.Any(d => d.Description == "Eastbound"))
            {
                DirectionType eastboundDirection  = directions.FirstOrDefault(d => d.Description == "Eastbound");
                DirectionType westboundDirection  = directions.FirstOrDefault(d => d.Description == "Westbound");
                var           eastboundApproaches = signal.Approaches
                                                    .Where(a => a.DirectionTypeID == eastboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList();
                var westboundApproaches = signal.Approaches
                                          .Where(a => a.DirectionTypeID == westboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList();
                eWadvanceCountApproachVolume =
                    new Common.Business.ApproachVolume.ApproachVolume(eastboundApproaches, westboundApproaches, approachVolumeOptions, eastboundDirection, westboundDirection, 2);
                eWlaneByLaneCountApproachVolume =
                    new Common.Business.ApproachVolume.ApproachVolume(eastboundApproaches, westboundApproaches, approachVolumeOptions, eastboundDirection, westboundDirection, 4);
            }

            double pcdVolume      = signalPhaseList.Sum(s => s.TotalVolume);
            double approachVolume = nSadvanceCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount) + nSlaneByLaneCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount) +
                                    eWadvanceCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount) + eWlaneByLaneCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount);

            List <DateTime> signalPhaseDetectorActivations = new List <DateTime>();

            foreach (var signalPhase in signalPhaseList)
            {
                foreach (var signalPhaseCycle in signalPhase.Cycles)
                {
                    foreach (var detectorDataPoint in signalPhaseCycle.DetectorEvents)
                    {
                        signalPhaseDetectorActivations.Add(detectorDataPoint.TimeStamp);
                    }
                }
            }
            signalPhaseDetectorActivations.Sort();

            List <DateTime> approachVolumeDetectorActivations = new List <DateTime>();

            foreach (var combinedDirectionsVolume in nSadvanceCountApproachVolume.PrimaryDetectorEvents)
            {
                approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp);
            }
            foreach (var combinedDirectionsVolume in nSlaneByLaneCountApproachVolume.PrimaryDetectorEvents)
            {
                approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp);
            }
            foreach (var combinedDirectionsVolume in eWadvanceCountApproachVolume.PrimaryDetectorEvents)
            {
                approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp);
            }
            foreach (var combinedDirectionsVolume in eWlaneByLaneCountApproachVolume.PrimaryDetectorEvents)
            {
                approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp);
            }
            approachVolumeDetectorActivations.Sort();

            for (int i = 0; i < approachVolumeDetectorActivations.Count; i++)
            {
                DateTime signalPhaseTimeStamp    = signalPhaseDetectorActivations[i];
                DateTime approachVolumeTimeStamp = approachVolumeDetectorActivations[i + 14];
                Assert.IsTrue(signalPhaseTimeStamp == approachVolumeTimeStamp);
            }
            //Common.Business.ApproachVolume.ApproachVolume advanceCountApproachVolume =
            //    new Common.Business.ApproachVolume.ApproachVolume(primaryApproaches, opposingApproaches, this, primaryDirection, opposingDirection, 2);
        }