Ejemplo n.º 1
0
        private void setSingleDosingPKValues(ICache <string, double> pk, DosingInterval interval, double?dose)
        {
            setCmaxAndTmax(pk, interval, dose, Constants.PKParameters.C_max, Constants.PKParameters.Tmax);
            setValue(pk, Constants.PKParameters.C_tEnd, interval.CTrough);
            setValueAndNormalize(pk, Constants.PKParameters.AUC, interval.Auc, dose);
            setValueAndNormalize(pk, Constants.PKParameters.AUC_inf, interval.AucInf, dose);
            setFirstIntervalPKValues(pk, interval, dose);

            setValue(pk, Constants.PKParameters.FractionAucEndToInf, interval.FractionAucEndToInf);
        }
Ejemplo n.º 2
0
        private void setFirstIntervalPKValues(ICache <string, double> pk, DosingInterval interval, double?dose)
        {
            setValue(pk, Constants.PKParameters.Thalf, interval.Thalf);
            setValue(pk, Constants.PKParameters.MRT, interval.Mrt);

            if (!dose.HasValue)
            {
                return;
            }

            setValue(pk, Constants.PKParameters.CL, interval.CL);
            setValue(pk, Constants.PKParameters.Vss, interval.Vss);
            setValue(pk, Constants.PKParameters.Vd, interval.Vd);
        }
Ejemplo n.º 3
0
        private PKInterval pkIntervalFromDosingInterval(DosingInterval dosingInterval, List <float> time, List <float> concentration, PKCalculationOptions options)
        {
            if (dosingInterval == null)
            {
                return(null);
            }

            var dosingStartIndex = ArrayHelper.ClosestIndexOf(time, dosingInterval.StartValue);
            var dosingEndIndex   = ArrayHelper.ClosestIndexOf(time, dosingInterval.EndValue);

            if (oneTimeIndexInvalid(dosingStartIndex, dosingEndIndex))
            {
                return(null);
            }

            return(createPKInterval(time, concentration, dosingStartIndex, dosingEndIndex, options, dosingInterval.DrugMassPerBodyWeight));
        }
Ejemplo n.º 4
0
        private IEnumerable <DosingInterval> allIntervalsFor(IReadOnlyList <float> time, IReadOnlyList <float> concentration, PKCalculationOptions options)
        {
            var timeValues          = time.ToList();
            var concentrationValues = concentration.ToList();

            if (!timeValues.Any() || !concentrationValues.Any())
            {
                yield break;
            }

            var fullRange = new DosingInterval(timeValues, concentrationValues, options);

            //only one interval
            if (options.SingleDosing)
            {
                yield return(fullRange);

                yield break;
            }

            var firstDosingStartIndex        = ArrayHelper.ClosestIndexOf(timeValues, options.FirstDosingStartValue);
            var firstDosingEndIndex          = ArrayHelper.ClosestIndexOf(timeValues, options.FirstDosingEndValue);
            var lastMinusOneDosingStartIndex = ArrayHelper.ClosestIndexOf(timeValues, options.LastMinusOneDosingStartValue);
            var lastDosingStartIndex         = ArrayHelper.ClosestIndexOf(timeValues, options.LastDosingStartValue);
            var lastDosingEndIndex           = ArrayHelper.ClosestIndexOf(timeValues, options.LastDosingEndValue);

            if (oneTimeIndexInvalid(firstDosingEndIndex, firstDosingStartIndex, lastDosingStartIndex, lastDosingEndIndex, lastMinusOneDosingStartIndex))
            {
                yield break;
            }

            yield return(dosingInterval(timeValues, concentrationValues, firstDosingStartIndex, firstDosingEndIndex, options));

            //The end time of the last minus one dosing interval is the start time of the last interval
            yield return(dosingInterval(timeValues, concentrationValues, lastMinusOneDosingStartIndex, lastDosingStartIndex, options));

            yield return(dosingInterval(timeValues, concentrationValues, lastDosingStartIndex, lastDosingEndIndex, options));

            yield return(fullRange);
        }
        public PKCalculationOptions CreateFor(IModelCoreSimulation simulation, string moleculeName)
        {
            var options = new PKCalculationOptions();
            var endTime = (simulation.EndTime ?? 0).ToFloat();

            var allApplicationParameters = simulation.AllApplicationParametersOrderedByStartTimeFor(moleculeName);

            // all application start times starting before the end of the simulation
            var applicationStartTimes = allApplicationParameters.Select(x => x.StartTime.Value).ToFloatArray();
            var applicationEndTimes   = new List <float>(applicationStartTimes.Skip(1))
            {
                endTime
            };


            for (int i = 0; i < applicationStartTimes.Length; i++)
            {
                var dosingInterval = new DosingInterval
                {
                    StartValue = applicationStartTimes[i],
                    EndValue   = applicationEndTimes[i]
                };

                options.AddInterval(dosingInterval);
            }

            // single dosing
            if (applicationStartTimes.Length <= 1)
            {
                options.InfusionTime = allApplicationParameters.FirstOrDefault()?.InfusionTime?.Value;
            }

            // Once all dosing are defined, update total drug mass
            UpdateTotalDrugMassPerBodyWeight(simulation, moleculeName, options, allApplicationParameters);

            return(options);
        }
Ejemplo n.º 6
0
 private void setCmaxAndTmax(ICache <string, double> pk, DosingInterval interval, double?dose, string cmaxName, string tMaxName)
 {
     setValueAndNormalize(pk, cmaxName, interval.Cmax, dose);
     setValue(pk, tMaxName, interval.Tmax);
 }
Ejemplo n.º 7
0
 public virtual void AddInterval(DosingInterval dosingInterval) => _dosingIntervals.Add(dosingInterval);