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()
        {
            EscapeReversion aEscapeReversion = new EscapeReversion();

            aEscapeReversion._escape    = Escape.GetInstance();
            aEscapeReversion._reversion = Reversion.GetInstance();
            return(aEscapeReversion);
        }