private int GetOrthogonalCount(int targetParameter)
        {
            int stepCount = Repetitions * Tracks;

            for (int parameter = 0; parameter < 4; parameter++)
            {
                if (targetParameter == parameter)
                {
                    continue;
                }

                stepCount *= StimDimensions.GetSteps(parameter);
            }

            return(stepCount);
        }
        public void Initialize(double taskGuessRate)
        {
            trial        = 0;
            repetitions  = 0;
            correctCount = 0;

            stepBag = new DepletableBag <ConstantStimSet>()
            {
                AutoRefill = false
            };

            int dim1Limit = StimDimensions.GetSteps(0);
            int dim2Limit = StimDimensions.GetSteps(1);
            int dim3Limit = StimDimensions.GetSteps(2);
            int dim4Limit = StimDimensions.GetSteps(3);

            for (int dim1 = 0; dim1 < dim1Limit; dim1++)
            {
                for (int dim2 = 0; dim2 < dim2Limit; dim2++)
                {
                    for (int dim3 = 0; dim3 < dim3Limit; dim3++)
                    {
                        for (int dim4 = 0; dim4 < dim4Limit; dim4++)
                        {
                            //One copy for each track
                            for (int track = 0; track < Tracks; track++)
                            {
                                stepBag.Add(new ConstantStimSet(dim1, dim2, dim3, dim4));
                            }
                        }
                    }
                }
            }

            this.taskGuessRate = taskGuessRate;
        }