roadrunner  2.6.0
Fast simulator for SBML models
rrCompiledModelGenerator.h
1 /*
2  * rrCompiledModelGenerator.h
3  *
4  * Created on: May 26, 2013
5  * Author: andy
6  */
7 
8 #ifndef RRCOMPILEDMODELGENERATOR_H_
9 #define RRCOMPILEDMODELGENERATOR_H_
10 
11 
12 #include "rrModelSharedLibrary.h"
13 #include "rrCodeBuilder.h"
14 #include "rrScanner.h"
15 #include "rrNOMSupport.h"
16 #include "rrSymbol.h"
17 #include "rrModelSymbols.h"
18 #include "rr-libstruct/lsMatrix.h"
19 #include "rr-libstruct/lsLibStructural.h"
20 
21 // TODO UGLY!!!!
22 // using namespace in header!
23 using namespace ls;
24 
25 namespace rr {
26 
31 class RR_DECLSPEC CompiledModelGenerator
32 {
33 protected:
35  virtual ~CompiledModelGenerator();
36 
37  std::string substituteTerms(const std::string& reactionName, const std::string& inputEquation, bool bFixAmounts);
38  std::string substituteTerms(const int& numReactions, const std::string& reactionName, const std::string& equation);
39 
40  virtual std::string convertUserFunctionExpression(const std::string& equation) = 0;
41  virtual void substituteEquation(const std::string& reactionName, Scanner& s, CodeBuilder& sb) = 0;
42  virtual void substituteWords(const std::string& reactionName, bool bFixAmounts, Scanner& s, CodeBuilder& sb) = 0;
43  virtual void substituteToken(const std::string& reactionName, bool bFixAmounts, Scanner& s, CodeBuilder& sb) = 0;
44  virtual std::string findSymbol(const std::string& varName) = 0;
45  virtual void writeComputeAllRatesOfChange(CodeBuilder& sb, const int& numIndependentSpecies,
46  const int& numDependentSpecies, ls::DoubleMatrix& L0) = 0;
47 
48  virtual void writeComputeConservedTotals(CodeBuilder& sb, const int& numFloatingSpecies,
49  const int& numDependentSpecies) = 0;
50 
51  virtual void writeUpdateDependentSpecies(CodeBuilder& sb, const int& numIndependentSpecies,
52  const int& numDependentSpecies, ls::DoubleMatrix& L0) = 0;
53 
54  virtual void writeUserDefinedFunctions(CodeBuilder& sb) = 0;
55  virtual void writeResetEvents(CodeBuilder& sb, const int& numEvents) = 0;
56  virtual void writeSetConcentration(CodeBuilder& sb) = 0;
57  virtual void writeGetConcentration(CodeBuilder& sb) = 0;
58  virtual void writeConvertToAmounts(CodeBuilder& sb) = 0;
59  virtual void writeConvertToConcentrations(CodeBuilder& sb) = 0;
60  virtual void writeProperties(CodeBuilder& sb) = 0;
61  virtual void writeAccessors(CodeBuilder& sb) = 0;
62  virtual void writeOutVariables(CodeBuilder& sb) = 0;
63  virtual void writeClassHeader(CodeBuilder& sb) = 0;
64  virtual void writeTestConstraints(CodeBuilder& sb) = 0;
65  virtual void writeEvalInitialAssignments(CodeBuilder& sb, const int& numReactions) = 0;
66  virtual int writeComputeRules(CodeBuilder& sb, const int& numReactions) = 0;
67  virtual void writeComputeReactionRates(CodeBuilder& sb, const int& numReactions) = 0;
68  virtual void writeEvalEvents(CodeBuilder& sb, const int& numEvents, const int& numFloatingSpecies) = 0;
69  virtual void writeEvalModel(CodeBuilder& sb, const int& numReactions, const int& numIndependentSpecies, const int& numFloatingSpecies, const int& numOfRules) = 0;
70  virtual void writeEventAssignments(CodeBuilder& sb, const int& numReactions, const int& numEvents) = 0;
71  virtual void writeSetParameterValues(CodeBuilder& sb, const int& numReactions) = 0;
72  virtual void writeSetCompartmentVolumes(CodeBuilder& sb) = 0;
73  virtual void writeSetBoundaryConditions(CodeBuilder& sb) = 0;
74  virtual void writeSetInitialConditions(CodeBuilder& sb, const int& numFloatingSpecies) = 0;
75  virtual std::string convertCompartmentToC(const std::string& compartmentName) = 0;
76  virtual std::string convertSpeciesToBc(const std::string& speciesName) = 0;
77  virtual std::string convertSpeciesToY(const std::string& speciesName) = 0;
78  virtual std::string convertSymbolToC(const std::string& compartmentName) = 0;
79  virtual std::string convertSymbolToGP(const std::string& parameterName) = 0;
80 
81  void reset();
82 
83  int numAdditionalRates(); //this variable is the size of moMapRateRule
84 
90  ls::LibStructural* mLibStruct;
91 
98 
99  bool mComputeAndAssignConsevationLaws;
100 
101  const std::string mFixAmountCompartments;
102 
103  StringList mWarnings;
104 
108  virtual std::string getInfo();
109 
113  static ASTNode* cleanEquation(ASTNode* ast);
114  static std::string cleanEquation(const std::string& equation);
115 
116  ls::DoubleMatrix* initializeL0(int& nrRows, int& nrCols);
117  bool expressionContainsSymbol(ASTNode* ast, const std::string& symbol);
118  bool expressionContainsSymbol(const std::string& expression, const std::string& symbol);
119  const Symbol* getSpecies(const std::string& id);
120  int readGlobalParameters();
121  void readLocalParameters(const int& numReactions, std::vector<int>& localParameterDimensions, int& totalLocalParmeters);
122  int readCompartments();
123 
124  std::string writeDouble(const double& value, const std::string& format = "%G");
125 
134 };
135 
136 } /* namespace rr */
137 #endif /* RRCOMPILEDMODELGENERATOR_H_ */
Definition: rrCodeBuilder.h:9
Both compiled model generators (C and CSharp) share a lot of functionality, so implement that here.
Definition: rrCompiledModelGenerator.h:32
NOMSupport * mNOM
Object that provide some wrappers and new "NOM" functions.
Definition: rrCompiledModelGenerator.h:97
ModelSymbols ms
hold all the symbolic (AKA metadata) information in the model The idea is that all the memebers of th...
Definition: rrCompiledModelGenerator.h:133
ls::LibStructural * mLibStruct
Refernce to libstruct library this are set by createModel, and for the time being remain after create...
Definition: rrCompiledModelGenerator.h:90
Definition: rrModelSymbols.h:20
Methods to query various information from an SBML document.
Definition: rrNOMSupport.h:41
Definition: rrScanner.h:36
Definition: rrStringList.h:19
An SBML species definition.
Definition: rrSymbol.h:18
C_DECL_SPEC bool rrcCallConv reset(RRHandle handle)
Resets all variables of the model to their current initial values. Does not change the parameters.
C_DECL_SPEC char *rrcCallConv getInfo(RRHandle handle)
Retrieve info about current state of roadrunner, e.g. loaded model, conservationAnalysis etc.