protected void AddTermEventDataToChart(Chart chart, DateTime startDate, DateTime endDate, MOE.Common.Business.AnalysisPhaseCollection analysisPhaseCollection, string signalId, bool showVolume, bool showPlanStripes) { foreach (MOE.Common.Business.AnalysisPhase phase in analysisPhaseCollection.Items) { if (phase.TerminationEvents.Count > 0) { foreach (MOE.Common.Models.Controller_Event_Log TermEvent in phase.ConsecutiveGapOuts) { chart.Series["GapOut"].Points.AddXY(TermEvent.Timestamp, phase.PhaseNumber); } foreach (MOE.Common.Models.Controller_Event_Log TermEvent in phase.ConsecutiveMaxOut) { chart.Series["MaxOut"].Points.AddXY(TermEvent.Timestamp, phase.PhaseNumber); } foreach (MOE.Common.Models.Controller_Event_Log TermEvent in phase.ConsecutiveForceOff) { chart.Series["ForceOff"].Points.AddXY(TermEvent.Timestamp, phase.PhaseNumber); } foreach (MOE.Common.Models.Controller_Event_Log TermEvent in phase.UnknownTermination) { chart.Series["Unknown"].Points.AddXY(TermEvent.Timestamp, phase.PhaseNumber); } if (ShowPedActivity) { foreach (MOE.Common.Models.Controller_Event_Log PedEvent in phase.PedestrianEvents) { if (PedEvent.EventCode == 23) { chart.Series["Ped Walk Begin"].Points.AddXY(PedEvent.Timestamp, (phase.PhaseNumber + .3)); } } } } if (showPlanStripes) { PlanCollection.SetSimplePlanStrips(analysisPhaseCollection.Plans, chart, startDate); } if (YAxisMax != null) { chart.ChartAreas[0].AxisY.Maximum = YAxisMax.Value + .5; } } }
public void SetHighCycleCount(AnalysisPhaseCollection phases) { //find all the phases cycles within the plan var HighCycleCount = 0; foreach (var phase in phases.Items) { var Cycles = from cycle in phase.Cycles.Items where cycle.StartTime > StartTime && cycle.EndTime < EndTime select cycle; if (Cycles.Count() > HighCycleCount) { HighCycleCount = Cycles.Count(); } } CycleCount = HighCycleCount; }
public override List <string> CreateMetric() { base.CreateMetric(); string location = GetSignalLocation(); Chart chart = new Chart(); MOE.Common.Business.AnalysisPhaseCollection analysisPhaseCollection = new MOE.Common.Business.AnalysisPhaseCollection(SignalID, StartDate, EndDate, SelectedConsecutiveCount); //If there are phases in the collection add the charts if (analysisPhaseCollection.Items.Count > 0) { chart = GetNewTermEventChart(StartDate, EndDate, SignalID, location, SelectedConsecutiveCount, analysisPhaseCollection.MaxPhaseInUse, ShowPedActivity); AddTermEventDataToChart(chart, StartDate, EndDate, analysisPhaseCollection, SignalID, ShowPedActivity, ShowPlanStripes); } string chartName = CreateFileName(); List <Title> removethese = new List <Title>(); foreach (Title t in chart.Titles) { if (t.Text == "" || t.Text == null) { removethese.Add(t); } } foreach (Title t in removethese) { chart.Titles.Remove(t); } //Save an image of the chart chart.SaveImage(MetricFileLocation + chartName, System.Web.UI.DataVisualization.Charting.ChartImageFormat.Jpeg); ReturnList.Add(MetricWebPath + chartName); return(ReturnList); }
public override List <string> CreateMetric() { base.CreateMetric(); MOE.Common.Business.AnalysisPhaseCollection analysisPhaseCollection = new MOE.Common.Business.AnalysisPhaseCollection(SignalID, StartDate, EndDate); //If there are phases in the collection add the charts if (analysisPhaseCollection.Items.Count > 0) { foreach (MOE.Common.Business.Plan plan in analysisPhaseCollection.Plans.PlanList) { plan.SetProgrammedSplits(SignalID); plan.SetHighCycleCount(analysisPhaseCollection); } //If there are phases in the collection add the charts //dummy chart to create a legend for the entire split monitor page. Chart dummychart = new Chart(); ChartArea chartarea1 = new ChartArea(); dummychart.ImageType = ChartImageType.Jpeg; dummychart.Height = 200; dummychart.Width = 800; //add comments to the chart dummychart.ImageStorageMode = ImageStorageMode.UseImageLocation; dummychart.BorderlineDashStyle = ChartDashStyle.Dot; Series PedActivity = new Series(); Series GapoutSeries = new Series(); Series MaxOutSeries = new Series(); Series ForceOffSeries = new Series(); Series ProgramedSplit = new Series(); Series UnknownSeries = new Series(); PedActivity.Name = "Ped Activity"; GapoutSeries.Name = "Gap Out"; MaxOutSeries.Name = "Max Out"; ForceOffSeries.Name = "Force Off"; ProgramedSplit.Name = "Programmed Split"; UnknownSeries.Name = "Unknown Termination Cause"; PedActivity.MarkerStyle = MarkerStyle.Cross; GapoutSeries.MarkerStyle = MarkerStyle.Circle; MaxOutSeries.MarkerStyle = MarkerStyle.Circle; ForceOffSeries.MarkerStyle = MarkerStyle.Circle; ProgramedSplit.BorderDashStyle = ChartDashStyle.Solid; UnknownSeries.MarkerStyle = MarkerStyle.Circle; GapoutSeries.Color = Color.OliveDrab; PedActivity.Color = Color.DarkGoldenrod; MaxOutSeries.Color = Color.Red; ForceOffSeries.Color = Color.MediumBlue; ProgramedSplit.Color = Color.OrangeRed; UnknownSeries.Color = Color.Black; dummychart.Series.Add(ProgramedSplit); dummychart.Series.Add(GapoutSeries); dummychart.Series.Add(MaxOutSeries); dummychart.Series.Add(ForceOffSeries); dummychart.Series.Add(UnknownSeries); dummychart.Series.Add(PedActivity); dummychart.ChartAreas.Add(chartarea1); Legend dummychartLegend = new Legend(); dummychartLegend.Name = "DummyLegend"; dummychartLegend.IsDockedInsideChartArea = true; dummychartLegend.Title = "Chart Legend"; dummychartLegend.Docking = Docking.Bottom; dummychartLegend.Alignment = StringAlignment.Center; dummychart.Legends.Add(dummychartLegend); List <Title> removethese = new List <Title>(); foreach (Title t in dummychart.Titles) { if (t.Text == "" || t.Text == null) { removethese.Add(t); } } foreach (Title t in removethese) { dummychart.Titles.Remove(t); } string dummyChartFileName = CreateFileName(); dummychart.SaveImage(MetricFileLocation + dummyChartFileName); ReturnList.Add(MetricWebPath + dummyChartFileName); if (analysisPhaseCollection.Items.Count > 0) { var phasesInOrder = (from r in analysisPhaseCollection.Items select r).OrderBy(r => r.PhaseNumber); foreach (MOE.Common.Business.AnalysisPhase Phase in phasesInOrder) { Chart chart = GetNewSplitMonitorChart(StartDate, EndDate, SignalID, GetSignalLocation(), Phase.PhaseNumber); AddSplitMonitorDataToChart(chart, StartDate, EndDate, Phase, SignalID, analysisPhaseCollection.Plans); if (ShowPlanStripes) { SetSimplePlanStrips(analysisPhaseCollection.Plans, chart, StartDate); SetSplitMonitorStatistics(analysisPhaseCollection.Plans, Phase, chart); } string chartFileName = CreateFileName(); removethese = new List <Title>(); foreach (Title t in chart.Titles) { if (t.Text == "" || t.Text == null) { removethese.Add(t); } } foreach (Title t in removethese) { chart.Titles.Remove(t); } chart.SaveImage(MetricFileLocation + chartFileName); ReturnList.Add(MetricWebPath + chartFileName); } } } return(ReturnList); }