public ISimulation CreateWithCalculationMethodsFrom(ISimulation templateSimulation, IEnumerable <CalculationMethodWithCompoundName> combination) { var simulation = templateSimulation.DowncastTo <IndividualSimulation>(); var newSimulation = createModelLessSimulationBasedOn(simulation); combination.GroupBy(x => x.CompoundName).Each(grouping => { replaceCalculationMethodsWithNewCalculationMethods(grouping, newSimulation.CompoundPropertiesFor(grouping.Key)); }); _simulationModelCreator.CreateModelFor(newSimulation); return(newSimulation); }
public override void UpdateAppliedDose(ISimulation simulation, string moleculeName, PKCalculationOptions options, IReadOnlyList <ApplicationParameters> allApplicationParameters) { base.UpdateAppliedDose(simulation, moleculeName, options, allApplicationParameters); if (options.SingleDosing) { return; } //we have at least 2 applied applications at that stage since we are in multiple dosing mode var bodyWeight = simulation.DowncastTo <Simulation>().BodyWeight?.Value; var applicationCount = allApplicationParameters.Count; options.FirstDose = drugMassPerBodyWeightFor(allApplicationParameters[0].DrugMass, bodyWeight); options.LastMinusOneDose = drugMassPerBodyWeightFor(allApplicationParameters[applicationCount - 2].DrugMass, bodyWeight); options.LastDose = drugMassPerBodyWeightFor(allApplicationParameters[applicationCount - 1].DrugMass, bodyWeight); }
public ICommand UpdateParameterValueOrigin(IParameter parameter, ValueOrigin valueOrigin, ISimulation simulation) { return(_quantityTask.UpdateQuantityValueOriginInSimulation(parameter, valueOrigin, simulation.DowncastTo <IMoBiSimulation>())); }
public ICommand SetParameterValue(IParameter parameter, double value, ISimulation simulation) { return(_quantityTask.SetQuantityBaseValue(parameter, value, simulation.DowncastTo <IMoBiSimulation>())); }