/// <summary>
        /// Reads matrix and branches (if exists) from specified file.
        /// </summary>
        /// <param name="filePath">File path.</param>
        /// <param name="networkSize">The size of the network (matrix, which represents the network).</param>
        /// <param name="matrixType">The type of given matrix (content of the specified file)</param>
        /// <returns>Matrix and branches (if exists).</returns>
        /// <throws>CoreException, MatrixFormatException.</throws>
        public static MatrixInfoToRead Read(String filePath, int networkSize, AdjacencyMatrixType matrixType)
        {
            MatrixInfoToRead result = new MatrixInfoToRead();

            result.Matrix = MatrixReader(filePath, networkSize, matrixType);
            result.Branches = BranchesReader(filePath.Insert(filePath.Length - 4, "_branches"));

            return result;
        }
        private static ArrayList MatrixReader(String filePath, int networkSize, AdjacencyMatrixType matrixType)
        {
            ArrayList matrix;

            bool r = false;
            try
            {
                switch (matrixType)
                {
                    case AdjacencyMatrixType.ClassicalMatrix:
                        r = TryReadClassicalMatrix(filePath, networkSize, out matrix);
                        break;
                    case AdjacencyMatrixType.Degrees:
                        r = TryReadDegreesMatrix(filePath, networkSize, out matrix);
                        break;
                    default:
                        throw new CoreException("Unknown matrix type.");
                }
            }
            catch (SystemException)
            {
                throw new MatrixFormatException();
            }

            if (!r)
                throw new MatrixFormatException();

            return matrix;
        }