public void Calculate()
        {
            Protein value = _proteinService.Get(SelectedProject);

            if (value == null)
            {
                return;
            }
            Protein protein = value.DeepClone();

            if (PreferredDeadlineChecked)
            {
                protein.PreferredDays = PreferredDeadline;
            }
            if (FinalDeadlineChecked)
            {
                protein.MaximumDays = FinalDeadline;
            }
            if (KFactorChecked)
            {
                protein.KFactor = KFactor;
            }

            TimeSpan frameTime        = TimeSpan.FromMinutes(TpfMinutes).Add(TimeSpan.FromSeconds(TpfSeconds));
            TimeSpan totalTimeByFrame = TimeSpan.FromSeconds(frameTime.TotalSeconds * protein.Frames);
            TimeSpan totalTimeByUser  = totalTimeByFrame;

            if (TotalWuTimeEnabled)
            {
                totalTimeByUser = TimeSpan.FromMinutes(TotalWuTimeMinutes).Add(TimeSpan.FromSeconds(TotalWuTimeSeconds));
                // user time is less than total time by frame, not permitted
                if (totalTimeByUser < totalTimeByFrame)
                {
                    totalTimeByUser = totalTimeByFrame;
                }
            }

            var decimalPlaces = _prefs.Get <int>(Preference.DecimalPlaces);
            var values        = ProductionCalculator.GetProductionValues(frameTime, protein, totalTimeByUser, totalTimeByFrame);

            CoreName          = protein.Core;
            SlotType          = protein.Core.ToSlotType().ToString();
            NumberOfAtoms     = protein.NumberOfAtoms;
            CompletionTime    = Math.Round((TotalWuTimeEnabled ? totalTimeByUser.TotalDays : totalTimeByFrame.TotalDays), decimalPlaces);
            PreferredDeadline = protein.PreferredDays;
            FinalDeadline     = protein.MaximumDays;
            KFactor           = protein.KFactor;
            BonusMultiplier   = Math.Round((TotalWuTimeEnabled ? values.DownloadTimeBonusMulti : values.FrameTimeBonusMulti), decimalPlaces);
            BaseCredit        = values.BaseCredit;
            TotalCredit       = Math.Round((TotalWuTimeEnabled ? values.DownloadTimeBonusCredit : values.FrameTimeBonusCredit), decimalPlaces);
            BasePpd           = values.BasePPD;
            TotalPpd          = Math.Round((TotalWuTimeEnabled ? values.DownloadTimeBonusPPD : values.FrameTimeBonusPPD), decimalPlaces);
        }