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 glue = ((StringParameter)args[0]).Value; var type = ((SingleSelectParameter)args[1]).Value; var skip = ((BooleanParameter)args[2]).Value; var labelSequence = env.SelectedSequence.GetLabelSequence(); ICSLabelSequence ret = new ICSLabelSequence(); ICSLabel prev = null; foreach (var label in labelSequence.EnumerateLabels()) { if (skip && label.IsEmptyLabel) { continue; } string name = label.LabelText; if (prev != null) { name = prev.LabelText + glue + label.LabelText; } if (prev != null || type == 0) { if (type == 0) { ret.SetLabel(label.BeginTime, label.EndTime, name); } else { ret.SetLabel(prev.BeginTime, prev.EndTime, name); } } prev = label; } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("AppendPrev", env.SelectedSequence.Title))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var labelSequence = env.SelectedSequence.GetLabelSequence(); var labels = (args[0] as LabelSelectParameter).Value; var beforeStart = (args[1] as NumberParameter).Value; var afterStart = (args[2] as NumberParameter).Value; var beforeEnd = (args[3] as NumberParameter).Value; var afterEnd = (args[4] as NumberParameter).Value; ICSLabelSequence tmp = new ICSLabelSequence(); foreach (var label in labelSequence.EnumerateLabels()) { if (labels.Contains(label.LabelText)) { decimal preStart = label.BeginTime - beforeStart; decimal postStart = label.BeginTime + afterStart; if (postStart > preStart) { tmp.SetLabel(preStart, postStart, label.LabelText + "_begin"); } decimal preEnd = label.EndTime - beforeEnd; decimal postEnd = label.EndTime + afterEnd; if (postEnd > preEnd) { tmp.SetLabel(preEnd, postEnd, label.LabelText + "_end"); } } } return(SequenceData.FromLabelSequence(tmp, PathEx.GiveName("Boundary", env.SelectedSequence.Title), null)); }
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) { SequenceColumnSelectParameter column = args[0] as SequenceColumnSelectParameter; int tmp = env.SelectedSequence.Borders.TargetColumnIndex; env.SelectedSequence.Borders.TargetColumnIndex = column.Value; ICSLabelSequence labelSeq = env.SelectedSequence.GetLabelSequence(); if (tmp != column.Value) { env.SelectedSequence.Borders.TargetColumnIndex = tmp; } return(SequenceData.FromLabelSequence(labelSeq, PathEx.GiveName("LabelOf", env.SelectedSequence.Title))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var operand = (args[0] as SequenceSingleSelectParameter).Value; var sameOnly = ((BooleanParameter)args[1]).Value; var one = env.SelectedSequence.GetLabelSequence(); var another = operand.GetLabelSequence(); var l1 = one.EnumerateLabels().GetEnumerator(); var l2 = another.EnumerateLabels().GetEnumerator(); if (!(l1.MoveNext() && l2.MoveNext())) { return(null); } ICSLabelSequence tmp = new ICSLabelSequence(); while (true) { // (not A) or B === A => B if ((!sameOnly || l1.Current.LabelText == l2.Current.LabelText) && !l1.Current.IsEmptyLabel && !l2.Current.IsEmptyLabel) { decimal begin = Math.Max(l1.Current.BeginTime, l2.Current.BeginTime); decimal end = Math.Min(l1.Current.EndTime, l2.Current.EndTime); if (end > begin) { tmp.SetLabel(begin, end, l1.Current.LabelText); } } if (l1.Current.EndTime < l2.Current.EndTime) { if (!l1.MoveNext()) { break; } } else { if (!l2.MoveNext()) { break; } } } return(SequenceData.FromLabelSequence(tmp, env.SelectedSequence.Title + "-intersect-" + operand.Title)); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var rows = ((SequenceMultiSelectParameter)args[0]).Value; var others = rows.Select(p => p.GetLabelSequence()).ToList(); var sep = (StringParameter)args[1]; var multi = (BooleanParameter)args[2]; var useEmpty = (BooleanParameter)args[3]; if (others.Count == 0) { return(null); } var current = env.SelectedSequence.GetLabelSequence(); var ret = new ICSLabelSequence(); foreach (var label in current.EnumerateLabels()) { if (label.LabelText == "" && !useEmpty.Value) { continue; } var clips = others.Select(r => r.ClipLabelsBetween(label.BeginTime, label.EndTime, ICSLabelSequence.ClipLabelsMode.CutBorder)); string name = label.LabelText; foreach (var clip in clips) { var texts = clip.Where(c => useEmpty.Value || c.LabelText != "").ToList(); if (multi.Value) { foreach (var text in texts) { name += sep.Value + text.LabelText; } } else { if (texts.Count > 0) { name += sep.Value + texts[0].LabelText; } } ret.SetLabel(label.ChangeText(name)); } } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("ContainsProduct", new string[] { env.SelectedSequence.Title }.Union(rows.Select(p => p.Title))))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var another = ((SequenceSingleSelectParameter)args[0]).Value; var labels = ((LabelSelectParameter)args[1]).Value; var row = another.GetLabelSequence(); var current = env.SelectedSequence.GetLabelSequence(); var ret = new ICSLabelSequence(); var l1 = current.EnumerateLabels().GetEnumerator(); var l2 = row.EnumerateLabels().GetEnumerator(); if (l1.MoveNext() && l2.MoveNext()) { while (true) { if (labels.Contains(l2.Current.LabelText)) { var begin1 = l1.Current.BeginTime <= l2.Current.BeginTime && l2.Current.BeginTime < l1.Current.EndTime; var end1 = l1.Current.BeginTime <= l2.Current.EndTime && l2.Current.EndTime < l1.Current.EndTime; var begin2 = l2.Current.BeginTime <= l1.Current.BeginTime && l1.Current.BeginTime < l2.Current.EndTime; var end2 = l2.Current.BeginTime <= l1.Current.EndTime && l1.Current.EndTime < l2.Current.EndTime; if (begin1 || end1 || begin2 || end2) { ret.SetLabel(l1.Current); } } if (l1.Current.EndTime < l2.Current.EndTime) { if (!l1.MoveNext()) { break; } } else { if (!l2.MoveNext()) { break; } } } } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("Contains", env.SelectedSequence.Title, another.Title))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var operand = args[0] as SequenceMultiSelectParameter; var sep = args[1] as StringParameter; var useEmpty = args[2] as BooleanParameter; List <SequenceData> sequences = new List <SequenceData>(); sequences.Add(env.SelectedSequence); sequences.AddRange(operand.Value); ICSLabelSequence ret = new ICSLabelSequence(); var timeList = TimeSeriesValuesCalculation.MergeTimeList(sequences.Select(p => p.Values)).ToList(); if (timeList.Count != 0) { var lastTime = timeList.Last(); foreach (var time in timeList) { if (time < lastTime) { StringBuilder tmp = new StringBuilder(); bool empty = true; foreach (var sequence in sequences) { var label = sequence.GetLabelAt(time); if (label != "" || useEmpty.Value) { if (!empty) { tmp.Append(sep.Value); } tmp.Append(label); empty = false; } } ret.SetLabel(time, lastTime, tmp.ToString()); } } } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("Product", sequences.Select(p => p.Title)))); }
public static ICSLabelSequence ToLabelByCondition(IList <SequenceData> sequences, Func <decimal?[], int> cond) { var timeList = TimeSeriesValuesCalculation.MergeTimeList(sequences.Select(p => p.Values)).ToList(); var ret = new ICSLabelSequence(); int prevKey = 0; int prevIndex = -1; for (int key = 1; key < timeList.Count - 1; key++) { var values = sequences.Select(s => s.Values[timeList[key]][s.Borders.TargetColumnIndex]).ToArray(); int index = cond(values); if (prevIndex != index) { if (prevIndex >= 0 && prevIndex < sequences.Count) { ret.SetLabel(timeList[prevKey], timeList[key], sequences[prevIndex].Title); } else { ret.SetLabel(timeList[prevKey], timeList[key], ""); } prevKey = key; prevIndex = index; } } if (timeList.Count >= 1) { if (prevIndex >= 0 && prevIndex < sequences.Count) { ret.SetLabel(timeList[prevKey], timeList[timeList.Count - 1], sequences[prevIndex].Title); } else { ret.SetLabel(timeList[prevKey], timeList[timeList.Count - 1], ""); } } return(ret); }
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 IList <SequenceData> OutputSequence(IList <MotionObjectInfo> selected, IList <ProcParam <MotionProcEnv> > args, IEnumerable <ReadOnlyMotionFrame> frames, ProgressInformation progressInfo) { MotionObjectSingleSelectParameter main = args[0] as MotionObjectSingleSelectParameter; NumberParameter enlarge = args[1] as NumberParameter; float enlargement = 0; try { enlargement = (float)enlarge.Value; } catch (ArithmeticException) { } IList <MotionObjectInfo> targetInfoList = selected.Where(info => info != main.Value).ToList(); ICSLabelSequence labelSequence = new ICSLabelSequence(TimeController.Singleton.EndTime); string prevLabelText = null; decimal prevTime = decimal.MinValue; decimal wholeEndTime = decimal.MinValue; foreach (var frame in frames) { wholeEndTime = frame.Time; LineObject line = frame[main.Value] as LineObject; string labelText = ""; if (line == null || targetInfoList.Any(info => frame[info] == null)) { labelText = "no data"; } else { float minDistance = float.MaxValue; MotionObjectInfo nearest = null; foreach (var targetInfo in targetInfoList) { float distance; if (frame[targetInfo].DetectLineCollision(line.Position, line.AnotherEnd, enlargement, out distance)) { if (distance < minDistance) { nearest = targetInfo; minDistance = distance; } } } if (nearest != null) { labelText = nearest.Name; } else { labelText = "else"; } } if (prevLabelText != labelText) { decimal endTime = frame.Time; if (prevTime < endTime && prevLabelText != null) { labelSequence.SetLabel(prevTime, endTime, prevLabelText); } prevTime = endTime; prevLabelText = labelText; } } if (prevTime < wholeEndTime && prevLabelText != null) { labelSequence.SetLabel(prevTime, wholeEndTime, prevLabelText); } SequenceData data = SequenceData.FromLabelSequence(labelSequence, PathEx.GiveName("Collision", main.Value.Name)); return(new SequenceData[] { data }); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var mode = args[0] as SingleSelectParameter; var threshold = args[1] as NumberParameter; var correct = args[2] as SequenceSingleSelectParameter; var correctSequence = correct.Value; ICSLabelSequence ret = new ICSLabelSequence(); decimal correctCount = 0, obtainCount = 0, matchCount = 0; switch (mode.Value) { case 0: var common = TimeSeriesValuesCalculation.MergeTimeList(new[] { env.SelectedSequence.Values, correctSequence.Values }).ToList(); for (int i = 0; i < common.Count - 1; i++) { string o = env.SelectedSequence.GetLabelAt(common[i]); string c = correctSequence.GetLabelAt(common[i]); if (o == "" && c == "") { continue; } decimal interval = common[i + 1] - common[i]; if (o != "") { obtainCount += interval; } if (c != "") { correctCount += interval; } if (o == c) { matchCount += interval; } ret.SetLabel(common[i], common[i + 1], o == c ? "Match" : o == "" ? "False Negative" : c == "" ? "False Positive" : "Mismatch"); } break; case 1: case 2: SequenceData main, sub; if (mode.Value == 1) { main = correctSequence; sub = env.SelectedSequence; } else { main = env.SelectedSequence; sub = correctSequence; } var subLabel = sub.GetLabelSequence(); foreach (var label in main.GetLabelSequence().EnumerateLabels()) { decimal denom = label.Duration; if (label.LabelText != "") { var clip = subLabel.ClipLabelsBetween(label.BeginTime, label.EndTime, ICSLabelSequence.ClipLabelsMode.CutBorder); decimal numer = clip.Where(l => l.LabelText == label.LabelText).Select(l => l.Duration).Sum(); if (numer >= denom * threshold.Value) { matchCount++; ret.SetLabel(label.ChangeText("Match")); } else { ret.SetLabel(label.ChangeText(mode.Value == 1 ? "False Negative" : "False Positive")); } obtainCount++; correctCount++; } else { var clip = subLabel.ClipLabelsBetween(label.BeginTime, label.EndTime, ICSLabelSequence.ClipLabelsMode.CutBorder); var missClip = clip.Where(l => l.LabelText != "").ToList(); var missCount = missClip.Count; if (mode.Value == 1) { obtainCount += missCount; } else { correctCount += missCount; } foreach (var m in missClip) { ret.SetLabel(m.ChangeText(mode.Value == 1 ? "False Positive" : "False Negative")); } } } break; } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("PrecisionRecall", env.SelectedSequence.Title, correctSequence.Title))); }
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); }
public void AutoLoadICSLabelSequence(ICSLabelSequence labelSequence, string title) { _viewerController.OpenLabelSequence(labelSequence, 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()))); }