public FullFactorialDOEStudy(string name, string description, WorkflowComponent workflow, List <Data> factors, List <decimal> startingValues, List <decimal> stepSizes, List <int> noOfLevels, List <Data> responses)
            : base(name, description, workflow, factors, responses)
        {
            base.StudiedComponent = workflow;

            this.startingValues = startingValues;
            this.stepSizes      = stepSizes;
            this.noOfLevels     = noOfLevels;



            ColumnNames.Add("ID");
            ColumnTypes.Add(DataTypes.INTEGER);
            ColumnFormats.Add(0);
            ColumnUnits.Add("");

            for (int i = 0; i < factors.Count; i++)
            {
                string columnHeader = factors[i].Name;
                ColumnNames.Add(columnHeader);
                if (factors[i] is IntegerData)
                {
                    ColumnTypes.Add(DataTypes.INTEGER);
                    ColumnFormats.Add(0);
                    ColumnUnits.Add(((IntegerData)factors[i]).Unit);
                }
                else if (factors[i] is DoubleData)
                {
                    ColumnTypes.Add(DataTypes.DOUBLE);
                    ColumnFormats.Add(((DoubleData)factors[i]).DecimalPlaces);
                    ColumnUnits.Add(((DoubleData)factors[i]).Unit);
                }
            }
            for (int i = 0; i < responses.Count; i++)
            {
                string columnHeader = responses[i].Name;
                ColumnNames.Add(columnHeader);
                if (responses[i] is IntegerData)
                {
                    ColumnTypes.Add(DataTypes.INTEGER);
                    ColumnFormats.Add(0);
                    ColumnUnits.Add(((IntegerData)responses[i]).Unit);
                }
                else if (responses[i] is DoubleData)
                {
                    ColumnTypes.Add(DataTypes.DOUBLE);
                    ColumnFormats.Add(((DoubleData)responses[i]).DecimalPlaces);
                    ColumnUnits.Add(((DoubleData)responses[i]).Unit);
                }
            }



            TableNames.Add(Name);



            Treatment = new FullFactorial("testFF", "", Project.ProjectPath + "\\DOE.sdf", workflow as Workflow, factors, startingValues, stepSizes, noOfLevels, responses);
            Treatment.CreateFolder();
        }
Пример #2
0
        private void FindNumericOrSymbolic()
        {
            var testData = TestData.AsEnumerable();

            foreach (DataColumn column in TestData.Columns)
            {
                bool isNumeric = true;
                var  temp      = testData.Select(t => t.Field <string>(column)).ToList();
                if (column.ColumnName != "ID")
                {
                    foreach (var item in temp)
                    {
                        if (!float.TryParse(item, out float result))
                        {
                            isNumeric = false;
                            ColumnTypes.Add(column.ColumnName, ColumnType.SYMBOLIC);
                            break;
                        }
                    }
                    if (isNumeric)
                    {
                        ColumnTypes.Add(column.ColumnName, ColumnType.NUMERIC);
                    }
                }
            }
        }
Пример #3
0
        private void FindNumericOrSymbolic(DataTable dataSet)
        {
            var testData = dataSet.AsEnumerable();

            foreach (DataColumn column in dataSet.Columns)
            {
                bool isNumeric = true;
                var  temp      = testData.Select(t => t.Field <string>(column)).ToList();
                if (column.Ordinal == dataSet.Columns.Count - 2)
                {
                    continue;
                }
                if (column.ColumnName != "ID")
                {
                    foreach (var item in temp)
                    {
                        if (item == "?" || item == "*")
                        {
                            continue;
                        }
                        if (!float.TryParse(item, out float result))
                        {
                            isNumeric = false;
                            ColumnTypes.Add(column.ColumnName, ColumnType.SYMBOLIC);
                            break;
                        }
                    }
                    if (isNumeric)
                    {
                        ColumnTypes.Add(column.ColumnName, ColumnType.NUMERIC);
                    }
                }
            }
        }
Пример #4
0
        public PrintGridItem(ExDataGridView dgv, bool isFit, PrintPageEventArgs e)
        {
            _grid           = dgv;
            _newPage        = true;
            _fitToPageWidth = true;
            _pageNo         = 1;
            _headerTitle    = String.Empty;
            _headerPrinter  = String.Empty;
            _rowPos         = 0;
            _rowsPerPage    = 0;
            _totalWidth     = 0;

            int CellWidth = 0;
            int PageLeft  = e.MarginBounds.Left;

            foreach (DataGridViewColumn GridCol in dgv.Columns)
            {
                if (!GridCol.Visible)
                {
                    continue;
                }

                _totalWidth += GridCol.Width;
            }

            foreach (DataGridViewColumn GridCol in dgv.Columns)
            {
                if (!GridCol.Visible)
                {
                    continue;
                }

                if (isFit)
                {
                    CellWidth = (int)(Math.Floor((double)((double)GridCol.Width / (double)TotalWidth * (double)TotalWidth * ((double)e.MarginBounds.Width / (double)TotalWidth))));
                }
                else
                {
                    CellWidth = GridCol.Width;
                }

                HeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText, GridCol.InheritedStyle.Font, CellWidth).Height) + 11;

                ColumnLefts.Add(PageLeft);
                ColumnWidths.Add(CellWidth);
                ColumnTypes.Add(GridCol.GetType());
                PageLeft += CellWidth;
            }
        }
Пример #5
0
        private Dictionary <string, ShineTable> ParseShineTable(string file)
        {
            if (!File.Exists(file))
            {
                throw new Exception("FFFFFFFFF");
            }

            Dictionary <string, ShineTable> ret = new Dictionary <string, ShineTable>();

            using (var files = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                using (var sr = new StreamReader(files, Encoding.Default))
                {
                    bool          definingStruct = false, definingTable = false;
                    int           lineNR      = 0;
                    ShineTable    curTable    = null;
                    List <string> ColumnTypes = null;
                    string        comment     = "";
                    char?         ignore      = null;
                    KeyValuePair <string, string>?replaceThis = null;
                    while (!sr.EndOfStream)
                    {
                        lineNR++;
                        string line = sr.ReadLine().TrimStart();
                        if (line.Contains(Comment))
                        {
                            // Remove everything after it.
                            int index = line.IndexOf(Comment);
                            comment = line.Substring(index + 1);
                            //Console.WriteLine("Comment @ {0}: {1}", lineNR, comment);

                            line = line.Remove(index);
                        }

                        if (ignore.HasValue)
                        {
                            line = line.Replace(ignore.Value.ToString(), "");
                        }

                        if (line == string.Empty)
                        {
                            continue;
                        }
                        string   lineLower = line.ToLower();
                        string[] lineSplit = line.Split('\t');

                        if (lineLower.StartsWith(Replace))
                        {
                            // ...
                            replaceThis = new KeyValuePair <string, string>(ConvertShitToString(lineSplit[1]), ConvertShitToString(lineSplit[2])); // take risks :D
                            //continue;
                        }
                        if (lineLower.StartsWith(Ignore))
                        {
                            ignore = ConvertShitToString(lineSplit[1])[0];
                            //continue;
                        }

                        if (lineLower.StartsWith(StartDefine))
                        {
                            if (definingStruct || definingTable)
                            {
                                throw new Exception("Already defining.");
                            }
                            // Get the name..
                            string name = line.Substring(StartDefine.Length + 1);
                            curTable = new ShineTable(name);

                            definingStruct = true;
                            continue;
                        }
                        else if (lineLower.StartsWith(Table))
                        {
                            if (definingStruct)
                            {
                                throw new Exception("Already defining.");
                            }
                            // Get the name..
                            string name = lineSplit[1].Trim(); // I hope this works D;
                            curTable    = new ShineTable(name);
                            ColumnTypes = new List <string>();
                            ret.Add(name, curTable);
                            definingTable = true;
                            continue;
                        }

                        if (lineLower.StartsWith(EndDefine))
                        {
                            if (!definingStruct)
                            {
                                throw new Exception("Not started defining.");
                            }
                            definingStruct = false;
                            ret.Add(curTable.TableName, curTable);
                            continue;
                        }

                        line      = line.Trim();
                        lineLower = lineLower.Trim();

                        if (definingStruct)
                        {
                            string columnName = comment.Trim();
                            if (columnName == string.Empty)
                            {
                                continue;
                            }
                            curTable.AddColumn(columnName, lineLower);
                            Console.WriteLine("Added column {0} to table {1}", columnName, curTable.TableName);
                        }
                        else if (definingTable)
                        {
                            // Lets search for columns..
                            if (lineLower.StartsWith(ColumnType))
                            {
                                for (int i = 1; i < lineSplit.Length; i++)
                                {
                                    string l = lineSplit[i].Trim();
                                    if (l == string.Empty)
                                    {
                                        continue;
                                    }
                                    ColumnTypes.Add(l);
                                }
                            }
                            else if (lineLower.StartsWith(ColumnName))
                            {
                                int j = 0;
                                for (int i = 1; i < lineSplit.Length; i++)
                                {
                                    string l = lineSplit[i].Trim();
                                    if (l == string.Empty)
                                    {
                                        continue;
                                    }
                                    var coltype = ColumnTypes[j++];
                                    //curTable.AddColumn(l + "(" + coltype + ")", coltype);
                                    curTable.AddColumn(l, coltype);
                                }
                            }
                            else if (lineLower.StartsWith(RecordLine))
                            {
                                // Next column is tablename
                                string tablename = lineSplit[1].Trim();
                                if (ret.ContainsKey(tablename))
                                {
                                    curTable = ret[tablename];
                                    // Lets start.
                                    object[] data = new object[curTable.Columns.Count];
                                    int      j    = 0;
                                    for (int i = 2; i < lineSplit.Length; i++)
                                    {
                                        string l = lineSplit[i].Trim();
                                        if (l == string.Empty)
                                        {
                                            continue;
                                        }
                                        data[j++] = Check(replaceThis, l.TrimEnd(','));
                                    }
                                    curTable.AddRow(data);
                                }
                            }
                            else if (lineLower.StartsWith(Record))
                            {
                                // Right under the table
                                object[] data = new object[curTable.Columns.Count];
                                int      j    = 0;
                                for (int i = 1; i < lineSplit.Length; i++)
                                {
                                    string l = lineSplit[i].Trim();
                                    if (l == string.Empty)
                                    {
                                        continue;
                                    }
                                    data[j++] = Check(replaceThis, l.TrimEnd(','));
                                }
                                curTable.AddRow(data);
                            }
                        }
                        else
                        {
                            if (ret.ContainsKey(lineSplit[0].Trim()))
                            {
                                // Should be a struct I guess D:
                                var      table           = ret[lineSplit[0].Trim()];
                                int      columnsInStruct = table.Columns.Count;
                                int      readColumns     = 0;
                                object[] data            = new object[columnsInStruct];
                                for (int i = 1; ; i++)
                                {
                                    if (readColumns == columnsInStruct)
                                    {
                                        break;
                                    }
                                    else if (lineSplit.Length < i)
                                    {
                                        throw new Exception(string.Format("Could not read all columns of line {0}", lineNR));
                                    }
                                    // Cannot count on the tabs ...
                                    string columnText = lineSplit[i].Trim();
                                    if (columnText == string.Empty)
                                    {
                                        continue;
                                    }
                                    // Well, lets see if we can put it into the list
                                    columnText = columnText.TrimEnd(',').Trim('"');

                                    data[readColumns++] = columnText;
                                }
                                table.AddRow(data);
                            }
                        }
                    }
                }
            }


            return(ret);
        }
Пример #6
0
        public RobustOptimisationStudy(string name, Treatment treatment, ExecutableComponent ec, OptimisationTemplate template, string parentName = "")
            : base(name, null, null, name, parentName)
        {
            Treatment        = treatment;
            StudiedComponent = ec;


            var DesignVariables = template.DesignVariables.Select(v => new RobOptDesignVariable {
                Name = v.Name
            }).ToList();
            var Objectives = template.Objectives.Select(o => new RobOptObjective {
                Name = o.Name, Type = o.Type
            }).ToList();
            var Constraints = template.Constraints.Select(c => new RobOptConstraint {
                Name = c.Name, Type = c.Type, Value = c.Value
            }).ToList();

            robOptTemplate = new RobOptTemplate()
            {
                DesignVariables = DesignVariables, Objectives = Objectives, Constraints = Constraints
            };


            ColumnNames.Add("ID");
            ColumnTypes.Add(DataTypes.INTEGER);
            ColumnFormats.Add(0);
            ColumnUnits.Add("");

            for (int i = 0; i < robOptTemplate.DesignVariables.Count(); i++)
            {
                string columnHeader = robOptTemplate.DesignVariables[i].Name;
                ColumnNames.Add(columnHeader);
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }
            for (int i = 0; i < robOptTemplate.Objectives.Count(); i++)
            {
                string columnHeader = robOptTemplate.Objectives[i].Name;

                // Loss Function
                ColumnNames.Add(columnHeader + "LF");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Mean
                ColumnNames.Add(columnHeader + "mean");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Variance
                ColumnNames.Add(columnHeader + "var");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }
            for (int i = 0; i < robOptTemplate.Constraints.Count(); i++)
            {
                string columnHeader = robOptTemplate.Constraints[i].Name;

                // Loss Function
                ColumnNames.Add(columnHeader + "LF");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Mean
                ColumnNames.Add(columnHeader + "mean");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Variance
                ColumnNames.Add(columnHeader + "var");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }


            TableNames.Add("RobOptimAllResults");
            TableNames.Add("RobOptimGenResults");
            Template = template;
        }
Пример #7
0
    } //NormalizeCsv()

    #endregion PUBLIC METHODS
    #region PRIVATE METHODS

    private bool ReadCsv(TextReader reader, TextWriter errorStream)
    {
        Records = new List<string[]>();

        using (CsvParser csvParser = new CsvParser(reader))
        {
            csvParser.Configuration.Delimiter = Delimiter;

            Headers = csvParser.Read();

            if (Headers == null)
            {
                errorStream.WriteLine("Error: No input to process.");
                return false;
            }

            // Read current line fields, pointer moves to the next line.
            string[] record;

            //Read until the parser returns null (EOF)
            //  Note: CsvParser converts the input using .toString(), which implements the
            //  built-in type converter based on the specified character encoding of inStream
            //	(This will correct any invalid characters, then load into a UTF-16 string)
            while ((record = csvParser.Read()) != null)
            {
                string[] parsedRecord = new string[record.Length];

                //Before parsing fields, be sure we know (or have tried to guess) the type of each field
                //This will normally run at most once, on line #2 (first line of data), unless later records have more columns
                if (ColumnTypes.Count < Headers.Length)
                {
                    errorStream.WriteLine("Warning: Some or all column data types were not specified");

                    for (int i = ColumnTypes.Count; i < Headers.Length; i++)
                    {
                        ColumnTypes.Add(GuessDataType(record[i], Headers[i]));
                    }
                }

                try
                {
                    for (int i = 0; i < record.Length; i++)
                    {
                        switch (ColumnTypes[i])
                        {
                            case DataType.Timestamp:
                                parsedRecord[i] = ProcessTimestamp(record[i]);
                                break;
                            case DataType.ZipCode:
                                parsedRecord[i] = ProcessZipCode(record[i]);
                                break;
                            case DataType.FullName:
                                parsedRecord[i] = ProcessFullName(record[i]);
                                break;
                            case DataType.Duration:
                                parsedRecord[i] = ProcessDuration(record[i]);
                                break;
                            case DataType.TotalDuration:
                                //Build a list of all fields of DataType 'Duration' preceding this one
                                List<string> durations = new List<string>();
                                for (int j = 0; j < i; j++)
                                {
                                    if (ColumnTypes[j] == DataType.Duration)
                                    {
                                        durations.Add(parsedRecord[j]);
                                    }
                                }

                                parsedRecord[i] = ProcessTotalDuration(durations);
                                break;
                            case DataType.UnmodifiedString:
                                //Validation already done, no conversion necessary
                                parsedRecord[i] = record[i];
                                break;
                            default:
                                //In theory, this line will only be called if a new datatype is added to the enum and
                                //	passed to the function, but not handled in the Switch statement
                                throw (new MissingMethodException("DataType not handled"));
                                //break; //Commenting out to eliminate VSCode warning, leaving in to show it was not forgotten
                        } //switch
                    } //for

                    //Now that all fields are validated, add them to the list
                    Records.Add(parsedRecord);
                } //try
                catch (Exception e)
                {
                    //Output error, including original data and Exception message
                    errorStream.WriteLine("Record discarded due to Critical Error: <" +
                        string.Join(",", record) + ">  (Error message: " +
                        e.Message + ")");

                    //If exception is thrown because a DataType is not handled, every line will
                    //	fail. No need to spit out the same error over and over.
                    if (e is MissingMethodException)
                    {
                        throw;
                    }
                } //catch

            } //while

        } //using
        
        return true;
    } //ReadCsv()
Пример #8
0
        public DetOptStudy(string name, string description, string parentName = "")
            : base(name, null, null, description, parentName)
        {
            // Create SQL statements to create tables, sqlStatement1 for OptimAllResults and sqlStatement2 for OptimGenResults
            sqlStatement1  = "create table OptimAllResults (";
            sqlStatement2  = "create table OptimGenResults (";
            sqlStatement1 += "ID int, ";
            sqlStatement2 += "ID int, Category int, ";

            #region Atif
            // Prepare results database
            foreach (var designVariable in OptimisationTemplate.DesignVariables)
            {
                string columnHeader = designVariable.Name;
                ColumnNames.Add(columnHeader);
                sqlStatement1 += columnHeader + " ";
                sqlStatement2 += columnHeader + " ";
                if (designVariable.Data is IntegerData)
                {
                    ColumnTypes.Add(DataTypes.INTEGER);
                    ColumnFormats.Add(0);
                    sqlStatement1 += "int, ";
                    sqlStatement2 += "int, ";
                }
                else if (designVariable.Data is DoubleData)
                {
                    ColumnTypes.Add(DataTypes.DOUBLE);
                    ColumnFormats.Add(((DoubleData)(designVariable.Data)).DecimalPlaces);
                    sqlStatement1 += "float, ";
                    sqlStatement2 += "float, ";
                }
                ColumnUnits.Add(designVariable.Data.Unit);
                MinValues.Add(designVariable.LowerBound);
                MaxValues.Add(designVariable.UpperBound);
            }
            foreach (Objective objective in OptimisationTemplate.Objectives)
            {
                string columnHeader = objective.Name;
                ColumnNames.Add(columnHeader);
                sqlStatement1 += columnHeader + " ";
                sqlStatement2 += columnHeader + " ";
                if (objective.Data is IntegerData)
                {
                    ColumnTypes.Add(DataTypes.INTEGER);
                    ColumnFormats.Add(0);
                    sqlStatement1 += "int, ";
                    sqlStatement2 += "int, ";
                }
                else if (objective.Data is DoubleData)
                {
                    ColumnTypes.Add(DataTypes.DOUBLE);
                    ColumnFormats.Add(((DoubleData)(objective.Data)).DecimalPlaces);
                    sqlStatement1 += "float, ";
                    sqlStatement2 += "float, ";
                }
                ColumnUnits.Add(objective.Data.Unit);
                MinValues.Add(Double.NaN);
                MaxValues.Add(Double.NaN);
            }
            foreach (Aircadia.ObjectModel.Treatments.Optimisers.Formulation.Constraint constraint in OptimisationTemplate.Constraints)
            {
                string columnHeader = constraint.Name;
                ColumnNames.Add(columnHeader);
                sqlStatement1 += columnHeader + " ";
                sqlStatement2 += columnHeader + " ";
                if (constraint.Data is IntegerData)
                {
                    ColumnTypes.Add(DataTypes.INTEGER);
                    ColumnFormats.Add(0);
                    sqlStatement1 += "int, ";
                    sqlStatement2 += "int, ";
                }
                else if (constraint.Data is DoubleData)
                {
                    ColumnTypes.Add(DataTypes.DOUBLE);
                    ColumnFormats.Add(((DoubleData)(constraint.Data)).DecimalPlaces);
                    sqlStatement1 += "float, ";
                    sqlStatement2 += "float, ";
                }
                ColumnUnits.Add(constraint.Data.Unit);
                MinValues.Add(Double.NaN);
                MaxValues.Add(Double.NaN);
            }

            TableNames.Add("OptimAllResults");
            TableNames.Add("OptimGenResults");

            if (OptimisationTemplate.DesignVariables.Count() + OptimisationTemplate.Objectives.Count() + OptimisationTemplate.Constraints.Count() > 0)
            {
                sqlStatement1 = sqlStatement1.Remove(sqlStatement1.Length - 2);
                sqlStatement2 = sqlStatement2.Remove(sqlStatement2.Length - 2);
            }
            sqlStatement1 += ")";
            sqlStatement2 += ")";


            #endregion Atif
        }
Пример #9
0
        //public DOEplusURQStudy(string name, string description, Model worflow, List<Data> factors, List<Data> responses)
        public DOEplusURQStudy(string name, string description, List <string> names, Treatment treatment, FullFactorial fullFactorialDOE, WorkflowComponent worflow)
            : base(name, description)
        {
            TreatmentURQ     = treatment;
            this.names       = names; //DOE factors
            Treatment        = treatment;
            StudiedComponent = worflow;

            FullFactorialDOE = fullFactorialDOE;



            var DesignVariables = new List <RobOptDesignVariable>();

            for (int i = 0; i < ((string[, ])(Treatment.input_options.setuplist[0])).GetLength(0); i++)
            {
                var designVariable = new RobOptDesignVariable
                {
                    Name = ((string[, ])(Treatment.input_options.setuplist[0]))[i, 0]
                };
                //designVariable.LowerBound = ;
                //designVariable.UpperBound = ;
                DesignVariables.Add(designVariable);
            }
            var Objectives = new List <RobOptObjective>();

            for (int i = 0; i < ((string[, ])(Treatment.input_options.setuplist[1])).GetLength(0); i++)
            {
                var objective = new RobOptObjective
                {
                    Name = ((string[, ])(Treatment.input_options.setuplist[1]))[i, 0]
                };
                if (((string[, ])(Treatment.input_options.setuplist[1]))[i, 2] == "minimise")
                {
                    objective.Type = ObjectiveType.Minimise;
                }
                else if (((string[, ])(Treatment.input_options.setuplist[1]))[i, 2] == "maximise")
                {
                    objective.Type = ObjectiveType.Maximise;
                }
                Objectives.Add(objective);
            }
            var Constraints = new List <RobOptConstraint>();

            for (int i = 0; i < ((string[, ])(Treatment.input_options.setuplist[2])).GetLength(0); i++)
            {
                var constraint = new RobOptConstraint
                {
                    Name = ((string[, ])(Treatment.input_options.setuplist[2]))[i, 0]
                };
                if (((string[, ])(Treatment.input_options.setuplist[2]))[i, 2] == "<=")
                {
                    constraint.Type = ConstraintType.LessThanOrEqual;
                }
                else if (((string[, ])(Treatment.input_options.setuplist[2]))[i, 2] == ">=")
                {
                    constraint.Type = ConstraintType.GreatorThanOrEqual;
                }
                constraint.Value = Convert.ToDouble(((string[, ])(Treatment.input_options.setuplist[2]))[i, 3]);
                Constraints.Add(constraint);
            }
            robOptTemplate = new RobOptTemplate()
            {
                DesignVariables = DesignVariables, Objectives = Objectives, Constraints = Constraints
            };



            ColumnNames.Add("ID");
            ColumnTypes.Add(DataTypes.INTEGER);
            ColumnFormats.Add(0);
            ColumnUnits.Add("");

            for (int i = 0; i < this.names.Count; i++)
            {
                string columnHeader = this.names[i];
                ColumnNames.Add(columnHeader);
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }


            for (int i = 0; i < robOptTemplate.DesignVariables.Count(); i++)
            {
                if (!this.names.Contains(robOptTemplate.DesignVariables[i].Name))
                {
                    string columnHeader = robOptTemplate.DesignVariables[i].Name;
                    ColumnNames.Add(columnHeader);
                    ColumnTypes.Add(DataTypes.DOUBLE);
                    ColumnFormats.Add(4);
                    ColumnUnits.Add("");
                }
            }
            for (int i = 0; i < robOptTemplate.Objectives.Count(); i++)
            {
                string columnHeader = robOptTemplate.Objectives[i].Name;

                // Loss Function
                ColumnNames.Add(columnHeader + "LF");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Mean
                ColumnNames.Add(columnHeader + "mean");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Variance
                ColumnNames.Add(columnHeader + "var");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }
            for (int i = 0; i < robOptTemplate.Constraints.Count(); i++)
            {
                string columnHeader = robOptTemplate.Constraints[i].Name;

                // Loss Function
                ColumnNames.Add(columnHeader + "LF");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Mean
                ColumnNames.Add(columnHeader + "mean");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Variance
                ColumnNames.Add(columnHeader + "var");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }



            TableNames.Add("DOE");
        }