Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }