//------------------------------------------------------------------------------------------------ /// <summary> /// Adds a point to the current model. /// </summary> /// <param name="p">The point to add the the model.</param> /// <exception cref="InvalidBeliefModelException">Thrown if the model already contains the given /// point.</exception> public void AddPoint(DiscreteSensorFocalPoint p) { if (_belief.Contains(p)) { throw new InvalidBeliefModelException(String.Format("The model contains twice the same sensor measure for the Element {0}!", _element.ToString())); } _belief.Add(p); }
//------------------------------------------------------------------------------------------------ private void ParseDiscreteSensorModel(XmlNode node) { DiscreteSensorModel sensorBelief = new DiscreteSensorModel(node.Attributes["name"].InnerText); //Load options if there are some: XmlNode options = node.SelectSingleNode("options"); if (options != null) { foreach (XmlNode n in options.ChildNodes) { string name = n.Attributes["name"].InnerText.ToLower(); string param = n.InnerText; if (name == "tempo-specificity") { sensorBelief.AddOption(DiscreteSensorOption.Option_Flags.OP_TEMPO_SPECIFICITY, Convert.ToDouble(param)); } else if (name == "tempo-fusion") { sensorBelief.AddOption(DiscreteSensorOption.Option_Flags.OP_TEMPO_FUSION, Convert.ToDouble(param)); } else if (name == "variation") { sensorBelief.AddOption(DiscreteSensorOption.Option_Flags.OP_VARIATION, Convert.ToDouble(param)); } else { throw new InvalidBeliefModelException("The option \"{0}\" does not exist!"); } } } //Load each point: XmlNodeList points = node.SelectNodes("point"); if (points == null) { throw new InvalidBeliefModelException("A sensor model should contain points!"); } List <DiscreteSensorFocalBelief> focals = new List <DiscreteSensorFocalBelief>(); foreach (XmlNode point in points) { XmlNode value = point.SelectSingleNode("value"); if (value == null) { throw new InvalidBeliefModelException("Every point in a model should contain a sensor measure value under \"value\"!"); } double measure = Convert.ToDouble(value.InnerText); XmlNodeList masses = point.SelectNodes("mass"); if (masses == null) { throw new InvalidBeliefModelException("Every point in a model should contain masses!"); } foreach (XmlNode mass in masses) { //Create the focal point: double massValue = Convert.ToDouble(mass.InnerText); DiscreteSensorFocalPoint sfp = new DiscreteSensorFocalPoint(measure, massValue); //Create the element and add it if necessary: DiscreteElement e = new DiscreteElement(this._refList, mass.Attributes["set"].InnerText.Split(' ')); DiscreteSensorFocalBelief sfb = new DiscreteSensorFocalBelief(e); if (focals.Contains(sfb)) { int index = focals.IndexOf(sfb); focals[index].AddPoint(sfp); } else { focals.Add(sfb); focals[focals.Count - 1].AddPoint(sfp); } } } foreach (DiscreteSensorFocalBelief sfb in focals) { sfb.Sort(); sensorBelief.AddFocal(sfb); } //Add the model: _discreteSensorModels.Add(sensorBelief); }