C API Documentation
rrExecutableModel.h
Go to the documentation of this file.
1 
2 // == PREAMBLE ================================================
3 
4 // * Licensed under the Apache License, Version 2.0; see README
5 
6 // == FILEDOC =================================================
7 
14 # ifndef rrExecutableModelH
15 # define rrExecutableModelH
16 
17 // == INCLUDES ================================================
18 
19 # include "rrOSSpecifics.h"
20 # include "rrException.h"
21 # include "sbml/SBMLDocument.h"
22 
23 # include <stdint.h>
24 # include <string>
25 # include <vector>
26 # include <list>
27 # include <ostream>
28 
29 
30 # include "tr1proxy/rr_memory.h"
31 
32 // == CODE ====================================================
33 
34 namespace rr {
35 
36  class ExecutableModel;
37 
54  class EventListener {
55  public:
56  enum Result {
57  HALT_SIMULATION = (0x1 << 0), // => 0x00000001
58  };
59  virtual uint onTrigger(ExecutableModel *model, size_t eventIndex, const std::string &eventId) = 0;
60 
61  virtual uint onAssignment(ExecutableModel *model, size_t eventIndex, const std::string &eventId) = 0;
62 
63  protected:
64  ~EventListener() {};
65  };
66 
71  typedef cxx11_ns::shared_ptr<EventListener> EventListenerPtr;
72 
73  class EventListenerException : public std::exception {
74  public:
75  explicit EventListenerException(uint resultCode) :
76  resultCode(resultCode) {
77  msg = "EventHandlerException, resultCode: ";
78 
79  switch (resultCode) {
80  case EventListener::HALT_SIMULATION:
81  msg += "HALT_SIMULATION";
82  break;
83  }
84  }
85 
86  virtual ~EventListenerException() throw() {
87  };
88 
89  virtual const char *what() const throw() {
90  return msg.c_str();
91  }
92 
93  uint getResultCode() const {
94  return resultCode;
95  }
96 
97  private:
98  uint resultCode;
99  std::string msg;
100  };
101 
102 
118  class RR_DECLSPEC ExecutableModel {
119  public:
126  virtual std::string getExecutableModelDesc() const = 0;
127 
131  virtual std::string getModelName() = 0;
132 
133  virtual void setTime(double _time) = 0;
134 
135  virtual double getTime() = 0;
136 
137 
143  virtual void reset() = 0;
144 
145 
146 
147  /************************ Floating Species Section ****************************/
148  /******************************************************************************/
149  /******************************************************************************/
150 
155  virtual int getNumDepFloatingSpecies() = 0;
156 
160  virtual int getNumFloatingSpecies() = 0;
161 
162  virtual int getFloatingSpeciesIndex(const std::string &eid) = 0;
163 
164  virtual std::string getFloatingSpeciesId(size_t index) = 0;
165 
170  virtual int getNumIndFloatingSpecies() = 0;
171 
180  virtual int getFloatingSpeciesAmounts(size_t len, int const *indx,
181  double *values) = 0;
182 
183  virtual int setFloatingSpeciesAmounts(size_t len, int const *indx,
184  const double *values) = 0;
185 
186  virtual int getFloatingSpeciesAmountRates(size_t len, int const *indx,
187  double *values) = 0;
188 
189 
190  virtual int getFloatingSpeciesConcentrationRates(size_t len, int const *indx,
191  double *values) = 0;
192 
201  virtual int getFloatingSpeciesConcentrations(size_t len, int const *indx,
202  double *values) = 0;
203 
212  virtual int setFloatingSpeciesConcentrations(size_t len, int const *indx,
213  double const *values) = 0;
214 
225  virtual int setFloatingSpeciesInitConcentrations(size_t len, int const *indx,
226  double const *values) = 0;
227 
232  virtual int getFloatingSpeciesInitConcentrations(size_t len, int const *indx,
233  double *values) = 0;
234 
245  virtual int setFloatingSpeciesInitAmounts(size_t len, int const *indx,
246  double const *values) = 0;
247 
252  virtual int getFloatingSpeciesInitAmounts(size_t len, int const *indx,
253  double *values) = 0;
254 
255  /************************ End Floating Species Section ************************/
256  /***********************************************************************/
257  /******************************************************************************/
258 
259 
260 
261  /************************ Boundary Species Section ****************************/
262  /**********************************************************************/
263  /******************************************************************************/
264 
265 
269  virtual int getNumBoundarySpecies() = 0;
270 
271  virtual int getBoundarySpeciesIndex(const std::string &eid) = 0;
272 
273  virtual std::string getBoundarySpeciesId(size_t index) = 0;
274 
283  virtual int getBoundarySpeciesAmounts(size_t len, int const *indx,
284  double *values) = 0;
285 
286 
295  virtual int getBoundarySpeciesConcentrations(size_t len, int const *indx,
296  double *values) = 0;
297 
306  virtual int setBoundarySpeciesConcentrations(size_t len, int const *indx,
307  double const *values) = 0;
308 
309 
310  /************************ End Boundary Species Section ************************/
311  /***********************************************************************/
312  /******************************************************************************/
313 
314 
315  /************************ Global Parameters Section ***************************/
316  /**********************************************************************/
317  /******************************************************************************/
318 
322  virtual int getNumGlobalParameters() = 0;
323 
327  virtual int getGlobalParameterIndex(const std::string &eid) = 0;
328 
332  virtual std::string getGlobalParameterId(size_t index) = 0;
333 
342  virtual int getGlobalParameterValues(size_t len, int const *indx,
343  double *values) = 0;
344 
345  virtual int setGlobalParameterValues(size_t len, int const *indx,
346  const double *values) = 0;
347 
353  virtual int setGlobalParameterInitValues(size_t len, int const *indx,
354  double const *values) = 0;
355 
360  virtual int getGlobalParameterInitValues(size_t len, int const *indx,
361  double *values) = 0;
362 
363 
364  /************************ Global Parameters Species Section *******************/
365  /***********************************************************************/
366  /******************************************************************************/
367 
368 
369  /************************ Compartments Section ********************************/
370  /**********************************************************************/
371 
372  /******************************************************************************/
373 
374  virtual int getNumCompartments() = 0;
375 
376  virtual int getCompartmentIndexForFloatingSpecies(size_t index) = 0;
377 
378  virtual int getCompartmentIndex(const std::string &eid) = 0;
379 
380  virtual std::string getCompartmentId(size_t index) = 0;
381 
390  virtual int getCompartmentVolumes(size_t len, int const *indx,
391  double *values) = 0;
392 
393  virtual int setCompartmentVolumes(size_t len, int const *indx,
394  const double *values) = 0;
395 
406  virtual int setCompartmentInitVolumes(size_t len, int const *indx,
407  double const *values) = 0;
408 
413  virtual int getCompartmentInitVolumes(size_t len, int const *indx,
414  double *values) = 0;
415 
416 
417  /************************ End Compartments Species Section ********************/
418  /***********************************************************************/
419  /******************************************************************************/
420 
421 
422  /************************ Selection Ids Species Section ***********************/
423  /**********************************************************************/
424  /******************************************************************************/
425 
434  virtual void getIds(int types, std::list<std::string> &ids) = 0;
435 
439  virtual int getSupportedIdTypes() = 0;
440 
445  virtual double getValue(const std::string &id) = 0;
446 
450  virtual void setValue(const std::string &id, double value) = 0;
451 
452 
453  /************************ End Selection Ids Species Section *******************/
454  /***********************************************************************/
455  /******************************************************************************/
456 
467  virtual int getStoichiometryMatrix(int *rows, int *cols, double **data) = 0;
468 
474  virtual double getStoichiometry(int speciesIndex, int reactionIndex) = 0;
475 
476 
477  virtual int getNumConservedMoieties() = 0;
478 
479  virtual int getConservedMoietyIndex(const std::string &eid) = 0;
480 
481  virtual std::string getConservedMoietyId(size_t index) = 0;
482 
483  virtual int getConservedMoietyValues(size_t len, int const *indx, double *values) = 0;
484 
485  virtual int setConservedMoietyValues(size_t len, int const *indx,
486  const double *values) = 0;
487 
488  virtual int getNumRateRules() = 0;
489 
496  virtual std::vector<std::string> getRateRuleSymbols() const = 0;
497 
498 
502  virtual int getNumReactions() = 0;
503 
508  virtual int getReactionIndex(const std::string &eid) = 0;
509 
513  virtual std::string getReactionId(size_t index) = 0;
514 
523  virtual int getReactionRates(size_t len, int const *indx,
524  double *values) = 0;
525 
533  virtual void getRateRuleValues(double *rateRuleValues) = 0;
534 
538  virtual std::string getStateVectorId(size_t index) = 0;
539 
556  virtual int getStateVector(double *stateVector) = 0;
557 
567  virtual int setStateVector(const double *stateVector) = 0;
568 
585  virtual void getStateVectorRate(double time, const double *y, double *dydt = 0) = 0;
586 
587  virtual void testConstraints() = 0;
588 
589  virtual std::string getInfo() = 0;
590 
591  virtual void print(std::ostream &stream) = 0;
592 
593  /******************************* Events Section *******************************/
594  /**********************************************************************/
595 
596  /******************************************************************************/
597 
598  virtual int getNumEvents() = 0;
599 
611  virtual int getEventTriggers(size_t len, const int *indx, unsigned char *values) = 0;
612 
613 
626  virtual int applyEvents(double timeEnd, const unsigned char *previousEventStatus,
627  const double *initialState, double *finalState) = 0;
628 
629 
641  virtual void getEventRoots(double time, const double *y, double *gdot) = 0;
642 
643  virtual double getNextPendingEventTime(bool pop) = 0;
644 
645  virtual int getPendingEventSize() = 0;
646 
647  virtual void resetEvents() = 0;
648 
655  virtual ~ExecutableModel() {};
656 
657  /******************************* Events Section *******************************/
658  /**********************************************************************/
659  /******************************************************************************/
660 
661 
666  virtual int getEventIndex(const std::string &eid) = 0;
667 
668  virtual std::string getEventId(size_t index) = 0;
669 
670  virtual void getEventIds(std::list<std::string>&) = 0;
671 
672  virtual void setEventListener(size_t index, EventListenerPtr eventHandler) = 0;
673 
674  virtual EventListenerPtr getEventListener(size_t index) = 0;
675 
689  virtual double getFloatingSpeciesAmountRate(size_t index,
690  const double *reactionRates) = 0;
691 
696  virtual void reset(int options) = 0;
697 
702  virtual void setRandomSeed(int64_t) = 0;
703 
707  virtual int64_t getRandomSeed() = 0;
708 
715  virtual double getRandom() = 0;
716 
720  virtual uint32_t getFlags() const = 0;
721 
726  virtual void setFlags(uint32_t) = 0;
727 
734  INTEGRATION = (0x1 << 0), // => 0x00000001
735 
739  OPTIMIZE_REACTION_RATE_SELECTION = (0x1 << 1), // => 0x00000010
740  };
741 
746 
747  /*
748  * Writes "Not implemented for this model type" to out if not implemented for the underlying
749  * model type
750  */
751  virtual void saveState(std::ostream &out) {
752  out << "Saving state not implemented for this model type";
753  }
754 
755  friend class RoadRunner;
756 
757  protected:
758 
762  void setIntegration(bool value) {
763  uint32_t flags = getFlags();
764  if (value) {
765  flags |= INTEGRATION;
766  } else {
767  flags &= ~INTEGRATION;
768  }
769  setFlags(flags);
770  }
771 
772 
773  };
774 
775 
776 
777 
781  RR_DECLSPEC std::ostream &operator<<(std::ostream &stream, ExecutableModel *model);
782 }
783 #endif // rrExecutableModelH
Definition: rrExecutableModel.h:73
Notifies the user of SBML events.
Definition: rrExecutableModel.h:54
Base class for all code generation systems; allows compiling and evaluating the model.
Definition: rrExecutableModel.h:118
virtual void getStateVectorRate(double time, const double *y, double *dydt=0)=0
ExecutableModelFlags
Definition: rrExecutableModel.h:728
virtual std::string getExecutableModelDesc() const =0
Returns a human-readable description of the code generation backend, e.g. LLVM, legacy C,...
virtual void getIds(int types, std::list< std::string > &ids)=0
virtual int getBoundarySpeciesConcentrations(size_t len, int const *indx, double *values)=0
virtual int setBoundarySpeciesConcentrations(size_t len, int const *indx, double const *values)=0
virtual double getRandom()=0
virtual int getSupportedIdTypes()=0
virtual int getFloatingSpeciesInitAmounts(size_t len, int const *indx, double *values)=0
virtual void reset()=0
virtual int setFloatingSpeciesInitConcentrations(size_t len, int const *indx, double const *values)=0
virtual int getStoichiometryMatrix(int *rows, int *cols, double **data)=0
virtual int getNumDepFloatingSpecies()=0
virtual void getEventRoots(double time, const double *y, double *gdot)=0
virtual void setFlags(uint32_t)=0
virtual int getReactionRates(size_t len, int const *indx, double *values)=0
virtual double getFloatingSpeciesAmountRate(size_t index, const double *reactionRates)=0
virtual int setStateVector(const double *stateVector)=0
virtual int getEventTriggers(size_t len, const int *indx, unsigned char *values)=0
virtual int getFloatingSpeciesInitConcentrations(size_t len, int const *indx, double *values)=0
virtual std::string getModelName()=0
virtual int getNumBoundarySpecies()=0
virtual int setGlobalParameterInitValues(size_t len, int const *indx, double const *values)=0
virtual std::string getGlobalParameterId(size_t index)=0
virtual int getStateVector(double *stateVector)=0
virtual int64_t getRandomSeed()=0
virtual ~ExecutableModel()
Definition: rrExecutableModel.h:655
virtual void getRateRuleValues(double *rateRuleValues)=0
virtual int setCompartmentInitVolumes(size_t len, int const *indx, double const *values)=0
virtual uint32_t getFlags() const =0
virtual int getReactionIndex(const std::string &eid)=0
virtual int getBoundarySpeciesAmounts(size_t len, int const *indx, double *values)=0
virtual int getGlobalParameterInitValues(size_t len, int const *indx, double *values)=0
virtual int getCompartmentVolumes(size_t len, int const *indx, double *values)=0
virtual std::vector< std::string > getRateRuleSymbols() const =0
Gets the symbols defined by rate rules, i.e. returns all x such that x' = f(x) is a rule which define...
virtual int getNumFloatingSpecies()=0
virtual void setRandomSeed(int64_t)=0
virtual int getNumGlobalParameters()=0
virtual int setFloatingSpeciesInitAmounts(size_t len, int const *indx, double const *values)=0
virtual int getGlobalParameterIndex(const std::string &eid)=0
virtual std::string getStateVectorId(size_t index)=0
virtual int getFloatingSpeciesAmounts(size_t len, int const *indx, double *values)=0
virtual void reset(int options)=0
virtual void setValue(const std::string &id, double value)=0
virtual int getNumReactions()=0
virtual int getNumIndFloatingSpecies()=0
void computeAllRatesOfChange()
Definition: rrExecutableModel.h:745
virtual int applyEvents(double timeEnd, const unsigned char *previousEventStatus, const double *initialState, double *finalState)=0
virtual int getEventIndex(const std::string &eid)=0
virtual std::string getReactionId(size_t index)=0
virtual double getValue(const std::string &id)=0
void setIntegration(bool value)
Definition: rrExecutableModel.h:762
virtual int setFloatingSpeciesConcentrations(size_t len, int const *indx, double const *values)=0
virtual int getGlobalParameterValues(size_t len, int const *indx, double *values)=0
virtual double getStoichiometry(int speciesIndex, int reactionIndex)=0
virtual int getCompartmentInitVolumes(size_t len, int const *indx, double *values)=0
virtual int getFloatingSpeciesConcentrations(size_t len, int const *indx, double *values)=0
C_DECL_SPEC bool rrcCallConv saveState(RRHandle handle, const char *filename)
Save a road runner instance's state to a platform-specific binary file.
C_DECL_SPEC char *rrcCallConv getInfo(RRHandle handle)
Retrieve info about current state of roadrunner, e.g. loaded model, conservationAnalysis etc.
cxx11_ns::shared_ptr< EventListener > EventListenerPtr
Definition: rrExecutableModel.h:71