Esempio n. 1
0
        /// <summary>
        ///     Adds the neighbourhood that is necessary for the Passive Transport.
        /// </summary>
        private void AddNeighbourhood(IContainer reactantCompartment, IContainer productCompartment, Model model)
        {
            var existant = false;

            if (GetMainSpatialStructure(model) == null)
            {
                return;
            }
            foreach (var n in GetMainSpatialStructure(model).Neighborhoods)
            {
                if (n.Name == (reactantCompartment.Id + "_" + productCompartment.Id))
                {
                    existant = true;
                }
            }
            if (existant)
            {
                return;
            }
            var nbuilder = ObjectBaseFactory.Create <INeighborhoodBuilder>()
                           .WithName(reactantCompartment.Id + "_" + productCompartment.Id)
                           .WithFirstNeighbor(reactantCompartment)
                           .WithSecondNeighbor(productCompartment);

            GetMainSpatialStructure(model).AddNeighborhood(nbuilder);
        }
Esempio n. 2
0
        /// <summary>
        ///     Creates the Local Parameters of the MoBi Reaction by the given local Parameters
        ///     of the SBML Reaction.
        /// </summary>
        private List <IParameter> CreateLocalParameters(Reaction sbmlReaction)
        {
            if (sbmlReaction.getKineticLaw() == null)
            {
                return(null);
            }
            if (sbmlReaction.getKineticLaw().getNumLocalParameters() <= 0)
            {
                return(null);
            }
            var parameter = new List <IParameter>();

            for (long i = 0; i < sbmlReaction.getKineticLaw().getNumLocalParameters(); i++)
            {
                var p       = sbmlReaction.getKineticLaw().getLocalParameter(i);
                var formula = ObjectBaseFactory.Create <ConstantFormula>()
                              .WithValue(p.getValue());
                var localParameter = ObjectBaseFactory.Create <IParameter>()
                                     .WithName(p.getId())
                                     .WithDescription(p.getNotesString())
                                     .WithFormula(formula);

                var dim = GetDimension(p);
                if (dim != null)
                {
                    localParameter.Dimension = dim;
                }

                if (localParameter != null)
                {
                    parameter.Add(localParameter);
                }
            }
            return(parameter);
        }
Esempio n. 3
0
        /// <summary>
        ///     Creates a "standard" MoBi reaction by a given one compartment reaction.
        /// </summary>
        private void CreateStandardReaction(Reaction sbmlReaction, Model model)
        {
            var reactionBuilder = ObjectBaseFactory.Create <IReactionBuilder>()
                                  .WithName(sbmlReaction.getId())
                                  .WithDescription(sbmlReaction.getNotesString());

            CreateModifiers(sbmlReaction, reactionBuilder, String.Empty, model);
            var parameters = CreateLocalParameters(sbmlReaction);

            if (parameters != null)
            {
                parameters.ForEach(reactionBuilder.AddParameter);
            }

            if (sbmlReaction.isSetKineticLaw())
            {
                CreateKineticLaw(sbmlReaction.getKineticLaw(), reactionBuilder, false);
            }
            CreateProducts(sbmlReaction, reactionBuilder, model);
            CreateEducts(sbmlReaction, reactionBuilder, model);

            if (reactionBuilder != null)
            {
                ReactionBuilderList.Add(reactionBuilder);
            }
        }
Esempio n. 4
0
        /// <summary>
        ///    Creates the Condition of the MoBi Event by the given SBML condition (= trigger).
        /// </summary>
        internal void CreateCondition(Trigger trigger)
        {
            var formula = _astHandler.Parse(trigger.getMath(), trigger.getId(), _sbmlProject, _sbmlInformation) ??
                          ObjectBaseFactory.Create <ExplicitFormula>().WithFormulaString(String.Empty).WithName(SBMLConstants.DEFAULT_FORMULA_NAME);

            EventBuilder.Formula = formula;
        }
Esempio n. 5
0
        /// <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();
            }
            IFormula formula = ObjectBaseFactory.Create <ConstantFormula>().WithValue(value);

            var parameter = ObjectBaseFactory.Create <IParameter>()
                            .WithName(sbmlParameter.getId())
                            .WithFormula(formula);

            if (!sbmlParameter.isSetUnits())
            {
                return(parameter);
            }

            if (_sbmlInformation.MobiDimension.ContainsKey(sbmlParameter.getUnits()))
            {
                parameter.Dimension = _sbmlInformation.MobiDimension[sbmlParameter.getUnits()];
            }
            return(parameter);
        }
Esempio n. 6
0
        /// <summary>
        ///     This is for the special Species Assignment in a RateRule.
        /// </summary>
        private void DoSpeciesAssignment(Rule rule)
        {
            var formula = _astHandler.Parse(rule.getMath(), rule.getVariable(), true, _sbmlProject, _sbmlInformation);

            if (formula == null)
            {
                return;
            }
            var reactionBuilder = ObjectBaseFactory.Create <IReactionBuilder>()
                                  .WithName(SBMLConstants.RATE_RULE + rule.getMetaId())
                                  .WithFormula(formula);

            var product = CreateProduct(rule.getVariable());

            reactionBuilder.AddProduct(product);

            var rbb = GetMainReactionBuildingBlock();

            if (rbb == null)
            {
                rbb = _reactionBuildingBlockFactory.Create()
                      .WithName(SBMLConstants.SBML_REACTION_BB);
                _context.AddToHistory(new AddBuildingBlockCommand <IMoBiReactionBuildingBlock>(rbb));
            }
            rbb.FormulaCache.Add(formula);
            rbb.Add(reactionBuilder);
        }
Esempio n. 7
0
        /// <summary>
        ///    Creates the Mobi Event Assignment for one SBML Event Assignment.
        /// </summary>
        internal void CreateEventAssignment(EventAssignment eventAssignment)
        {
            _counter++;
            var assignmentVar = eventAssignment.getVariable();
            var alias         = _sbmlInformation.AliasCreator.CreateAliasFrom(assignmentVar) + _counter;

            var description = String.Empty;

            if (eventAssignment.isSetNotes())
            {
                description += eventAssignment.getNotesString();
            }
            if (eventAssignment.isSetSBOTerm())
            {
                description += (SBMLConstants.SPACE + eventAssignment.getSBOTerm());
            }

            IEventAssignmentBuilder eab = new EventAssignmentBuilder()
                                          .WithId(eventAssignment.getId() + SBMLConstants.SPACE + eventAssignment.getName() + SBMLConstants.SPACE + alias)
                                          .WithName(SBMLConstants.SBML_EVENT_ASSIGNMENT + eventAssignment.getId())
                                          .WithDescription(description);

            var formula = _astHandler.Parse(eventAssignment.getMath(), eab, assignmentVar, _sbmlProject, _sbmlInformation) ??
                          ObjectBaseFactory.Create <ExplicitFormula>().WithFormulaString(String.Empty).WithName(SBMLConstants.DEFAULT_FORMULA_NAME);

            eab.Formula = formula;
            EventGroupBuildingBlock.FormulaCache.Add(formula);
            EventBuilder.AddAssignment(eab);
        }
Esempio n. 8
0
 protected override void Context()
 {
     _noDimension             = A.Fake <IDimension>();
     _dimensionFactory        = A.Fake <IDimensionFactory>();
     _creationMetaDataFactory = A.Fake <ICreationMetaDataFactory>();
     A.CallTo(() => _dimensionFactory.NoDimension).Returns(_noDimension);
     sut = new ObjectBaseFactory(IoC.Container, _dimensionFactory, new IdGenerator(), _creationMetaDataFactory);
 }
Esempio n. 9
0
 public ReactionImporter(IObjectPathFactory objectPathFactory, IObjectBaseFactory objectBaseFactory, IMoBiDimensionFactory moBiDimensionFactory, ASTHandler astHandler, IMoBiContext context, IReactionBuildingBlockFactory reactionBuildingBlockFactory)
     : base(objectPathFactory, objectBaseFactory, astHandler, context)
 {
     _dimensionFactory              = moBiDimensionFactory;
     ReactionBuilderList            = new List <IReactionBuilder>();
     _passiveTransportList          = new List <ITransportBuilder>();
     _reactionBuildingBlock         = reactionBuildingBlockFactory.Create().WithName(SBMLConstants.SBML_REACTION_BB);
     _passiveTransportBuildingBlock = ObjectBaseFactory.Create <IPassiveTransportBuildingBlock>()
                                      .WithName(SBMLConstants.SBML_PASSIVETRANSPORTS_BB);
 }
Esempio n. 10
0
        /// <summary>
        ///     Creates a container's size parameter to import the size of the particular SBML compartment.
        /// </summary>
        private IParameter CreateSizeParameter(Compartment compartment)
        {
            IFormula formula = ObjectBaseFactory.Create <ConstantFormula>().WithValue(compartment.getSize());

            var sizeParameter = _objectBaseFactory.Create <IParameter>()
                                .WithName(SBMLConstants.SIZE)
                                .WithDescription(SBMLConstants.SBML_SIZE_DESCRIPTION)
                                .WithFormula(formula);

            return(SetDimension(compartment, sizeParameter));
        }
Esempio n. 11
0
        /// <summary>
        ///     Creates a Volume Parameter for a MoBi Container.
        /// </summary>
        private IEntity CreateVolumeParameter()
        {
            IFormula formula = ObjectBaseFactory.Create <ConstantFormula>().WithValue(1);

            var volumeParameter = _objectBaseFactory.Create <IParameter>()
                                  .WithName(SBMLConstants.VOLUME)
                                  .WithDimension(_dimensionFactory.Dimension(OSPSuite.Core.Domain.Constants.Dimension.VOLUME))
                                  .WithFormula(formula);

            return(volumeParameter);
        }
        /// <summary>
        ///     Sets the Parameter Start Value of a given Parameter to the given Math Formula.
        /// </summary>
        protected internal void SetPSV(ASTNode math, IParameter parameter, string containerName)
        {
            if (parameter == null)
            {
                CreateErrorMsg();
                return;
            }

            var formula = _astHandler.Parse(math, parameter.Name, false, _sbmlProject, _sbmlInformation);

            if (formula == null)
            {
                return;
            }

            var psvbb = GetMainParameterStartValuesBuildingBlock();

            if (psvbb == null)
            {
                return;
            }
            psvbb.AddFormula(formula);

            foreach (var declaredPSV in psvbb.Where(declaredPSV => declaredPSV.Name == parameter.Name))
            {
                if (string.IsNullOrEmpty(containerName))
                {
                    declaredPSV.Formula = formula;
                    return;
                }
                if (!declaredPSV.Path.Contains(containerName))
                {
                    continue;
                }
                declaredPSV.Formula = formula;
                return;
            }

            var psv = ObjectBaseFactory.Create <IParameterStartValue>()
                      .WithName(parameter.Name)
                      .WithFormula(formula)
                      .WithDimension(parameter.Dimension);

            psvbb.Add(psv);
        }
Esempio n. 13
0
        /// <summary>
        ///     Creates the Kinetic Formula for a passive Transport.
        /// </summary>
        private void CreateKinetic(Reaction sbmlReaction, ITransportBuilder passiveTransport)
        {
            _astHandler.NeedAbsolutePath = true;
            var formula = sbmlReaction.getKineticLaw() == null
             ? ObjectBaseFactory.Create <ExplicitFormula>().WithFormulaString(String.Empty)
             : _astHandler.Parse(sbmlReaction.getKineticLaw().getMath(), sbmlReaction.getId(), _sbmlProject, _sbmlInformation);

            if (formula == null)
            {
                passiveTransport.Formula = ObjectBaseFactory.Create <ExplicitFormula>()
                                           .WithFormulaString(String.Empty)
                                           .WithName(SBMLConstants.DEFAULT_FORMULA_NAME);
            }
            else
            {
                passiveTransport.Formula = formula;
                _passiveTransportBuildingBlock.FormulaCache.Add(formula);
            }
        }
Esempio n. 14
0
        protected override void Context()
        {
            base.Context();
            var container        = A.Fake <IContainer>();
            var noDimension      = A.Fake <IDimension>();
            var dimensionFactory = A.Fake <IDimensionFactory>();

            A.CallTo(() => dimensionFactory.NoDimension).Returns(noDimension);

            var objectBaseFactory = new ObjectBaseFactory(container, dimensionFactory, new IdGenerator(), A.Fake <ICreationMetaDataFactory>());

            _dataRepositoryTask           = A.Fake <IDataRepositoryTask>();
            _cloneManagerForBuildingBlock = new CloneManagerForBuildingBlock(objectBaseFactory, _dataRepositoryTask);

            sut.ForAll = false;
            sut.AddMoleculeName("A");
            sut.AddMoleculeName("B");
            sut.AddMoleculeNameToExclude("C");
            sut.AddMoleculeNameToExclude("D");
        }
Esempio n. 15
0
        /// <summary>
        ///     Creates the MoBi Reaction Formula by the given SBML Kinetic Law.
        /// </summary>
        private void CreateKineticLaw(KineticLaw kineticLaw, IReactionBuilder reactionBuilder, bool needAbsolutePath)
        {
            if (needAbsolutePath)
            {
                _astHandler.NeedAbsolutePath = true;
            }
            var formula = kineticLaw == null?ObjectBaseFactory.Create <ExplicitFormula>().WithFormulaString(String.Empty).WithName(SBMLConstants.DEFAULT_FORMULA_NAME) : _astHandler.Parse(kineticLaw.getMath(), reactionBuilder, _sbmlProject, _sbmlInformation);

            if (formula == null)
            {
                reactionBuilder.Formula = ObjectBaseFactory.Create <ExplicitFormula>()
                                          .WithFormulaString(String.Empty)
                                          .WithName(SBMLConstants.DEFAULT_FORMULA_NAME);
            }
            else
            {
                reactionBuilder.Formula = formula;
                _reactionBuildingBlock.FormulaCache.Add(formula);
            }
        }
        /// <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));
        }
Esempio n. 17
0
        /// <summary>
        ///     Creates for each compartment of the SBML Reaction one "Ghostreaction" to import multicompartment reactions.
        /// </summary>
        private void CreateGhostReactions(Reaction sbmlReaction, Dictionary <string, List <SpeciesReference> > eductCompartmentMoleculeDictionary, Dictionary <string, List <SpeciesReference> > productCompartmentMoleculeDictionary, Model model)
        {
            var usedProducts = new List <string>();

            foreach (var keyValuePair in eductCompartmentMoleculeDictionary)
            {
                var reactionBuilder = ObjectBaseFactory.Create <IReactionBuilder>()
                                      .WithName(sbmlReaction.getId() + "_" + keyValuePair.Key + "_ghostReaction")
                                      .WithDescription(sbmlReaction.getNotesString());

                CreateModifiers(sbmlReaction, reactionBuilder, keyValuePair.Key, model);
                var parameters = CreateLocalParameters(sbmlReaction);
                if (parameters != null)
                {
                    parameters.ForEach(reactionBuilder.AddParameter);
                }
                CreateKineticLaw(sbmlReaction.getKineticLaw(), reactionBuilder, true);

                var compartmentName = keyValuePair.Key;
                if (!_sbmlInformation.DummyNameContainerDictionary.ContainsValue(compartmentName))
                {
                    return;
                }
                var dummyMolecule = _sbmlInformation.DummyNameContainerDictionary.FirstOrDefault(x => x.Value == compartmentName).Key;

                reactionBuilder.AddModifier(dummyMolecule);

                foreach (var species in keyValuePair.Value)
                {
                    var reactionPartner = CreateReactionPartner(species, model);
                    if (reactionPartner != null)
                    {
                        reactionBuilder.AddEduct(reactionPartner);
                    }
                }

                if (productCompartmentMoleculeDictionary.ContainsKey(keyValuePair.Key))
                {
                    usedProducts.Add(keyValuePair.Key);
                    var productsInThisCompartment = productCompartmentMoleculeDictionary[keyValuePair.Key];
                    foreach (var product in productsInThisCompartment)
                    {
                        var reactionPartner = CreateReactionPartner(product, model);
                        if (reactionPartner != null)
                        {
                            reactionBuilder.AddProduct(reactionPartner);
                        }
                    }
                }
                ReactionBuilderList.Add(reactionBuilder);
            }


            foreach (var keyValuePair in productCompartmentMoleculeDictionary)
            {
                if (usedProducts.Contains(keyValuePair.Key))
                {
                    continue;
                }

                var reactionBuilder = ObjectBaseFactory.Create <IReactionBuilder>()
                                      .WithName(sbmlReaction.getId() + "_" + keyValuePair.Key + "_ghostReaction")
                                      .WithDescription(sbmlReaction.getNotesString());

                CreateModifiers(sbmlReaction, reactionBuilder, keyValuePair.Key, model);
                var parameters = CreateLocalParameters(sbmlReaction);
                if (parameters != null)
                {
                    parameters.ForEach(reactionBuilder.AddParameter);
                }
                CreateKineticLaw(sbmlReaction.getKineticLaw(), reactionBuilder, true);

                var compartmentName = keyValuePair.Key;
                if (!_sbmlInformation.DummyNameContainerDictionary.ContainsValue(compartmentName))
                {
                    return;
                }
                var dummyMolecule = _sbmlInformation.DummyNameContainerDictionary.FirstOrDefault(x => x.Value == compartmentName).Key;

                reactionBuilder.AddModifier(dummyMolecule);

                foreach (var species in keyValuePair.Value)
                {
                    var reactionPartner = CreateReactionPartner(species, model);
                    if (reactionPartner != null)
                    {
                        reactionBuilder.AddProduct(reactionPartner);
                    }
                }
                ReactionBuilderList.Add(reactionBuilder);
            }
        }
Esempio n. 18
0
        /// <summary>
        ///     Imports a SBML Reaction by creating a passive Transport.
        /// </summary>
        private void CreatePassiveTransport(Reaction sbmlReaction, Model model)
        {
            var reactant        = sbmlReaction.getReactant(0).getSpecies();
            var product         = sbmlReaction.getProduct(0).getSpecies();
            var reactantSpecies = GetSpeciesById(reactant, model);
            var productSpecies  = GetSpeciesById(product, model);

            if (_sbmlInformation.MoleculeInformation.All(info => info.SpeciesIds.TrueForAll(s => s != reactant)))
            {
                return;
            }
            if (_sbmlInformation.MoleculeInformation.All(info => info.SpeciesIds.TrueForAll(s => s != product)))
            {
                return;
            }
            var molInfoReactant = _sbmlInformation.MoleculeInformation.FirstOrDefault(info => info.SpeciesIds.Contains(reactant));
            var molInfoProduct  = _sbmlInformation.MoleculeInformation.FirstOrDefault(info => info.SpeciesIds.Contains(product));

            if (molInfoProduct == null)
            {
                return;
            }
            if (molInfoReactant == null)
            {
                return;
            }

            //must be the same Molecule
            if (molInfoReactant.GetMoleculeBuilder() != molInfoProduct.GetMoleculeBuilder())
            {
                CreateErrorMessage();
            }

            var passiveTransport = ObjectBaseFactory.Create <ITransportBuilder>().WithName(sbmlReaction.getId());

            passiveTransport.ForAll = false;
            if (molInfoReactant.GetMoleculeBuilderName() == null)
            {
                return;
            }
            passiveTransport.MoleculeList.AddMoleculeName(molInfoReactant.GetMoleculeBuilderName());

            var reactantCompartment = GetContainerFromCompartment_(molInfoReactant.GetCompartment(reactantSpecies));
            var productCompartment  = GetContainerFromCompartment_(molInfoProduct.GetCompartment(productSpecies));

            if (reactantCompartment != null && productCompartment != null)
            {
                var reactantMatchTag = new MatchTagCondition(reactantCompartment.Name);
                var productMatchTag  = new MatchTagCondition(productCompartment.Name);
                passiveTransport.SourceCriteria.Add(reactantMatchTag);
                passiveTransport.TargetCriteria.Add(productMatchTag);
            }

            var parameters = CreateLocalParameters(sbmlReaction);

            if (parameters != null)
            {
                parameters.ForEach(passiveTransport.AddParameter);
            }
            CreateKinetic(sbmlReaction, passiveTransport);
            AddNeighbourhood(reactantCompartment, productCompartment, model);

            _passiveTransportBuildingBlock.Add(passiveTransport);
        }
Esempio n. 19
0
 /// <summary>
 ///     Creates the Molecule - and the Molecule Start Values Building Block.
 /// </summary>
 internal void CreateMoleculeBuildingBlock()
 {
     MoleculeBuildingBlock = ObjectBaseFactory.Create <IMoleculeBuildingBlock>()
                             .WithName(SBMLConstants.SBML_SPECIES_BB);
 }