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); }
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); }
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)); }
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); }
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); }
public virtual void AddInterval(DosingInterval dosingInterval) => _dosingIntervals.Add(dosingInterval);