Skip to content

Commit

Permalink
Merge pull request #1168 from sys-bio/fix-the-issue-with-calling-stea…
Browse files Browse the repository at this point in the history
…dy-state-solver-and-how-conserved-moiety-is-changed-after

Conserved moiety anaylsis status keeps its value after steady state function is called
  • Loading branch information
luciansmith committed Dec 13, 2023
2 parents 868ae38 + c9d02bb commit 4d8807a
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 30 deletions.
3 changes: 3 additions & 0 deletions source/rrRoadRunner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1600,6 +1600,7 @@ namespace rr {
const std::string &solverName = impl->steady_state_solver->getName();

// automatic detection of requirement for conserved moiety analysis
bool currentConservedMoietyAnalysisStatus = getConservedMoietyAnalysis();
if (getSteadyStateSolver()->getValue("auto_moiety_analysis")) {
rrLog(Logger::LOG_DEBUG) << "Checking whether moiety conservation analysis is needed" << std::endl;
if (!impl->loadOpt.getConservedMoietyConversion()) {
Expand Down Expand Up @@ -1672,6 +1673,8 @@ namespace rr {
// so the next call to steadyState starts
// without any decorators.
setSteadyStateSolver(solverName);
if (!currentConservedMoietyAnalysisStatus)
setConservedMoietyAnalysis(currentConservedMoietyAnalysisStatus);

return ss;
}
Expand Down
1 change: 1 addition & 0 deletions test/model_analysis/model_analysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1422,6 +1422,7 @@ TEST_F(ModelAnalysisTests, ResetManyParameters) {

TEST_F(ModelAnalysisTests, ResetConservedCycles) {
RoadRunner rr((modelAnalysisModelsDir / "conserved_cycle.xml").string());
rr.setConservedMoietyAnalysis(true);
rr.steadyState();
rr.setValue("_CSUM0", 1000);
rr.reset();
Expand Down
60 changes: 30 additions & 30 deletions test/python/test_python_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -731,48 +731,48 @@ def test_items(self):
('stoich(S1, _J1)', 1.0),
('stoich(S2, _J0)', 1.0),
('stoich(S2, _J1)', 1.0),
('uec(_J0, S1)', 0.10000000000000007),
('uec(_J0, S1)', 0.100000),
('uec(_J0, S2)', 0.0),
('uec(_J0, kf)', 10.000000000000082),
('uec(_J0, kf)', 10.000000),
('uec(_J0, kb)', 0.0),
('uec(_J1, S1)', 0.0),
('uec(_J1, S2)', 0.009999999999999998),
('uec(_J1, S2)', 0.009999),
('uec(_J1, kf)', 0.0),
('uec(_J1, kb)', 1.0000000000000053),
('ec(_J0, S1)', 1.0000000000000007),
('uec(_J1, kb)', 1.000000),
('ec(_J0, S1)', 1.000000),
('ec(_J0, S2)', 0.0),
('ec(_J0, kf)', 1.0000000000000082),
('ec(_J0, kf)', 1.000000),
('ec(_J0, kb)', 0.0),
('ec(_J1, S1)', 0.0),
('ec(_J1, S2)', 0.9999999999999998),
('ec(_J1, S2)', 0.999999),
('ec(_J1, kf)', 0.0),
('ec(_J1, kb)', 1.0000000000000053),
('ucc(_J0, kf)', 0.09090905110436161),
('ucc(_J0, kb)', 9.090909090511781),
('ucc(_J1, kf)', 0.09090905110435235),
('ucc(_J1, kb)', 9.090909090511735),
('ucc(S1, kf)', -9.090905110435088),
('ucc(S1, kb)', 90.90909090511799),
('ucc(S2, kf)', 9.090905110435088),
('ucc(S2, kb)', -90.90909090512392),
('cc(_J0, kf)', 0.009090905110436162),
('cc(_J0, kb)', 0.09090909090511781),
('cc(_J1, kf)', 0.9090905110435236),
('cc(_J1, kb)', 9.090909090511735),
('cc(S1, kf)', -0.09090905110435088),
('cc(S1, kb)', 0.09090909090511799),
('cc(S2, kf)', 0.9090905110435088),
('cc(S2, kb)', -0.9090909090512392),
('eigen(S1)', (-0.10999999999999983+0j)),
('eigenReal(S1)', -0.10999999999999983),
('ec(_J1, kb)', 1.000000),
('ucc(_J0, kf)', 0.090909),
('ucc(_J0, kb)', 9.090909),
('ucc(_J1, kf)', 0.090909),
('ucc(_J1, kb)', 9.090909),
('ucc(S1, kf)', -9.090905),
('ucc(S1, kb)', 90.909090),
('ucc(S2, kf)', 9.090905),
('ucc(S2, kb)', -90.909090),
('cc(_J0, kf)', 0.009090),
('cc(_J0, kb)', 0.090909),
('cc(_J1, kf)', 0.909090),
('cc(_J1, kb)', 9.090909),
('cc(S1, kf)', -0.090909),
('cc(S1, kb)', 0.090909),
('cc(S2, kf)', 0.909090),
('cc(S2, kb)', -0.909090),
('eigen(S1)', (-0.110000+0j)),
('eigenReal(S1)', -0.110000),
('eigenImag(S1)', 0.0),
('eigen(S2)', 0j),
('eigenReal(S2)', 0.0),
('eigenImag(S2)', 0.0)]
self.assertEqual(
expected,
self.rr.items(),
)
items = self.rr.items()
for item_index in range(len(expected)):
self.assertEqual(expected[item_index][0], items[item_index][0])
self.assertAlmostEqual(expected[item_index][1], items[item_index][1], None, "", 1e-6)

def test_iteritems(self):

Expand Down

0 comments on commit 4d8807a

Please sign in to comment.