public LSystemStructureTreeElement(
            LinkedFileSet sourceFileSet,
            SymbolString <float> symbols,
            int indexInSymbols,
            int branchSymbolIndex = -1)
        {
            symbol     = symbols[indexInSymbols];
            parameters = symbols.parameters.AsArray(indexInSymbols);


            var symbolDefinition = sourceFileSet.GetLeafMostSymbolDefinition(symbol);

            var builder = new StringBuilder();

            builder.Append(symbolDefinition.characterInSourceFile);
            if (!"[]".Contains(symbolDefinition.characterInSourceFile))
            {
                symbols.WriteParamString(indexInSymbols, builder);
                builder.Append(" : ");
                builder.Append(Path.GetFileName(symbolDefinition.sourceFileDefinition));
            }
            displayName = builder.ToString();

            if (branchSymbolIndex != -1)
            {
                id = -branchSymbolIndex - 1;
            }
            else
            {
                id = indexInSymbols;
            }
        }