Example #1
0
        /// <summary>
        /// Called by the component carrying the data to input into the calculator.
        /// </summary>
        /// <param name="_calculator">Component carrying the calculation(s)</param>
        /// <param name="_input_mapping">key = source parameter id, value = target parameter id</param>
        private Mapping2Component CreateMappingTo(string _name, Component _calculator, Dictionary <long, long> _input_mapping, Dictionary <long, long> _output_mapping)
        {
            if (_calculator == null)
            {
                return(null);
            }
            if (_calculator.ID == this.ID)
            {
                return(null);
            }
            if (_input_mapping == null || _output_mapping == null)
            {
                return(null);
            }
            if (_input_mapping.Count == 0 || _output_mapping.Count == 0)
            {
                return(null);
            }

            _calculator.MappedToBy.Add(this);

            Mapping2Component mapping = new Mapping2Component(_name, _calculator, _input_mapping, _output_mapping);

            this.mappings_to_comps.Add(mapping);
            return(mapping);
        }
Example #2
0
        public void TranslateMapping(Mapping2Component _mapping, out Dictionary <Parameter.Parameter, Parameter.Parameter> input_mapping,
                                     out Dictionary <Parameter.Parameter, Parameter.Parameter> output_mapping)
        {
            input_mapping  = new Dictionary <Parameter.Parameter, Parameter.Parameter>();
            output_mapping = new Dictionary <Parameter.Parameter, Parameter.Parameter>();
            if (_mapping == null)
            {
                return;
            }

            List <Parameter.Parameter> input_source = this.GetByIds(_mapping.InputMapping.Keys.ToList());
            List <Parameter.Parameter> input_target = _mapping.Calculator.GetByIds(_mapping.InputMapping.Values.ToList());

            if (input_source.Count != input_target.Count)
            {
                return;
            }
            input_mapping = input_source.Zip(input_target, (x, y) => new KeyValuePair <Parameter.Parameter, Parameter.Parameter>(x, y)).ToDictionary(x => x.Key, x => x.Value);

            List <Parameter.Parameter> output_source = this.GetByIds(_mapping.OutputMapping.Keys.ToList());
            List <Parameter.Parameter> output_target = _mapping.Calculator.GetByIds(_mapping.OutputMapping.Values.ToList());

            if (output_source.Count != output_target.Count)
            {
                return;
            }
            output_mapping = output_source.Zip(output_target, (x, y) => new KeyValuePair <Parameter.Parameter, Parameter.Parameter>(x, y)).ToDictionary(x => x.Key, x => x.Value);
        }
Example #3
0
        public Comp2CompMappingErr MappingEditPreview(Mapping2Component _map, Dictionary <Parameter.Parameter, Parameter.Parameter> _new_input_mapping,
                                                      Dictionary <Parameter.Parameter, Parameter.Parameter> _new_output_mapping)
        {
            if (!(this.Mappings2Comps.Contains(_map)))
            {
                return(Comp2CompMappingErr.COULD_NOT_EVALUATE);
            }

            if (_new_input_mapping == null || _new_input_mapping.Count == 0)
            {
                return(Comp2CompMappingErr.NOT_ALL_INPUT_ASSIGNED);
            }

            if (_new_output_mapping == null || _new_output_mapping.Count == 0)
            {
                return(Comp2CompMappingErr.NOT_ALL_OUTPUT_ASSIGNED);
            }

            foreach (Parameter.Parameter p in _new_output_mapping.Values)
            {
                if (p.Propagation != InfoFlow.MIXED && p.Propagation != InfoFlow.OUPUT)
                {
                    return(Comp2CompMappingErr.NOT_ALL_OUTPUT_ASSIGNED);
                }

                List <Parameter.Parameter> required_input_for_p = _map.Calculator.GetInputParamsInvolvedInTheCalculationOf(p);
                if (required_input_for_p.Count == 0)
                {
                    return(Comp2CompMappingErr.NO_CALCULATION_FOUND);
                }
            }

            return(Comp2CompMappingErr.NONE);
        }
Example #4
0
        public Comp2CompMappingErr MappingPreview(Component _calculator, Dictionary <Parameter.Parameter, Parameter.Parameter> _input_mapping,
                                                  Dictionary <Parameter.Parameter, Parameter.Parameter> _output_mapping)
        {
            if (_calculator == null)
            {
                return(Comp2CompMappingErr.COULD_NOT_EVALUATE);
            }

            if (_calculator.ID == this.ID)
            {
                return(Comp2CompMappingErr.SELF_REFERENCE);
            }

            Mapping2Component duplicate_mapping = this.mappings_to_comps.FirstOrDefault(x => x.Calculator.ID == _calculator.ID);

            if (duplicate_mapping != null)
            {
                return(Comp2CompMappingErr.DUPLICATE_CALCULATOR);
            }

            if (_input_mapping == null || _input_mapping.Count == 0)
            {
                return(Comp2CompMappingErr.NOT_ALL_INPUT_ASSIGNED);
            }

            if (_output_mapping == null || _output_mapping.Count == 0)
            {
                return(Comp2CompMappingErr.NOT_ALL_OUTPUT_ASSIGNED);
            }

            foreach (Parameter.Parameter p in _output_mapping.Values)
            {
                if (p.Propagation != InfoFlow.MIXED && p.Propagation != InfoFlow.OUPUT)
                {
                    return(Comp2CompMappingErr.NOT_ALL_OUTPUT_ASSIGNED);
                }

                List <Parameter.Parameter> required_input_for_p = _calculator.GetInputParamsInvolvedInTheCalculationOf(p);
                if (required_input_for_p.Count == 0)
                {
                    return(Comp2CompMappingErr.NO_CALCULATION_FOUND);
                }

                // partial input acceptable
                //foreach (Parameter.Parameter ip in required_input_for_p)
                //{
                //    if (!(_input_mapping.ContainsValue(ip)))
                //        return Comp2CompMappingErr.NOT_ALL_INPUT_ASSIGNED;
                //}
            }

            return(Comp2CompMappingErr.NONE);
        }
Example #5
0
        public bool RemoveMapping(Mapping2Component _mapping)
        {
            if (_mapping == null)
            {
                return(false);
            }

            if (_mapping.Calculator != null)
            {
                _mapping.Calculator.MappedToBy.Remove(this);
            }

            return(this.mappings_to_comps.Remove(_mapping));
        }
Example #6
0
        public void EvaluateMapping(Mapping2Component _mapping)
        {
            if (_mapping == null)
            {
                return;
            }

            Dictionary <long, Parameter.Parameter> all_params = this.GetFlatParamsList();

            // reset the calculator
            _mapping.Calculator.ResetToDefaultValuesBeforeCalculation();

            // gather the input values
            Dictionary <long, double> input_values = new Dictionary <long, double>();

            foreach (var entry in _mapping.InputMapping)
            {
                if (all_params.ContainsKey(entry.Key))
                {
                    input_values.Add(entry.Value, all_params[entry.Key].ValueCurrent);
                }
            }
            // gather the output values
            Dictionary <long, double> output_values = new Dictionary <long, double>();

            foreach (var entry in _mapping.OutputMapping)
            {
                if (all_params.ContainsKey(entry.Key))
                {
                    output_values.Add(entry.Value, all_params[entry.Key].ValueCurrent);
                }
                else
                {
                    output_values.Add(entry.Value, 0.0);
                }
            }

            // pass the parameters to the calculator
            _mapping.Calculator.CalculateAndMap(input_values, ref output_values);

            // retrieve the result
            foreach (var entry in _mapping.OutputMapping)
            {
                if (output_values.ContainsKey(entry.Value))
                {
                    all_params[entry.Key].ValueCurrent = output_values[entry.Value];
                }
            }
        }
Example #7
0
        public void EditMapping(Mapping2Component _map, Dictionary <Parameter.Parameter, Parameter.Parameter> _input_mapping,
                                Dictionary <Parameter.Parameter, Parameter.Parameter> _output_mapping, out Comp2CompMappingErr err)
        {
            err = this.MappingEditPreview(_map, _input_mapping, _output_mapping);
            if (err != Comp2CompMappingErr.NONE)
            {
                return;
            }

            // apply changes
            Dictionary <long, long> input_mapping  = _input_mapping.Select(x => new KeyValuePair <long, long>(x.Key.ID, x.Value.ID)).ToDictionary(x => x.Key, x => x.Value);
            Dictionary <long, long> output_mapping = _output_mapping.Select(x => new KeyValuePair <long, long>(x.Key.ID, x.Value.ID)).ToDictionary(x => x.Key, x => x.Value);

            _map.Adjust(input_mapping, output_mapping);
        }
Example #8
0
        internal bool RemoveMappingTo(Component _calc)
        {
            if (_calc == null)
            {
                return(false);
            }

            Mapping2Component to_remove = this.mappings_to_comps.FirstOrDefault(x => x.Calculator != null && x.Calculator.ID == _calc.ID);

            if (to_remove != null)
            {
                return(this.RemoveMapping(to_remove));
            }
            else
            {
                return(false);
            }
        }
Example #9
0
        public bool MappingToCompExists(Component _calculator)
        {
            Mapping2Component duplicate_mapping = this.mappings_to_comps.FirstOrDefault(x => x.Calculator.ID == _calculator.ID);

            return(duplicate_mapping != null);
        }