Пример #1
0
        public void Visit(IMoleculeBuildingBlock moleculeBuildingBlock)
        {
            foreach (var moleculeBuilder in moleculeBuildingBlock.Where(x => !x.ContainsName(Constants.Parameters.CONCENTRATION)).ToList())
            {
                var concentrationParameter = _parameterFactory.CreateConcentrationParameter(moleculeBuildingBlock.FormulaCache);
                moleculeBuilder.AddParameter(concentrationParameter);
            }

            convertFormulaReferencingAeffIn(moleculeBuildingBlock);
        }
        public ValidationResult Validate(IMoleculeBuildingBlock moleculeBuildingBlock)
        {
            var validationResults = new ValidationResult();

            foreach (var molecule in moleculeBuildingBlock.Where(m => m.IsFloating))
            {
                foreach (var parameter in molecule.Parameters.Where(parameterIsInvalid))
                {
                    validationResults.AddMessage(NotificationType.Error, parameter, Error.FloatingMoleculeParameterNotDefined(molecule.Name, parameter.Name, parameter.Value), moleculeBuildingBlock);
                }
            }

            return(validationResults);
        }
Пример #3
0
        private void addStandardObserversTo(Simulation simulation, IObserverBuildingBlock observerBuildingBlock, IMoleculeBuildingBlock moleculeBuildingBlock)
        {
            var allMoleculesNeedingConcentrationObservers = moleculeBuildingBlock.Where(concentrationIsNeeded).Select(x => x.Name).ToList();
            var compoundNames = simulation.CompoundNames;

            foreach (var observerTemplate in _observerBuilderRepository.AllFor(simulation.ModelProperties))
            {
                if (isDrugFcRnObserver(observerTemplate))
                {
                    //special case: protein model observer for drug and its FcRn complex.
                    //Observer must be created separately for every drug because complexname can not be referenced in generic way by now
                    //E.g.: for drug C1, Observer is f("C1", "C1-FcRn_Complex"))
                    foreach (var compoundName in compoundNames)
                    {
                        var observer = _cloneManager.Clone(observerTemplate.ObserverBuilder, observerBuildingBlock.FormulaCache);
                        observer.Name = CoreConstants.Observer.ObserverNameFrom(observer.Name, compoundName);

                        observer.Formula.ReplaceKeywordsInObjectPaths(
                            new[] { CoreConstants.Molecule.DrugFcRnComplexTemplate },
                            new[] { CoreConstants.Molecule.DrugFcRnComplexName(compoundName) }
                            );

                        observer.AddMoleculeName(compoundName);

                        observerBuildingBlock.Add(observer);
                    }
                }
                else
                {
                    var observer = _cloneManager.Clone(observerTemplate.ObserverBuilder, observerBuildingBlock.FormulaCache);

                    compoundNames.Each(observer.AddMoleculeName);

                    if (observer.IsConcentration())
                    {
                        allMoleculesNeedingConcentrationObservers.Each(observer.AddMoleculeName);
                    }

                    observerBuildingBlock.Add(observer);
                }
            }
        }