/// <summary>
        /// Расчет выбранной комбинации каналов/помех
        /// </summary>
        /// <param name="testCase"></param>
        /// <returns>Результирующий блок данных</returns>
        public RawDataMatrix PerformCombination(string testCase)
        {
            //Console.WriteLine("Тестовый вариант:" + testCase);

            resultMatrixes = new List <RawDataMatrix>();
            //Console.WriteLine("Имена матриц для обобщенного массива:");
            for (int i = 0; i < testCase.Length; i++)
            {
                string m_name = $"m{i + 1}_{testCase[i]}";
                // Console.WriteLine(m_name);
                resultMatrixes.Add(matrixes.FirstOrDefault(x => x.Name == m_name));
            }
            //Console.WriteLine(resultMatrixes.Count);
            //Вывод несоответствий базовой матрице
            //foreach (RawDataMatrix m in resultMatrixes)
            //{
            //    Console.WriteLine($"Matrix {m.Name}. Mismathces: {m.GetMismatches(mBase).Count()}");
            //}

            //начало основного алгоритма
            MatrixProcessor processor = new MatrixProcessor(resultMatrixes, mW, mBase);
            RawDataMatrix   result    = processor.GetResult();

            Gamma = processor.GetGamma();
            return(result);
        }
        /// <summary>
        /// Инициализирует 30/24/18 матриц (в зависимости от количества каналов)
        /// </summary>
        public void InitializeMatrixes()
        {
            matrixes = new List <RawDataMatrix>();

            for (int i = 1; i <= 5; i++)
            {
                for (int j = 1; j <= 6; j++)
                {
                    RawDataMatrix m = new RawDataMatrix(path, i, j);
                    if (m.IsInitialized)
                    {
                        matrixes.Add(m);
                    }
                }
            }

            channelCount = matrixes.Count / 6; //кол-во помеховых обстановок -6, а каналов 5,4 или 3

            switch (channelCount)
            {
            case 5:
                mW = new Matrix(path, $"mW{channelCount}");
                break;

            case 4:
                mW = new Matrix(path, $"mW{channelCount}");
                break;

            case 3:
                mW = new Matrix(path, $"mW{channelCount}");
                break;

            default:
                throw new Exception($"Не определены исходные матрицы. Количество исходных матриц:{channelCount}");
            }

            if (!mW.IsInitialized)
            {
                throw new Exception($"Матрица весов mW{channelCount} не обнаружена. Завершение приложения");
            }

            mBase = new Matrix(path, "mBase");
            if (!mBase.IsInitialized)
            {
                throw new Exception($"Эталонная матрица mBase не обнаружена. Завершение приложения");
            }
        }
        /// <summary>
        /// Основная функция рассчета достоверности. w - текущий весовой коэффициент
        /// </summary>
        /// <param name="w"></param>
        private void CalculateReliability(int w)
        {
            RawDataMatrix matrix = new RawDataMatrix(mBase.GetXSize(), mBase.GetYSize());

            for (int i = 0; i < mBase.GetXSize(); i++)
            {
                for (int j = 0; j < mBase.GetYSize(); j++)
                {
                    int   mCount   = matrixes.Count();
                    int[] cur_cell = new int[mCount];
                    try
                    {
                        int counter = 0;
                        foreach (var m in matrixes)
                        {
                            cur_cell[counter] = m[i, j];
                            counter++;
                        }
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                    matrix[i, j] = GetResultCell(cur_cell, w);
                }
            }

            int N_tmp = matrix.GetMismatches(mBase).N; //CheckReliability(matrix);

            if (w == mW.GetXSize() - 1)
            {
                nm = N_tmp;
                Console.WriteLine("NM:===>" + nm);
            }
            // Console.WriteLine($">>>Текущая достоверность: {N_tmp }<<<");
            if (N == -1 || N_tmp < N)
            {
                N = N_tmp;
                k = w + 1; //нумерация с 1
                Console.WriteLine($"K:====>{k}. N={N}");
                mResult = matrix;
            }
        }