/// <summary>
        /// Remove old species facts that are no longer
        /// included in the species fact scope.
        /// </summary>
        private void RemoveSpeciesFactsNotInScope()
        {
            Int32        index;
            ISpeciesFact speciesFact;

            if (SpeciesFacts.IsNotEmpty())
            {
                for (index = SpeciesFacts.Count - 1; index >= 0; index--)
                {
                    speciesFact = SpeciesFacts[index];
                    if ((!Factors.Contains(speciesFact.Factor)) ||
                        (!IndividualCategories.Contains(speciesFact.IndividualCategory)) ||
                        (!Taxa.Contains(speciesFact.Taxon)) ||
                        (speciesFact.HasHost && !Hosts.Contains(speciesFact.Host)) ||
                        (speciesFact.HasPeriod && !Periods.Contains(speciesFact.Period)))
                    {
                        // This species fact is no longer
                        // included in the species fact scope.
                        SpeciesFacts.RemoveAt(index);
                    }
                }
            }
        }
        /// <summary>
        /// Make automated calculations of species facts
        /// that are "automatic" in a species fact list.
        /// </summary>
        /// <param name="userContext">
        /// Information about the user that makes this method call.
        /// </param>
        public virtual void InitAutomatedCalculations(IUserContext userContext)
        {
            if (SpeciesFacts.IsNotEmpty())
            {
                foreach (ISpeciesFact speciesFact in SpeciesFacts)
                {
                    switch (speciesFact.Factor.Id)
                    {
                    case (Int32)(FactorId.RedListCategoryAutomatic):
                        ((SpeciesFactRedListCategory)(speciesFact)).Init(userContext, SpeciesFacts);
                        break;

                    case (Int32)(FactorId.RedListCriteriaAutomatic):
                        ((SpeciesFactRedListCriteria)(speciesFact)).Init(userContext, SpeciesFacts);
                        break;

                    case (Int32)(FactorId.RedListCriteriaDocumentationAutomatic):
                        ((SpeciesFactRedListCriteriaDocumentation)(speciesFact)).Init(userContext, SpeciesFacts);
                        break;
                    }
                }
            }
        }