public BaseSweeperEffect(
            TimeSpan sweepDuration,
            int dataPoints,
            bool startRunning,
            [System.Runtime.CompilerServices.CallerMemberName] string name = "")
        {
            this.log  = Log.Logger;
            this.name = name;
            Executor.Current.Register(this);

            this.inputRun = new Subject <bool>();

            this.inputRun.Subscribe(x =>
            {
                if (this.isRunning != x)
                {
                    if (x)
                    {
                        Start();
                    }
                    else
                    {
                        Stop();
                    }
                }
            });

            this.devices = new List <DeviceController>();
            this.sweeper = new Sweeper(sweepDuration, dataPoints, startRunning);

            this.sweeper.RegisterJob((zeroToOne, negativeOneToOne, zeroToOneToZero, forced, totalTicks, final) =>
            {
                bool isUnlocked = false;
                if (forced)
                {
                    Monitor.Enter(lockObject);
                    isUnlocked = true;
                }
                else
                {
                    isUnlocked = Monitor.TryEnter(lockObject);
                }

                if (isUnlocked)
                {
                    try
                    {
                        double value = GetValue(zeroToOne, negativeOneToOne, zeroToOneToZero, final);

                        SendOutput(value);
                    }
                    catch
                    {
                    }
                    finally
                    {
                        Monitor.Exit(lockObject);
                    }
                }
                else
                {
                    this.log.Warning("Missed Job in BaseSweepEffect   Name: " + Name);
                }
            });
        }