public static LabelledLeafDistributionDiscrete GetInstance(string name)
        {
            switch (name.ToLower())
            {
            case "escape":
                return(Escape.GetInstance());

            case "reversion":
                return(Reversion.GetInstance());

            case "escapereversion":
                return(EscapeReversion.GetInstance());

            case "attraction":
                return(Attraction.GetInstance());

            case "repulsion":
                return(Repulsion.GetInstance());

            case "attractionrepulsion":
                return(AttractionRepulsion.GetInstance());

            case "null":
                return(null);

            default:
                throw new ArgumentException("Don't know leaf distribution " + name);
            }
        }
        internal static LabelledLeafDistributionDiscrete GetInstance()
        {
            AttractionRepulsion aAttractionRepulsion = new AttractionRepulsion();

            aAttractionRepulsion._attraction = Attraction.GetInstance();
            aAttractionRepulsion._repulsion  = Repulsion.GetInstance();
            return(aAttractionRepulsion);
        }