protected IData CalculateScoresForData <T>(List <T> scoreableList, IData data) where T : IScoreable
        {
            if (data is SpeechEndSignal || data is DataEndSignal)
            {
                return(data);
            }

            if (scoreableList.IsEmpty())
            {
                return(null);
            }

            // convert the data to FloatData if not yet done
            if (data is DoubleData)
            {
                data = DataUtil.DoubleData2FloatData((DoubleData)data);
            }

            IScoreable bestToken = DoScoring(scoreableList, data);

            // apply optional score normalization
            if (_scoreNormalizer != null && bestToken is Token)
            {
                bestToken = _scoreNormalizer.Normalize(scoreableList, bestToken);
            }

            return(bestToken);
        }