Exemplo n.º 1
0
        private void updateParameterValueFromParameterStartValues(IModel model, IBuildConfiguration buildConfiguration)
        {
            foreach (var parameterStartValue in buildConfiguration.ParameterStartValues)
            {
                var pathInModel = _keywordReplacerTask.CreateModelPathFor(parameterStartValue.Path, model.Root);
                var parameter   = pathInModel.Resolve <IParameter>(model.Root);

                //this can happen if the parameter belongs to a molecule locale properties and the molecule was not created in the container
                if (parameter == null)
                {
                    continue;
                }

                if (parameterStartValue.Formula != null)
                {
                    parameter.Formula = _cloneManagerForModel.Clone(parameterStartValue.Formula);
                    _keywordReplacerTask.ReplaceIn(parameter, model.Root);
                }
                else
                {
                    var constantFormula = parameter.Formula as ConstantFormula;
                    var parameterValue  = parameterStartValue.StartValue.GetValueOrDefault(double.NaN);
                    if (constantFormula == null)
                    {
                        if (parameterStartValue.OverrideFormulaWithValue)
                        {
                            parameter.Formula = _formulaFactory.ConstantFormula(parameterValue, parameter.Dimension);
                        }
                        else
                        {
                            parameter.Value = parameterValue;
                        }
                    }
                    else
                    {
                        constantFormula.Value = parameterValue;
                    }
                }

                //Ensure that parameter in simulation appears no to have been fixed by the user when updated from PSV
                if (parameterStartValue.OverrideFormulaWithValue)
                {
                    parameter.IsFixedValue = false;
                }
            }
        }
Exemplo n.º 2
0
        public IParameter CreateParameter(string name, double?value = null, IDimension dimension = null, string groupName = null, IFormula formula = null, Unit displayUnit = null)
        {
            var dimensionToUse   = dimension ?? _dimensionFactory.NoDimension;
            var displayUnitToUse = displayUnit ?? _displayUnitRetriever.PreferredUnitFor(dimensionToUse);
            var formulaToUse     = formula ?? _formulaFactory.ConstantFormula(value.GetValueOrDefault(double.NaN), dimensionToUse);

            return(_objectBaseFactory.Create <IParameter>()
                   .WithName(name)
                   .WithDimension(dimensionToUse)
                   .WithFormula(formulaToUse)
                   .WithDisplayUnit(displayUnitToUse)
                   .WithGroup(groupName ?? Constants.Groups.MOBI));
        }
 protected override void Context()
 {
     _reactionDimensionRetriever        = A.Fake <IReactionDimensionRetriever>();
     _dimensionFactory                  = A.Fake <IDimensionFactory>();
     _amoutToConcentrationFormulaMapper = A.Fake <IAmoutToConcentrationFormulaMapper>();
     _objectBaseFactory                 = A.Fake <IObjectBaseFactory>();
     _formulaTask          = A.Fake <IFormulaTask>();
     _displayUnitRetriever = A.Fake <IDisplayUnitRetriever>();
     _formulaFactory       = A.Fake <IFormulaFactory>();
     _constantZeroFormula  = new ConstantFormula(0);
     _formulaCache         = new FormulaCache();
     _objectTypeResolver   = new ObjectTypeResolver();
     A.CallTo(() => _formulaTask.AddParentVolumeReferenceToFormula(A <IFormula> ._)).Returns(Constants.VOLUME_ALIAS);
     A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(DomainHelperForSpecs.AmountDimension);
     A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.AMOUNT_PER_TIME)).Returns(DomainHelperForSpecs.AmountPerTimeDimension);
     A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION)).Returns(DomainHelperForSpecs.ConcentrationDimension);
     A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION_PER_TIME)).Returns(DomainHelperForSpecs.ConcentrationPerTimeDimension);
     A.CallTo(() => _objectBaseFactory.Create <ExplicitFormula>()).Returns(new ExplicitFormula());
     A.CallTo(() => _formulaFactory.ConstantFormula(0, DomainHelperForSpecs.ConcentrationDimension)).Returns(_constantZeroFormula);
     sut = new AmountToConcentrationConverter(_reactionDimensionRetriever, _dimensionFactory, _amoutToConcentrationFormulaMapper,
                                              _objectBaseFactory, _formulaTask, _displayUnitRetriever, _objectTypeResolver, _formulaFactory);
 }
        /// <summary>
        ///     Creates a MoBi Parameter from a given SBML Parameter.
        /// </summary>
        public IFormulaUsable CreateParameter(Parameter sbmlParameter)
        {
            var value = 0.0;

            if (sbmlParameter.isSetValue())
            {
                value = sbmlParameter.getValue();
            }
            if (!sbmlParameter.isSetUnits())
            {
                return(ObjectBaseFactory.Create <IParameter>()
                       .WithName(sbmlParameter.getId())
                       .WithFormula(ObjectBaseFactory.Create <ConstantFormula>().WithValue(value)));
            }

            var sbmlUnit  = sbmlParameter.getUnits();
            var baseValue = _unitDefinitionImporter.ToMobiBaseUnit(sbmlUnit, value);

            return(ObjectBaseFactory.Create <IParameter>()
                   .WithName(sbmlParameter.getId())
                   .WithFormula(_formulaFactory.ConstantFormula(baseValue.value, baseValue.dimension))
                   .WithDimension(baseValue.dimension));
        }
Exemplo n.º 5
0
        /// <summary>
        ///     Creates a Volume Parameter for a MoBi Container.
        /// </summary>
        private IEntity CreateVolumeParameter(Compartment compartment)
        {
            var volume = 1.0;

            if (compartment.isSetVolume())
            {
                volume = compartment.getVolume();
            }
            else if (compartment.isSetSize())
            {
                volume = compartment.getSize();
            }

            var      unit      = compartment.getUnits();
            var      baseValue = _unitDefinitionImporter.ToMobiBaseUnit(unit, volume);
            IFormula formula   = _formulaFactory.ConstantFormula(baseValue.value, baseValue.dimension);

            var volumeParameter = _objectBaseFactory.Create <IParameter>()
                                  .WithName(SBMLConstants.VOLUME)
                                  .WithDimension(baseValue.dimension)
                                  .WithFormula(formula);

            return(volumeParameter);
        }
 private IFormula createConstantConcentrationFormula(double value)
 {
     return(_formulaFactory.ConstantFormula(value, _concentrationDimension));
 }