예제 #1
0
        public static void ShowWindow(IExperimentDesignFile configFile)
        {
            DesignSaverEditorWindow editorWindow = (DesignSaverEditorWindow)GetWindow(typeof(DesignSaverEditorWindow), false, "Design Saver");

            editorWindow.previewer = new DesignPreviewer(configFile);
            editorWindow.Show();
        }
예제 #2
0
        void CheckMaxBlockPermutationsAllowed(bool isBlockVariable)
        {
            if (!isBlockVariable || valuesProperty.arraySize <= ExperimentDesign.MaxBlockPermutationsAllowed)
            {
                return;
            }


            IExperimentDesignFile iExperimentDesignFile = VariableProperty.serializedObject.targetObject as IExperimentDesignFile;

            if (iExperimentDesignFile == null)
            {
                return;
            }

            if (iExperimentDesignFile.GetBlockOrderConfigurations.Count == 0)
            {
                VariableValidationResults.AddError(
                    "Too many Block Values for automatic permutation. " +
                    "Must define possible Block orders manually using BlockOrderDefinition files. " +
                    "Please see docs.");
            }

            if (!iExperimentDesignFile.GetBlockOrderIsValid)
            {
                VariableValidationResults.AddWarning("A recent change has invalidated your manual block order configurations. " +
                                                     "Please update them before running your experiment");
            }
        }
예제 #3
0
        public static DataTable DataTableFromCsv(IExperimentDesignFile configurationFile, string fullPath)
        {
            DataTable loadedDataTable = new DataTable();

            using (StreamReader streamReader = new StreamReader(fullPath)) {
                int rowNumber             = 0;
                List <DataColumn> columns = GetColumns(configurationFile, streamReader, loadedDataTable);

                rowNumber++;
                while (!streamReader.EndOfStream)
                {
                    string[] rowValues = streamReader.ReadLine()?.Split(',');
                    DataRow  row       = loadedDataTable.NewRow();
                    for (int columnIndex = 0; columnIndex < columns.Count; columnIndex++)
                    {
                        DataColumn column = columns[columnIndex];
                        try {
                            LoadAndSetValue(column, rowValues, columnIndex, row);
                        }
                        catch (FormatException) {
                            Debug.Log($"{TuxLog.Prefix} row: {rowNumber} trying to convert column {column.ColumnName} value {row[column.ColumnName]} to type {column.DataType}");
                            throw;
                        }
                    }

                    loadedDataTable.Rows.Add(row);
                    rowNumber++;
                }
            }
            return(loadedDataTable);
        }
예제 #4
0
 ExperimentDesign(IExperimentDesignFile designFile)
 {
     this.designFile = designFile;
     columnNames     = designFile.GetColumnNamesSettings;
     baseBlockTable  = new BaseBlockTable(designFile);
     baseTrialTable  = new BaseTrialTable(baseBlockTable, designFile);
 }
예제 #5
0
 public RunnableDesign(ExperimentRunner runner, DataTable finalDataTable, IExperimentDesignFile designFile)
 {
     this.runner         = runner;
     this.designFile     = designFile;
     this.finalDataTable = finalDataTable;
     CreateAndAddBlocks();
     WriteParticipantValuesToTables();
 }
예제 #6
0
 public static ExperimentDesign CreateFrom(IExperimentDesignFile designFile)
 {
     if (designFile == null)
     {
         throw new NullReferenceException("Trying to create Design from null file");
     }
     return(new ExperimentDesign(designFile));
 }
예제 #7
0
        public BaseTrialTable(BaseBlockTable baseBlockTable,
                              IExperimentDesignFile iExperimentDesignFile)
        {
            variables   = iExperimentDesignFile.GetVariables;
            columnNames = iExperimentDesignFile.GetColumnNamesSettings;

            baseTrialTable = AddVariablesToTable();

            AddMetaColumns(baseBlockTable);
        }
예제 #8
0
        void CheckValidBlockOrder()
        {
            IExperimentDesignFile designFile = serializedObject.targetObject as IExperimentDesignFile;

            if (designFile == null)
            {
                return;
            }

            if (!designFile.GetHasBlocks)
            {
                return;
            }

            if (!designFile.GetBlockOrderIsValid)
            {
                EditorGUILayout.HelpBox("A recent change has invalidated any manual block order configurations. Please update them before running your experiment",
                                        MessageType.Error);
                EditorGUILayout.Space();
            }
        }
예제 #9
0
        static List <DataColumn> GetColumns(IExperimentDesignFile configurationFile, StreamReader streamReader, DataTable loadedDataTable)
        {
            string[] headerNames = streamReader.ReadLine()?.Split(',');

            List <DataColumn> columns = new List <DataColumn>();

            if (headerNames == null)
            {
                throw new NullReferenceException("Headers not found");
            }

            foreach (string header in headerNames)
            {
                Variable   variableWithName = configurationFile.GetVariables.GetVariableWithName(header);
                DataColumn newColumn        = variableWithName == null
                    ? configurationFile.GetColumnNamesSettings.GetColumnWithName(header)
                    : new DataColumn(variableWithName.Name, variableWithName.Type);

                loadedDataTable.Columns.Add(newColumn);
                columns.Add(newColumn);
            }

            return(columns);
        }
예제 #10
0
 public DesignPreviewer(IExperimentDesignFile designFile)
 {
     DesignFile       = designFile;
     ExperimentDesign = ExperimentDesign.CreateFrom(designFile);
     BlockOrderData   = new BlockOrderData(ExperimentDesign);
 }
예제 #11
0
 public BaseBlockTable(IExperimentDesignFile iExperimentDesignFile)
 {
     orderConfigs   = iExperimentDesignFile.GetBlockOrderConfigurations;
     blockVariables = iExperimentDesignFile.GetVariables.BlockVariables;
     baseBlockTable = AddVariablesToTable();
 }
예제 #12
0
        public static RunnableDesign CreateFromFile(ExperimentRunner runner, string fullPathToFile, IExperimentDesignFile configurationFile)
        {
            DataTable experimentTable = DataTableCsvUtility.DataTableFromCsv(configurationFile, fullPathToFile);

            return(new RunnableDesign(runner, experimentTable, configurationFile));
        }