public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { // 実引数取得 SequenceData anotherSequence = (args[0] as SequenceSingleSelectParameter).Value; bool appendTitle = ((BooleanParameter)args[1]).Value; // ラベル化 ICSLabelSequence one = env.SelectedSequence.GetLabelSequence(); ICSLabelSequence another = anotherSequence.GetLabelSequence(); if (appendTitle) { // タイトル付与 foreach (var label in one.EnumerateLabels().ToList()) { one.SetLabel(label.BeginTime, label.EndTime, env.SelectedSequence.Title + "-" + label.LabelText); } } // 他方のラベルを追加 foreach (var label in another.EnumerateLabels()) { if (appendTitle) { one.SetLabel(label.BeginTime, label.EndTime, anotherSequence.Title + "-" + label.LabelText, true); } else { one.SetLabel(label, true); } } // SequenceDataとして返す return(SequenceData.FromLabelSequence(one, env.SelectedSequence.Title + "-merge-" + anotherSequence.Title)); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var border = ((LabelSelectParameter)args[0]).Value; var left = ((NumberParameter)args[1]).Value; var right = ((NumberParameter)args[2]).Value; var percent = ((BooleanParameter)args[3]).Value; var withEmpty = ((BooleanParameter)args[4]).Value; ICSLabelSequence current = env.SelectedSequence.GetLabelSequence(); ICSLabelSequence ret = env.SelectedSequence.GetLabelSequence(); var currentLabels = current.EnumerateLabels().ToList(); for (int i = 0; i < currentLabels.Count; i++) { if (border.Contains(currentLabels[i].LabelText)) { decimal begin, end; if (percent) { begin = currentLabels[i].BeginTime - left * currentLabels[i].Duration / 100; end = currentLabels[i].EndTime + right * currentLabels[i].Duration / 100; } else { begin = currentLabels[i].BeginTime - left; end = currentLabels[i].EndTime + right; } if (begin > end) { begin += (end - begin) / 2; end = begin; } if (begin < end) { ret.SetLabel(begin, end, currentLabels[i].LabelText); } if (begin > currentLabels[i].BeginTime) { string prev = ""; if (i > 0 && !withEmpty) { prev = currentLabels[i - 1].LabelText; } ret.SetLabel(currentLabels[i].BeginTime, begin, prev); } if (end < currentLabels[i].EndTime) { string post = ""; if (i < currentLabels.Count - 1 && !withEmpty) { post = currentLabels[i + 1].LabelText; } ret.SetLabel(end, currentLabels[i].EndTime, post); } } } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("extend", env.SelectedSequence.Title))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { ICSLabelSequence labelSequence = env.SelectedSequence.GetLabelSequence(); if (labelSequence == null) { MessageBox.Show("ラベルが空でした", this.GetType().ToString()); return(null); } if (env.Controller.WholeEndTime > 0) { labelSequence.SetLabel(0, env.Controller.WholeEndTime, "", true); } TimeSeriesValues sequence = new TimeSeriesValues("value"); Dictionary <string, int> indexInfo = new Dictionary <string, int>(); var labelTexts = labelSequence.GetLabelTexts(true); int count = 0; foreach (var labelText in labelTexts) { indexInfo[labelText] = count; count++; } sequence.SetValue(0, new decimal?[1]); sequence.SetValue(labelSequence.Duration, new decimal?[1]); foreach (var label in labelSequence.EnumerateLabels()) { var value = new decimal?[1] { indexInfo[label.LabelText] }; sequence.SetValue(label.BeginTime, value); } SequenceData ret = new SequenceData(sequence, null, PathEx.GiveName("labelNum", env.SelectedSequence.Title)); ret.Type = SequenceType.Numeric; return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { int check = ((SingleSelectParameter)args[0]).Value; ICSLabelSequence current = env.SelectedSequence.GetLabelSequence(); ICSLabelSequence ret = new ICSLabelSequence(); ICSLabel prev = null; foreach (var label in current.EnumerateLabels()) { switch (check) { case 0: if (label.IsEmptyLabel) { ret.SetLabel(label.BeginTime, label.EndTime, "On"); } break; case 1: if (label.IsEmptyLabel && prev != null) { ret.SetLabel(label.BeginTime, label.EndTime, prev.LabelText); } break; case 2: if (prev != null && prev.IsEmptyLabel) { ret.SetLabel(prev.BeginTime, prev.EndTime, label.LabelText); } break; } prev = label; } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("Empty-of", env.SelectedSequence.Title))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var target = ((LabelSelectParameter)args[0]).Value; var length = ((NumberParameter)args[1]).Value; var action = ((SingleSelectParameter)args[2]).Value; var border = ((BooleanParameter)args[3]).Value; var glue = ((SingleSelectParameter)args[4]).Value; ICSLabelSequence ret = env.SelectedSequence.GetLabelSequence(); var names = ret.GetLabelTexts(); string tmpLabel = "tmpToRemove"; while (names.Contains(tmpLabel)) { tmpLabel += "-"; } foreach (var label in ret.EnumerateLabels().Where(l => target.Contains(l.LabelText)).ToList()) { if (action == 0) { if (label.Duration < length || (border && label.Duration == length)) { ret.SetLabel(label.BeginTime, label.EndTime, tmpLabel); } } else { if (label.Duration > length || (border && label.Duration == length)) { ret.SetLabel(label.BeginTime, label.EndTime, tmpLabel); } } } ret.RemoveBorderSameAsPrevious(); var labels = ret.EnumerateLabels().ToList(); for (int i = 0; i < labels.Count; i++) { if (labels[i].LabelText == tmpLabel) { string to = ""; switch (glue) { case 1: if (i > 0 && i < labels.Count - 1) { if (labels[i - 1].LabelText == labels[i + 1].LabelText) { to = labels[i - 1].LabelText; } } break; case 2: if (i > 0) { to = labels[i - 1].LabelText; } break; case 3: if (i < labels.Count - 1) { to = labels[i + 1].LabelText; } break; } ret.SetLabel(labels[i].BeginTime, labels[i].EndTime, to); } } ret.RemoveBorderSameAsPrevious(); return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("Filtered", env.SelectedSequence.Title, (action == 0 ? "Lt" : "Gt") + length.ToString()))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { BooleanParameter includeEmpty = args[0] as BooleanParameter; ICSLabelSequence labelSeq = env.SelectedSequence.GetLabelSequence(); Dictionary <string, List <decimal> > labelInfo = new Dictionary <string, List <decimal> >(); foreach (var label in labelSeq.EnumerateLabels()) { if (!includeEmpty.Value && label.LabelText == "") { continue; } if (!labelInfo.ContainsKey(label.LabelText)) { labelInfo[label.LabelText] = new List <decimal>(); } labelInfo[label.LabelText].Add(label.Duration); } decimal sumTime = labelInfo.Select(l => l.Value.Sum()).Sum(); int sumCount = labelInfo.Select(l => l.Value.Count).Sum(); if (sumTime == 0 || sumCount == 0) { MessageBox.Show("Empty Label Sequence", this.GetTitle()); } else { Misc.DialogOKDataGrid dialog = new MotionDataHandler.Misc.DialogOKDataGrid(); var columns = new DataGridViewColumn[9].Select(p => new DataGridViewTextBoxColumn()).ToArray(); columns[0].HeaderText = "Label"; columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; columns[1].HeaderText = "Time"; columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[1].DefaultCellStyle.Format = "0.000"; columns[2].HeaderText = "Time[%]"; columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[2].DefaultCellStyle.Format = "0.0000"; columns[3].HeaderText = "Count"; columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[3].DefaultCellStyle.Format = "0"; columns[4].HeaderText = "Count[%]"; columns[4].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[4].DefaultCellStyle.Format = "0.0000"; columns[5].HeaderText = "Min Len."; columns[5].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[5].DefaultCellStyle.Format = "0.000"; columns[6].HeaderText = "Max Len."; columns[6].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[6].DefaultCellStyle.Format = "0.000"; columns[7].HeaderText = "Avg Len."; columns[7].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[7].DefaultCellStyle.Format = "0.000"; columns[8].HeaderText = "Median Len."; columns[8].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; columns[8].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; columns[8].DefaultCellStyle.Format = "0.000"; dialog.DataGrid.Columns.AddRange(columns); foreach (var labelName in labelInfo.Keys.OrderBy(k => k)) { decimal time = labelInfo[labelName].Sum(); int count = labelInfo[labelName].Count; decimal min = labelInfo[labelName].Min(); decimal max = labelInfo[labelName].Max(); decimal avg = labelInfo[labelName].Average(); var ordered = labelInfo[labelName].OrderBy(x => x).ToList(); decimal median = ((count % 2) == 0) ? (ordered[count / 2 - 1] + ordered[count / 2]) / 2 : ordered[count / 2]; dialog.DataGrid.Rows.Add(labelName, time, 100M * time / sumTime, count, 100M * count / sumCount, min, max, avg, median); } dialog.ShowDialog(); } return(null); }