// Demo for programmable mode of parameter run showing a scan over two system parameters with automatic export of results to hard drive // For the export the additional detector add-on parameter "External Counter" has to be used to add each result a unique number. // These three parameters (two system parameters and the additional counter parameter) have their individual index which is defined by the // order of their appearance in the parameter table of the parameter run document. int numberIterations_parameter1 = 5; // assumed parameter 1 should be evaluated for 5 different values (50e-6, 55e-6, ..., 70e-6) int numberIterations_parameter2 = 3; // assumed parameter 2 should be evaluated for 3 different values (10e-6, 2e-6, 300e-6) int totalNumberIterations = numberIterations_parameter1 * numberIterations_parameter2; double startValue_parameter1 = MinimumValues[0]; // alterantively the value can also be defined directly here in the code double increment_parameter1 = (MaximumValues[0] - startValue_parameter1) / (numberIterations_parameter1 - 1); double startValue_parameter2 = MinimumValues[1]; // alterantively the value can also be defined directly here in the code double increment_parameter2 = (MaximumValues[1] - startValue_parameter2) / (numberIterations_parameter2 - 1); double[,] parameters = new double[NumberOfParameters, totalNumberIterations]; int counterIndex = 0; // look over all combinations or values for parameter 1 and parameter 2 for (int iParam2 = 0; iParam2 < numberIterations_parameter2; iParam2++) { for (int iParam1 = 0; iParam1 < numberIterations_parameter1; iParam1++) { counterIndex = iParam2 * numberIterations_parameter1 + iParam1; parameters[0, counterIndex] = startValue_parameter1 + iParam1 * increment_parameter1; // parameter 1 parameters[1, counterIndex] = startValue_parameter2 + iParam2 * increment_parameter2; // parameter 2 parameters[2, counterIndex] = counterIndex + 1; // number added to result files (starting with 1) } }