roadrunner  2.6.0
Fast simulator for SBML models
rrCModelGenerator.h
1 #ifndef CModelGenerator_H_
2 #define CModelGenerator_H_
3 //---------------------------------------------------------------------------
4 
5 #include "rrCompiledModelGenerator.h"
6 #include "rrModelSharedLibrary.h"
7 #include "rrCodeBuilder.h"
8 #include "rrCCompiler.h"
9 
10 namespace rr
11 {
12 
13 using Poco::Mutex;
14 
19 class RR_DECLSPEC CModelGenerator : public CompiledModelGenerator
20 {
21 
22 public:
23  CModelGenerator(const std::string& tempFolder, const std::string& supportCodeFolder, const std::string& compiler);
24  virtual ~CModelGenerator();
25 
26  virtual ExecutableModel *createModel(const std::string& sbml, uint options);
27 
28  virtual bool setTemporaryDirectory(const std::string& path);
29 
33  virtual std::string getTemporaryDirectory();
34 
39  virtual Compiler* getCompiler();
40 
45  virtual bool setCompiler(const std::string& compiler);
46 
50  std::string getHeaderCode();
51  std::string getSourceCode();
52  std::string getSourceCodeFileName();
53 
54 private:
60  ExecutableModel *createModel(const std::string& sbml, ls::LibStructural *ls,
61  bool forceReCompile, bool computeAndAssignConsevationLaws);
62 
63  CodeBuilder mHeader;
64  CodeBuilder mSource;
65 
66  std::string mHeaderCodeFileName;
67  std::string mSourceCodeFileName;
68 
69  std::string mCurrentSBML;
70 
71  // the shared lib thats created.
72  // this needs to belong to the model
73  // TODO: fix this!
74  ModelSharedLibrary *mModelLib;
75 
76  CCompiler mCompiler;
77 
78  std::string mTempFileFolder;
79 
80  bool generateModelCode(const std::string& sbml, const std::string& modelName, bool computeAndAssignConsevationLaws);
81 
82  static Mutex mCompileMutex;
83 
84  bool compileModel();
85 
86  bool compileCurrentModel();
87 
88 
89 
90  //C Specifics..
91 
92  std::string getHeaderCodeFileName();
93  bool saveSourceCodeToFolder(const std::string& folder, const std::string& baseName);
95 
96 
97  std::string convertUserFunctionExpression(const std::string& equation);
98  std::string convertCompartmentToC(const std::string& compartmentName);
99  std::string convertSpeciesToBc(const std::string& speciesName);
100  std::string convertSpeciesToY(const std::string& speciesName);
101 
106  std::string convertSymbolToC(const std::string& compartmentName);
107  std::string convertSymbolToGP(const std::string& parameterName);
108 
109  void substituteEquation(const std::string& reactionName, Scanner& s, CodeBuilder& sb);
110  void substituteWords(const std::string& reactionName, bool bFixAmounts, Scanner& s, CodeBuilder& sb);
111  void substituteToken(const std::string& reactionName, bool bFixAmounts, Scanner& s, CodeBuilder& sb);
112  std::string findSymbol(const std::string& varName);
113  void write_getModelNameFunction(CodeBuilder& ignore, CodeBuilder& source);
114  void writeComputeAllRatesOfChange(CodeBuilder& sb, const int& numIndependentSpecies, const int& numDependentSpecies, DoubleMatrix& L0);
115  void writeComputeConservedTotals(CodeBuilder& sb, const int& numFloatingSpecies, const int& numDependentSpecies);
116  void writeUpdateDependentSpecies(CodeBuilder& sb, const int& numIndependentSpecies, const int& numDependentSpecies, DoubleMatrix& L0);
117  void writeUserDefinedFunctions(CodeBuilder& sb);
118  void writeResetEvents(CodeBuilder& sb, const int& numEvents);
119  void writeSetConcentration(CodeBuilder& sb);
120  void writeGetConcentration(CodeBuilder& sb);
121  void writeConvertToAmounts(CodeBuilder& sb);
122  void writeConvertToConcentrations(CodeBuilder& sb);
123  void writeProperties(CodeBuilder& sb);
124  void writeAccessors(CodeBuilder& sb);
125  void writeOutVariables(CodeBuilder& sb);
126  void writeClassHeader(CodeBuilder& sb);
127  void writeTestConstraints(CodeBuilder& sb);
128  void writeEvalInitialAssignments(CodeBuilder& sb, const int& numReactions);
129  int writeComputeRules(CodeBuilder& sb, const int& numReactions);
130  void writeComputeReactionRates(CodeBuilder& sb, const int& numReactions);
131  void writeEvalEvents(CodeBuilder& sb, const int& numEvents, const int& numFloatingSpecies);
132  void writeEvalModel(CodeBuilder& sb, const int& numReactions, const int& numIndependentSpecies, const int& numFloatingSpecies, const int& numOfRules);
133  void writeEventAssignments(CodeBuilder& sb, const int& numReactions, const int& numEvents);
134  void writeSetParameterValues(CodeBuilder& sb, const int& numReactions);
135  void writeSetCompartmentVolumes(CodeBuilder& sb);
136  void writeSetBoundaryConditions(CodeBuilder& sb);
137  void writeSetInitialConditions(CodeBuilder& sb, const int& numFloatingSpecies);
138  void writeInitFunction(CodeBuilder& sbh, CodeBuilder& sbc);
139  void writeInitModelDataFunction(CodeBuilder& sbh, CodeBuilder& sbc);
140 
141  int readFloatingSpecies();
142  // int readBoundarySpecies();
143 
144  // Generates the Model Code from the SBML std::string
145  // TODO major clean up
146  std::string generateModelCode(const std::string& sbmlStr, const bool& _computeAndAssignConsevationLaws);
147 
148  // Generates the Model Code from th e SBML std::string
149  // TODO major clean up also
150  std::string generateModelCode(const std::string& sbmlStr, LibStructural *ls, NOMSupport *nom,
151  const bool& _computeAndAssignConsevationLaws = false);
152 
153  static bool loadSBMLIntoNOM(NOMSupport &nom, const std::string& sbml);
154 
155 };
156 
157 
158 }
159 
160 #endif
compiler class for the C based model system.
Definition: rrCCompiler.h:18
Generate executable SBML models by generating and compiling C source code into shared libraries with ...
Definition: rrCModelGenerator.h:20
Definition: rrCodeBuilder.h:9
Both compiled model generators (C and CSharp) share a lot of functionality, so implement that here.
Definition: rrCompiledModelGenerator.h:32
interface to manipulate 'compiler' settings.
Definition: rrCompiler.h:26
Base class for all code generation systems; allows compiling and evaluating the model.
Definition: rrExecutableModel.h:118
Access an actual compiled shared library (.so, .dll or .dylib) that was compiled by a ModelGenerator ...
Definition: rrModelSharedLibrary.h:22
Methods to query various information from an SBML document.
Definition: rrNOMSupport.h:41
Definition: rrScanner.h:36
C_DECL_SPEC int rrcCallConv getNumberOfFloatingSpecies(RRHandle handle)
Returns the number of floating species in the model.
C_DECL_SPEC bool rrcCallConv setCompiler(RRHandle handle, const char *fNameWithPath)
Set the path and filename to the compiler to be used by roadrunner.
C_DECL_SPEC char *rrcCallConv getCompiler(RRHandle handle)
Get the name of the compiler currently being used by roadrunner.