protected override IEnumerable <Stage> Following()
        {
            if (_completed)
            {
                return(null);
            }
            var target = _randomBoolSequence.Next();
            var cue    = target ? NonTargetChars.ElementAt(_r.Next(NonTargetChars.Length)).ToString() : "X";

            if (_testConfig.Still)
            {
                var stage = new Stage {
                    Cue = cue, Duration = _remaining
                };
                _completed = true;
                return(new[] { stage });
            }

            var stages = new Stage[2];
            var marker = target ? CptExperiment.TargetDisplayMarker : CptExperiment.NonTargetDisplayMarker;

            stages[0] = new CptStage {
                Cue = cue, IsTarget = target, Duration = _testConfig.LetterDuration, Marker = marker
            };
            stages[1] = new Stage {
                Cue = "", Duration = _testConfig.InterStimulusInterval, Marker = CptExperiment.IntervalMarker
            };
            if (_remaining < _testConfig.LetterDuration + _testConfig.InterStimulusInterval)
            {
                _completed = true;
            }
            else
            {
                _remaining -= _testConfig.LetterDuration + _testConfig.InterStimulusInterval;
                if (_remaining < _testConfig.LetterDuration)
                {
                    _completed = true;
                }
            }
            return(stages);
        }
 public ActivedStage(ulong timestamp, CptStage stage, CptExperiment.CptTrial trial)
 {
     Timestamp = timestamp;
     Stage     = stage;
     Trial     = trial;
 }