public void Correctness_check()
        {
            int col_length = Columns_length;

            Colchar_column_line_class[] columns_copy = Deep_copy_columns();
            columns_copy = Colchar_column_line_class.Order_in_standard_way(columns_copy);
            for (int indexC = 1; indexC < col_length; indexC++)
            {
                if (columns_copy[indexC].Equal_in_standard_way(columns_copy[indexC - 1]))
                {
                    throw new Exception("duplicated column charactarization");
                }
            }
            if (!Column_rearrangements_adopted)
            {
                throw new Exception("column rearrangements are not adopted");
            }
        }
        public int[] Order_columns_in_standard_way_and_get_old_new_index_array()
        {
            Correctness_check();
            Column_rearrangements_adopted = false;

            Colchar_column_line_class[] old_columns = Deep_copy_columns();
            Columns = Colchar_column_line_class.Order_in_standard_way(Columns);
            int columns_length = Columns.Length;

            #region Initialize index old new (and fill with -1 entries)
            int[] old_new_index_array = new int[columns_length];
            for (int indexOld = 0; indexOld < columns_length; indexOld++)
            {
                old_new_index_array[indexOld] = -1;
            }
            #endregion

            #region Fill index old new
            Colchar_column_line_class old_column;
            Colchar_column_line_class new_column;
            for (int indexOld = 0; indexOld < columns_length; indexOld++)
            {
                old_column = old_columns[indexOld];
                for (int indexNew = 0; indexNew < columns_length; indexNew++)
                {
                    new_column = Columns[indexNew];
                    if (old_column.Equal_in_standard_way(new_column))
                    {
                        old_new_index_array[indexOld] = indexNew;
                        break;
                    }
                }
            }
            #endregion

            return(old_new_index_array);
        }
        public void Identify_new_columns_and_add_at_right_site(Colchar_column_line_class[] add_data)
        {
            Correctness_check();

            int old_columns_length = Columns_length;

            Colchar_column_line_class[] add_columns;

            #region Identify add columns
            List <Colchar_column_line_class> add_columns_list = new List <Colchar_column_line_class>();
            add_data = Colchar_column_line_class.Order_in_standard_way(add_data);
            int add_data_length = add_data.Length;
            Colchar_column_line_class add_line;
            bool old_columns_contain_new_combination = false;
            Colchar_column_line_class old_column_line;
            Colchar_column_line_class add_column_line;
            for (int indexAdd = 0; indexAdd < add_data_length; indexAdd++)
            {
                add_line = add_data[indexAdd];
                if ((indexAdd == 0) || (!Colchar_column_line_class.Equal_in_standard_way(add_line, add_data[indexAdd - 1])))
                {
                    old_columns_contain_new_combination = false;
                    for (int indexOld = 0; indexOld < old_columns_length; indexOld++)
                    {
                        old_column_line = Columns[indexOld];
                        if (old_column_line.Equal_in_standard_way(add_line))
                        {
                            old_columns_contain_new_combination = true;
                            break;
                        }
                    }
                    if (!old_columns_contain_new_combination)
                    {
                        add_column_line = new Colchar_column_line_class(add_line.EntryType, add_line.Timepoint, add_line.SampleName);
                        add_columns_list.Add(add_column_line);
                    }
                }
            }
            add_columns = add_columns_list.ToArray();
            #endregion

            #region Add add columns at right site
            int add_columns_length = add_columns.Length;
            int new_columns_length = add_columns_length + old_columns_length;
            Colchar_column_line_class[] new_columns = new Colchar_column_line_class[new_columns_length];
            int indexNew = -1;
            for (int indexOld = 0; indexOld < old_columns_length; indexOld++)
            {
                indexNew++;
                new_columns[indexNew] = this.Columns[indexOld].Deep_copy();
            }
            for (int indexAdd = 0; indexAdd < add_columns_length; indexAdd++)
            {
                indexNew++;
                new_columns[indexNew] = add_columns[indexAdd].Deep_copy();
            }
            Columns = new_columns;
            #endregion

            Correctness_check();
        }