public PCCMetric() { Limits = new Limits(); }
private PCC.RootObject BuildUpPCCConfiguration(string driverName, CyPhy.PCCDriver PCCDriver, int upMethodNum, int saMethodNum) { PCC.RootObject rootConfig = new PCC.RootObject(); PCC.Configurations configs = new PCC.Configurations(); configs.Configuration = new PCC.Configuration(); configs.Configuration.Parts = new List<PCC.Part>(); PCC.Part part = new PCC.Part(); PCC.PCCInputArguments pccInputArgs = new PCC.PCCInputArguments(); part.ModelConfigFileName = "test_bench_model_config.json"; part.ToolConfigFileName = "test_bench_tool_config.json"; configs.Configuration.Parts.Add(part); configs.Configuration.Name = driverName; configs.Configuration.ID = PCCDriver.ID; configs.Configuration.PCCInputArguments = new PCC.PCCInputArguments(); pccInputArgs = configs.Configuration.PCCInputArguments; pccInputArgs.InputIDs = new List<string>(); pccInputArgs.OutputIDs = new List<string>(); pccInputArgs.StochasticInputs = new PCC.StochasticInputs(); pccInputArgs.StochasticInputs.InputDistributions = new List<PCCInputDistribution>(); pccInputArgs.PCCMetrics = new List<PCC.PCCMetric>(); foreach (var item in PCCDriver.Children.PCCParameterCollection) { //pccInputArgs.InputIDs.Add(item.ID); PCCInputDistribution inputDist = new PCCInputDistribution(); if (item is CyPhy.PCCParameterNormal) { inputDist.Distribution = "NORM"; inputDist.Param1 = (item as CyPhy.PCCParameterNormal).Attributes.Mean; inputDist.Param2 = (item as CyPhy.PCCParameterNormal).Attributes.StandardDeviation; } else if (item is CyPhy.PCCParameterUniform) { inputDist.Distribution = "UNIF"; inputDist.Param1 = (item as CyPhy.PCCParameterUniform).Attributes.LowLimit; inputDist.Param2 = (item as CyPhy.PCCParameterUniform).Attributes.HighLimit; } else if (item is CyPhy.PCCParameterLNormal) { inputDist.Distribution = "LNORM"; inputDist.Param1 = (item as CyPhy.PCCParameterLNormal).Attributes.Shape; inputDist.Param2 = (item as CyPhy.PCCParameterLNormal).Attributes.LogScale; } else if (item is CyPhy.PCCParameterBeta) { inputDist.Distribution = "BETA"; inputDist.Param1 = (item as CyPhy.PCCParameterBeta).Attributes.Shape1; inputDist.Param2 = (item as CyPhy.PCCParameterBeta).Attributes.Shape2; inputDist.Param3 = (item as CyPhy.PCCParameterBeta).Attributes.LowLimit; inputDist.Param4 = (item as CyPhy.PCCParameterBeta).Attributes.HighLimit; } foreach (var driveParameter in item.DstConnections.DriveParameterCollection) { inputDist.TestBenchParameterNames.Add(driveParameter.DstEnd.Name); } //inputDist.ID = inputDist.ID == null ? item.ID : inputDist.ID; inputDist.ID = item.ID; inputDist.Name = item.Name; pccInputArgs.StochasticInputs.InputDistributions.Add(inputDist); } pccInputArgs.StochasticInputs.InputDistributions = pccInputArgs.StochasticInputs.InputDistributions.OrderBy(p => p.TestBenchParameterNames.FirstOrDefault()).ToList(); foreach (var item in pccInputArgs.StochasticInputs.InputDistributions) { pccInputArgs.InputIDs.Add(item.ID); } foreach (var item in PCCDriver.Children.PCCOutputCollection) { //pccInputArgs.OutputIDs.Add(item.ID); if (item.Attributes.TargetPCCValue == 0) { this.Logger.WriteWarning("TargetPCCValue is set to zero. Is this correct?"); } var pccMetric = new PCC.PCCMetric(); pccMetric.ID = item.ID; pccMetric.TestBenchMetricName = item.SrcConnections.PCCOutputMappingCollection.FirstOrDefault().SrcEnd.Name; pccMetric.Name = "TestBench." + pccMetric.TestBenchMetricName; pccMetric.PCC_Spec = item.Attributes.TargetPCCValue; // Could this ever present a problem? var metricLimits = new PCC.Limits(); double dMin = double.NegativeInfinity; double dMax = double.PositiveInfinity; if (double.TryParse(item.Attributes.MinValue, out dMin) == false) { // using min infinity this.Logger.WriteWarning("MinValue must be 'Infinity,' '-Infinity,' or a double."); } if (double.TryParse(item.Attributes.MaxValue, out dMax) == false) { // using max infinity this.Logger.WriteWarning("MaxValue must be 'Infinity,' '-Infinity,' or a double."); } metricLimits.Min = dMin; metricLimits.Max = dMax; metricLimits.op = null; // "min/max/avg/none"; // metricLimits.minrange = null; // "value or n/a"; // TODO: add these 3 attributes to the PCCOutput component in CyPhy metricLimits.maxrange = null; //"value or n/a"; // pccMetric.Limits = metricLimits; pccInputArgs.PCCMetrics.Add(pccMetric); } pccInputArgs.PCCMetrics = pccInputArgs.PCCMetrics.OrderBy(m => m.TestBenchMetricName).ToList(); foreach (var item in pccInputArgs.PCCMetrics) { pccInputArgs.OutputIDs.Add(item.ID); } pccInputArgs.Methods = new List<int>(); if (upMethodNum > 0) { pccInputArgs.Methods.Add(upMethodNum); } if (saMethodNum > 0) { pccInputArgs.Methods.Add(saMethodNum); } rootConfig = new PCC.RootObject() { Configurations = configs }; return rootConfig; }