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);
        }