/// <summary>
        /// Transforms from kh list to mental model
        /// </summary>
        /// <returns></returns>
        private List <MentalModel> TransformDOToMentalModel()
        {
            mentalProto = DecisionOptions.GroupBy(kh => kh.MentalModel).OrderBy(g => g.Key).Select(g =>
                                                                                                   new MentalModel(g.Key, Goals.Where(goal => MentalModel[g.Key.ToString()].AssociatedWith.Contains(goal.Name)).ToArray(),
                                                                                                                   g.GroupBy(kh => kh.DecisionOptionsLayer).OrderBy(g2 => g2.Key).
                                                                                                                   Select(g2 => new DecisionOptionLayer(MentalModel[g.Key.ToString()].Layer[g2.Key.ToString()], g2)))).ToList();

            return(mentalProto);
        }
        /// <summary>
        /// Adds decision option to mental model of current prototype if it isn't exists in the scope.
        /// </summary>
        /// <param name="newDecisionOption"></param>
        /// <param name="layer"></param>
        public void AddNewDecisionOption(DecisionOption newDecisionOption, DecisionOptionLayer layer)
        {
            if (mentalProto == null)
            {
                TransformDOToMentalModel();
            }

            layer.Add(newDecisionOption);

            DecisionOptions.Add(newDecisionOption);
        }
 /// <summary>
 /// Checks for similar decision options
 /// </summary>
 /// <param name="decisionOption"></param>
 /// <returns></returns>
 public bool IsSimilarDecisionOptionExists(DecisionOption decisionOption)
 {
     return(DecisionOptions.Any(kh => kh == decisionOption));
 }