protected void DescribeDimensions(ILogBuilder logger, List <dimensionSpecification> dimensions, string heading)
        {
            if (dimensions.Any())
            {
                logger.AppendLine(heading);
                logger.nextTabLevel();

                for (int i = 0; i < labelDimensions.Count; i++)
                {
                    dimensionSpecification ds = labelDimensions[i];
                    logger.AppendPair("[" + i.ToString("D2") + "]", ds.functionName, true, "\t\t\t");
                }

                logger.prevTabLevel();
            }
        }
        //  public List<dimensionSpecification> dimensions { get; set; } = new List<dimensionSpecification>();
        public void AddDimensionSpecification(dimensionSpecification dimension)
        {
            switch (dimension.type)
            {
            case FeatureVectorDimensionType.directTermWeight:
                featureDimensions.Add(dimension);
                break;

            case FeatureVectorDimensionType.similarityFunction:
                labelDimensions.Add(dimension);
                break;

            case FeatureVectorDimensionType.topicWeight:
                topicDimensions.Add(dimension);
                break;
            }
        }