private void createFractionOfDoseObserverForCompound(Simulation simulation, IObserverBuildingBlock observerBuildingBlock, Compound compound) { var compoundProperties = simulation.CompoundPropertiesFor(compound); var processes = compoundProperties.Processes; if (!compoundProperties.IsAdministered) { return; } if (_interactionTask.IsMetabolite(compound, simulation)) { return; } //always add complex molecules if any var moleculeNames = processes.SpecificBindingSelection.AllEnabledPartialProcesses().Select(x => x.ProductName(CoreConstants.Molecule.Complex)).ToList(); //Add sink metabolite moleculeNames.AddRange(processes.MetabolizationSelection.AllEnabledPartialProcesses().OfType <EnzymaticProcessSelection>() .Where(x => x.IsSink) .Select(x => x.ProductName())); if (!moleculeNames.Any()) { return; } var observerName = CoreConstants.Observer.ObserverNameFrom(CoreConstants.Observer.FRACTION_OF_DOSE, compound.Name); var fractionObserver = createFractionObserver(observerName, observerBuildingBlock, () => getFractionOfDoseFormula(observerBuildingBlock, compound)); moleculeNames.Each(fractionObserver.AddMoleculeName); addLiverZoneObserversBasedOn(fractionObserver, observerBuildingBlock, compound); }
private void createFractionOfDoseObserverForCompound(Simulation simulation, IObserverBuildingBlock observerBuildingBlock, Compound compound) { var compoundProperties = simulation.CompoundPropertiesFor(compound); var processes = compoundProperties.Processes; if (!compoundProperties.IsAdministered) { return; } if (_interactionTask.IsMetabolite(compound, simulation)) { return; } //always add complex molecules if any var moleculeNames = processes.SpecificBindingSelection.AllEnabledPartialProcesses().Select(x => x.ProductName(CoreConstants.Molecule.Complex)).ToList(); //Add sink metabolites var enzymaticProcessProductNames = processes.MetabolizationSelection.AllEnabledPartialProcesses().OfType <EnzymaticProcessSelection>() .Where(x => x.IsSink) .Select(x => x.ProductName()).ToList(); moleculeNames.AddRange(enzymaticProcessProductNames); if (!moleculeNames.Any()) { return; } //Local fraction of dose observer defined per instance of the metabolization or specific binding process var observerName = CoreConstants.Observer.ObserverNameFrom(CoreConstants.Observer.FRACTION_OF_DOSE, compound.Name); var fractionObserver = createAmountFractionObserver(observerName, observerBuildingBlock, () => getFractionOfDoseFormula(observerBuildingBlock, compound)); moleculeNames.Each(fractionObserver.AddMoleculeName); //Add liver zone specific observers based on this observer addLiverZoneObserversBasedOn(fractionObserver, observerBuildingBlock, compound); //Global fraction of dose observers. One per complex or binding process defined globally under organism var totalFractionObserverName = CoreConstants.Observer.ObserverNameFrom(CoreConstants.Observer.TOTAL_FRACTION_OF_DOSE, compound.Name); var totalFractionObserver = createContainerFractionObserver(totalFractionObserverName, observerBuildingBlock, () => getTotalFractionOfDoseFormula(observerBuildingBlock, compound, observerName)); totalFractionObserver.ContainerCriteria = Create.Criteria(x => x.With(Constants.ORGANISM)); moleculeNames.Each(totalFractionObserver.AddMoleculeName); }